rnxsim 0.1.524 → 0.1.525

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 (54) hide show
  1. package/dist-lib/agent-daemon-client.cjs +1 -1
  2. package/dist-lib/agent-events.cjs +1 -1
  3. package/dist-lib/agent-identity.cjs +1 -1
  4. package/dist-lib/agent-sessions.cjs +1 -1
  5. package/dist-lib/attached-projects.cjs +1 -1
  6. package/dist-lib/auth/shared-session.cjs +1 -1
  7. package/dist-lib/backend-origin.cjs +1 -1
  8. package/dist-lib/beta.cjs +1 -1
  9. package/dist-lib/beta.mjs +1 -1
  10. package/dist-lib/bridge-constants.cjs +1 -1
  11. package/dist-lib/bridge-contract-input.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.mjs +1 -1
  13. package/dist-lib/bridge-contract.cjs +1 -1
  14. package/dist-lib/bridge-contract.mjs +1 -1
  15. package/dist-lib/capture-contract.cjs +1 -1
  16. package/dist-lib/capture-contract.mjs +1 -1
  17. package/dist-lib/cli-constants.cjs +1 -1
  18. package/dist-lib/cloud-contract.cjs +1 -1
  19. package/dist-lib/cloud-contract.mjs +1 -1
  20. package/dist-lib/cloud.cjs +1 -1
  21. package/dist-lib/cloud.mjs +1 -1
  22. package/dist-lib/config.cjs +1 -1
  23. package/dist-lib/detox/index.cjs +1 -1
  24. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  25. package/dist-lib/home-paths.cjs +1 -1
  26. package/dist-lib/host/bridge-host.cjs +1 -1
  27. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  28. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  29. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  30. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  31. package/dist-lib/host/websocket-proxy.cjs +1 -1
  32. package/dist-lib/index.cjs +3 -1
  33. package/dist-lib/jump-to-source-babel.cjs +1 -1
  34. package/dist-lib/jump-to-source-native.cjs +1 -1
  35. package/dist-lib/menu.cjs +1 -1
  36. package/dist-lib/menu.mjs +1 -1
  37. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  38. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  39. package/dist-lib/metro-production-bundle.cjs +1 -1
  40. package/dist-lib/metro-production-bundle.mjs +1 -1
  41. package/dist-lib/metro.cjs +1 -1
  42. package/dist-lib/profiles.cjs +1 -1
  43. package/dist-lib/public-brand.cjs +1 -1
  44. package/dist-lib/react-native-host-modules.cjs +1 -1
  45. package/dist-lib/react-native-host-modules.mjs +1 -1
  46. package/dist-lib/render-mode.cjs +1 -1
  47. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  48. package/dist-lib/sdk.cjs +1 -1
  49. package/dist-lib/sdk.mjs +1 -1
  50. package/dist-lib/skills.cjs +1 -1
  51. package/dist-lib/swift.cjs +316 -23
  52. package/dist-lib/vite.cjs +71 -2
  53. package/package.json +1 -1
  54. package/src/vite-plugin-swift.ts +86 -2
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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;
@@ -3843,6 +3843,8 @@ var TOOLCHAIN_BIN = import_node_path6.default.join(
3843
3843
  `Library/Developer/Toolchains/${toolchain_default.release}.xctoolchain/usr/bin`
3844
3844
  );
3845
3845
  var WASM_SDK = `${toolchain_default.release}_wasm`;
3846
+ var BUNDLE_MAX_FILE_BYTES = 2 * 1024 * 1024;
3847
+ var BUNDLE_MAX_TOTAL_BYTES = 8 * 1024 * 1024;
3846
3848
 
3847
3849
  // src/vite-plugin-one.ts
3848
3850
  function rnxPlugin(options = {}) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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;
@@ -54,6 +54,244 @@ function resolveImageSource(source, table, onMiss) {
54
54
  return source;
55
55
  }
56
56
 
