peachsim 0.1.1641 → 0.1.1644
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/app-bundle-resources.ts +57 -0
- package/cli/commands/control.ts +12 -0
- package/cli/drivers/playwright.ts +39 -0
- package/cli/outbound-endpoints.ts +4 -2
- package/detox/motion-change.cjs +7 -5
- package/detox/motion-change.d.cts +1 -0
- package/detox/motion-leg-starts.cjs +20 -0
- package/detox/motion-leg-starts.d.cts +8 -0
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.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 +3 -3
- 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/bundle-channel.cjs +719 -572
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +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/config.mjs +1 -1
- package/dist-lib/detox/index.cjs +7 -6
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +656 -509
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +811 -658
- 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 +89 -41
- 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 +14 -6
- package/dist-lib/menu.mjs +14 -6
- 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 +88 -41
- package/dist-lib/native-app-identity-project.cjs +90 -41
- package/dist-lib/native-app-identity-project.mjs +89 -41
- package/dist-lib/native-app-identity.cjs +1 -1
- package/dist-lib/native-app-identity.mjs +1 -1
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +1 -1
- package/dist-lib/plist.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/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +2 -1
- package/dist-lib/sdk.mjs +2 -1
- package/dist-lib/skills.cjs +1716 -1366
- package/dist-lib/swift-compile.cjs +297 -215
- package/dist-lib/swift-compile.mjs +315 -227
- 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-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +620 -473
- package/dist-lib/vite.cjs +1 -1
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/package.json +1 -1
- package/src/appBundleResourcesContract.ts +51 -0
- package/src/backend-origin.ts +3 -1
- package/src/host/bridge-host.ts +17 -11
- package/src/host/staged-host-files.ts +28 -4
- package/src/launchMetadataContract.ts +1 -0
- package/src/menu.ts +12 -4
- package/src/native-app-identity-project.ts +47 -38
- package/src/runtime-delivery.ts +6 -7
- package/src/swift-compile.ts +18 -7
- package/src/swift-compiler-digest.ts +5 -3
- package/src/swift-objc-compile.ts +34 -4
- package/src/swift-root-lock.ts +241 -92
- package/src/xcode-project.ts +67 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -10558,6 +10558,7 @@ var LAUNCH_METADATA_KEYS = [
|
|
|
10558
10558
|
"appFonts",
|
|
10559
10559
|
"appSplash",
|
|
10560
10560
|
"appCatalog",
|
|
10561
|
+
"appBundleResources",
|
|
10561
10562
|
"nativeAppIdentity",
|
|
10562
10563
|
"nativeFirebase",
|
|
10563
10564
|
"appManifest",
|
|
@@ -15986,6 +15987,9 @@ function targetSettings(ref, configuration, builtins, options = {}) {
|
|
|
15986
15987
|
return applyOperator(get("PRODUCT_NAME"), "c99extidentifier");
|
|
15987
15988
|
case "EXECUTABLE_NAME":
|
|
15988
15989
|
return get("PRODUCT_NAME");
|
|
15990
|
+
// the native default of CoreBuildSystem.xcspec
|
|
15991
|
+
case "EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES":
|
|
15992
|
+
return "*.nib *.lproj *.framework *.gch *.xcode* *.xcassets *.icon (*) .DS_Store CVS .svn .git .hg *.pbproj *.pbxproj";
|
|
15989
15993
|
case "AppIdentifierPrefix":
|
|
15990
15994
|
case "TeamIdentifierPrefix": {
|
|
15991
15995
|
const team = get("DEVELOPMENT_TEAM");
|
|
@@ -16008,6 +16012,45 @@ function settingList(value) {
|
|
|
16008
16012
|
items2.push((quoted ?? plain).replace(/\\(.)/g, "$1"));
|
|
16009
16013
|
return items2;
|
|
16010
16014
|
}
|
|
16015
|
+
function expandSearchPath(directory, rules) {
|
|
16016
|
+
if (import_node_path13.default.basename(directory) !== "**") return [directory];
|
|
16017
|
+
const expanded = [];
|
|
16018
|
+
const seen = /* @__PURE__ */ new Set();
|
|
16019
|
+
const queue = [import_node_path13.default.dirname(directory)];
|
|
16020
|
+
for (let at = 0; at < queue.length; at++) {
|
|
16021
|
+
const current = queue[at];
|
|
16022
|
+
let real;
|
|
16023
|
+
try {
|
|
16024
|
+
real = import_node_fs13.default.realpathSync(current);
|
|
16025
|
+
} catch {
|
|
16026
|
+
continue;
|
|
16027
|
+
}
|
|
16028
|
+
if (!import_node_fs13.default.statSync(real).isDirectory() || seen.has(real)) continue;
|
|
16029
|
+
seen.add(real);
|
|
16030
|
+
expanded.push(current);
|
|
16031
|
+
for (const entry of import_node_fs13.default.readdirSync(real, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)) {
|
|
16032
|
+
if (entry.isSymbolicLink() ? !rules.followLinks : !entry.isDirectory()) continue;
|
|
16033
|
+
if (rules.excluded.some((pattern) => pattern.test(entry.name)) && !rules.included.some((pattern) => pattern.test(entry.name)))
|
|
16034
|
+
continue;
|
|
16035
|
+
queue.push(import_node_path13.default.join(current, entry.name));
|
|
16036
|
+
}
|
|
16037
|
+
}
|
|
16038
|
+
return expanded;
|
|
16039
|
+
}
|
|
16040
|
+
function recursiveSearchRules(settings) {
|
|
16041
|
+
const glob = (pattern) => new RegExp(
|
|
16042
|
+
`^${pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*").replaceAll("?", ".")}$`
|
|
16043
|
+
);
|
|
16044
|
+
return {
|
|
16045
|
+
excluded: settingList(settings("EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
|
|
16046
|
+
glob
|
|
16047
|
+
),
|
|
16048
|
+
included: settingList(settings("INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
|
|
16049
|
+
glob
|
|
16050
|
+
),
|
|
16051
|
+
followLinks: settings("RECURSIVE_SEARCH_PATHS_FOLLOW_SYMLINKS") !== "NO"
|
|
16052
|
+
};
|
|
16053
|
+
}
|
|
16011
16054
|
function compilationConditions(settings) {
|
|
16012
16055
|
const flags = settingList(settings("OTHER_SWIFT_FLAGS"));
|
|
16013
16056
|
const defined = flags.flatMap(
|
|
@@ -16370,6 +16413,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
|
|
|
16370
16413
|
for (const file of read) xcconfigs.add(file);
|
|
16371
16414
|
const swiftVersion = Number.parseFloat(settings2("SWIFT_VERSION") || "5");
|
|
16372
16415
|
const members = targetMembers(ref, settings2, options, keys, xcconfigs);
|
|
16416
|
+
const searchRules = recursiveSearchRules(settings2);
|
|
16373
16417
|
const implementations = members.allSources.filter(
|
|
16374
16418
|
(file) => /\.(c|cc|cpp|cxx|m|mm)$/.test(file)
|
|
16375
16419
|
);
|
|
@@ -16412,10 +16456,10 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
|
|
|
16412
16456
|
headerSearchPaths: [
|
|
16413
16457
|
...settingList(settings2("HEADER_SEARCH_PATHS")),
|
|
16414
16458
|
...settingList(settings2("USER_HEADER_SEARCH_PATHS"))
|
|
16415
|
-
].
|
|
16416
|
-
frameworkSearchPaths: settingList(
|
|
16417
|
-
|
|
16418
|
-
),
|
|
16459
|
+
].flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
|
|
16460
|
+
frameworkSearchPaths: settingList(
|
|
16461
|
+
settings2("FRAMEWORK_SEARCH_PATHS")
|
|
16462
|
+
).flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
|
|
16419
16463
|
flags: [
|
|
16420
16464
|
...settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? ["-fobjc-arc"] : [],
|
|
16421
16465
|
...settings2("CLANG_ENABLE_OBJC_WEAK") === "YES" ? ["-fobjc-weak"] : [],
|
|
@@ -16788,42 +16832,8 @@ function readAndroidNativeAppIdentity(projectRoot, androidMergedManifest) {
|
|
|
16788
16832
|
);
|
|
16789
16833
|
}
|
|
16790
16834
|
function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
|
|
16791
|
-
const
|
|
16792
|
-
if (!
|
|
16793
|
-
const projects = import_node_fs14.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
16794
|
-
if (projects.length === 0) return null;
|
|
16795
|
-
if (projects.length > 1 && !iosTarget) {
|
|
16796
|
-
throw new NativeAppTargetSelectionError(
|
|
16797
|
-
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
|
|
16798
|
-
);
|
|
16799
|
-
}
|
|
16800
|
-
let project = projects[0];
|
|
16801
|
-
if (iosTarget && projects.length > 1) {
|
|
16802
|
-
const matches = projects.filter(
|
|
16803
|
-
(entry) => listXcodeAppTargets(import_node_path14.default.join(iosRoot, entry.name), {
|
|
16804
|
-
requireSources: false
|
|
16805
|
-
}).includes(iosTarget)
|
|
16806
|
-
);
|
|
16807
|
-
if (matches.length === 0) {
|
|
16808
|
-
throw new Error(`native app identity has no application target ${iosTarget}`);
|
|
16809
|
-
}
|
|
16810
|
-
if (matches.length > 1) {
|
|
16811
|
-
throw new Error(
|
|
16812
|
-
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
|
|
16813
|
-
);
|
|
16814
|
-
}
|
|
16815
|
-
project = matches[0];
|
|
16816
|
-
}
|
|
16817
|
-
const xcodeproj = import_node_path14.default.join(iosRoot, project.name);
|
|
16818
|
-
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
|
|
16819
|
-
if (!iosTarget && appTargets.length > 1) {
|
|
16820
|
-
throw new NativeAppTargetSelectionError(
|
|
16821
|
-
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
|
|
16822
|
-
);
|
|
16823
|
-
}
|
|
16824
|
-
const app = readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
|
|
16825
|
-
requireSources: false
|
|
16826
|
-
});
|
|
16835
|
+
const app = readIosAppTarget(projectRoot, iosTarget);
|
|
16836
|
+
if (!app) return null;
|
|
16827
16837
|
const identity = readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist);
|
|
16828
16838
|
const projectManifestPath = import_node_path14.default.join(projectRoot, "package.json");
|
|
16829
16839
|
const projectRequire = (0, import_node_module3.createRequire)(projectManifestPath);
|
|
@@ -16876,6 +16886,44 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
|
|
|
16876
16886
|
}
|
|
16877
16887
|
return { ...identity, reanimatedStaticFeatureFlags: flags };
|
|
16878
16888
|
}
|
|
16889
|
+
function readIosAppTarget(projectRoot, iosTarget) {
|
|
16890
|
+
const iosRoot = import_node_path14.default.join(projectRoot, "ios");
|
|
16891
|
+
if (!import_node_fs14.default.existsSync(iosRoot)) return null;
|
|
16892
|
+
const projects = import_node_fs14.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
16893
|
+
if (projects.length === 0) return null;
|
|
16894
|
+
if (projects.length > 1 && !iosTarget) {
|
|
16895
|
+
throw new NativeAppTargetSelectionError(
|
|
16896
|
+
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
|
|
16897
|
+
);
|
|
16898
|
+
}
|
|
16899
|
+
let project = projects[0];
|
|
16900
|
+
if (iosTarget && projects.length > 1) {
|
|
16901
|
+
const matches = projects.filter(
|
|
16902
|
+
(entry) => listXcodeAppTargets(import_node_path14.default.join(iosRoot, entry.name), {
|
|
16903
|
+
requireSources: false
|
|
16904
|
+
}).includes(iosTarget)
|
|
16905
|
+
);
|
|
16906
|
+
if (matches.length === 0) {
|
|
16907
|
+
throw new Error(`native app identity has no application target ${iosTarget}`);
|
|
16908
|
+
}
|
|
16909
|
+
if (matches.length > 1) {
|
|
16910
|
+
throw new Error(
|
|
16911
|
+
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
|
|
16912
|
+
);
|
|
16913
|
+
}
|
|
16914
|
+
project = matches[0];
|
|
16915
|
+
}
|
|
16916
|
+
const xcodeproj = import_node_path14.default.join(iosRoot, project.name);
|
|
16917
|
+
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
|
|
16918
|
+
if (!iosTarget && appTargets.length > 1) {
|
|
16919
|
+
throw new NativeAppTargetSelectionError(
|
|
16920
|
+
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
|
|
16921
|
+
);
|
|
16922
|
+
}
|
|
16923
|
+
return readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
|
|
16924
|
+
requireSources: false
|
|
16925
|
+
});
|
|
16926
|
+
}
|
|
16879
16927
|
|
|
16880
16928
|
// src/native-firebase-config.ts
|
|
16881
16929
|
var import_node_child_process6 = require("node:child_process");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/kotlin-host.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -90,7 +90,13 @@ var SOOTSIM_RENDER_RESOLUTION_LABELS = {
|
|
|
90
90
|
medium: "Medium",
|
|
91
91
|
low: "Low"
|
|
92
92
|
};
|
|
93
|
-
var SOOTSIM_SCREEN_EFFECTS = [
|
|
93
|
+
var SOOTSIM_SCREEN_EFFECTS = [
|
|
94
|
+
"none",
|
|
95
|
+
"wireframe",
|
|
96
|
+
"blueprint",
|
|
97
|
+
"panel",
|
|
98
|
+
"green"
|
|
99
|
+
];
|
|
94
100
|
function isSootSimScreenEffect(value) {
|
|
95
101
|
return value === "none" || value === "wireframe" || value === "blueprint" || value === "panel" || value === "green";
|
|
96
102
|
}
|
|
@@ -275,9 +281,9 @@ function deviceMenu(state, deviceChoices) {
|
|
|
275
281
|
},
|
|
276
282
|
{ type: "separator" },
|
|
277
283
|
{ label: "Trigger Screenshot", action: "screenshot" },
|
|
278
|
-
// pose controls for the current device: open/close on
|
|
279
|
-
// rotate left/right wherever a turn changes geometry, the way
|
|
280
|
-
// simulator holds them (rotate left is cmd+left, rotate right
|
|
284
|
+
// pose controls for the current device: open/close, book and laptop on
|
|
285
|
+
// foldables, rotate left/right wherever a turn changes geometry, the way
|
|
286
|
+
// ios simulator holds them (rotate left is cmd+left, rotate right
|
|
281
287
|
// cmd+right). truthiness, not !== null: a partial state must hide
|
|
282
288
|
// these, never show duo items for the wrong device.
|
|
283
289
|
...state.devicePosture || state.canRotate ? [
|
|
@@ -286,7 +292,9 @@ function deviceMenu(state, deviceChoices) {
|
|
|
286
292
|
{
|
|
287
293
|
label: state.devicePosture === "open" ? "Close iPhone Duo" : "Open iPhone Duo",
|
|
288
294
|
action: "toggle-duo-posture"
|
|
289
|
-
}
|
|
295
|
+
},
|
|
296
|
+
{ label: "Book Pose", action: "fold-duo-book" },
|
|
297
|
+
{ label: "Laptop Pose", action: "fold-duo-laptop" }
|
|
290
298
|
] : [],
|
|
291
299
|
...state.canRotate ? [
|
|
292
300
|
{
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/public-brand.ts
|
|
4
4
|
var name = "Peach";
|
|
@@ -43,7 +43,13 @@ var SOOTSIM_RENDER_RESOLUTION_LABELS = {
|
|
|
43
43
|
medium: "Medium",
|
|
44
44
|
low: "Low"
|
|
45
45
|
};
|
|
46
|
-
var SOOTSIM_SCREEN_EFFECTS = [
|
|
46
|
+
var SOOTSIM_SCREEN_EFFECTS = [
|
|
47
|
+
"none",
|
|
48
|
+
"wireframe",
|
|
49
|
+
"blueprint",
|
|
50
|
+
"panel",
|
|
51
|
+
"green"
|
|
52
|
+
];
|
|
47
53
|
function isSootSimScreenEffect(value) {
|
|
48
54
|
return value === "none" || value === "wireframe" || value === "blueprint" || value === "panel" || value === "green";
|
|
49
55
|
}
|
|
@@ -228,9 +234,9 @@ function deviceMenu(state, deviceChoices) {
|
|
|
228
234
|
},
|
|
229
235
|
{ type: "separator" },
|
|
230
236
|
{ label: "Trigger Screenshot", action: "screenshot" },
|
|
231
|
-
// pose controls for the current device: open/close on
|
|
232
|
-
// rotate left/right wherever a turn changes geometry, the way
|
|
233
|
-
// simulator holds them (rotate left is cmd+left, rotate right
|
|
237
|
+
// pose controls for the current device: open/close, book and laptop on
|
|
238
|
+
// foldables, rotate left/right wherever a turn changes geometry, the way
|
|
239
|
+
// ios simulator holds them (rotate left is cmd+left, rotate right
|
|
234
240
|
// cmd+right). truthiness, not !== null: a partial state must hide
|
|
235
241
|
// these, never show duo items for the wrong device.
|
|
236
242
|
...state.devicePosture || state.canRotate ? [
|
|
@@ -239,7 +245,9 @@ function deviceMenu(state, deviceChoices) {
|
|
|
239
245
|
{
|
|
240
246
|
label: state.devicePosture === "open" ? "Close iPhone Duo" : "Open iPhone Duo",
|
|
241
247
|
action: "toggle-duo-posture"
|
|
242
|
-
}
|
|
248
|
+
},
|
|
249
|
+
{ label: "Book Pose", action: "fold-duo-book" },
|
|
250
|
+
{ label: "Laptop Pose", action: "fold-duo-laptop" }
|
|
243
251
|
] : [],
|
|
244
252
|
...state.canRotate ? [
|
|
245
253
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __esm = (fn, res) => function __init() {
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -10019,6 +10019,9 @@ function targetSettings(ref, configuration, builtins, options = {}) {
|
|
|
10019
10019
|
return applyOperator(get("PRODUCT_NAME"), "c99extidentifier");
|
|
10020
10020
|
case "EXECUTABLE_NAME":
|
|
10021
10021
|
return get("PRODUCT_NAME");
|
|
10022
|
+
// the native default of CoreBuildSystem.xcspec
|
|
10023
|
+
case "EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES":
|
|
10024
|
+
return "*.nib *.lproj *.framework *.gch *.xcode* *.xcassets *.icon (*) .DS_Store CVS .svn .git .hg *.pbproj *.pbxproj";
|
|
10022
10025
|
case "AppIdentifierPrefix":
|
|
10023
10026
|
case "TeamIdentifierPrefix": {
|
|
10024
10027
|
const team = get("DEVELOPMENT_TEAM");
|
|
@@ -10041,6 +10044,45 @@ function settingList(value) {
|
|
|
10041
10044
|
items2.push((quoted ?? plain).replace(/\\(.)/g, "$1"));
|
|
10042
10045
|
return items2;
|
|
10043
10046
|
}
|
|
10047
|
+
function expandSearchPath(directory, rules) {
|
|
10048
|
+
if (import_node_path5.default.basename(directory) !== "**") return [directory];
|
|
10049
|
+
const expanded = [];
|
|
10050
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10051
|
+
const queue = [import_node_path5.default.dirname(directory)];
|
|
10052
|
+
for (let at = 0; at < queue.length; at++) {
|
|
10053
|
+
const current = queue[at];
|
|
10054
|
+
let real;
|
|
10055
|
+
try {
|
|
10056
|
+
real = import_node_fs5.default.realpathSync(current);
|
|
10057
|
+
} catch {
|
|
10058
|
+
continue;
|
|
10059
|
+
}
|
|
10060
|
+
if (!import_node_fs5.default.statSync(real).isDirectory() || seen.has(real)) continue;
|
|
10061
|
+
seen.add(real);
|
|
10062
|
+
expanded.push(current);
|
|
10063
|
+
for (const entry of import_node_fs5.default.readdirSync(real, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)) {
|
|
10064
|
+
if (entry.isSymbolicLink() ? !rules.followLinks : !entry.isDirectory()) continue;
|
|
10065
|
+
if (rules.excluded.some((pattern) => pattern.test(entry.name)) && !rules.included.some((pattern) => pattern.test(entry.name)))
|
|
10066
|
+
continue;
|
|
10067
|
+
queue.push(import_node_path5.default.join(current, entry.name));
|
|
10068
|
+
}
|
|
10069
|
+
}
|
|
10070
|
+
return expanded;
|
|
10071
|
+
}
|
|
10072
|
+
function recursiveSearchRules(settings) {
|
|
10073
|
+
const glob = (pattern) => new RegExp(
|
|
10074
|
+
`^${pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*").replaceAll("?", ".")}$`
|
|
10075
|
+
);
|
|
10076
|
+
return {
|
|
10077
|
+
excluded: settingList(settings("EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
|
|
10078
|
+
glob
|
|
10079
|
+
),
|
|
10080
|
+
included: settingList(settings("INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
|
|
10081
|
+
glob
|
|
10082
|
+
),
|
|
10083
|
+
followLinks: settings("RECURSIVE_SEARCH_PATHS_FOLLOW_SYMLINKS") !== "NO"
|
|
10084
|
+
};
|
|
10085
|
+
}
|
|
10044
10086
|
function compilationConditions(settings) {
|
|
10045
10087
|
const flags = settingList(settings("OTHER_SWIFT_FLAGS"));
|
|
10046
10088
|
const defined = flags.flatMap(
|
|
@@ -10403,6 +10445,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
|
|
|
10403
10445
|
for (const file of read) xcconfigs.add(file);
|
|
10404
10446
|
const swiftVersion = Number.parseFloat(settings2("SWIFT_VERSION") || "5");
|
|
10405
10447
|
const members = targetMembers(ref, settings2, options, keys, xcconfigs);
|
|
10448
|
+
const searchRules = recursiveSearchRules(settings2);
|
|
10406
10449
|
const implementations = members.allSources.filter(
|
|
10407
10450
|
(file) => /\.(c|cc|cpp|cxx|m|mm)$/.test(file)
|
|
10408
10451
|
);
|
|
@@ -10445,10 +10488,10 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
|
|
|
10445
10488
|
headerSearchPaths: [
|
|
10446
10489
|
...settingList(settings2("HEADER_SEARCH_PATHS")),
|
|
10447
10490
|
...settingList(settings2("USER_HEADER_SEARCH_PATHS"))
|
|
10448
|
-
].
|
|
10449
|
-
frameworkSearchPaths: settingList(
|
|
10450
|
-
|
|
10451
|
-
),
|
|
10491
|
+
].flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
|
|
10492
|
+
frameworkSearchPaths: settingList(
|
|
10493
|
+
settings2("FRAMEWORK_SEARCH_PATHS")
|
|
10494
|
+
).flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
|
|
10452
10495
|
flags: [
|
|
10453
10496
|
...settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? ["-fobjc-arc"] : [],
|
|
10454
10497
|
...settings2("CLANG_ENABLE_OBJC_WEAK") === "YES" ? ["-fobjc-weak"] : [],
|
|
@@ -10821,42 +10864,8 @@ function readAndroidNativeAppIdentity(projectRoot, androidMergedManifest) {
|
|
|
10821
10864
|
);
|
|
10822
10865
|
}
|
|
10823
10866
|
function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
|
|
10824
|
-
const
|
|
10825
|
-
if (!
|
|
10826
|
-
const projects = import_node_fs6.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
10827
|
-
if (projects.length === 0) return null;
|
|
10828
|
-
if (projects.length > 1 && !iosTarget) {
|
|
10829
|
-
throw new NativeAppTargetSelectionError(
|
|
10830
|
-
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
|
|
10831
|
-
);
|
|
10832
|
-
}
|
|
10833
|
-
let project = projects[0];
|
|
10834
|
-
if (iosTarget && projects.length > 1) {
|
|
10835
|
-
const matches = projects.filter(
|
|
10836
|
-
(entry) => listXcodeAppTargets(import_node_path6.default.join(iosRoot, entry.name), {
|
|
10837
|
-
requireSources: false
|
|
10838
|
-
}).includes(iosTarget)
|
|
10839
|
-
);
|
|
10840
|
-
if (matches.length === 0) {
|
|
10841
|
-
throw new Error(`native app identity has no application target ${iosTarget}`);
|
|
10842
|
-
}
|
|
10843
|
-
if (matches.length > 1) {
|
|
10844
|
-
throw new Error(
|
|
10845
|
-
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
|
|
10846
|
-
);
|
|
10847
|
-
}
|
|
10848
|
-
project = matches[0];
|
|
10849
|
-
}
|
|
10850
|
-
const xcodeproj = import_node_path6.default.join(iosRoot, project.name);
|
|
10851
|
-
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
|
|
10852
|
-
if (!iosTarget && appTargets.length > 1) {
|
|
10853
|
-
throw new NativeAppTargetSelectionError(
|
|
10854
|
-
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
|
|
10855
|
-
);
|
|
10856
|
-
}
|
|
10857
|
-
const app = readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
|
|
10858
|
-
requireSources: false
|
|
10859
|
-
});
|
|
10867
|
+
const app = readIosAppTarget(projectRoot, iosTarget);
|
|
10868
|
+
if (!app) return null;
|
|
10860
10869
|
const identity = readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist);
|
|
10861
10870
|
const projectManifestPath = import_node_path6.default.join(projectRoot, "package.json");
|
|
10862
10871
|
const projectRequire = (0, import_node_module2.createRequire)(projectManifestPath);
|
|
@@ -10909,6 +10918,44 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
|
|
|
10909
10918
|
}
|
|
10910
10919
|
return { ...identity, reanimatedStaticFeatureFlags: flags };
|
|
10911
10920
|
}
|
|
10921
|
+
function readIosAppTarget(projectRoot, iosTarget) {
|
|
10922
|
+
const iosRoot = import_node_path6.default.join(projectRoot, "ios");
|
|
10923
|
+
if (!import_node_fs6.default.existsSync(iosRoot)) return null;
|
|
10924
|
+
const projects = import_node_fs6.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
10925
|
+
if (projects.length === 0) return null;
|
|
10926
|
+
if (projects.length > 1 && !iosTarget) {
|
|
10927
|
+
throw new NativeAppTargetSelectionError(
|
|
10928
|
+
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
|
|
10929
|
+
);
|
|
10930
|
+
}
|
|
10931
|
+
let project = projects[0];
|
|
10932
|
+
if (iosTarget && projects.length > 1) {
|
|
10933
|
+
const matches = projects.filter(
|
|
10934
|
+
(entry) => listXcodeAppTargets(import_node_path6.default.join(iosRoot, entry.name), {
|
|
10935
|
+
requireSources: false
|
|
10936
|
+
}).includes(iosTarget)
|
|
10937
|
+
);
|
|
10938
|
+
if (matches.length === 0) {
|
|
10939
|
+
throw new Error(`native app identity has no application target ${iosTarget}`);
|
|
10940
|
+
}
|
|
10941
|
+
if (matches.length > 1) {
|
|
10942
|
+
throw new Error(
|
|
10943
|
+
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
|
|
10944
|
+
);
|
|
10945
|
+
}
|
|
10946
|
+
project = matches[0];
|
|
10947
|
+
}
|
|
10948
|
+
const xcodeproj = import_node_path6.default.join(iosRoot, project.name);
|
|
10949
|
+
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
|
|
10950
|
+
if (!iosTarget && appTargets.length > 1) {
|
|
10951
|
+
throw new NativeAppTargetSelectionError(
|
|
10952
|
+
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
|
|
10953
|
+
);
|
|
10954
|
+
}
|
|
10955
|
+
return readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
|
|
10956
|
+
requireSources: false
|
|
10957
|
+
});
|
|
10958
|
+
}
|
|
10912
10959
|
|
|
10913
10960
|
// src/native-firebase-config.ts
|
|
10914
10961
|
var import_node_child_process3 = require("node:child_process");
|