peachsim 0.1.646 → 0.1.647
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.
- package/cli/desktop-companion.ts +48 -8
- package/cli/drivers/electron.ts +1 -3
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/native-app-identity.cjs +1 -1
- package/dist-lib/native-app-identity.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +24 -8
- package/dist-lib/swift-compile.cjs +15 -3
- package/dist-lib/swift-compile.mjs +15 -3
- package/dist-lib/swift-package.cjs +1 -1
- package/dist-lib/swift-package.mjs +1 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +15 -3
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/src/swift-compile.ts +31 -7
package/cli/desktop-companion.ts
CHANGED
|
@@ -24,7 +24,13 @@ const PEACH_BUNDLE_ID = 'dev.peachsim.simulator'
|
|
|
24
24
|
export interface DesktopCompanionInstall {
|
|
25
25
|
path: string
|
|
26
26
|
platform: NodeJS.Platform
|
|
27
|
-
kind:
|
|
27
|
+
kind:
|
|
28
|
+
| 'native-mac-app'
|
|
29
|
+
| 'mac-app'
|
|
30
|
+
| 'linux-appimage'
|
|
31
|
+
| 'linux-binary'
|
|
32
|
+
| 'win-exe'
|
|
33
|
+
| 'dev-electron'
|
|
28
34
|
// present for dev-electron: the sootsim-engine dir that electron treats
|
|
29
35
|
// as the app root (its package.json "main" points at dist-electron/main.cjs).
|
|
30
36
|
engineDir?: string
|
|
@@ -32,7 +38,13 @@ export interface DesktopCompanionInstall {
|
|
|
32
38
|
|
|
33
39
|
export interface DesktopCompanionLaunchResult {
|
|
34
40
|
launched: boolean
|
|
35
|
-
via?:
|
|
41
|
+
via?:
|
|
42
|
+
| 'native-mac-app'
|
|
43
|
+
| 'mac-app'
|
|
44
|
+
| 'linux-appimage'
|
|
45
|
+
| 'linux-binary'
|
|
46
|
+
| 'win-exe'
|
|
47
|
+
| 'dev-electron'
|
|
36
48
|
target?: string
|
|
37
49
|
}
|
|
38
50
|
|
|
@@ -218,6 +230,17 @@ function findWindowsInstall(): DesktopCompanionInstall | null {
|
|
|
218
230
|
}
|
|
219
231
|
|
|
220
232
|
export function findDesktopCompanion(): DesktopCompanionInstall | null {
|
|
233
|
+
const explicitApp = process.env.PEACH_DESKTOP_APP
|
|
234
|
+
if (explicitApp) {
|
|
235
|
+
if (process.platform !== 'darwin' || !explicitApp.endsWith('.app')) {
|
|
236
|
+
throw new Error('PEACH_DESKTOP_APP must name a Mac .app bundle')
|
|
237
|
+
}
|
|
238
|
+
const appPath = resolve(explicitApp)
|
|
239
|
+
if (!existsSync(join(appPath, 'Contents/MacOS/PeachDesktop'))) {
|
|
240
|
+
throw new Error(`native desktop executable missing in ${appPath}`)
|
|
241
|
+
}
|
|
242
|
+
return { path: appPath, platform: 'darwin', kind: 'native-mac-app' }
|
|
243
|
+
}
|
|
221
244
|
const dev = findDevElectron()
|
|
222
245
|
if (dev) return dev
|
|
223
246
|
if (isInRepoCheckout()) {
|
|
@@ -300,14 +323,20 @@ export async function launchDesktopCompanion(
|
|
|
300
323
|
if (opts.ephemeralProfile) extraArgs.push('--ephemeral-profile')
|
|
301
324
|
if (opts.ownerPid && opts.ownerPid > 1) extraArgs.push(`--owner-pid=${opts.ownerPid}`)
|
|
302
325
|
|
|
303
|
-
if (install.kind === 'mac-app') {
|
|
326
|
+
if (install.kind === 'mac-app' || install.kind === 'native-mac-app') {
|
|
304
327
|
// `open -a` splits app args before and after `--args`. anything after
|
|
305
328
|
// --args is forwarded to electron's process.argv.
|
|
329
|
+
const nativeApp = install.kind === 'native-mac-app'
|
|
306
330
|
const openArgs: string[] = ['-g', '-a', install.path]
|
|
307
|
-
if (url) openArgs.push(buildMacLaunchUrl(url, opts))
|
|
331
|
+
if (url) openArgs.push(buildMacLaunchUrl(url, opts, nativeApp))
|
|
332
|
+
else if (
|
|
333
|
+
nativeApp &&
|
|
334
|
+
(opts.profileId || opts.ephemeralProfile || opts.ownerPid || opts.device)
|
|
335
|
+
)
|
|
336
|
+
openArgs.push(buildMacLaunchUrl(undefined, opts, true))
|
|
308
337
|
if (extraArgs.length > 0) openArgs.push('--args', ...extraArgs)
|
|
309
338
|
await spawnDetached('open', openArgs)
|
|
310
|
-
return { launched: true, via:
|
|
339
|
+
return { launched: true, via: install.kind, target: install.path }
|
|
311
340
|
}
|
|
312
341
|
|
|
313
342
|
if (install.kind === 'dev-electron') {
|
|
@@ -334,10 +363,21 @@ export async function launchDesktopCompanion(
|
|
|
334
363
|
}
|
|
335
364
|
}
|
|
336
365
|
|
|
337
|
-
function buildMacLaunchUrl(
|
|
338
|
-
|
|
366
|
+
function buildMacLaunchUrl(
|
|
367
|
+
url: string | undefined,
|
|
368
|
+
opts: LaunchCompanionOptions,
|
|
369
|
+
nativeApp = false,
|
|
370
|
+
): string {
|
|
371
|
+
if (
|
|
372
|
+
!opts.profileId &&
|
|
373
|
+
!opts.ephemeralProfile &&
|
|
374
|
+
!opts.ownerPid &&
|
|
375
|
+
(!nativeApp || !opts.device)
|
|
376
|
+
)
|
|
377
|
+
return url || ''
|
|
339
378
|
const deepLink = new URL('peach://dev')
|
|
340
|
-
deepLink.searchParams.set('url', url)
|
|
379
|
+
if (url) deepLink.searchParams.set('url', url)
|
|
380
|
+
if (nativeApp && opts.device) deepLink.searchParams.set('device', opts.device)
|
|
341
381
|
if (opts.profileId) deepLink.searchParams.set('profile', opts.profileId)
|
|
342
382
|
if (opts.ephemeralProfile) deepLink.searchParams.set('ephemeral', '1')
|
|
343
383
|
if (opts.ownerPid && opts.ownerPid > 1) {
|
package/cli/drivers/electron.ts
CHANGED
|
@@ -46,9 +46,7 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
|
|
|
46
46
|
}
|
|
47
47
|
return {
|
|
48
48
|
launched: true,
|
|
49
|
-
message: opts.url
|
|
50
|
-
? `electron launched via ${result.via} → ${opts.url}`
|
|
51
|
-
: `electron launched via ${result.via}`,
|
|
49
|
+
message: `${install.kind === 'native-mac-app' ? 'native desktop' : 'electron'} launched via ${result.via}${opts.url ? ` → ${opts.url}` : ''}`,
|
|
52
50
|
target: result.target,
|
|
53
51
|
attachUrl: opts.url,
|
|
54
52
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/kotlin-host.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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);
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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;
|
|
@@ -34145,6 +34145,17 @@ function findWindowsInstall() {
|
|
|
34145
34145
|
return null;
|
|
34146
34146
|
}
|
|
34147
34147
|
function findDesktopCompanion() {
|
|
34148
|
+
const explicitApp = process.env.PEACH_DESKTOP_APP;
|
|
34149
|
+
if (explicitApp) {
|
|
34150
|
+
if (process.platform !== "darwin" || !explicitApp.endsWith(".app")) {
|
|
34151
|
+
throw new Error("PEACH_DESKTOP_APP must name a Mac .app bundle");
|
|
34152
|
+
}
|
|
34153
|
+
const appPath = (0, import_path5.resolve)(explicitApp);
|
|
34154
|
+
if (!(0, import_fs6.existsSync)((0, import_path5.join)(appPath, "Contents/MacOS/PeachDesktop"))) {
|
|
34155
|
+
throw new Error(`native desktop executable missing in ${appPath}`);
|
|
34156
|
+
}
|
|
34157
|
+
return { path: appPath, platform: "darwin", kind: "native-mac-app" };
|
|
34158
|
+
}
|
|
34148
34159
|
const dev = findDevElectron();
|
|
34149
34160
|
if (dev) return dev;
|
|
34150
34161
|
if (isInRepoCheckout()) {
|
|
@@ -34186,12 +34197,15 @@ async function launchDesktopCompanion(url, install = findDesktopCompanion(), opt
|
|
|
34186
34197
|
if (opts.profileId) extraArgs.push(`--profile=${opts.profileId}`);
|
|
34187
34198
|
if (opts.ephemeralProfile) extraArgs.push("--ephemeral-profile");
|
|
34188
34199
|
if (opts.ownerPid && opts.ownerPid > 1) extraArgs.push(`--owner-pid=${opts.ownerPid}`);
|
|
34189
|
-
if (install.kind === "mac-app") {
|
|
34200
|
+
if (install.kind === "mac-app" || install.kind === "native-mac-app") {
|
|
34201
|
+
const nativeApp = install.kind === "native-mac-app";
|
|
34190
34202
|
const openArgs = ["-g", "-a", install.path];
|
|
34191
|
-
if (url) openArgs.push(buildMacLaunchUrl(url, opts));
|
|
34203
|
+
if (url) openArgs.push(buildMacLaunchUrl(url, opts, nativeApp));
|
|
34204
|
+
else if (nativeApp && (opts.profileId || opts.ephemeralProfile || opts.ownerPid || opts.device))
|
|
34205
|
+
openArgs.push(buildMacLaunchUrl(void 0, opts, true));
|
|
34192
34206
|
if (extraArgs.length > 0) openArgs.push("--args", ...extraArgs);
|
|
34193
34207
|
await spawnDetached("open", openArgs);
|
|
34194
|
-
return { launched: true, via:
|
|
34208
|
+
return { launched: true, via: install.kind, target: install.path };
|
|
34195
34209
|
}
|
|
34196
34210
|
if (install.kind === "dev-electron") {
|
|
34197
34211
|
const args = ["--no-sandbox", install.engineDir || getSootsimRoot()];
|
|
@@ -34210,10 +34224,12 @@ async function launchDesktopCompanion(url, install = findDesktopCompanion(), opt
|
|
|
34210
34224
|
target: install.path
|
|
34211
34225
|
};
|
|
34212
34226
|
}
|
|
34213
|
-
function buildMacLaunchUrl(url, opts) {
|
|
34214
|
-
if (!opts.profileId && !opts.ephemeralProfile && !opts.ownerPid
|
|
34227
|
+
function buildMacLaunchUrl(url, opts, nativeApp = false) {
|
|
34228
|
+
if (!opts.profileId && !opts.ephemeralProfile && !opts.ownerPid && (!nativeApp || !opts.device))
|
|
34229
|
+
return url || "";
|
|
34215
34230
|
const deepLink = new URL("peach://dev");
|
|
34216
|
-
deepLink.searchParams.set("url", url);
|
|
34231
|
+
if (url) deepLink.searchParams.set("url", url);
|
|
34232
|
+
if (nativeApp && opts.device) deepLink.searchParams.set("device", opts.device);
|
|
34217
34233
|
if (opts.profileId) deepLink.searchParams.set("profile", opts.profileId);
|
|
34218
34234
|
if (opts.ephemeralProfile) deepLink.searchParams.set("ephemeral", "1");
|
|
34219
34235
|
if (opts.ownerPid && opts.ownerPid > 1) {
|
|
@@ -34269,7 +34285,7 @@ async function launch(opts) {
|
|
|
34269
34285
|
}
|
|
34270
34286
|
return {
|
|
34271
34287
|
launched: true,
|
|
34272
|
-
message:
|
|
34288
|
+
message: `${install.kind === "native-mac-app" ? "native desktop" : "electron"} launched via ${result.via}${opts.url ? ` \u2192 ${opts.url}` : ""}`,
|
|
34273
34289
|
target: result.target,
|
|
34274
34290
|
attachUrl: opts.url
|
|
34275
34291
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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;
|
|
@@ -330,7 +330,7 @@ var ONE_IMPLICIT_FLAGS = ', "-Xfrontend", "-import-module", "-Xfrontend", "One"'
|
|
|
330
330
|
var MULTI_MANIFEST_VERSION = 6;
|
|
331
331
|
function swiftArtifactHash(input, release, moduleRoot) {
|
|
332
332
|
const hash = (0, import_node_crypto2.createHash)("sha256");
|
|
333
|
-
hash.update(`swift-compile/
|
|
333
|
+
hash.update(`swift-compile/v6
|
|
334
334
|
${release}
|
|
335
335
|
`);
|
|
336
336
|
if (input.oneModule) hash.update("one-module\n");
|
|
@@ -434,6 +434,7 @@ var DIRECTIVE = /^[ \t]*#(?:if|elseif)\b/;
|
|
|
434
434
|
var OS_IOS = /\bos\(\s*iOS\s*\)/g;
|
|
435
435
|
var OBJC_ATTRIBUTE = /^@(?:objcMembers\b|objc\b(?:(\s*)\(([^()]*)\))?|IBAction\b)/;
|
|
436
436
|
var SELECTOR = /^#selector\b/;
|
|
437
|
+
var DELEGATE_CLASS = /^class\s+[A-Za-z_]\w*\s*(?:<[^>{]*>)?\s*:[^{]*\b(?:UIApplicationDelegate|UISceneDelegate|UIWindowSceneDelegate)\b[^{]*\{/;
|
|
437
438
|
function swiftSourceAsIOS(source) {
|
|
438
439
|
const { lineStarts, tokens } = swiftCodeScan(source);
|
|
439
440
|
let offset = 0;
|
|
@@ -446,7 +447,15 @@ function swiftSourceAsIOS(source) {
|
|
|
446
447
|
let out = "";
|
|
447
448
|
let copied = 0;
|
|
448
449
|
for (const at of tokens) {
|
|
449
|
-
const rest = conditioned.slice(at, at +
|
|
450
|
+
const rest = conditioned.slice(at, at + 400);
|
|
451
|
+
if (rest.startsWith("class")) {
|
|
452
|
+
const modifiers = conditioned.slice(conditioned.lastIndexOf("\n", at - 1) + 1, at);
|
|
453
|
+
if (DELEGATE_CLASS.test(rest) && !/\b(?:final|open)\b/.test(modifiers)) {
|
|
454
|
+
out += `${conditioned.slice(copied, at)}final `;
|
|
455
|
+
copied = at;
|
|
456
|
+
}
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
450
459
|
const selector = SELECTOR.exec(rest);
|
|
451
460
|
const match = selector ?? OBJC_ATTRIBUTE.exec(rest);
|
|
452
461
|
if (!match) continue;
|
|
@@ -539,6 +548,9 @@ function swiftCodeScan(source) {
|
|
|
539
548
|
if (top.parens === 0 && stack.length > 1) stack.pop();
|
|
540
549
|
else top.parens--;
|
|
541
550
|
i++;
|
|
551
|
+
} else if (source.startsWith("class", i) && !/[\w$]/.test(source[i - 1] ?? "") && !/[\w$]/.test(source[i + 5] ?? "")) {
|
|
552
|
+
tokens.push(i);
|
|
553
|
+
i += 5;
|
|
542
554
|
} else {
|
|
543
555
|
if (char === "@") tokens.push(i);
|
|
544
556
|
i++;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/swift-compile.ts
|
|
4
4
|
import { execFile as execFile2 } from "node:child_process";
|
|
@@ -295,7 +295,7 @@ var ONE_IMPLICIT_FLAGS = ', "-Xfrontend", "-import-module", "-Xfrontend", "One"'
|
|
|
295
295
|
var MULTI_MANIFEST_VERSION = 6;
|
|
296
296
|
function swiftArtifactHash(input, release, moduleRoot) {
|
|
297
297
|
const hash = createHash2("sha256");
|
|
298
|
-
hash.update(`swift-compile/
|
|
298
|
+
hash.update(`swift-compile/v6
|
|
299
299
|
${release}
|
|
300
300
|
`);
|
|
301
301
|
if (input.oneModule) hash.update("one-module\n");
|
|
@@ -399,6 +399,7 @@ var DIRECTIVE = /^[ \t]*#(?:if|elseif)\b/;
|
|
|
399
399
|
var OS_IOS = /\bos\(\s*iOS\s*\)/g;
|
|
400
400
|
var OBJC_ATTRIBUTE = /^@(?:objcMembers\b|objc\b(?:(\s*)\(([^()]*)\))?|IBAction\b)/;
|
|
401
401
|
var SELECTOR = /^#selector\b/;
|
|
402
|
+
var DELEGATE_CLASS = /^class\s+[A-Za-z_]\w*\s*(?:<[^>{]*>)?\s*:[^{]*\b(?:UIApplicationDelegate|UISceneDelegate|UIWindowSceneDelegate)\b[^{]*\{/;
|
|
402
403
|
function swiftSourceAsIOS(source) {
|
|
403
404
|
const { lineStarts, tokens } = swiftCodeScan(source);
|
|
404
405
|
let offset = 0;
|
|
@@ -411,7 +412,15 @@ function swiftSourceAsIOS(source) {
|
|
|
411
412
|
let out = "";
|
|
412
413
|
let copied = 0;
|
|
413
414
|
for (const at of tokens) {
|
|
414
|
-
const rest = conditioned.slice(at, at +
|
|
415
|
+
const rest = conditioned.slice(at, at + 400);
|
|
416
|
+
if (rest.startsWith("class")) {
|
|
417
|
+
const modifiers = conditioned.slice(conditioned.lastIndexOf("\n", at - 1) + 1, at);
|
|
418
|
+
if (DELEGATE_CLASS.test(rest) && !/\b(?:final|open)\b/.test(modifiers)) {
|
|
419
|
+
out += `${conditioned.slice(copied, at)}final `;
|
|
420
|
+
copied = at;
|
|
421
|
+
}
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
415
424
|
const selector = SELECTOR.exec(rest);
|
|
416
425
|
const match = selector ?? OBJC_ATTRIBUTE.exec(rest);
|
|
417
426
|
if (!match) continue;
|
|
@@ -504,6 +513,9 @@ function swiftCodeScan(source) {
|
|
|
504
513
|
if (top.parens === 0 && stack.length > 1) stack.pop();
|
|
505
514
|
else top.parens--;
|
|
506
515
|
i++;
|
|
516
|
+
} else if (source.startsWith("class", i) && !/[\w$]/.test(source[i - 1] ?? "") && !/[\w$]/.test(source[i + 5] ?? "")) {
|
|
517
|
+
tokens.push(i);
|
|
518
|
+
i += 5;
|
|
507
519
|
} else {
|
|
508
520
|
if (char === "@") tokens.push(i);
|
|
509
521
|
i++;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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.
|
|
1
|
+
/*! rnx v0.1.647 | (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/swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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/vite-swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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;
|
|
@@ -830,7 +830,7 @@ var ONE_IMPLICIT_FLAGS = ', "-Xfrontend", "-import-module", "-Xfrontend", "One"'
|
|
|
830
830
|
var MULTI_MANIFEST_VERSION = 6;
|
|
831
831
|
function swiftArtifactHash(input, release, moduleRoot) {
|
|
832
832
|
const hash = (0, import_node_crypto2.createHash)("sha256");
|
|
833
|
-
hash.update(`swift-compile/
|
|
833
|
+
hash.update(`swift-compile/v6
|
|
834
834
|
${release}
|
|
835
835
|
`);
|
|
836
836
|
if (input.oneModule) hash.update("one-module\n");
|
|
@@ -934,6 +934,7 @@ var DIRECTIVE = /^[ \t]*#(?:if|elseif)\b/;
|
|
|
934
934
|
var OS_IOS = /\bos\(\s*iOS\s*\)/g;
|
|
935
935
|
var OBJC_ATTRIBUTE = /^@(?:objcMembers\b|objc\b(?:(\s*)\(([^()]*)\))?|IBAction\b)/;
|
|
936
936
|
var SELECTOR = /^#selector\b/;
|
|
937
|
+
var DELEGATE_CLASS = /^class\s+[A-Za-z_]\w*\s*(?:<[^>{]*>)?\s*:[^{]*\b(?:UIApplicationDelegate|UISceneDelegate|UIWindowSceneDelegate)\b[^{]*\{/;
|
|
937
938
|
function swiftSourceAsIOS(source) {
|
|
938
939
|
const { lineStarts, tokens } = swiftCodeScan(source);
|
|
939
940
|
let offset = 0;
|
|
@@ -946,7 +947,15 @@ function swiftSourceAsIOS(source) {
|
|
|
946
947
|
let out = "";
|
|
947
948
|
let copied = 0;
|
|
948
949
|
for (const at of tokens) {
|
|
949
|
-
const rest = conditioned.slice(at, at +
|
|
950
|
+
const rest = conditioned.slice(at, at + 400);
|
|
951
|
+
if (rest.startsWith("class")) {
|
|
952
|
+
const modifiers = conditioned.slice(conditioned.lastIndexOf("\n", at - 1) + 1, at);
|
|
953
|
+
if (DELEGATE_CLASS.test(rest) && !/\b(?:final|open)\b/.test(modifiers)) {
|
|
954
|
+
out += `${conditioned.slice(copied, at)}final `;
|
|
955
|
+
copied = at;
|
|
956
|
+
}
|
|
957
|
+
continue;
|
|
958
|
+
}
|
|
950
959
|
const selector = SELECTOR.exec(rest);
|
|
951
960
|
const match = selector ?? OBJC_ATTRIBUTE.exec(rest);
|
|
952
961
|
if (!match) continue;
|
|
@@ -1039,6 +1048,9 @@ function swiftCodeScan(source) {
|
|
|
1039
1048
|
if (top.parens === 0 && stack.length > 1) stack.pop();
|
|
1040
1049
|
else top.parens--;
|
|
1041
1050
|
i++;
|
|
1051
|
+
} else if (source.startsWith("class", i) && !/[\w$]/.test(source[i - 1] ?? "") && !/[\w$]/.test(source[i + 5] ?? "")) {
|
|
1052
|
+
tokens.push(i);
|
|
1053
|
+
i += 5;
|
|
1042
1054
|
} else {
|
|
1043
1055
|
if (char === "@") tokens.push(i);
|
|
1044
1056
|
i++;
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.647 | (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
package/src/swift-compile.ts
CHANGED
|
@@ -229,9 +229,10 @@ export function swiftArtifactHash(
|
|
|
229
229
|
moduleRoot: string,
|
|
230
230
|
): string {
|
|
231
231
|
const hash = createHash('sha256')
|
|
232
|
-
//
|
|
233
|
-
// (
|
|
234
|
-
|
|
232
|
+
// v6: app and scene delegate classes compile final
|
|
233
|
+
// (v5: a target declaring resources gets SwiftPM's Bundle.module accessor;
|
|
234
|
+
// v4: sources compile through swiftSourceAsIOS)
|
|
235
|
+
hash.update(`swift-compile/v6\n${release}\n`)
|
|
235
236
|
if (input.oneModule) hash.update('one-module\n')
|
|
236
237
|
hash.update(linkedModuleDigest(moduleRoot))
|
|
237
238
|
for (const file of Object.keys(input.files).sort()) {
|
|
@@ -361,11 +362,19 @@ function syncSwiftTree(base: string, files: Map<string, string>): void {
|
|
|
361
362
|
// `@objcMembers` `@ObjCMembers`, `@IBAction` `@ObjC` padded, and `#selector(`
|
|
362
363
|
// `#Selector(`: the module's macros that expose a method to selector dispatch
|
|
363
364
|
// (plans/peach/uikit-shell.md, gate B). all keep their width except an
|
|
364
|
-
// explicit `@objc(name:)`, whose name becomes a string argument
|
|
365
|
+
// explicit `@objc(name:)`, whose name becomes a string argument, and a
|
|
366
|
+
// delegate class that becomes final (below).
|
|
365
367
|
const DIRECTIVE = /^[ \t]*#(?:if|elseif)\b/
|
|
366
368
|
const OS_IOS = /\bos\(\s*iOS\s*\)/g
|
|
367
369
|
const OBJC_ATTRIBUTE = /^@(?:objcMembers\b|objc\b(?:(\s*)\(([^()]*)\))?|IBAction\b)/
|
|
368
370
|
const SELECTOR = /^#selector\b/
|
|
371
|
+
// uikit makes app and scene delegates from their class through the objc
|
|
372
|
+
// runtime; here their protocols require init(), which a non-final class
|
|
373
|
+
// meets only with a required one. a class declaring one of them that is
|
|
374
|
+
// neither final nor open becomes final, and subclassing it fails to
|
|
375
|
+
// compile naming itself.
|
|
376
|
+
const DELEGATE_CLASS =
|
|
377
|
+
/^class\s+[A-Za-z_]\w*\s*(?:<[^>{]*>)?\s*:[^{]*\b(?:UIApplicationDelegate|UISceneDelegate|UIWindowSceneDelegate)\b[^{]*\{/
|
|
369
378
|
export function swiftSourceAsIOS(source: string): string {
|
|
370
379
|
const { lineStarts, tokens } = swiftCodeScan(source)
|
|
371
380
|
let offset = 0
|
|
@@ -382,7 +391,15 @@ export function swiftSourceAsIOS(source: string): string {
|
|
|
382
391
|
let out = ''
|
|
383
392
|
let copied = 0
|
|
384
393
|
for (const at of tokens) {
|
|
385
|
-
const rest = conditioned.slice(at, at +
|
|
394
|
+
const rest = conditioned.slice(at, at + 400)
|
|
395
|
+
if (rest.startsWith('class')) {
|
|
396
|
+
const modifiers = conditioned.slice(conditioned.lastIndexOf('\n', at - 1) + 1, at)
|
|
397
|
+
if (DELEGATE_CLASS.test(rest) && !/\b(?:final|open)\b/.test(modifiers)) {
|
|
398
|
+
out += `${conditioned.slice(copied, at)}final `
|
|
399
|
+
copied = at
|
|
400
|
+
}
|
|
401
|
+
continue
|
|
402
|
+
}
|
|
386
403
|
const selector = SELECTOR.exec(rest)
|
|
387
404
|
const match = selector ?? OBJC_ATTRIBUTE.exec(rest)
|
|
388
405
|
if (!match) continue
|
|
@@ -398,8 +415,8 @@ export function swiftSourceAsIOS(source: string): string {
|
|
|
398
415
|
return out + conditioned.slice(copied)
|
|
399
416
|
}
|
|
400
417
|
|
|
401
|
-
// the offsets of the lines that begin in code, and of every
|
|
402
|
-
// stands in code (an interpolation's code included), from a scan of Swift's
|
|
418
|
+
// the offsets of the lines that begin in code, and of every `@`, `#` and
|
|
419
|
+
// `class` keyword that stands in code (an interpolation's code included), from a scan of Swift's
|
|
403
420
|
// lexical contexts: nested block comments, line comments, string literals (single and
|
|
404
421
|
// multiline, raw with any number of #, interpolations holding code and
|
|
405
422
|
// strings of their own) and #/ /# regex literals. a bare /regex/ literal
|
|
@@ -487,6 +504,13 @@ function swiftCodeScan(source: string): { lineStarts: Set<number>; tokens: numbe
|
|
|
487
504
|
if (top.parens === 0 && stack.length > 1) stack.pop()
|
|
488
505
|
else top.parens--
|
|
489
506
|
i++
|
|
507
|
+
} else if (
|
|
508
|
+
source.startsWith('class', i) &&
|
|
509
|
+
!/[\w$]/.test(source[i - 1] ?? '') &&
|
|
510
|
+
!/[\w$]/.test(source[i + 5] ?? '')
|
|
511
|
+
) {
|
|
512
|
+
tokens.push(i)
|
|
513
|
+
i += 5
|
|
490
514
|
} else {
|
|
491
515
|
if (char === '@') tokens.push(i)
|
|
492
516
|
i++
|