57
+ // ../sootsim-swift/src/resfs.ts
58
+ var RES_BADF = 8;
59
+ var RES_INVAL = 28;
60
+ var RES_NOENT = 44;
61
+ var RES_NOTDIR = 54;
62
+ var RES_NOTCAPABLE = 76;
63
+ var RES_DIRTYPE = 3;
64
+ var RES_FILETYPE = 4;
65
+ var O_CREAT = 1;
66
+ var O_DIRECTORY = 2;
67
+ var O_EXCL = 4;
68
+ var O_TRUNC = 8;
69
+ var RES_PREOPEN = 3;
70
+ var RES_DIR_NAME = "/res";
71
+ var B64_DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
72
+ function decodeBase64(text) {
73
+ const clean = text.replace(/\s/g, "");
74
+ if (clean.length % 4 !== 0) {
75
+ throw new Error(`swift bundle file is not base64 (length ${clean.length})`);
76
+ }
77
+ const values = new Uint8Array(clean.length);
78
+ let length = clean.length;
79
+ let pad = 0;
80
+ if (clean.endsWith("==")) pad = 2;
81
+ else if (clean.endsWith("=")) pad = 1;
82
+ length -= pad;
83
+ for (let index = 0; index < clean.length - pad; index += 1) {
84
+ const digit = B64_DIGITS.indexOf(clean[index]);
85
+ if (digit < 0) {
86
+ throw new Error(`swift bundle file is not base64 (char '${clean[index]}')`);
87
+ }
88
+ values[index] = digit;
89
+ }
90
+ const out = new Uint8Array((clean.length / 4 | 0) * 3 - pad);
91
+ let at = 0;
92
+ for (let index = 0; index < clean.length; index += 4) {
93
+ const group = values[index] << 18 | values[index + 1] << 12 | values[index + 2] << 6 | values[index + 3];
94
+ out[at] = group >> 16 & 255;
95
+ if (at + 1 < out.length) out[at + 1] = group >> 8 & 255;
96
+ if (at + 2 < out.length) out[at + 2] = group & 255;
97
+ at += 3;
98
+ }
99
+ return out;
100
+ }
101
+ function resIno(name) {
102
+ let hash = 0xcbf29ce484222325n;
103
+ const bytes = new TextEncoder().encode(name);
104
+ for (const byte of bytes) {
105
+ hash ^= BigInt(byte);
106
+ hash = hash * 0x100000001b3n & 0xffffffffffffffffn;
107
+ }
108
+ return hash === 0n ? 1n : hash;
109
+ }
110
+ function resArgv0(moduleUrl) {
111
+ const base = moduleUrl.split("/").pop()?.split("?")[0] ?? "app.wasm";
112
+ return `${RES_DIR_NAME}/${base === "" ? "app.wasm" : base}`;
113
+ }
114
+ function resolveName(files, rel) {
115
+ let rest = rel;
116
+ if (rest === RES_DIR_NAME || rest === `${RES_DIR_NAME}/`) return null;
117
+ if (rest.startsWith(`${RES_DIR_NAME}/`)) rest = rest.slice(RES_DIR_NAME.length + 1);
118
+ if (rest.startsWith("/")) rest = rest.slice(1);
119
+ while (rest.startsWith("./")) rest = rest.slice(2);
120
+ if (rest === "" || rest === ".") return null;
121
+ if (rest.includes("/")) return null;
122
+ return Object.prototype.hasOwnProperty.call(files, rest) ? rest : null;
123
+ }
124
+ function writeStat(mem, ptr, filetype, size, ino) {
125
+ mem.bytes().fill(0, ptr, ptr + 64);
126
+ mem.bytes()[ptr + 16] = filetype;
127
+ mem.writeU64(ptr + 8, ino);
128
+ mem.writeU64(ptr + 32, BigInt(size));
129
+ }
130
+ function createResFs(files) {
131
+ const names = Object.keys(files).sort();
132
+ const fds = /* @__PURE__ */ new Map();
133
+ let nextFd = RES_PREOPEN + 1;
134
+ const freeFds = [];
135
+ let preopenOpen = true;
136
+ const allocFd = () => {
137
+ if (freeFds.length > 0) return freeFds.shift();
138
+ nextFd += 1;
139
+ return nextFd - 1;
140
+ };
141
+ const dirFdOk = (fd) => {
142
+ if (fd === RES_PREOPEN) return preopenOpen;
143
+ const found = fds.get(fd);
144
+ return found !== void 0 && found.kind === "dir";
145
+ };
146
+ const inoOf = (name) => resIno(name);
147
+ return {
148
+ imports(mem) {
149
+ return {
150
+ path_open: (dirfd, _dirflags, pathPtr, pathLen, oflags, _r1, _r2, _r3, fdPtr) => {
151
+ if (!dirFdOk(dirfd)) return RES_BADF;
152
+ if ((oflags & (O_CREAT | O_EXCL | O_TRUNC)) !== 0) return RES_INVAL;
153
+ const rel = mem.readString(pathPtr, pathLen);
154
+ if (rel === "." || rel === "./" || rel === RES_DIR_NAME || rel === `${RES_DIR_NAME}/`) {
155
+ const fd2 = allocFd();
156
+ fds.set(fd2, { kind: "dir" });
157
+ mem.writeU32(fdPtr, fd2);
158
+ return 0;
159
+ }
160
+ const hit = resolveName(files, rel);
161
+ if (hit === null) return RES_NOENT;
162
+ if ((oflags & O_DIRECTORY) !== 0) return RES_NOTDIR;
163
+ const fd = allocFd();
164
+ fds.set(fd, { kind: "file", name: hit, bytes: files[hit], offset: 0 });
165
+ mem.writeU32(fdPtr, fd);
166
+ return 0;
167
+ },
168
+ path_filestat_get: (dirfd, _flags, pathPtr, pathLen, statPtr) => {
169
+ if (!dirFdOk(dirfd)) return RES_BADF;
170
+ const rel = mem.readString(pathPtr, pathLen);
171
+ if (rel === "." || rel === "./" || rel === RES_DIR_NAME || rel === `${RES_DIR_NAME}/`) {
172
+ writeStat(mem, statPtr, RES_DIRTYPE, 0, inoOf(RES_DIR_NAME));
173
+ return 0;
174
+ }
175
+ const hit = resolveName(files, rel);
176
+ if (hit === null) return RES_NOENT;
177
+ writeStat(mem, statPtr, RES_FILETYPE, files[hit].length, inoOf(hit));
178
+ return 0;
179
+ },
180
+ fd_fdstat_get: (fd, statPtr) => {
181
+ if (fd === RES_PREOPEN) {
182
+ if (!preopenOpen) return RES_BADF;
183
+ mem.bytes().fill(0, statPtr, statPtr + 24);
184
+ mem.bytes()[statPtr] = RES_DIRTYPE;
185
+ return 0;
186
+ }
187
+ const found = fds.get(fd);
188
+ if (!found) return RES_BADF;
189
+ mem.bytes().fill(0, statPtr, statPtr + 24);
190
+ mem.bytes()[statPtr] = found.kind === "dir" ? RES_DIRTYPE : RES_FILETYPE;
191
+ return 0;
192
+ },
193
+ fd_filestat_get: (fd, statPtr) => {
194
+ const found = fds.get(fd);
195
+ if (!found) return RES_BADF;
196
+ if (found.kind === "dir") {
197
+ writeStat(mem, statPtr, RES_DIRTYPE, 0, inoOf(RES_DIR_NAME));
198
+ return 0;
199
+ }
200
+ writeStat(mem, statPtr, RES_FILETYPE, found.bytes.length, inoOf(found.name));
201
+ return 0;
202
+ },
203
+ fd_prestat_get: (fd, prestatPtr) => {
204
+ if (fd === RES_PREOPEN && preopenOpen) {
205
+ mem.bytes().fill(0, prestatPtr, prestatPtr + 8);
206
+ mem.bytes()[prestatPtr] = 0;
207
+ mem.writeU32(prestatPtr + 4, RES_DIR_NAME.length);
208
+ return 0;
209
+ }
210
+ return RES_BADF;
211
+ },
212
+ fd_prestat_dir_name: (fd, pathPtr, pathLen) => {
213
+ if (fd !== RES_PREOPEN || !preopenOpen) return RES_BADF;
214
+ if (pathLen < RES_DIR_NAME.length) return RES_INVAL;
215
+ mem.bytes().set(new TextEncoder().encode(RES_DIR_NAME), pathPtr);
216
+ return 0;
217
+ },
218
+ fd_readdir: (fd, bufPtr, bufLen, cookie, usedPtr) => {
219
+ const isPreopen = fd === RES_PREOPEN && preopenOpen;
220
+ const found = fds.get(fd);
221
+ if (!isPreopen && !found) return RES_BADF;
222
+ if (!isPreopen && found?.kind !== "dir") return RES_NOTCAPABLE;
223
+ let used = 0;
224
+ names.forEach((name, index) => {
225
+ const next = index + 1;
226
+ if (next <= cookie) return;
227
+ const encoded = new TextEncoder().encode(name);
228
+ if (used + 24 + encoded.length > bufLen) return;
229
+ const at = bufPtr + used;
230
+ mem.writeU64(at, BigInt(next));
231
+ mem.writeU64(at + 8, inoOf(name));
232
+ mem.writeU32(at + 16, encoded.length);
233
+ mem.bytes()[at + 20] = RES_FILETYPE;
234
+ mem.bytes().fill(0, at + 21, at + 24);
235
+ mem.bytes().set(encoded, at + 24);
236
+ used += 24 + encoded.length;
237
+ });
238
+ mem.writeU32(usedPtr, used);
239
+ return 0;
240
+ },
241
+ fd_read: (fd, iovsPtr, iovsLen, donePtr) => {
242
+ const found = fds.get(fd);
243
+ if (!found) return RES_BADF;
244
+ if (found.kind !== "file") return RES_NOTCAPABLE;
245
+ let done = 0;
246
+ for (let index = 0; index < iovsLen; index += 1) {
247
+ const ptr = mem.readU32(iovsPtr + index * 8);
248
+ const want = mem.readU32(iovsPtr + index * 8 + 4);
249
+ const chunk = found.bytes.subarray(found.offset, found.offset + want);
250
+ mem.bytes().set(chunk, ptr);
251
+ found.offset += chunk.length;
252
+ done += chunk.length;
253
+ if (chunk.length < want) break;
254
+ }
255
+ mem.writeU32(donePtr, done);
256
+ return 0;
257
+ },
258
+ // the tree is read-only: any write to it is not-capable, and an
259
+ // unknown fd is a bad descriptor. stdio never reaches here; the
260
+ // mount answers fds 0-2 itself before delegating.
261
+ fd_write: (fd, _iovsPtr, _iovsLen, _donePtr) => {
262
+ if (fd === RES_PREOPEN || fds.has(fd)) return RES_NOTCAPABLE;
263
+ return RES_BADF;
264
+ },
265
+ fd_pread: (fd, _iovsPtr, _iovsLen, _offset, _donePtr) => {
266
+ if (fd === RES_PREOPEN || fds.has(fd)) return RES_NOTCAPABLE;
267
+ return RES_BADF;
268
+ },
269
+ fd_seek: (fd, _offLo, _offHi, _whence, _posPtr) => {
270
+ if (fd === RES_PREOPEN || fds.has(fd)) return RES_NOTCAPABLE;
271
+ return RES_BADF;
272
+ },
273
+ fd_tell: (fd, _posPtr) => {
274
+ if (fd === RES_PREOPEN || fds.has(fd)) return RES_NOTCAPABLE;
275
+ return RES_BADF;
276
+ },
277
+ fd_close: (fd) => {
278
+ if (fd === RES_PREOPEN) {
279
+ if (!preopenOpen) return RES_BADF;
280
+ preopenOpen = false;
281
+ return 0;
282
+ }
283
+ if (!fds.has(fd)) return RES_BADF;
284
+ fds.delete(fd);
285
+ const at = freeFds.findIndex((other) => other > fd);
286
+ if (at < 0) freeFds.push(fd);
287
+ else freeFds.splice(at, 0, fd);
288
+ return 0;
289
+ }
290
+ };
291
+ }
292
+ };
293
+ }
294
+
57
295
  // ../sootsim-swift/src/mount.tsx
58
296
  var import_jsx_runtime = require("react/jsx-runtime");
59
297
  function isRecord(value) {
@@ -104,12 +342,28 @@ function readTree(text) {
104
342
  }
105
343
  var WASI_BADF = 8;
106
344
  var WASI_INVAL = 28;
107
- function wasiImports(host) {
345
+ function wasiImports(host, argv, resFiles) {
346
+ const argvBytes = argv.map((arg) => new TextEncoder().encode(`${arg}\0`));
347
+ const resImports = createResFs(resFiles).imports(host);
108
348
  return {
109
- args_get: () => 0,
349
+ args_get: (argvPtr, bufPtr) => {
350
+ let argp = argvPtr;
351
+ let bufp = bufPtr;
352
+ for (const bytes of argvBytes) {
353
+ host.writeU32(argp, bufp);
354
+ host.bytes().set(bytes, bufp);
355
+ argp += 4;
356
+ bufp += bytes.length;
357
+ }
358
+ host.writeU32(argp, 0);
359
+ return 0;
360
+ },
110
361
  args_sizes_get: (argcPtr, argvSizePtr) => {
111
- host.writeU32(argcPtr, 0);
112
- host.writeU32(argvSizePtr, 0);
362
+ host.writeU32(argcPtr, argvBytes.length);
363
+ host.writeU32(
364
+ argvSizePtr,
365
+ argvBytes.reduce((total, bytes) => total + bytes.length, 0)
366
+ );
113
367
  return 0;
114
368
  },
115
369
  environ_get: () => 0,
@@ -118,21 +372,23 @@ function wasiImports(host) {
118
372
  host.writeU32(sizePtr, 0);
119
373
  return 0;
120
374
  },
121
- fd_close: () => WASI_BADF,
122
- fd_fdstat_get: () => WASI_BADF,
375
+ fd_close: (...args) => resImports.fd_close(...args),
376
+ fd_fdstat_get: (...args) => resImports.fd_fdstat_get(...args),
123
377
  fd_fdstat_set_flags: () => WASI_BADF,
124
- fd_filestat_get: () => WASI_BADF,
378
+ fd_filestat_get: (...args) => resImports.fd_filestat_get(...args),
125
379
  fd_filestat_set_size: () => WASI_BADF,
126
380
  fd_filestat_set_times: () => WASI_BADF,
127
- fd_pread: () => WASI_BADF,
128
- fd_prestat_get: () => WASI_BADF,
129
- fd_prestat_dir_name: () => WASI_BADF,
130
- fd_read: () => WASI_BADF,
131
- fd_readdir: () => WASI_BADF,
132
- fd_seek: () => WASI_BADF,
381
+ fd_pread: (...args) => resImports.fd_pread(...args),
382
+ fd_prestat_get: (...args) => resImports.fd_prestat_get(...args),
383
+ fd_prestat_dir_name: (...args) => resImports.fd_prestat_dir_name(...args),
384
+ fd_read: (...args) => resImports.fd_read(...args),
385
+ fd_readdir: (...args) => resImports.fd_readdir(...args),
386
+ fd_seek: (...args) => resImports.fd_seek(...args),
133
387
  fd_sync: () => WASI_BADF,
134
- fd_tell: () => WASI_BADF,
135
- fd_write: (_fd, iovsPtr, iovsLen, writtenPtr) => {
388
+ fd_tell: (...args) => resImports.fd_tell(...args),
389
+ fd_write: (fd, iovsPtr, iovsLen, writtenPtr) => {
390
+ if (fd !== 1 && fd !== 2)
391
+ return resImports.fd_write(fd, iovsPtr, iovsLen, writtenPtr);
136
392
  const view = new DataView(host.bytes().buffer);
137
393
  let written = 0;
138
394
  for (let index = 0; index < iovsLen; index += 1) {
@@ -142,10 +398,10 @@ function wasiImports(host) {
142
398
  return 0;
143
399
  },
144
400
  path_create_directory: () => WASI_BADF,
145
- path_filestat_get: () => WASI_BADF,
401
+ path_filestat_get: (...args) => resImports.path_filestat_get(...args),
146
402
  path_filestat_set_times: () => WASI_BADF,
147
403
  path_link: () => WASI_BADF,
148
- path_open: () => WASI_BADF,
404
+ path_open: (...args) => resImports.path_open(...args),
149
405
  path_readlink: () => WASI_BADF,
150
406
  path_remove_directory: () => WASI_BADF,
151
407
  path_rename: () => WASI_BADF,
@@ -206,7 +462,7 @@ function voidExport(exports2, name) {
206
462
  Reflect.apply(fn, void 0, args);
207
463
  };
208
464
  }
209
- function instantiate(module2) {
465
+ function instantiate(module2, bundle) {
210
466
  let memory;
211
467
  const requireMemory = () => {
212
468
  if (!memory) throw new Error("swift artifact memory is not live");
@@ -219,10 +475,19 @@ function instantiate(module2) {
219
475
  writeU64(ptr, value) {
220
476
  new DataView(requireMemory().buffer).setBigUint64(ptr, value, true);
221
477
  },
478
+ readU32(ptr) {
479
+ return new DataView(requireMemory().buffer).getUint32(ptr, true);
480
+ },
481
+ readString(ptr, len) {
482
+ return new TextDecoder().decode(
483
+ new Uint8Array(requireMemory().buffer).subarray(ptr, ptr + len)
484
+ );
485
+ },
222
486
  bytes: () => new Uint8Array(requireMemory().buffer)
223
487
  };
488
+ const argv = bundle === null ? [] : [bundle.argv0];
224
489
  const instance = new WebAssembly.Instance(module2, {
225
- wasi_snapshot_preview1: wasiImports(host)
490
+ wasi_snapshot_preview1: wasiImports(host, argv, bundle?.files ?? {})
226
491
  });
227
492
  const exportedMemory = instance.exports.memory;
228
493
  if (!(exportedMemory instanceof WebAssembly.Memory)) {
@@ -277,7 +542,15 @@ function instantiate(module2) {
277
542
  return result;
278
543
  };
279
544
  initialize();
280
- mainArgv(0, 0);
545
+ if (bundle === null) {
546
+ mainArgv(0, 0);
547
+ } else {
548
+ const encoded = new TextEncoder().encode(`${bundle.argv0}\0`);
549
+ const ptr = alloc(encoded.length + 4);
550
+ new Uint8Array(requireMemory().buffer).set(encoded, ptr + 4);
551
+ new DataView(requireMemory().buffer).setUint32(ptr, ptr + 4, true);
552
+ mainArgv(1, ptr);
553
+ }
281
554
  return {
282
555
  mount: () => {
283
556
  if (hasViewExport() === 1) {
@@ -328,6 +601,21 @@ function instantiate(module2) {
328
601
  };
329
602
  }
330
603
  var compiledModules = /* @__PURE__ */ new Map();
604
+ function decodeBundle(moduleUrl, packed) {
605
+ if (packed === void 0) return null;
606
+ const files = {};
607
+ for (const [name, base64] of Object.entries(packed)) {
608
+ try {
609
+ files[name] = decodeBase64(base64);
610
+ } catch (error) {
611
+ throw new Error(
612
+ `swift bundle file '${name}' is not decodable: ${error instanceof Error ? error.message : String(error)}`
613
+ );
614
+ }
615
+ }
616
+ if (Object.keys(files).length === 0) return null;
617
+ return { files, argv0: resArgv0(moduleUrl) };
618
+ }
331
619
  function compile(url) {
332
620
  const cached = compiledModules.get(url);
333
621
  if (cached) return cached;
@@ -691,6 +979,8 @@ function nodeProps(node, deliver) {
691
979
  }
692
980
  case "Button":
693
981
  return pressProps(node, deliver);
982
+ case "EditButton":
983
+ return pressProps(node, deliver);
694
984
  case "TabView": {
695
985
  const onSelect = handlerId(node, "onSelect");
696
986
  const tabs = (node.c ?? []).map((tab, index) => {
@@ -1255,7 +1545,10 @@ function createRoot(mountTree) {
1255
1545
  };
1256
1546
  const apply = async (options, props) => {
1257
1547
  const carried = instance?.exportState() ?? null;
1258
- const created = instantiate(await compile(options.url));
1548
+ const created = instantiate(
1549
+ await compile(options.url),
1550
+ decodeBundle(options.url, options.bundleFiles)
1551
+ );
1259
1552
  if (carried !== null) created.importState(carried);
1260
1553
  if (source !== options) return;
1261
1554
  instance = created;
@@ -1296,7 +1589,7 @@ function createRoot(mountTree) {
1296
1589
  return {
1297
1590
  component,
1298
1591
  use(options, refreshKey, props) {
1299
- const changed = source === null || source.hash !== options.hash || source.url !== options.url || JSON.stringify(source.resources ?? null) !== JSON.stringify(options.resources ?? null) || refreshKey !== void 0 && refreshKey !== refresh;
1592
+ const changed = source === null || source.hash !== options.hash || source.url !== options.url || JSON.stringify(source.resources ?? null) !== JSON.stringify(options.resources ?? null) || JSON.stringify(source.bundleFiles ?? null) !== JSON.stringify(options.bundleFiles ?? null) || refreshKey !== void 0 && refreshKey !== refresh;
1300
1593
  if (changed) {
1301
1594
  source = options;
1302
1595
  refresh = refreshKey;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.524 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.525 | (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;
@@ -831,6 +831,24 @@ function enumerateBundleImages(paths, readText) {
831
831
  }
832
832
  return table;
833
833
  }
834
+ function enumerateBundleJson(paths) {
835
+ const found = [];
836
+ const seen = /* @__PURE__ */ new Set();
837
+ const ordered = [...paths].filter(
838
+ (path7) => path7.split("/").includes("Resources") && path7.split("/").every((segment) => segment !== "" && segment !== "..") && extOf(path7) === ".json"
839
+ ).sort((a, b) => {
840
+ const aDepth = a.split("/").length;
841
+ const bDepth = b.split("/").length;
842
+ return aDepth - bDepth || (a < b ? -1 : a > b ? 1 : 0);
843
+ });
844
+ for (const file of ordered) {
845
+ const base = baseOf(file);
846
+ if (seen.has(base)) continue;
847
+ seen.add(base);
848
+ found.push({ base, file });
849
+ }
850
+ return found;
851
+ }
834
852
 
835
853
  // ../sootsim-swift/toolchain.json
836
854
  var toolchain_default = {
@@ -944,6 +962,40 @@ function buildSwiftResourceTable(project, baseUrl) {
944
962
  project.resourceFiles = registered;
945
963
  return { table, watched };
946
964
  }
965
+ var BUNDLE_MAX_FILES = 128;
966
+ var BUNDLE_MAX_FILE_BYTES = 2 * 1024 * 1024;
967
+ var BUNDLE_MAX_TOTAL_BYTES = 8 * 1024 * 1024;
968
+ function buildSwiftBundleFiles(packagePath) {
969
+ const relative2 = resourceCandidateFiles(packagePath).map(
970
+ (file) => import_node_path4.default.relative(packagePath, file).split(import_node_path4.default.sep).join(import_node_path4.default.posix.sep)
971
+ );
972
+ const files = {};
973
+ const watched = [];
974
+ const skipped = [];
975
+ let total = 0;
976
+ for (const { base, file } of enumerateBundleJson(relative2)) {
977
+ watched.push(file);
978
+ let bytes;
979
+ try {
980
+ bytes = import_node_fs3.default.readFileSync(import_node_path4.default.join(packagePath, ...file.split("/")));
981
+ } catch {
982
+ continue;
983
+ }
984
+ if (bytes.length > BUNDLE_MAX_FILE_BYTES) {
985
+ skipped.push(`${file} (${bytes.length} bytes past the per-file cap)`);
986
+ continue;
987
+ }
988
+ if (Object.keys(files).length >= BUNDLE_MAX_FILES || total + bytes.length > BUNDLE_MAX_TOTAL_BYTES) {
989
+ skipped.push(
990
+ `${file} (pack caps: ${BUNDLE_MAX_FILES} files / ${BUNDLE_MAX_TOTAL_BYTES} bytes)`
991
+ );
992
+ continue;
993
+ }
994
+ files[base] = bytes.toString("base64");
995
+ total += bytes.length;
996
+ }
997
+ return { files, watched, skipped };
998
+ }
947
999
  function serveSwiftResource(project, key) {
948
1000
  const disk = project.resourceFiles.get(key);
949
1001
  if (!disk) return null;
@@ -1127,9 +1179,26 @@ function swiftPlugin(options = {}) {
1127
1179
  `swift resources for ${packagePath}: ${error instanceof Error ? error.message : String(error)}`
1128
1180
  );
1129
1181
  }
1182
+ let bundleFiles = {};
1183
+ try {
1184
+ const packed = buildSwiftBundleFiles(packagePath);
1185
+ bundleFiles = packed.files;
1186
+ for (const watched of packed.watched) {
1187
+ this.addWatchFile(import_node_path4.default.join(packagePath, ...watched.split(import_node_path4.default.posix.sep)));
1188
+ }
1189
+ if (packed.skipped.length > 0) {
1190
+ this.warn(
1191
+ `swift bundle files skipped for ${packagePath}: ${packed.skipped.join("; ")}`
1192
+ );
1193
+ }
1194
+ } catch (error) {
1195
+ this.warn(
1196
+ `swift bundle files for ${packagePath}: ${error instanceof Error ? error.message : String(error)}`
1197
+ );
1198
+ }
1130
1199
  return [
1131
1200
  `import { createSwiftEntry } from 'rnxsim/swift'`,
1132
- `export default createSwiftEntry({ url: ${JSON.stringify(artifactUrl(project, artifact))}, hash: ${JSON.stringify(artifact.hash)}, rootId: ${JSON.stringify(entryRootId(packagePath, file))}, resources: ${JSON.stringify(resources)} })`,
1201
+ `export default createSwiftEntry({ url: ${JSON.stringify(artifactUrl(project, artifact))}, hash: ${JSON.stringify(artifact.hash)}, rootId: ${JSON.stringify(entryRootId(packagePath, file))}, resources: ${JSON.stringify(resources)}, bundleFiles: ${JSON.stringify(bundleFiles)} })`,
1133
1202
  ""
1134
1203
  ].join("\n");
1135
1204
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.524",
3
+ "version": "0.1.525",
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",
@@ -16,7 +16,10 @@ import fs from 'node:fs'
16
16
  import os from 'node:os'
17
17
  import path from 'node:path'
18
18
  import { promisify } from 'node:util'
19
- import { enumerateBundleImages } from '../../sootsim-swift/src/bundleAssets'
19
+ import {
20
+ enumerateBundleImages,
21
+ enumerateBundleJson,
22
+ } from '../../sootsim-swift/src/bundleAssets'
20
23
  import toolchain from '../../sootsim-swift/toolchain.json'
21
24
  import type { Plugin, ViteDevServer } from 'vite'
22
25
 
@@ -189,6 +192,67 @@ export function buildSwiftResourceTable(
189
192
  return { table, watched }
190
193
  }
191
194
 
195
+ // the /res pack: every Resources/ json in the package, basename-keyed and
196
+ // base64, riding the entry module so the mount serves it without a fetch.
197
+ // the namespace is flat like the bundle the wasm side reads: shallower
198
+ // paths pack first (the Resources root is the bundle root) with a lexical
199
+ // tiebreak, and the first spelling of a basename wins a collision. caps are
200
+ // INFERRED (no app in either rung is near them; landmarkData-scale json is
201
+ // tens of KB): a file past them is skipped and named in `skipped` so the
202
+ // load warns instead of silently serving a partial bundle. binary bytes
203
+ // travel the same map when a port reaches past json; the worker half packs
204
+ // text only until then (see the gaps ledger).
205
+ const BUNDLE_MAX_FILES = 128
206
+ const BUNDLE_MAX_FILE_BYTES = 2 * 1024 * 1024
207
+ const BUNDLE_MAX_TOTAL_BYTES = 8 * 1024 * 1024
208
+
209
+ export interface SwiftBundlePack {
210
+ /** basename to base64 bytes for the mount's /res. */
211
+ files: Record<string, string>
212
+ /** project-relative json files this load's pack covers (for watching). */
213
+ watched: string[]
214
+ /** project-relative files skipped by a cap, for the load warning. */
215
+ skipped: string[]
216
+ }
217
+
218
+ export function buildSwiftBundleFiles(packagePath: string): SwiftBundlePack {
219
+ // resourceCandidateFiles walks every non-ignored file with the nested
220
+ // package exclusion; the shared enumeration decides namespace, order and
221
+ // collisions, identically for every host that packs.
222
+ const relative = resourceCandidateFiles(packagePath).map((file) =>
223
+ path.relative(packagePath, file).split(path.sep).join(path.posix.sep),
224
+ )
225
+ const files: Record<string, string> = {}
226
+ const watched: string[] = []
227
+ const skipped: string[] = []
228
+ let total = 0
229
+ for (const { base, file } of enumerateBundleJson(relative)) {
230
+ watched.push(file)
231
+ let bytes: Buffer
232
+ try {
233
+ bytes = fs.readFileSync(path.join(packagePath, ...file.split('/')))
234
+ } catch {
235
+ continue
236
+ }
237
+ if (bytes.length > BUNDLE_MAX_FILE_BYTES) {
238
+ skipped.push(`${file} (${bytes.length} bytes past the per-file cap)`)
239
+ continue
240
+ }
241
+ if (
242
+ Object.keys(files).length >= BUNDLE_MAX_FILES ||
243
+ total + bytes.length > BUNDLE_MAX_TOTAL_BYTES
244
+ ) {
245
+ skipped.push(
246
+ `${file} (pack caps: ${BUNDLE_MAX_FILES} files / ${BUNDLE_MAX_TOTAL_BYTES} bytes)`,
247
+ )
248
+ continue
249
+ }
250
+ files[base] = bytes.toString('base64')
251
+ total += bytes.length
252
+ }
253
+ return { files, watched, skipped }
254
+ }
255
+
192
256
  // the middleware's lookup, exported for the producer's own proof: a hit is
193
257
  // known bytes for a known hash, anything else is null, never a file.
194
258
  export function serveSwiftResource(
@@ -472,13 +536,33 @@ export function swiftPlugin(options: SwiftPluginOptions = {}): Plugin {
472
536
  `swift resources for ${packagePath}: ${error instanceof Error ? error.message : String(error)}`,
473
537
  )
474
538
  }
539
+ // the /res pack rides the same module as bytes: a json edit moves the
540
+ // pack, the watched files re-run this load, and the mount's
541
+ // bundleFiles compare treats it as a new app and remounts through it.
542
+ let bundleFiles: Record<string, string> = {}
543
+ try {
544
+ const packed = buildSwiftBundleFiles(packagePath)
545
+ bundleFiles = packed.files
546
+ for (const watched of packed.watched) {
547
+ this.addWatchFile(path.join(packagePath, ...watched.split(path.posix.sep)))
548
+ }
549
+ if (packed.skipped.length > 0) {
550
+ this.warn(
551
+ `swift bundle files skipped for ${packagePath}: ${packed.skipped.join('; ')}`,
552
+ )
553
+ }
554
+ } catch (error) {
555
+ this.warn(
556
+ `swift bundle files for ${packagePath}: ${error instanceof Error ? error.message : String(error)}`,
557
+ )
558
+ }
475
559
  // every import mounts through the one entry: the artifact answers
476
560
  // whether it is a view or an app root at runtime, so the transform
477
561
  // never re-derives the conformance from source. the entry is rooted by
478
562
  // its package and source path so a hot reload finds the same instance.
479
563
  return [
480
564
  `import { createSwiftEntry } from 'rnxsim/swift'`,
481
- `export default createSwiftEntry({ url: ${JSON.stringify(artifactUrl(project, artifact))}, hash: ${JSON.stringify(artifact.hash)}, rootId: ${JSON.stringify(entryRootId(packagePath, file))}, resources: ${JSON.stringify(resources)} })`,
565
+ `export default createSwiftEntry({ url: ${JSON.stringify(artifactUrl(project, artifact))}, hash: ${JSON.stringify(artifact.hash)}, rootId: ${JSON.stringify(entryRootId(packagePath, file))}, resources: ${JSON.stringify(resources)}, bundleFiles: ${JSON.stringify(bundleFiles)} })`,
482
566
  '',
483
567
  ].join('\n')
484
568
  },