peachsim 0.1.926 → 0.1.927
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/commands/control.ts +4 -26
- 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/bundle-channel.cjs +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/expo-swift-bundle.cjs +1 -1
- 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 +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/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/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 +377 -558
- package/dist-lib/swift-compile.cjs +1 -1
- package/dist-lib/swift-compile.mjs +1 -1
- 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 +1 -1
- 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/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.927 | (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;
|
|
@@ -19125,17 +19125,17 @@ function visit(node, visitor) {
|
|
|
19125
19125
|
} else
|
|
19126
19126
|
visit_(null, node, visitor_, Object.freeze([]));
|
|
19127
19127
|
}
|
|
19128
|
-
function visit_(key2, node, visitor,
|
|
19129
|
-
const ctrl = callVisitor(key2, node, visitor,
|
|
19128
|
+
function visit_(key2, node, visitor, path38) {
|
|
19129
|
+
const ctrl = callVisitor(key2, node, visitor, path38);
|
|
19130
19130
|
if (isNode(ctrl) || isPair(ctrl)) {
|
|
19131
|
-
replaceNode(key2,
|
|
19132
|
-
return visit_(key2, ctrl, visitor,
|
|
19131
|
+
replaceNode(key2, path38, ctrl);
|
|
19132
|
+
return visit_(key2, ctrl, visitor, path38);
|
|
19133
19133
|
}
|
|
19134
19134
|
if (typeof ctrl !== "symbol") {
|
|
19135
19135
|
if (isCollection(node)) {
|
|
19136
|
-
|
|
19136
|
+
path38 = Object.freeze(path38.concat(node));
|
|
19137
19137
|
for (let i = 0; i < node.items.length; ++i) {
|
|
19138
|
-
const ci = visit_(i, node.items[i], visitor,
|
|
19138
|
+
const ci = visit_(i, node.items[i], visitor, path38);
|
|
19139
19139
|
if (typeof ci === "number")
|
|
19140
19140
|
i = ci - 1;
|
|
19141
19141
|
else if (ci === BREAK)
|
|
@@ -19146,13 +19146,13 @@ function visit_(key2, node, visitor, path39) {
|
|
|
19146
19146
|
}
|
|
19147
19147
|
}
|
|
19148
19148
|
} else if (isPair(node)) {
|
|
19149
|
-
|
|
19150
|
-
const ck = visit_("key", node.key, visitor,
|
|
19149
|
+
path38 = Object.freeze(path38.concat(node));
|
|
19150
|
+
const ck = visit_("key", node.key, visitor, path38);
|
|
19151
19151
|
if (ck === BREAK)
|
|
19152
19152
|
return BREAK;
|
|
19153
19153
|
else if (ck === REMOVE)
|
|
19154
19154
|
node.key = null;
|
|
19155
|
-
const cv = visit_("value", node.value, visitor,
|
|
19155
|
+
const cv = visit_("value", node.value, visitor, path38);
|
|
19156
19156
|
if (cv === BREAK)
|
|
19157
19157
|
return BREAK;
|
|
19158
19158
|
else if (cv === REMOVE)
|
|
@@ -19170,17 +19170,17 @@ async function visitAsync(node, visitor) {
|
|
|
19170
19170
|
} else
|
|
19171
19171
|
await visitAsync_(null, node, visitor_, Object.freeze([]));
|
|
19172
19172
|
}
|
|
19173
|
-
async function visitAsync_(key2, node, visitor,
|
|
19174
|
-
const ctrl = await callVisitor(key2, node, visitor,
|
|
19173
|
+
async function visitAsync_(key2, node, visitor, path38) {
|
|
19174
|
+
const ctrl = await callVisitor(key2, node, visitor, path38);
|
|
19175
19175
|
if (isNode(ctrl) || isPair(ctrl)) {
|
|
19176
|
-
replaceNode(key2,
|
|
19177
|
-
return visitAsync_(key2, ctrl, visitor,
|
|
19176
|
+
replaceNode(key2, path38, ctrl);
|
|
19177
|
+
return visitAsync_(key2, ctrl, visitor, path38);
|
|
19178
19178
|
}
|
|
19179
19179
|
if (typeof ctrl !== "symbol") {
|
|
19180
19180
|
if (isCollection(node)) {
|
|
19181
|
-
|
|
19181
|
+
path38 = Object.freeze(path38.concat(node));
|
|
19182
19182
|
for (let i = 0; i < node.items.length; ++i) {
|
|
19183
|
-
const ci = await visitAsync_(i, node.items[i], visitor,
|
|
19183
|
+
const ci = await visitAsync_(i, node.items[i], visitor, path38);
|
|
19184
19184
|
if (typeof ci === "number")
|
|
19185
19185
|
i = ci - 1;
|
|
19186
19186
|
else if (ci === BREAK)
|
|
@@ -19191,13 +19191,13 @@ async function visitAsync_(key2, node, visitor, path39) {
|
|
|
19191
19191
|
}
|
|
19192
19192
|
}
|
|
19193
19193
|
} else if (isPair(node)) {
|
|
19194
|
-
|
|
19195
|
-
const ck = await visitAsync_("key", node.key, visitor,
|
|
19194
|
+
path38 = Object.freeze(path38.concat(node));
|
|
19195
|
+
const ck = await visitAsync_("key", node.key, visitor, path38);
|
|
19196
19196
|
if (ck === BREAK)
|
|
19197
19197
|
return BREAK;
|
|
19198
19198
|
else if (ck === REMOVE)
|
|
19199
19199
|
node.key = null;
|
|
19200
|
-
const cv = await visitAsync_("value", node.value, visitor,
|
|
19200
|
+
const cv = await visitAsync_("value", node.value, visitor, path38);
|
|
19201
19201
|
if (cv === BREAK)
|
|
19202
19202
|
return BREAK;
|
|
19203
19203
|
else if (cv === REMOVE)
|
|
@@ -19224,23 +19224,23 @@ function initVisitor(visitor) {
|
|
|
19224
19224
|
}
|
|
19225
19225
|
return visitor;
|
|
19226
19226
|
}
|
|
19227
|
-
function callVisitor(key2, node, visitor,
|
|
19227
|
+
function callVisitor(key2, node, visitor, path38) {
|
|
19228
19228
|
if (typeof visitor === "function")
|
|
19229
|
-
return visitor(key2, node,
|
|
19229
|
+
return visitor(key2, node, path38);
|
|
19230
19230
|
if (isMap(node))
|
|
19231
|
-
return visitor.Map?.(key2, node,
|
|
19231
|
+
return visitor.Map?.(key2, node, path38);
|
|
19232
19232
|
if (isSeq(node))
|
|
19233
|
-
return visitor.Seq?.(key2, node,
|
|
19233
|
+
return visitor.Seq?.(key2, node, path38);
|
|
19234
19234
|
if (isPair(node))
|
|
19235
|
-
return visitor.Pair?.(key2, node,
|
|
19235
|
+
return visitor.Pair?.(key2, node, path38);
|
|
19236
19236
|
if (isScalar(node))
|
|
19237
|
-
return visitor.Scalar?.(key2, node,
|
|
19237
|
+
return visitor.Scalar?.(key2, node, path38);
|
|
19238
19238
|
if (isAlias(node))
|
|
19239
|
-
return visitor.Alias?.(key2, node,
|
|
19239
|
+
return visitor.Alias?.(key2, node, path38);
|
|
19240
19240
|
return void 0;
|
|
19241
19241
|
}
|
|
19242
|
-
function replaceNode(key2,
|
|
19243
|
-
const parent =
|
|
19242
|
+
function replaceNode(key2, path38, node) {
|
|
19243
|
+
const parent = path38[path38.length - 1];
|
|
19244
19244
|
if (isCollection(parent)) {
|
|
19245
19245
|
parent.items[key2] = node;
|
|
19246
19246
|
} else if (isPair(parent)) {
|
|
@@ -19840,10 +19840,10 @@ var init_createNode = __esm({
|
|
|
19840
19840
|
});
|
|
19841
19841
|
|
|
19842
19842
|
// ../../node_modules/yaml/browser/dist/nodes/Collection.js
|
|
19843
|
-
function collectionFromPath(schema4,
|
|
19843
|
+
function collectionFromPath(schema4, path38, value) {
|
|
19844
19844
|
let v = value;
|
|
19845
|
-
for (let i =
|
|
19846
|
-
const k =
|
|
19845
|
+
for (let i = path38.length - 1; i >= 0; --i) {
|
|
19846
|
+
const k = path38[i];
|
|
19847
19847
|
if (typeof k === "number" && Number.isInteger(k) && k >= 0) {
|
|
19848
19848
|
const a = [];
|
|
19849
19849
|
a[k] = v;
|
|
@@ -19868,7 +19868,7 @@ var init_Collection = __esm({
|
|
|
19868
19868
|
init_createNode();
|
|
19869
19869
|
init_identity();
|
|
19870
19870
|
init_Node();
|
|
19871
|
-
isEmptyPath = (
|
|
19871
|
+
isEmptyPath = (path38) => path38 == null || typeof path38 === "object" && !!path38[Symbol.iterator]().next().done;
|
|
19872
19872
|
Collection = class extends NodeBase {
|
|
19873
19873
|
constructor(type, schema4) {
|
|
19874
19874
|
super(type);
|
|
@@ -19898,11 +19898,11 @@ var init_Collection = __esm({
|
|
|
19898
19898
|
* be a Pair instance or a `{ key, value }` object, which may not have a key
|
|
19899
19899
|
* that already exists in the map.
|
|
19900
19900
|
*/
|
|
19901
|
-
addIn(
|
|
19902
|
-
if (isEmptyPath(
|
|
19901
|
+
addIn(path38, value) {
|
|
19902
|
+
if (isEmptyPath(path38))
|
|
19903
19903
|
this.add(value);
|
|
19904
19904
|
else {
|
|
19905
|
-
const [key2, ...rest] =
|
|
19905
|
+
const [key2, ...rest] = path38;
|
|
19906
19906
|
const node = this.get(key2, true);
|
|
19907
19907
|
if (isCollection(node))
|
|
19908
19908
|
node.addIn(rest, value);
|
|
@@ -19916,8 +19916,8 @@ var init_Collection = __esm({
|
|
|
19916
19916
|
* Removes a value from the collection.
|
|
19917
19917
|
* @returns `true` if the item was found and removed.
|
|
19918
19918
|
*/
|
|
19919
|
-
deleteIn(
|
|
19920
|
-
const [key2, ...rest] =
|
|
19919
|
+
deleteIn(path38) {
|
|
19920
|
+
const [key2, ...rest] = path38;
|
|
19921
19921
|
if (rest.length === 0)
|
|
19922
19922
|
return this.delete(key2);
|
|
19923
19923
|
const node = this.get(key2, true);
|
|
@@ -19931,8 +19931,8 @@ var init_Collection = __esm({
|
|
|
19931
19931
|
* scalar values from their surrounding node; to disable set `keepScalar` to
|
|
19932
19932
|
* `true` (collections are always returned intact).
|
|
19933
19933
|
*/
|
|
19934
|
-
getIn(
|
|
19935
|
-
const [key2, ...rest] =
|
|
19934
|
+
getIn(path38, keepScalar) {
|
|
19935
|
+
const [key2, ...rest] = path38;
|
|
19936
19936
|
const node = this.get(key2, true);
|
|
19937
19937
|
if (rest.length === 0)
|
|
19938
19938
|
return !keepScalar && isScalar(node) ? node.value : node;
|
|
@@ -19950,8 +19950,8 @@ var init_Collection = __esm({
|
|
|
19950
19950
|
/**
|
|
19951
19951
|
* Checks if the collection includes a value with the key `key`.
|
|
19952
19952
|
*/
|
|
19953
|
-
hasIn(
|
|
19954
|
-
const [key2, ...rest] =
|
|
19953
|
+
hasIn(path38) {
|
|
19954
|
+
const [key2, ...rest] = path38;
|
|
19955
19955
|
if (rest.length === 0)
|
|
19956
19956
|
return this.has(key2);
|
|
19957
19957
|
const node = this.get(key2, true);
|
|
@@ -19961,8 +19961,8 @@ var init_Collection = __esm({
|
|
|
19961
19961
|
* Sets a value in this collection. For `!!set`, `value` needs to be a
|
|
19962
19962
|
* boolean to add/remove the item from the set.
|
|
19963
19963
|
*/
|
|
19964
|
-
setIn(
|
|
19965
|
-
const [key2, ...rest] =
|
|
19964
|
+
setIn(path38, value) {
|
|
19965
|
+
const [key2, ...rest] = path38;
|
|
19966
19966
|
if (rest.length === 0) {
|
|
19967
19967
|
this.set(key2, value);
|
|
19968
19968
|
} else {
|
|
@@ -22396,9 +22396,9 @@ var init_Document = __esm({
|
|
|
22396
22396
|
this.contents.add(value);
|
|
22397
22397
|
}
|
|
22398
22398
|
/** Adds a value to the document. */
|
|
22399
|
-
addIn(
|
|
22399
|
+
addIn(path38, value) {
|
|
22400
22400
|
if (assertCollection(this.contents))
|
|
22401
|
-
this.contents.addIn(
|
|
22401
|
+
this.contents.addIn(path38, value);
|
|
22402
22402
|
}
|
|
22403
22403
|
/**
|
|
22404
22404
|
* Create a new `Alias` node, ensuring that the target `node` has the required anchor.
|
|
@@ -22473,14 +22473,14 @@ var init_Document = __esm({
|
|
|
22473
22473
|
* Removes a value from the document.
|
|
22474
22474
|
* @returns `true` if the item was found and removed.
|
|
22475
22475
|
*/
|
|
22476
|
-
deleteIn(
|
|
22477
|
-
if (isEmptyPath(
|
|
22476
|
+
deleteIn(path38) {
|
|
22477
|
+
if (isEmptyPath(path38)) {
|
|
22478
22478
|
if (this.contents == null)
|
|
22479
22479
|
return false;
|
|
22480
22480
|
this.contents = null;
|
|
22481
22481
|
return true;
|
|
22482
22482
|
}
|
|
22483
|
-
return assertCollection(this.contents) ? this.contents.deleteIn(
|
|
22483
|
+
return assertCollection(this.contents) ? this.contents.deleteIn(path38) : false;
|
|
22484
22484
|
}
|
|
22485
22485
|
/**
|
|
22486
22486
|
* Returns item at `key`, or `undefined` if not found. By default unwraps
|
|
@@ -22495,10 +22495,10 @@ var init_Document = __esm({
|
|
|
22495
22495
|
* scalar values from their surrounding node; to disable set `keepScalar` to
|
|
22496
22496
|
* `true` (collections are always returned intact).
|
|
22497
22497
|
*/
|
|
22498
|
-
getIn(
|
|
22499
|
-
if (isEmptyPath(
|
|
22498
|
+
getIn(path38, keepScalar) {
|
|
22499
|
+
if (isEmptyPath(path38))
|
|
22500
22500
|
return !keepScalar && isScalar(this.contents) ? this.contents.value : this.contents;
|
|
22501
|
-
return isCollection(this.contents) ? this.contents.getIn(
|
|
22501
|
+
return isCollection(this.contents) ? this.contents.getIn(path38, keepScalar) : void 0;
|
|
22502
22502
|
}
|
|
22503
22503
|
/**
|
|
22504
22504
|
* Checks if the document includes a value with the key `key`.
|
|
@@ -22509,10 +22509,10 @@ var init_Document = __esm({
|
|
|
22509
22509
|
/**
|
|
22510
22510
|
* Checks if the document includes a value at `path`.
|
|
22511
22511
|
*/
|
|
22512
|
-
hasIn(
|
|
22513
|
-
if (isEmptyPath(
|
|
22512
|
+
hasIn(path38) {
|
|
22513
|
+
if (isEmptyPath(path38))
|
|
22514
22514
|
return this.contents !== void 0;
|
|
22515
|
-
return isCollection(this.contents) ? this.contents.hasIn(
|
|
22515
|
+
return isCollection(this.contents) ? this.contents.hasIn(path38) : false;
|
|
22516
22516
|
}
|
|
22517
22517
|
/**
|
|
22518
22518
|
* Sets a value in this document. For `!!set`, `value` needs to be a
|
|
@@ -22529,13 +22529,13 @@ var init_Document = __esm({
|
|
|
22529
22529
|
* Sets a value in this document. For `!!set`, `value` needs to be a
|
|
22530
22530
|
* boolean to add/remove the item from the set.
|
|
22531
22531
|
*/
|
|
22532
|
-
setIn(
|
|
22533
|
-
if (isEmptyPath(
|
|
22532
|
+
setIn(path38, value) {
|
|
22533
|
+
if (isEmptyPath(path38)) {
|
|
22534
22534
|
this.contents = value;
|
|
22535
22535
|
} else if (this.contents == null) {
|
|
22536
|
-
this.contents = collectionFromPath(this.schema, Array.from(
|
|
22536
|
+
this.contents = collectionFromPath(this.schema, Array.from(path38), value);
|
|
22537
22537
|
} else if (assertCollection(this.contents)) {
|
|
22538
|
-
this.contents.setIn(
|
|
22538
|
+
this.contents.setIn(path38, value);
|
|
22539
22539
|
}
|
|
22540
22540
|
}
|
|
22541
22541
|
/**
|
|
@@ -24440,15 +24440,15 @@ function visit2(cst, visitor) {
|
|
|
24440
24440
|
cst = { start: cst.start, value: cst.value };
|
|
24441
24441
|
_visit(Object.freeze([]), cst, visitor);
|
|
24442
24442
|
}
|
|
24443
|
-
function _visit(
|
|
24444
|
-
let ctrl = visitor(item,
|
|
24443
|
+
function _visit(path38, item, visitor) {
|
|
24444
|
+
let ctrl = visitor(item, path38);
|
|
24445
24445
|
if (typeof ctrl === "symbol")
|
|
24446
24446
|
return ctrl;
|
|
24447
24447
|
for (const field of ["key", "value"]) {
|
|
24448
24448
|
const token = item[field];
|
|
24449
24449
|
if (token && "items" in token) {
|
|
24450
24450
|
for (let i = 0; i < token.items.length; ++i) {
|
|
24451
|
-
const ci = _visit(Object.freeze(
|
|
24451
|
+
const ci = _visit(Object.freeze(path38.concat([[field, i]])), token.items[i], visitor);
|
|
24452
24452
|
if (typeof ci === "number")
|
|
24453
24453
|
i = ci - 1;
|
|
24454
24454
|
else if (ci === BREAK2)
|
|
@@ -24459,10 +24459,10 @@ function _visit(path39, item, visitor) {
|
|
|
24459
24459
|
}
|
|
24460
24460
|
}
|
|
24461
24461
|
if (typeof ctrl === "function" && field === "key")
|
|
24462
|
-
ctrl = ctrl(item,
|
|
24462
|
+
ctrl = ctrl(item, path38);
|
|
24463
24463
|
}
|
|
24464
24464
|
}
|
|
24465
|
-
return typeof ctrl === "function" ? ctrl(item,
|
|
24465
|
+
return typeof ctrl === "function" ? ctrl(item, path38) : ctrl;
|
|
24466
24466
|
}
|
|
24467
24467
|
var BREAK2, SKIP2, REMOVE2;
|
|
24468
24468
|
var init_cst_visit = __esm({
|
|
@@ -24473,9 +24473,9 @@ var init_cst_visit = __esm({
|
|
|
24473
24473
|
visit2.BREAK = BREAK2;
|
|
24474
24474
|
visit2.SKIP = SKIP2;
|
|
24475
24475
|
visit2.REMOVE = REMOVE2;
|
|
24476
|
-
visit2.itemAtPath = (cst,
|
|
24476
|
+
visit2.itemAtPath = (cst, path38) => {
|
|
24477
24477
|
let item = cst;
|
|
24478
|
-
for (const [field, index] of
|
|
24478
|
+
for (const [field, index] of path38) {
|
|
24479
24479
|
const tok = item?.[field];
|
|
24480
24480
|
if (tok && "items" in tok) {
|
|
24481
24481
|
item = tok.items[index];
|
|
@@ -24484,9 +24484,9 @@ var init_cst_visit = __esm({
|
|
|
24484
24484
|
}
|
|
24485
24485
|
return item;
|
|
24486
24486
|
};
|
|
24487
|
-
visit2.parentCollection = (cst,
|
|
24488
|
-
const parent = visit2.itemAtPath(cst,
|
|
24489
|
-
const field =
|
|
24487
|
+
visit2.parentCollection = (cst, path38) => {
|
|
24488
|
+
const parent = visit2.itemAtPath(cst, path38.slice(0, -1));
|
|
24489
|
+
const field = path38[path38.length - 1][0];
|
|
24490
24490
|
const coll = parent?.[field];
|
|
24491
24491
|
if (coll && "items" in coll)
|
|
24492
24492
|
return coll;
|
|
@@ -25789,14 +25789,14 @@ var init_parser = __esm({
|
|
|
25789
25789
|
case "scalar":
|
|
25790
25790
|
case "single-quoted-scalar":
|
|
25791
25791
|
case "double-quoted-scalar": {
|
|
25792
|
-
const
|
|
25792
|
+
const fs34 = this.flowScalar(this.type);
|
|
25793
25793
|
if (atNextItem || it.value) {
|
|
25794
|
-
map2.items.push({ start, key:
|
|
25794
|
+
map2.items.push({ start, key: fs34, sep: [] });
|
|
25795
25795
|
this.onKeyLine = true;
|
|
25796
25796
|
} else if (it.sep) {
|
|
25797
|
-
this.stack.push(
|
|
25797
|
+
this.stack.push(fs34);
|
|
25798
25798
|
} else {
|
|
25799
|
-
Object.assign(it, { key:
|
|
25799
|
+
Object.assign(it, { key: fs34, sep: [] });
|
|
25800
25800
|
this.onKeyLine = true;
|
|
25801
25801
|
}
|
|
25802
25802
|
return;
|
|
@@ -25924,13 +25924,13 @@ var init_parser = __esm({
|
|
|
25924
25924
|
case "scalar":
|
|
25925
25925
|
case "single-quoted-scalar":
|
|
25926
25926
|
case "double-quoted-scalar": {
|
|
25927
|
-
const
|
|
25927
|
+
const fs34 = this.flowScalar(this.type);
|
|
25928
25928
|
if (!it || it.value)
|
|
25929
|
-
fc.items.push({ start: [], key:
|
|
25929
|
+
fc.items.push({ start: [], key: fs34, sep: [] });
|
|
25930
25930
|
else if (it.sep)
|
|
25931
|
-
this.stack.push(
|
|
25931
|
+
this.stack.push(fs34);
|
|
25932
25932
|
else
|
|
25933
|
-
Object.assign(it, { key:
|
|
25933
|
+
Object.assign(it, { key: fs34, sep: [] });
|
|
25934
25934
|
return;
|
|
25935
25935
|
}
|
|
25936
25936
|
case "flow-map-end":
|
|
@@ -27301,9 +27301,9 @@ function safeChildPlistName(value) {
|
|
|
27301
27301
|
name: file.toLowerCase().endsWith(".plist") ? file : `${file}.plist`
|
|
27302
27302
|
};
|
|
27303
27303
|
}
|
|
27304
|
-
async function readableSettingsBundle(
|
|
27304
|
+
async function readableSettingsBundle(path38) {
|
|
27305
27305
|
try {
|
|
27306
|
-
const root = await (0, import_promises.stat)((0, import_node_path.join)(
|
|
27306
|
+
const root = await (0, import_promises.stat)((0, import_node_path.join)(path38, "Root.plist"));
|
|
27307
27307
|
return root.isFile() && root.size <= MAX_PLIST_BYTES;
|
|
27308
27308
|
} catch {
|
|
27309
27309
|
return false;
|
|
@@ -27348,11 +27348,11 @@ async function settingsBundleFingerprint(bundlePath) {
|
|
|
27348
27348
|
return null;
|
|
27349
27349
|
}
|
|
27350
27350
|
}
|
|
27351
|
-
async function parsePlistRecord(
|
|
27351
|
+
async function parsePlistRecord(path38) {
|
|
27352
27352
|
try {
|
|
27353
|
-
const metadata = await (0, import_promises.stat)(
|
|
27353
|
+
const metadata = await (0, import_promises.stat)(path38);
|
|
27354
27354
|
if (!metadata.isFile() || metadata.size > MAX_PLIST_BYTES) return null;
|
|
27355
|
-
const source = await (0, import_promises.readFile)(
|
|
27355
|
+
const source = await (0, import_promises.readFile)(path38, "utf8");
|
|
27356
27356
|
const parsed = parsePlistSource(source);
|
|
27357
27357
|
return isRecord2(parsed) ? parsed : null;
|
|
27358
27358
|
} catch {
|
|
@@ -27698,7 +27698,7 @@ async function tcpPing(port, timeout = TCP_GATE_MS) {
|
|
|
27698
27698
|
return null;
|
|
27699
27699
|
}
|
|
27700
27700
|
}
|
|
27701
|
-
function httpGet(hostname, port,
|
|
27701
|
+
function httpGet(hostname, port, path38, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
|
|
27702
27702
|
return new Promise((resolve10) => {
|
|
27703
27703
|
let settled = false;
|
|
27704
27704
|
let killing = false;
|
|
@@ -27707,7 +27707,7 @@ function httpGet(hostname, port, path39, method = "GET", timeout = TIMEOUT_MS, h
|
|
|
27707
27707
|
settled = true;
|
|
27708
27708
|
resolve10(value);
|
|
27709
27709
|
};
|
|
27710
|
-
const req = import_http.default.request({ hostname, port, path:
|
|
27710
|
+
const req = import_http.default.request({ hostname, port, path: path38, method, headers }, (res) => {
|
|
27711
27711
|
let body = "";
|
|
27712
27712
|
res.on("data", (c) => body += c.toString());
|
|
27713
27713
|
const contentType = (() => {
|
|
@@ -31835,8 +31835,8 @@ function pickImagesetFile(images) {
|
|
|
31835
31835
|
scale: pick.scale === "2x" ? 2 : pick.scale === "3x" ? 3 : 1
|
|
31836
31836
|
};
|
|
31837
31837
|
}
|
|
31838
|
-
function flatScale(
|
|
31839
|
-
const match = /@([23])x\.[^./]+$/.exec(
|
|
31838
|
+
function flatScale(path38) {
|
|
31839
|
+
const match = /@([23])x\.[^./]+$/.exec(path38);
|
|
31840
31840
|
return match ? Number(match[1]) : 1;
|
|
31841
31841
|
}
|
|
31842
31842
|
function providesNamespace(text3) {
|
|
@@ -31863,13 +31863,13 @@ function catalogEntryName(contentsPath, kind, readText2) {
|
|
|
31863
31863
|
}
|
|
31864
31864
|
return segments.join("/");
|
|
31865
31865
|
}
|
|
31866
|
-
function isFlatResourceImage(
|
|
31867
|
-
return
|
|
31866
|
+
function isFlatResourceImage(path38) {
|
|
31867
|
+
return path38.split("/").includes("Resources") && RASTER_EXTENSIONS.has(extOf(path38));
|
|
31868
31868
|
}
|
|
31869
31869
|
function enumerateBundleImages(paths, readText2) {
|
|
31870
31870
|
const table = [];
|
|
31871
31871
|
const seen = /* @__PURE__ */ new Set();
|
|
31872
|
-
const catalogs = paths.filter((
|
|
31872
|
+
const catalogs = paths.filter((path38) => baseOf(path38) === "Contents.json");
|
|
31873
31873
|
for (const contentsPath of catalogs) {
|
|
31874
31874
|
const name2 = catalogEntryName(contentsPath, ".imageset", readText2);
|
|
31875
31875
|
if (name2 === null || seen.has(name2)) continue;
|
|
@@ -31890,12 +31890,12 @@ function enumerateBundleImages(paths, readText2) {
|
|
|
31890
31890
|
seen.add(name2);
|
|
31891
31891
|
table.push({ name: name2, file: `${dir}/${pick.filename}`, scale: pick.scale });
|
|
31892
31892
|
}
|
|
31893
|
-
for (const
|
|
31894
|
-
if (!isFlatResourceImage(
|
|
31895
|
-
const name2 = baseOf(
|
|
31893
|
+
for (const path38 of paths) {
|
|
31894
|
+
if (!isFlatResourceImage(path38)) continue;
|
|
31895
|
+
const name2 = baseOf(path38).slice(0, -extOf(path38).length);
|
|
31896
31896
|
if (name2 === "" || seen.has(name2)) continue;
|
|
31897
31897
|
seen.add(name2);
|
|
31898
|
-
table.push({ name: name2, file:
|
|
31898
|
+
table.push({ name: name2, file: path38, scale: flatScale(path38) });
|
|
31899
31899
|
}
|
|
31900
31900
|
return table;
|
|
31901
31901
|
}
|
|
@@ -31924,7 +31924,7 @@ function colorsetValue(color) {
|
|
|
31924
31924
|
}
|
|
31925
31925
|
function enumerateBundleColors(paths, readText2) {
|
|
31926
31926
|
const table = {};
|
|
31927
|
-
for (const contentsPath of paths.filter((
|
|
31927
|
+
for (const contentsPath of paths.filter((path38) => baseOf(path38) === "Contents.json")) {
|
|
31928
31928
|
const name2 = catalogEntryName(contentsPath, ".colorset", readText2);
|
|
31929
31929
|
if (name2 === null || name2 in table) continue;
|
|
31930
31930
|
let colors;
|
|
@@ -31988,8 +31988,8 @@ function axisExtremes(points) {
|
|
|
31988
31988
|
function pathBounds(d) {
|
|
31989
31989
|
const xs = [];
|
|
31990
31990
|
const ys = [];
|
|
31991
|
-
for (const
|
|
31992
|
-
(0, import_svgpath.default)(
|
|
31991
|
+
for (const path38 of d)
|
|
31992
|
+
(0, import_svgpath.default)(path38).abs().unshort().unarc().iterate((segment, _index, x, y) => {
|
|
31993
31993
|
const [command, ...args] = segment;
|
|
31994
31994
|
if (command === "M" || command === "L") {
|
|
31995
31995
|
xs.push(Number(args[0]));
|
|
@@ -32016,7 +32016,7 @@ function guide(svg, id, axis) {
|
|
|
32016
32016
|
}
|
|
32017
32017
|
function enumerateBundleSymbols(paths, readText2) {
|
|
32018
32018
|
const table = {};
|
|
32019
|
-
for (const contentsPath of paths.filter((
|
|
32019
|
+
for (const contentsPath of paths.filter((path38) => baseOf(path38) === "Contents.json")) {
|
|
32020
32020
|
const name2 = catalogEntryName(contentsPath, ".symbolset", readText2);
|
|
32021
32021
|
if (name2 === null || name2 in table) continue;
|
|
32022
32022
|
let symbols;
|
|
@@ -32049,8 +32049,8 @@ function enumerateBundleSymbols(paths, readText2) {
|
|
|
32049
32049
|
viewBox: "0 0 24 24",
|
|
32050
32050
|
advance,
|
|
32051
32051
|
box: [12 - advance / 2, 12 - tall / 2, advance, tall],
|
|
32052
|
-
layers: d.map((
|
|
32053
|
-
d: (0, import_svgpath.default)(
|
|
32052
|
+
layers: d.map((path38) => ({
|
|
32053
|
+
d: (0, import_svgpath.default)(path38).abs().scale(scale).translate(translateX, translateY).round(3).toString()
|
|
32054
32054
|
}))
|
|
32055
32055
|
};
|
|
32056
32056
|
}
|
|
@@ -32060,7 +32060,7 @@ function enumerateBundleJson(paths) {
|
|
|
32060
32060
|
const found = [];
|
|
32061
32061
|
const seen = /* @__PURE__ */ new Set();
|
|
32062
32062
|
const ordered = [...paths].filter(
|
|
32063
|
-
(
|
|
32063
|
+
(path38) => path38.split("/").includes("Resources") && path38.split("/").every((segment) => segment !== "" && segment !== "..") && (extOf(path38) === ".json" || extOf(path38) === ".xcstrings")
|
|
32064
32064
|
).sort((a, b) => {
|
|
32065
32065
|
const aDepth = a.split("/").length;
|
|
32066
32066
|
const bDepth = b.split("/").length;
|
|
@@ -33359,10 +33359,10 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33359
33359
|
owners.push(...physical.map(() => current));
|
|
33360
33360
|
};
|
|
33361
33361
|
const scoped = (body) => (symbol, ...rest) => {
|
|
33362
|
-
const
|
|
33363
|
-
if (omit.has(
|
|
33362
|
+
const path38 = pathOf(symbol);
|
|
33363
|
+
if (omit.has(path38)) return void skipped.push({ path: path38, reason: omit.get(path38) });
|
|
33364
33364
|
const previous = current;
|
|
33365
|
-
current =
|
|
33365
|
+
current = path38;
|
|
33366
33366
|
try {
|
|
33367
33367
|
body(symbol, ...rest);
|
|
33368
33368
|
} finally {
|
|
@@ -33382,14 +33382,14 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33382
33382
|
const access = (symbol, openOwner) => symbol.accessLevel === "open" && openOwner ? "open" : "public";
|
|
33383
33383
|
const emitMember = scoped(
|
|
33384
33384
|
(member, indent, context) => {
|
|
33385
|
-
const
|
|
33385
|
+
const path38 = pathOf(member);
|
|
33386
33386
|
if (TYPE_KINDS.has(member.kind.identifier)) {
|
|
33387
33387
|
emitType(member, indent);
|
|
33388
33388
|
return;
|
|
33389
33389
|
}
|
|
33390
33390
|
if (member.kind.identifier === "swift.enum.case") return;
|
|
33391
33391
|
if (!MEMBER_KINDS.has(member.kind.identifier)) {
|
|
33392
|
-
skipped.push({ path:
|
|
33392
|
+
skipped.push({ path: path38, reason: `unhandled ${member.kind.identifier}` });
|
|
33393
33393
|
return;
|
|
33394
33394
|
}
|
|
33395
33395
|
const { 1: attrs, 2: rest } = LEADING_ATTRS.exec(text(member));
|
|
@@ -33403,12 +33403,12 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33403
33403
|
const final = context.inClass && flags.has("final") ? "final " : "";
|
|
33404
33404
|
const mutating = flags.has("mutating") ? "mutating " : flags.has("nonmutating") ? "nonmutating " : "";
|
|
33405
33405
|
let core = `${flags.has("convenience") ? "convenience " : ""}${modifiers[2]}`;
|
|
33406
|
-
const override = context.inClass && !options.plain?.has(
|
|
33406
|
+
const override = context.inClass && !options.plain?.has(path38) && (flags.has("override") || overrides.has(member.identifier.precise) || options.forcedOverride?.has(path38) || isObjC(member) && path38.endsWith(".init()")) ? "override " : "";
|
|
33407
33407
|
const head = `${indent}${attrs}${access(member, context.openOwner)} ${required ? "required " : ""}${final}${override}${mutating}`;
|
|
33408
|
-
const measured = behavior.get(
|
|
33409
|
-
if (measured) used.add(
|
|
33408
|
+
const measured = behavior.get(path38);
|
|
33409
|
+
if (measured) used.add(path38);
|
|
33410
33410
|
const overloadBody = /\basync\b/.test(core) ? measured?.asyncBody : /\bResult</.test(core) ? measured?.resultBody : void 0;
|
|
33411
|
-
const body = overloadBody ?? measured?.body ?? trap(
|
|
33411
|
+
const body = overloadBody ?? measured?.body ?? trap(path38);
|
|
33412
33412
|
switch (member.kind.identifier) {
|
|
33413
33413
|
case "swift.property":
|
|
33414
33414
|
case "swift.type.property":
|
|
@@ -33429,7 +33429,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33429
33429
|
return;
|
|
33430
33430
|
}
|
|
33431
33431
|
emit(
|
|
33432
|
-
`${head}${computed} { get${effects} { ${body} }${settable && !effects ? ` ${parsed.nonmutating ? "nonmutating " : ""}set { ${measured?.set ?? trap(
|
|
33432
|
+
`${head}${computed} { get${effects} { ${body} }${settable && !effects ? ` ${parsed.nonmutating ? "nonmutating " : ""}set { ${measured?.set ?? trap(path38)} }` : ""} }`
|
|
33433
33433
|
);
|
|
33434
33434
|
return;
|
|
33435
33435
|
}
|
|
@@ -33482,7 +33482,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33482
33482
|
};
|
|
33483
33483
|
const emitType = scoped(
|
|
33484
33484
|
(symbol, indent) => {
|
|
33485
|
-
const
|
|
33485
|
+
const path38 = pathOf(symbol);
|
|
33486
33486
|
const id = symbol.identifier.precise;
|
|
33487
33487
|
const inner = `${indent} `;
|
|
33488
33488
|
switch (symbol.kind.identifier) {
|
|
@@ -33494,10 +33494,10 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33494
33494
|
case "swift.class": {
|
|
33495
33495
|
const shape = header(symbol, "class", indent);
|
|
33496
33496
|
if (!shape)
|
|
33497
|
-
return void skipped.push({ path:
|
|
33498
|
-
const parent = options.superclasses?.get(
|
|
33497
|
+
return void skipped.push({ path: path38, reason: `unparsed class ${text(symbol)}` });
|
|
33498
|
+
const parent = options.superclasses?.get(path38) ?? superclass.get(id);
|
|
33499
33499
|
const blocked = classBlocked(id);
|
|
33500
|
-
if (blocked) return void skipped.push({ path:
|
|
33500
|
+
if (blocked) return void skipped.push({ path: path38, reason: blocked });
|
|
33501
33501
|
const ancestors = /* @__PURE__ */ new Set();
|
|
33502
33502
|
for (let at = superId.get(id); at; at = superId.get(at))
|
|
33503
33503
|
for (const name2 of conforms.get(at) ?? []) ancestors.add(name2);
|
|
@@ -33513,9 +33513,9 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33513
33513
|
`${indent}${shape.attrs}${open ? "open" : "public"} class ${shape.name}${shape.generics}${list2.length ? `: ${list2.join(", ")}` : ""}${selfConforming(shape.where)} {`
|
|
33514
33514
|
);
|
|
33515
33515
|
const members = membersOf(id);
|
|
33516
|
-
const extra = options.behavior?.get(
|
|
33516
|
+
const extra = options.behavior?.get(path38)?.members;
|
|
33517
33517
|
if (extra) {
|
|
33518
|
-
used.add(
|
|
33518
|
+
used.add(path38);
|
|
33519
33519
|
emit(`${inner}${extra}`);
|
|
33520
33520
|
}
|
|
33521
33521
|
for (const member of members)
|
|
@@ -33567,13 +33567,13 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33567
33567
|
continue;
|
|
33568
33568
|
have.add(witnessKey(member));
|
|
33569
33569
|
have.add(sideLeaf(member));
|
|
33570
|
-
emitWitness(member, inner,
|
|
33570
|
+
emitWitness(member, inner, path38);
|
|
33571
33571
|
}
|
|
33572
33572
|
}
|
|
33573
33573
|
const coder = members.some((member) => leaf(member) === "init(coder:)");
|
|
33574
33574
|
if (designated && !coder && externalRoot(id) !== "NSObject" && externalRoot(id) !== null)
|
|
33575
33575
|
emit(
|
|
33576
|
-
`${inner}public required init?(coder: NSCoder) { ${trap(`${
|
|
33576
|
+
`${inner}public required init?(coder: NSCoder) { ${trap(`${path38}.init(coder:)`)} }`
|
|
33577
33577
|
);
|
|
33578
33578
|
emit(`${indent}}`);
|
|
33579
33579
|
return;
|
|
@@ -33581,7 +33581,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33581
33581
|
case "swift.struct": {
|
|
33582
33582
|
const shape = header(symbol, "struct", indent);
|
|
33583
33583
|
if (!shape)
|
|
33584
|
-
return void skipped.push({ path:
|
|
33584
|
+
return void skipped.push({ path: path38, reason: `unparsed struct ${text(symbol)}` });
|
|
33585
33585
|
const members = membersOf(id);
|
|
33586
33586
|
const raw2 = rawType(members);
|
|
33587
33587
|
const list2 = inheritance(id);
|
|
@@ -33613,7 +33613,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33613
33613
|
case "swift.enum": {
|
|
33614
33614
|
const shape = header(symbol, "enum", indent);
|
|
33615
33615
|
if (!shape)
|
|
33616
|
-
return void skipped.push({ path:
|
|
33616
|
+
return void skipped.push({ path: path38, reason: `unparsed enum ${text(symbol)}` });
|
|
33617
33617
|
const members = membersOf(id);
|
|
33618
33618
|
const raw2 = rawType(members);
|
|
33619
33619
|
const cases = members.filter(
|
|
@@ -33622,7 +33622,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33622
33622
|
const missing = raw2 ? cases.filter((member) => !values.has(member.identifier.precise)) : [];
|
|
33623
33623
|
if (raw2 && isObjC(symbol) && missing.length > 0)
|
|
33624
33624
|
return void skipped.push({
|
|
33625
|
-
path:
|
|
33625
|
+
path: path38,
|
|
33626
33626
|
reason: `no header value for ${missing.map(leaf).join(", ")}`
|
|
33627
33627
|
});
|
|
33628
33628
|
const list2 = inheritance(id, raw2 ?? void 0).filter(
|
|
@@ -33662,7 +33662,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33662
33662
|
const shape = header(symbol, "protocol", indent);
|
|
33663
33663
|
if (!shape)
|
|
33664
33664
|
return void skipped.push({
|
|
33665
|
-
path:
|
|
33665
|
+
path: path38,
|
|
33666
33666
|
reason: `unparsed protocol ${text(symbol)}`
|
|
33667
33667
|
});
|
|
33668
33668
|
const list2 = [...isObjC(symbol) ? ["AnyObject"] : [], ...inheritance(id)];
|
|
@@ -33687,7 +33687,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33687
33687
|
}
|
|
33688
33688
|
emit(`${indent}}`);
|
|
33689
33689
|
if (defaults.length > 0) {
|
|
33690
|
-
emit(`${indent}extension ${
|
|
33690
|
+
emit(`${indent}extension ${path38} {`);
|
|
33691
33691
|
for (const member of defaults) {
|
|
33692
33692
|
const decl = text(member);
|
|
33693
33693
|
if (optional.has(member.identifier.precise) && member.kind.identifier === "swift.method" && !decl.replace(/\([^)]*\)/g, "").includes("->") && !/ async\b/.test(decl))
|
|
@@ -33733,7 +33733,7 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33733
33733
|
return init ? /rawValue:\s*([^)]+)\)/.exec(text(init))?.[1]?.trim() ?? null : null;
|
|
33734
33734
|
};
|
|
33735
33735
|
const emitGlobal = scoped((symbol) => {
|
|
33736
|
-
const
|
|
33736
|
+
const path38 = pathOf(symbol);
|
|
33737
33737
|
const kind = symbol.kind.identifier;
|
|
33738
33738
|
if (kind === "swift.func" || kind === "swift.func.op" || kind === "swift.method" || kind === "swift.type.method") {
|
|
33739
33739
|
const { 1: attrs, 2: rest } = LEADING_ATTRS.exec(text(symbol));
|
|
@@ -33744,17 +33744,17 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33744
33744
|
if (fix && !/^(?:prefix|infix|postfix)\b/.test(spelled))
|
|
33745
33745
|
spelled = `${fix} ${spelled}`;
|
|
33746
33746
|
}
|
|
33747
|
-
emit(`${attrs}public ${spelled} { ${trap(
|
|
33747
|
+
emit(`${attrs}public ${spelled} { ${trap(path38)} }`);
|
|
33748
33748
|
} else if (kind === "swift.var") {
|
|
33749
33749
|
const parsed = splitAccessors(text(symbol).replace(/^let /, "var "));
|
|
33750
|
-
const measured = behavior.get(
|
|
33751
|
-
if (measured) used.add(
|
|
33752
|
-
emit(`public ${parsed.decl} { ${measured?.body ?? trap(
|
|
33753
|
-
} else skipped.push({ path:
|
|
33750
|
+
const measured = behavior.get(path38);
|
|
33751
|
+
if (measured) used.add(path38);
|
|
33752
|
+
emit(`public ${parsed.decl} { ${measured?.body ?? trap(path38)} }`);
|
|
33753
|
+
} else skipped.push({ path: path38, reason: `unhandled top-level ${kind}` });
|
|
33754
33754
|
});
|
|
33755
33755
|
const roots = [...byId.values()].filter((symbol) => !owner.has(symbol.identifier.precise) && !unavailable(symbol)).sort((a, b) => pathOf(a).localeCompare(pathOf(b)));
|
|
33756
33756
|
for (const symbol of roots) {
|
|
33757
|
-
const
|
|
33757
|
+
const path38 = pathOf(symbol);
|
|
33758
33758
|
if (TYPE_KINDS.has(symbol.kind.identifier)) emitType(symbol, "");
|
|
33759
33759
|
else emitGlobal(symbol);
|
|
33760
33760
|
}
|
|
@@ -33795,9 +33795,9 @@ function emitSwiftStandin(graphs, options) {
|
|
|
33795
33795
|
...imports.map((name2) => `import ${name2}`),
|
|
33796
33796
|
""
|
|
33797
33797
|
];
|
|
33798
|
-
for (const
|
|
33799
|
-
if (!used.has(
|
|
33800
|
-
skipped.push({ path:
|
|
33798
|
+
for (const path38 of behavior.keys())
|
|
33799
|
+
if (!used.has(path38))
|
|
33800
|
+
skipped.push({ path: path38, reason: "behavior names no emitted declaration" });
|
|
33801
33801
|
return {
|
|
33802
33802
|
source: `${[...banner, ...lines].join("\n")}
|
|
33803
33803
|
`,
|
|
@@ -33883,7 +33883,7 @@ var init_swift_standin_emit = __esm({
|
|
|
33883
33883
|
sideLeaf = (symbol) => `${symbol.kind.identifier.startsWith("swift.type.") ? "type" : "instance"}|leaf|${leaf(symbol)}`;
|
|
33884
33884
|
isObjC = (symbol) => symbol.identifier.precise.startsWith("c:");
|
|
33885
33885
|
synthesizedEquality = (symbol, conforms) => conforms.includes("Hashable") ? ["==(_:_:)", "hash(into:)", "hashValue"].includes(leaf(symbol)) : conforms.includes("Equatable") && leaf(symbol) === "==(_:_:)";
|
|
33886
|
-
trap = (
|
|
33886
|
+
trap = (path38) => `fatalError("${path38} is a binary framework peach cannot run")`;
|
|
33887
33887
|
KEYWORDS = /* @__PURE__ */ new Set([
|
|
33888
33888
|
"Type",
|
|
33889
33889
|
"Protocol",
|
|
@@ -36601,9 +36601,6 @@ function nativeTargets(project) {
|
|
|
36601
36601
|
}
|
|
36602
36602
|
return refs;
|
|
36603
36603
|
}
|
|
36604
|
-
function listXcodeAppTargets(xcodeprojOrWorkspace) {
|
|
36605
|
-
return workspaceProjects(xcodeprojOrWorkspace).projects.flatMap(nativeTargets).filter((ref) => ref.target.productType === APPLICATION).map((ref) => str(ref.target.name) ?? ref.id);
|
|
36606
|
-
}
|
|
36607
36604
|
function readXcodeAppTarget(input, targetName) {
|
|
36608
36605
|
const xcodeprojOrWorkspace = import_node_fs18.default.realpathSync(input);
|
|
36609
36606
|
const workspace = xcodeprojOrWorkspace.endsWith(".xcworkspace") ? xcodeprojOrWorkspace : null;
|
|
@@ -38182,8 +38179,8 @@ function sourceEntryPath() {
|
|
|
38182
38179
|
return null;
|
|
38183
38180
|
}
|
|
38184
38181
|
}
|
|
38185
|
-
function isCliEntry(
|
|
38186
|
-
const name2 = (0, import_node_path22.basename)(
|
|
38182
|
+
function isCliEntry(path38) {
|
|
38183
|
+
const name2 = (0, import_node_path22.basename)(path38);
|
|
38187
38184
|
return name2 === "bin.ts" || name2 === "bin.js";
|
|
38188
38185
|
}
|
|
38189
38186
|
function rnxSelfInvocation() {
|
|
@@ -43098,8 +43095,8 @@ function metroIosAssetDestRelatives(httpServerLocation, filename) {
|
|
|
43098
43095
|
}
|
|
43099
43096
|
const out = [];
|
|
43100
43097
|
for (const dir of dirs) {
|
|
43101
|
-
const
|
|
43102
|
-
if (!out.includes(
|
|
43098
|
+
const path38 = `${dir}/${filename}`;
|
|
43099
|
+
if (!out.includes(path38)) out.push(path38);
|
|
43103
43100
|
}
|
|
43104
43101
|
if (!out.includes(filename)) out.push(filename);
|
|
43105
43102
|
return out;
|
|
@@ -44063,13 +44060,13 @@ function readFactoryStringLiterals(factory) {
|
|
|
44063
44060
|
return literals;
|
|
44064
44061
|
}
|
|
44065
44062
|
function normalizeFingerprintLiteral(literal) {
|
|
44066
|
-
const
|
|
44063
|
+
const path38 = literal.replaceAll("\\\\", "/").replaceAll("\\/", "/");
|
|
44067
44064
|
const nodeModulesMarker = "/node_modules/";
|
|
44068
|
-
const nodeModulesIndex =
|
|
44065
|
+
const nodeModulesIndex = path38.lastIndexOf(nodeModulesMarker);
|
|
44069
44066
|
if (nodeModulesIndex >= 0) {
|
|
44070
|
-
return `node_modules/${
|
|
44067
|
+
return `node_modules/${path38.slice(nodeModulesIndex + nodeModulesMarker.length)}`;
|
|
44071
44068
|
}
|
|
44072
|
-
if ((
|
|
44069
|
+
if ((path38.startsWith("/") || /^[A-Za-z]:\//.test(path38) || path38.startsWith("file:/")) && /\.[cm]?[jt]sx?(?::\d+(?::\d+)?)?$/.test(path38)) {
|
|
44073
44070
|
return null;
|
|
44074
44071
|
}
|
|
44075
44072
|
return literal;
|
|
@@ -44307,10 +44304,10 @@ function templateAssignment(template, embeddings) {
|
|
|
44307
44304
|
if (existingNode !== void 0 && existingNode !== nodeIndex) return null;
|
|
44308
44305
|
nodesByModuleId.set(moduleId, nodeIndex);
|
|
44309
44306
|
const node = template.nodes[nodeIndex];
|
|
44310
|
-
const
|
|
44307
|
+
const path38 = node.landmarkPath ?? `node_modules/${template.packageName}/__rnx_inferred__/${moduleId}.js`;
|
|
44311
44308
|
const existingPath = pathsByModuleId.get(moduleId);
|
|
44312
|
-
if (existingPath !== void 0 && existingPath !==
|
|
44313
|
-
pathsByModuleId.set(moduleId,
|
|
44309
|
+
if (existingPath !== void 0 && existingPath !== path38) return null;
|
|
44310
|
+
pathsByModuleId.set(moduleId, path38);
|
|
44314
44311
|
}
|
|
44315
44312
|
}
|
|
44316
44313
|
return {
|
|
@@ -44472,14 +44469,14 @@ async function inferMetroModuleIdentity(args) {
|
|
|
44472
44469
|
const packageClaims = claimsByPackage.values().next().value;
|
|
44473
44470
|
if (!packageClaims) continue;
|
|
44474
44471
|
const exactClaims = packageClaims.filter((assignment2) => {
|
|
44475
|
-
const
|
|
44476
|
-
return
|
|
44472
|
+
const path38 = assignment2.pathsByModuleId.get(moduleId);
|
|
44473
|
+
return path38 !== void 0 && !path38.includes("/__rnx_inferred__/");
|
|
44477
44474
|
});
|
|
44478
44475
|
const preferredClaims = exactClaims.length > 0 ? exactClaims : packageClaims;
|
|
44479
44476
|
const routes = new Set(
|
|
44480
44477
|
preferredClaims.flatMap((assignment2) => {
|
|
44481
|
-
const
|
|
44482
|
-
return
|
|
44478
|
+
const path38 = assignment2.pathsByModuleId.get(moduleId);
|
|
44479
|
+
return path38 ? [metroFingerprintModuleClaimRoute(assignment2.packageName, path38)] : [];
|
|
44483
44480
|
})
|
|
44484
44481
|
);
|
|
44485
44482
|
if (routes.size !== 1) continue;
|
|
@@ -44801,11 +44798,11 @@ function detectProject(dir) {
|
|
|
44801
44798
|
devCommand: typeof devCommand === "string" ? devCommand : null
|
|
44802
44799
|
};
|
|
44803
44800
|
}
|
|
44804
|
-
function readProjectMetadata(
|
|
44801
|
+
function readProjectMetadata(path38) {
|
|
44805
44802
|
try {
|
|
44806
|
-
const info = (0, import_node_fs29.lstatSync)(
|
|
44803
|
+
const info = (0, import_node_fs29.lstatSync)(path38);
|
|
44807
44804
|
if (!info.isFile() || info.size > 4 * 1024 * 1024) return null;
|
|
44808
|
-
return (0, import_node_fs29.readFileSync)(
|
|
44805
|
+
return (0, import_node_fs29.readFileSync)(path38, "utf8");
|
|
44809
44806
|
} catch {
|
|
44810
44807
|
return null;
|
|
44811
44808
|
}
|
|
@@ -44814,8 +44811,8 @@ function metadataValue(value, key2) {
|
|
|
44814
44811
|
if (!value || typeof value !== "object") return void 0;
|
|
44815
44812
|
return Object.getOwnPropertyDescriptor(value, key2)?.value;
|
|
44816
44813
|
}
|
|
44817
|
-
function readProjectJson(
|
|
44818
|
-
const text3 = readProjectMetadata(
|
|
44814
|
+
function readProjectJson(path38) {
|
|
44815
|
+
const text3 = readProjectMetadata(path38);
|
|
44819
44816
|
if (text3 === null) return null;
|
|
44820
44817
|
try {
|
|
44821
44818
|
const value = JSON.parse(text3);
|
|
@@ -48800,11 +48797,11 @@ async function evalInBridge(bridge, code, opts = {}) {
|
|
|
48800
48797
|
if (opts.acquireLock) payload.acquireLock = true;
|
|
48801
48798
|
return bridge.send(payload);
|
|
48802
48799
|
}
|
|
48803
|
-
async function callInBridge(bridge,
|
|
48804
|
-
return bridge.send({ type: "call", path:
|
|
48800
|
+
async function callInBridge(bridge, path38, ...args) {
|
|
48801
|
+
return bridge.send({ type: "call", path: path38, args });
|
|
48805
48802
|
}
|
|
48806
|
-
async function callInBridgeWrite(bridge,
|
|
48807
|
-
return bridge.send({ type: "call", path:
|
|
48803
|
+
async function callInBridgeWrite(bridge, path38, ...args) {
|
|
48804
|
+
return bridge.send({ type: "call", path: path38, args, acquireLock: true });
|
|
48808
48805
|
}
|
|
48809
48806
|
var import_node_fs32, import_node_path33, import_ws2, PEACH_PLACEMENT_ENV, resolvedWorld, BridgeSimLockedError, DisconnectedSimError, BRIDGE_VALUE_FLAGS_TABLE, BRIDGE_VALUE_FLAGS;
|
|
48810
48807
|
var init_ws_bridge = __esm({
|
|
@@ -48941,8 +48938,8 @@ function getDefaultPortForProtocol(protocol) {
|
|
|
48941
48938
|
return protocol === "https:" ? 443 : 80;
|
|
48942
48939
|
}
|
|
48943
48940
|
function isBaseServerUrl(url) {
|
|
48944
|
-
const
|
|
48945
|
-
return (
|
|
48941
|
+
const path38 = url.pathname || "/";
|
|
48942
|
+
return (path38 === "/" || path38 === "") && !url.search && !url.hash;
|
|
48946
48943
|
}
|
|
48947
48944
|
async function resolvePortViaServerScan(port) {
|
|
48948
48945
|
try {
|
|
@@ -49243,165 +49240,6 @@ var init_flow_timeout_scale = __esm({
|
|
|
49243
49240
|
}
|
|
49244
49241
|
});
|
|
49245
49242
|
|
|
49246
|
-
// src/native-firebase-config.ts
|
|
49247
|
-
function readNativeFirebaseConfig(projectRoot, platforms = ["ios", "android"]) {
|
|
49248
|
-
const result = {};
|
|
49249
|
-
let config = {};
|
|
49250
|
-
const appJsonPath = import_node_path35.default.join(projectRoot, "app.json");
|
|
49251
|
-
const appJson = import_node_fs34.default.existsSync(appJsonPath) ? JSON.parse(import_node_fs34.default.readFileSync(appJsonPath, "utf8")) : null;
|
|
49252
|
-
const staticExpo = isRecord(appJson) && (isRecord(appJson.expo) || [appJson.ios, appJson.android].some(
|
|
49253
|
-
(value) => isRecord(value) && typeof value.googleServicesFile === "string"
|
|
49254
|
-
));
|
|
49255
|
-
const dynamicExpo = [
|
|
49256
|
-
"app.config.js",
|
|
49257
|
-
"app.config.ts",
|
|
49258
|
-
"app.config.cjs",
|
|
49259
|
-
"app.config.mjs"
|
|
49260
|
-
].some((name2) => import_node_fs34.default.existsSync(import_node_path35.default.join(projectRoot, name2)));
|
|
49261
|
-
if (staticExpo || dynamicExpo) {
|
|
49262
|
-
const require4 = (0, import_node_module2.createRequire)(import_node_path35.default.join(projectRoot, "package.json"));
|
|
49263
|
-
const configModule = require4("@expo/config");
|
|
49264
|
-
if (!isRecord(configModule) || typeof configModule.getConfig !== "function")
|
|
49265
|
-
throw new Error("Expo native configuration is unavailable.");
|
|
49266
|
-
const resolved = Reflect.apply(configModule.getConfig, configModule, [
|
|
49267
|
-
projectRoot,
|
|
49268
|
-
{ skipSDKVersionRequirement: true }
|
|
49269
|
-
]);
|
|
49270
|
-
config = isRecord(resolved) && isRecord(resolved.exp) ? resolved.exp : {};
|
|
49271
|
-
}
|
|
49272
|
-
const ios = config.ios;
|
|
49273
|
-
if (platforms.includes("ios") && (!isRecord(ios) || typeof ios.googleServicesFile !== "string")) {
|
|
49274
|
-
const iosRoot = import_node_path35.default.join(projectRoot, "ios");
|
|
49275
|
-
if (import_node_fs34.default.existsSync(iosRoot)) {
|
|
49276
|
-
const projects2 = import_node_fs34.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
49277
|
-
if (projects2.length > 1)
|
|
49278
|
-
throw new Error("native Firebase configuration requires a selected Xcode project");
|
|
49279
|
-
if (projects2.length === 1) {
|
|
49280
|
-
const xcodeproj = import_node_path35.default.join(iosRoot, projects2[0].name);
|
|
49281
|
-
const appTargets = listXcodeAppTargets(xcodeproj);
|
|
49282
|
-
if (appTargets.length > 1)
|
|
49283
|
-
throw new Error("native Firebase configuration requires a selected app target");
|
|
49284
|
-
if (appTargets.length === 1) {
|
|
49285
|
-
const app = readXcodeAppTarget(xcodeproj, appTargets[0]);
|
|
49286
|
-
const delegates = app.allSources.filter(
|
|
49287
|
-
(file) => /^AppDelegate\.(swift|mm|m)$/.test(import_node_path35.default.basename(file))
|
|
49288
|
-
);
|
|
49289
|
-
const defaultConfigured = delegates.some((file) => {
|
|
49290
|
-
const source = import_node_fs34.default.readFileSync(file, "utf8").replace(
|
|
49291
|
-
/\/\*[\s\S]*?\*\/|\/\/[^\n]*|"(?:\\.|[^"\\])*"/g,
|
|
49292
|
-
(token) => token.startsWith('"') ? '""' : token.replace(/[^\n]/g, " ")
|
|
49293
|
-
);
|
|
49294
|
-
const launch2 = /(?:\bfunc\s+application\s*\([\s\S]*?didFinishLaunchingWithOptions[\s\S]*?\)\s*->\s*Bool|^-\s*\(BOOL\)\s*application\s*:[\s\S]*?didFinishLaunchingWithOptions[^\{]*)\s*\{/m.exec(
|
|
49295
|
-
source
|
|
49296
|
-
);
|
|
49297
|
-
if (!launch2) return false;
|
|
49298
|
-
const body = source.slice(launch2.index + launch2[0].length);
|
|
49299
|
-
const configure = /^\s*(?:FirebaseApp\s*\.\s*configure\s*\(\s*\)|\[FIRApp\s+configure\])/m.exec(
|
|
49300
|
-
body
|
|
49301
|
-
);
|
|
49302
|
-
if (!configure) return false;
|
|
49303
|
-
const before = body.slice(0, configure.index);
|
|
49304
|
-
let depth = 1;
|
|
49305
|
-
for (const token of before) {
|
|
49306
|
-
if (token === "{") depth += 1;
|
|
49307
|
-
if (token === "}") depth -= 1;
|
|
49308
|
-
if (depth === 0) return false;
|
|
49309
|
-
}
|
|
49310
|
-
if (depth !== 1 || /\b(?:return|throw)\b|^\s*#(?:if|elseif|else)/m.test(before))
|
|
49311
|
-
throw new Error(
|
|
49312
|
-
"native Firebase initialization must be unconditional in the app launch method"
|
|
49313
|
-
);
|
|
49314
|
-
return true;
|
|
49315
|
-
});
|
|
49316
|
-
if (defaultConfigured) {
|
|
49317
|
-
const resources = app.resources.filter(
|
|
49318
|
-
(file) => /^GoogleService-Info\.plist$/.test(import_node_path35.default.basename(file))
|
|
49319
|
-
);
|
|
49320
|
-
if (resources.length !== 1)
|
|
49321
|
-
throw new Error(
|
|
49322
|
-
"native Firebase default initialization requires one GoogleService-Info.plist build resource"
|
|
49323
|
-
);
|
|
49324
|
-
config.ios = {
|
|
49325
|
-
googleServicesFile: import_node_path35.default.relative(
|
|
49326
|
-
import_node_fs34.default.realpathSync(projectRoot),
|
|
49327
|
-
resources[0]
|
|
49328
|
-
)
|
|
49329
|
-
};
|
|
49330
|
-
}
|
|
49331
|
-
}
|
|
49332
|
-
}
|
|
49333
|
-
}
|
|
49334
|
-
}
|
|
49335
|
-
for (const platform of platforms) {
|
|
49336
|
-
const native = config[platform];
|
|
49337
|
-
if (!isRecord(native) || typeof native.googleServicesFile !== "string") continue;
|
|
49338
|
-
try {
|
|
49339
|
-
const source = import_node_fs34.default.readFileSync(
|
|
49340
|
-
import_node_path35.default.resolve(projectRoot, native.googleServicesFile),
|
|
49341
|
-
"utf8"
|
|
49342
|
-
);
|
|
49343
|
-
const parsed = platform === "ios" ? parsePlistSource(source) : JSON.parse(source);
|
|
49344
|
-
if (!isRecord(parsed)) throw new Error("Invalid Google services file.");
|
|
49345
|
-
if (platform === "ios") {
|
|
49346
|
-
result[platform] = {
|
|
49347
|
-
apiKey: parsed.API_KEY,
|
|
49348
|
-
appId: parsed.GOOGLE_APP_ID,
|
|
49349
|
-
projectId: parsed.PROJECT_ID,
|
|
49350
|
-
databaseURL: parsed.DATABASE_URL,
|
|
49351
|
-
gaTrackingId: parsed.TRACKING_ID,
|
|
49352
|
-
storageBucket: parsed.STORAGE_BUCKET,
|
|
49353
|
-
messagingSenderId: parsed.GCM_SENDER_ID,
|
|
49354
|
-
clientId: parsed.CLIENT_ID,
|
|
49355
|
-
androidClientID: parsed.ANDROID_CLIENT_ID,
|
|
49356
|
-
deepLinkUrlScheme: parsed.REVERSED_CLIENT_ID
|
|
49357
|
-
};
|
|
49358
|
-
} else {
|
|
49359
|
-
const project = isRecord(parsed.project_info) ? parsed.project_info : {};
|
|
49360
|
-
const clients = Array.isArray(parsed.client) ? parsed.client : [];
|
|
49361
|
-
const client = clients.find((value) => {
|
|
49362
|
-
if (!isRecord(value) || !isRecord(value.client_info)) return false;
|
|
49363
|
-
const android = value.client_info.android_client_info;
|
|
49364
|
-
return isRecord(android) && android.package_name === native.package;
|
|
49365
|
-
});
|
|
49366
|
-
if (!isRecord(client) || !isRecord(client.client_info))
|
|
49367
|
-
throw new Error("No Google services client matches the Android package.");
|
|
49368
|
-
const apiKeys = Array.isArray(client.api_key) ? client.api_key : [];
|
|
49369
|
-
const apiKey = apiKeys.find(
|
|
49370
|
-
(value) => isRecord(value) && typeof value.current_key === "string"
|
|
49371
|
-
);
|
|
49372
|
-
const oauthClients = Array.isArray(client.oauth_client) ? client.oauth_client : [];
|
|
49373
|
-
const oauth = oauthClients.find(
|
|
49374
|
-
(value) => isRecord(value) && value.client_type === 3
|
|
49375
|
-
);
|
|
49376
|
-
result[platform] = {
|
|
49377
|
-
apiKey: isRecord(apiKey) ? apiKey.current_key : void 0,
|
|
49378
|
-
appId: client.client_info.mobilesdk_app_id,
|
|
49379
|
-
projectId: project.project_id,
|
|
49380
|
-
databaseURL: project.firebase_url,
|
|
49381
|
-
storageBucket: project.storage_bucket,
|
|
49382
|
-
messagingSenderId: project.project_number,
|
|
49383
|
-
clientId: isRecord(oauth) ? oauth.client_id : void 0
|
|
49384
|
-
};
|
|
49385
|
-
}
|
|
49386
|
-
} catch (error) {
|
|
49387
|
-
result[platform] = { error: error instanceof Error ? error.message : String(error) };
|
|
49388
|
-
}
|
|
49389
|
-
}
|
|
49390
|
-
return result;
|
|
49391
|
-
}
|
|
49392
|
-
var import_node_fs34, import_node_module2, import_node_path35;
|
|
49393
|
-
var init_native_firebase_config = __esm({
|
|
49394
|
-
"src/native-firebase-config.ts"() {
|
|
49395
|
-
"use strict";
|
|
49396
|
-
import_node_fs34 = __toESM(require("node:fs"), 1);
|
|
49397
|
-
import_node_module2 = require("node:module");
|
|
49398
|
-
import_node_path35 = __toESM(require("node:path"), 1);
|
|
49399
|
-
init_is_record();
|
|
49400
|
-
init_plist();
|
|
49401
|
-
init_xcode_project();
|
|
49402
|
-
}
|
|
49403
|
-
});
|
|
49404
|
-
|
|
49405
49243
|
// src/profiles.ts
|
|
49406
49244
|
function normalizeProfileId(input) {
|
|
49407
49245
|
const id = input.trim();
|
|
@@ -49509,59 +49347,59 @@ var init_profiles = __esm({
|
|
|
49509
49347
|
// cli/app-catalog.ts
|
|
49510
49348
|
function listDir(dir) {
|
|
49511
49349
|
try {
|
|
49512
|
-
return
|
|
49350
|
+
return import_node_fs34.default.readdirSync(dir, { withFileTypes: true });
|
|
49513
49351
|
} catch {
|
|
49514
49352
|
return [];
|
|
49515
49353
|
}
|
|
49516
49354
|
}
|
|
49517
49355
|
function readText(file) {
|
|
49518
49356
|
try {
|
|
49519
|
-
return
|
|
49357
|
+
return import_node_fs34.default.readFileSync(file, "utf8");
|
|
49520
49358
|
} catch {
|
|
49521
49359
|
return null;
|
|
49522
49360
|
}
|
|
49523
49361
|
}
|
|
49524
49362
|
function catalogFiles(dir, found) {
|
|
49525
49363
|
for (const entry of listDir(dir)) {
|
|
49526
|
-
const full =
|
|
49364
|
+
const full = import_node_path35.default.join(dir, entry.name);
|
|
49527
49365
|
if (entry.isDirectory()) catalogFiles(full, found);
|
|
49528
49366
|
else if (entry.name === "Contents.json") found.push(full);
|
|
49529
49367
|
}
|
|
49530
49368
|
}
|
|
49531
49369
|
function discoverAppCatalog(appDir) {
|
|
49532
|
-
const iosDir =
|
|
49370
|
+
const iosDir = import_node_path35.default.join(appDir, "ios");
|
|
49533
49371
|
const target = listDir(iosDir).find(
|
|
49534
|
-
(entry) => entry.isDirectory() && entry.name !== "Pods" && listDir(
|
|
49372
|
+
(entry) => entry.isDirectory() && entry.name !== "Pods" && listDir(import_node_path35.default.join(iosDir, entry.name)).some(
|
|
49535
49373
|
(file) => /^AppDelegate\.(swift|mm|m)$/.test(file.name)
|
|
49536
49374
|
)
|
|
49537
49375
|
);
|
|
49538
49376
|
if (!target) return null;
|
|
49539
|
-
const targetDir =
|
|
49377
|
+
const targetDir = import_node_path35.default.join(iosDir, target.name);
|
|
49540
49378
|
const files2 = [];
|
|
49541
49379
|
for (const entry of listDir(targetDir)) {
|
|
49542
49380
|
if (entry.isDirectory() && entry.name.endsWith(".xcassets"))
|
|
49543
|
-
catalogFiles(
|
|
49381
|
+
catalogFiles(import_node_path35.default.join(targetDir, entry.name), files2);
|
|
49544
49382
|
}
|
|
49545
49383
|
const relative3 = files2.map(
|
|
49546
|
-
(file) =>
|
|
49384
|
+
(file) => import_node_path35.default.relative(targetDir, file).split(import_node_path35.default.sep).join(import_node_path35.default.posix.sep)
|
|
49547
49385
|
);
|
|
49548
49386
|
const colors = enumerateBundleColors(
|
|
49549
49387
|
relative3,
|
|
49550
|
-
(candidate) => candidate.endsWith("Contents.json") ? readText(
|
|
49388
|
+
(candidate) => candidate.endsWith("Contents.json") ? readText(import_node_path35.default.join(targetDir, candidate)) : null
|
|
49551
49389
|
);
|
|
49552
49390
|
const pbxproj = listDir(iosDir).find((entry) => entry.name.endsWith(".xcodeproj"));
|
|
49553
|
-
const accentName = readText(
|
|
49391
|
+
const accentName = readText(import_node_path35.default.join(targetDir, "Info.plist"))?.match(PLIST_ACCENT)?.[1] ?? (pbxproj ? readText(import_node_path35.default.join(iosDir, pbxproj.name, "project.pbxproj"))?.match(
|
|
49554
49392
|
ACCENT_BUILD_SETTING
|
|
49555
49393
|
)?.[1] : void 0) ?? null;
|
|
49556
49394
|
if (accentName === null && Object.keys(colors).length === 0) return null;
|
|
49557
49395
|
return { colors, accentName };
|
|
49558
49396
|
}
|
|
49559
|
-
var
|
|
49397
|
+
var import_node_fs34, import_node_path35, ACCENT_BUILD_SETTING, PLIST_ACCENT;
|
|
49560
49398
|
var init_app_catalog = __esm({
|
|
49561
49399
|
"cli/app-catalog.ts"() {
|
|
49562
49400
|
"use strict";
|
|
49563
|
-
|
|
49564
|
-
|
|
49401
|
+
import_node_fs34 = __toESM(require("node:fs"), 1);
|
|
49402
|
+
import_node_path35 = __toESM(require("node:path"), 1);
|
|
49565
49403
|
init_bundleAssets();
|
|
49566
49404
|
ACCENT_BUILD_SETTING = /ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "?([^";]+)"?;/;
|
|
49567
49405
|
PLIST_ACCENT = /<key>NSAccentColorName<\/key>\s*<string>([^<]+)<\/string>/;
|
|
@@ -49571,9 +49409,9 @@ var init_app_catalog = __esm({
|
|
|
49571
49409
|
// cli/app-project.ts
|
|
49572
49410
|
function firstNamedFile(dir, names) {
|
|
49573
49411
|
for (const name2 of names) {
|
|
49574
|
-
const candidate =
|
|
49412
|
+
const candidate = import_node_path36.default.join(dir, name2);
|
|
49575
49413
|
try {
|
|
49576
|
-
if (
|
|
49414
|
+
if (import_node_fs35.default.statSync(candidate).isFile()) return candidate;
|
|
49577
49415
|
} catch {
|
|
49578
49416
|
}
|
|
49579
49417
|
}
|
|
@@ -49586,24 +49424,24 @@ function findRNXAppConfig(dir) {
|
|
|
49586
49424
|
return firstNamedFile(dir, PEACH_APP_CONFIG_NAMES);
|
|
49587
49425
|
}
|
|
49588
49426
|
function resolveAppProject(projectRoot) {
|
|
49589
|
-
const appDir =
|
|
49427
|
+
const appDir = import_node_path36.default.resolve(projectRoot);
|
|
49590
49428
|
try {
|
|
49591
|
-
if (!
|
|
49429
|
+
if (!import_node_fs35.default.statSync(appDir).isDirectory()) return null;
|
|
49592
49430
|
} catch {
|
|
49593
49431
|
return null;
|
|
49594
49432
|
}
|
|
49595
49433
|
const configPath = findRNXAppConfig(appDir);
|
|
49596
|
-
if (!configPath && !findExpoAppConfig(appDir) && !
|
|
49434
|
+
if (!configPath && !findExpoAppConfig(appDir) && !import_node_fs35.default.existsSync(import_node_path36.default.join(appDir, "package.json"))) {
|
|
49597
49435
|
return null;
|
|
49598
49436
|
}
|
|
49599
49437
|
return { appDir, configPath };
|
|
49600
49438
|
}
|
|
49601
|
-
var
|
|
49439
|
+
var import_node_fs35, import_node_path36, EXPO_APP_CONFIG_NAMES, PEACH_APP_CONFIG_NAMES;
|
|
49602
49440
|
var init_app_project = __esm({
|
|
49603
49441
|
"cli/app-project.ts"() {
|
|
49604
49442
|
"use strict";
|
|
49605
|
-
|
|
49606
|
-
|
|
49443
|
+
import_node_fs35 = __toESM(require("node:fs"), 1);
|
|
49444
|
+
import_node_path36 = __toESM(require("node:path"), 1);
|
|
49607
49445
|
EXPO_APP_CONFIG_NAMES = [
|
|
49608
49446
|
"app.config.js",
|
|
49609
49447
|
"app.config.ts",
|
|
@@ -49626,12 +49464,12 @@ function resolveFileEntries(entries, configDir) {
|
|
|
49626
49464
|
return Object.fromEntries(
|
|
49627
49465
|
Object.entries(entries).map(([name2, resolution]) => [
|
|
49628
49466
|
name2,
|
|
49629
|
-
resolution && typeof resolution === "object" && "file" in resolution && typeof resolution.file === "string" ? { ...resolution, file:
|
|
49467
|
+
resolution && typeof resolution === "object" && "file" in resolution && typeof resolution.file === "string" ? { ...resolution, file: import_node_path37.default.resolve(configDir, resolution.file) } : resolution
|
|
49630
49468
|
])
|
|
49631
49469
|
);
|
|
49632
49470
|
}
|
|
49633
49471
|
function resolveConfigReplacementFiles(config, configPath) {
|
|
49634
|
-
const configDir =
|
|
49472
|
+
const configDir = import_node_path37.default.dirname(configPath);
|
|
49635
49473
|
return {
|
|
49636
49474
|
...config,
|
|
49637
49475
|
modules: resolveFileEntries(config.modules, configDir),
|
|
@@ -49666,11 +49504,11 @@ async function resolveRNXAppConfig(startDir = process.cwd()) {
|
|
|
49666
49504
|
const project = resolveAppProject(startDir);
|
|
49667
49505
|
return { project, config: await loadRNXAppConfig(project) };
|
|
49668
49506
|
}
|
|
49669
|
-
var
|
|
49507
|
+
var import_node_path37, import_jiti;
|
|
49670
49508
|
var init_app_config = __esm({
|
|
49671
49509
|
"cli/app-config.ts"() {
|
|
49672
49510
|
"use strict";
|
|
49673
|
-
|
|
49511
|
+
import_node_path37 = __toESM(require("node:path"), 1);
|
|
49674
49512
|
import_jiti = require("jiti");
|
|
49675
49513
|
init_config();
|
|
49676
49514
|
init_config();
|
|
@@ -49730,13 +49568,13 @@ function discoverNativeLinkedAppFontPaths(opts) {
|
|
|
49730
49568
|
scannedFontDirectories++;
|
|
49731
49569
|
let entries;
|
|
49732
49570
|
try {
|
|
49733
|
-
entries =
|
|
49571
|
+
entries = import_node_fs36.default.readdirSync(current.dir, { withFileTypes: true });
|
|
49734
49572
|
} catch {
|
|
49735
49573
|
continue;
|
|
49736
49574
|
}
|
|
49737
49575
|
for (const entry of entries) {
|
|
49738
49576
|
if (entry.isSymbolicLink()) continue;
|
|
49739
|
-
const fullPath =
|
|
49577
|
+
const fullPath = import_node_path38.default.join(current.dir, entry.name);
|
|
49740
49578
|
if (entry.isDirectory()) {
|
|
49741
49579
|
if (current.depth < 4 && pending.length < 64 && !entry.name.startsWith(".")) {
|
|
49742
49580
|
pending.push({ dir: fullPath, depth: current.depth + 1 });
|
|
@@ -49744,15 +49582,15 @@ function discoverNativeLinkedAppFontPaths(opts) {
|
|
|
49744
49582
|
continue;
|
|
49745
49583
|
}
|
|
49746
49584
|
if (!entry.isFile() || !/\.(ttf|otf|woff|woff2)$/i.test(entry.name)) continue;
|
|
49747
|
-
const relative3 =
|
|
49748
|
-
fontPaths.push(
|
|
49585
|
+
const relative3 = import_node_path38.default.relative(root, fullPath).split(import_node_path38.default.sep).join("/");
|
|
49586
|
+
fontPaths.push(import_node_path38.default.posix.join(metroPathPrefix, relative3));
|
|
49749
49587
|
if (fontPaths.length >= 256) break;
|
|
49750
49588
|
}
|
|
49751
49589
|
}
|
|
49752
49590
|
};
|
|
49753
49591
|
try {
|
|
49754
49592
|
const packageJson = JSON.parse(
|
|
49755
|
-
|
|
49593
|
+
import_node_fs36.default.readFileSync(import_node_path38.default.join(selectedAppDir, "package.json"), "utf8")
|
|
49756
49594
|
);
|
|
49757
49595
|
const dependencyNames = /* @__PURE__ */ new Set();
|
|
49758
49596
|
for (const field of ["dependencies", "devDependencies", "optionalDependencies"]) {
|
|
@@ -49767,32 +49605,32 @@ function discoverNativeLinkedAppFontPaths(opts) {
|
|
|
49767
49605
|
const config = Reflect.get(packageJson, "reactNativeVectorIcons");
|
|
49768
49606
|
const configuredFontDir = config && typeof config === "object" ? Reflect.get(config, "fontDir") : null;
|
|
49769
49607
|
const configuredDir = typeof configuredFontDir === "string" ? configuredFontDir : "rnvi-fonts";
|
|
49770
|
-
const root =
|
|
49771
|
-
const relativeRoot =
|
|
49772
|
-
if (!relativeRoot.startsWith("..") && !
|
|
49773
|
-
collectFontFiles(root, relativeRoot.split(
|
|
49608
|
+
const root = import_node_path38.default.resolve(selectedAppDir, configuredDir);
|
|
49609
|
+
const relativeRoot = import_node_path38.default.relative(selectedAppDir, root);
|
|
49610
|
+
if (!relativeRoot.startsWith("..") && !import_node_path38.default.isAbsolute(relativeRoot)) {
|
|
49611
|
+
collectFontFiles(root, relativeRoot.split(import_node_path38.default.sep).join("/"));
|
|
49774
49612
|
}
|
|
49775
|
-
const bundleDir =
|
|
49776
|
-
const appRelativeDir = bundleDir.split("/").join(
|
|
49613
|
+
const bundleDir = import_node_path38.default.posix.dirname(opts.bundleUrl ? new URL(opts.bundleUrl).pathname : "/").replace(/^\/+/, "");
|
|
49614
|
+
const appRelativeDir = bundleDir.split("/").join(import_node_path38.default.sep);
|
|
49777
49615
|
const metroRootCandidates = [selectedAppDir];
|
|
49778
|
-
if (bundleDir && selectedAppDir.endsWith(
|
|
49616
|
+
if (bundleDir && selectedAppDir.endsWith(import_node_path38.default.sep + appRelativeDir)) {
|
|
49779
49617
|
metroRootCandidates.push(selectedAppDir.slice(0, -appRelativeDir.length - 1));
|
|
49780
49618
|
}
|
|
49781
|
-
const vectorIconRequire = (0,
|
|
49619
|
+
const vectorIconRequire = (0, import_node_module2.createRequire)(import_node_path38.default.join(selectedAppDir, "package.json"));
|
|
49782
49620
|
for (const dependencyName of vectorIconDependencies) {
|
|
49783
49621
|
try {
|
|
49784
49622
|
const entryPath = vectorIconRequire.resolve(dependencyName);
|
|
49785
|
-
const dependencyPath = dependencyName.split("/").join(
|
|
49786
|
-
const marker = `${
|
|
49623
|
+
const dependencyPath = dependencyName.split("/").join(import_node_path38.default.sep);
|
|
49624
|
+
const marker = `${import_node_path38.default.sep}node_modules${import_node_path38.default.sep}${dependencyPath}${import_node_path38.default.sep}`;
|
|
49787
49625
|
const markerIndex = entryPath.lastIndexOf(marker);
|
|
49788
49626
|
if (markerIndex === -1) continue;
|
|
49789
49627
|
const packageRoot = entryPath.slice(0, markerIndex + marker.length - 1);
|
|
49790
49628
|
const fontsDir = dependencyName === "react-native-vector-icons" ? "Fonts" : "fonts";
|
|
49791
|
-
const fontsRoot =
|
|
49629
|
+
const fontsRoot = import_node_path38.default.join(packageRoot, fontsDir);
|
|
49792
49630
|
for (const metroRoot of metroRootCandidates) {
|
|
49793
49631
|
collectFontFiles(
|
|
49794
49632
|
fontsRoot,
|
|
49795
|
-
|
|
49633
|
+
import_node_path38.default.relative(metroRoot, fontsRoot).split(import_node_path38.default.sep).join("/")
|
|
49796
49634
|
);
|
|
49797
49635
|
}
|
|
49798
49636
|
} catch {
|
|
@@ -49802,37 +49640,37 @@ function discoverNativeLinkedAppFontPaths(opts) {
|
|
|
49802
49640
|
} catch {
|
|
49803
49641
|
}
|
|
49804
49642
|
try {
|
|
49805
|
-
const configPath =
|
|
49806
|
-
if (
|
|
49807
|
-
const appConfigRequire = (0,
|
|
49643
|
+
const configPath = import_node_path38.default.join(selectedAppDir, "react-native.config.js");
|
|
49644
|
+
if (import_node_fs36.default.statSync(configPath).isFile()) {
|
|
49645
|
+
const appConfigRequire = (0, import_node_module2.createRequire)(import_node_path38.default.join(selectedAppDir, "package.json"));
|
|
49808
49646
|
const rnConfig = appConfigRequire(configPath);
|
|
49809
49647
|
const assets2 = rnConfig && typeof rnConfig === "object" ? Reflect.get(rnConfig, "assets") : null;
|
|
49810
49648
|
if (Array.isArray(assets2)) {
|
|
49811
49649
|
for (const assetDir of assets2) {
|
|
49812
49650
|
if (typeof assetDir !== "string") continue;
|
|
49813
|
-
const root =
|
|
49814
|
-
const relativeRoot =
|
|
49815
|
-
if (relativeRoot.startsWith("..") ||
|
|
49816
|
-
collectFontFiles(root, relativeRoot.split(
|
|
49651
|
+
const root = import_node_path38.default.resolve(selectedAppDir, assetDir);
|
|
49652
|
+
const relativeRoot = import_node_path38.default.relative(selectedAppDir, root);
|
|
49653
|
+
if (relativeRoot.startsWith("..") || import_node_path38.default.isAbsolute(relativeRoot)) continue;
|
|
49654
|
+
collectFontFiles(root, relativeRoot.split(import_node_path38.default.sep).join("/"));
|
|
49817
49655
|
}
|
|
49818
49656
|
}
|
|
49819
49657
|
}
|
|
49820
49658
|
} catch {
|
|
49821
49659
|
}
|
|
49822
49660
|
if (platform === "ios") {
|
|
49823
|
-
const iosDir =
|
|
49661
|
+
const iosDir = import_node_path38.default.join(selectedAppDir, "ios");
|
|
49824
49662
|
try {
|
|
49825
|
-
const targetDirs =
|
|
49663
|
+
const targetDirs = import_node_fs36.default.readdirSync(iosDir, { withFileTypes: true }).filter(
|
|
49826
49664
|
(entry) => entry.isDirectory() && !entry.isSymbolicLink() && entry.name !== "Pods" && entry.name !== "build" && !entry.name.startsWith(".")
|
|
49827
49665
|
).slice(0, 64);
|
|
49828
|
-
const plistPaths = [
|
|
49666
|
+
const plistPaths = [import_node_path38.default.join(iosDir, "Info.plist")];
|
|
49829
49667
|
for (const entry of targetDirs) {
|
|
49830
|
-
plistPaths.push(
|
|
49668
|
+
plistPaths.push(import_node_path38.default.join(iosDir, entry.name, "Info.plist"));
|
|
49831
49669
|
}
|
|
49832
49670
|
for (const plistPath of plistPaths) {
|
|
49833
49671
|
let parsed;
|
|
49834
49672
|
try {
|
|
49835
|
-
parsed = parsePlistSource(
|
|
49673
|
+
parsed = parsePlistSource(import_node_fs36.default.readFileSync(plistPath, "utf8"));
|
|
49836
49674
|
} catch {
|
|
49837
49675
|
continue;
|
|
49838
49676
|
}
|
|
@@ -49842,21 +49680,21 @@ function discoverNativeLinkedAppFontPaths(opts) {
|
|
|
49842
49680
|
for (const declaredFont of declaredFonts) {
|
|
49843
49681
|
if (typeof declaredFont !== "string") continue;
|
|
49844
49682
|
const candidates = [
|
|
49845
|
-
|
|
49846
|
-
|
|
49683
|
+
import_node_path38.default.resolve(import_node_path38.default.dirname(plistPath), declaredFont),
|
|
49684
|
+
import_node_path38.default.resolve(iosDir, declaredFont)
|
|
49847
49685
|
];
|
|
49848
49686
|
const fontPath = candidates.find((candidate) => {
|
|
49849
|
-
const relative3 =
|
|
49850
|
-
if (relative3.startsWith("..") ||
|
|
49687
|
+
const relative3 = import_node_path38.default.relative(selectedAppDir, candidate);
|
|
49688
|
+
if (relative3.startsWith("..") || import_node_path38.default.isAbsolute(relative3)) return false;
|
|
49851
49689
|
try {
|
|
49852
|
-
return
|
|
49690
|
+
return import_node_fs36.default.statSync(candidate).isFile();
|
|
49853
49691
|
} catch {
|
|
49854
49692
|
return false;
|
|
49855
49693
|
}
|
|
49856
49694
|
});
|
|
49857
49695
|
if (!fontPath) continue;
|
|
49858
49696
|
fontPaths.push(
|
|
49859
|
-
|
|
49697
|
+
import_node_path38.default.relative(selectedAppDir, fontPath).split(import_node_path38.default.sep).join("/")
|
|
49860
49698
|
);
|
|
49861
49699
|
}
|
|
49862
49700
|
}
|
|
@@ -49898,19 +49736,19 @@ async function resolveMetroProjectRoot(bundleUrl, opts) {
|
|
|
49898
49736
|
function encodeAppFontsWire(specs) {
|
|
49899
49737
|
return specs.map((spec) => `${encodeURIComponent(spec.url)}::${encodeURIComponent(spec.family)}`).join(",");
|
|
49900
49738
|
}
|
|
49901
|
-
var
|
|
49739
|
+
var import_node_fs36, import_node_module2, import_node_path38, import_config_plugin_fonts, require2;
|
|
49902
49740
|
var init_app_fonts = __esm({
|
|
49903
49741
|
"cli/app-fonts.ts"() {
|
|
49904
49742
|
"use strict";
|
|
49905
|
-
|
|
49906
|
-
|
|
49907
|
-
|
|
49743
|
+
import_node_fs36 = __toESM(require("node:fs"), 1);
|
|
49744
|
+
import_node_module2 = require("node:module");
|
|
49745
|
+
import_node_path38 = __toESM(require("node:path"), 1);
|
|
49908
49746
|
import_config_plugin_fonts = require("peach-engine/engine/config-plugin-fonts");
|
|
49909
49747
|
init_dev_server_scanner();
|
|
49910
49748
|
init_backend_origin();
|
|
49911
49749
|
init_plist();
|
|
49912
49750
|
init_app_project();
|
|
49913
|
-
require2 = (0,
|
|
49751
|
+
require2 = (0, import_node_module2.createRequire)(__sootsim_import_meta_url);
|
|
49914
49752
|
}
|
|
49915
49753
|
});
|
|
49916
49754
|
|
|
@@ -49979,15 +49817,15 @@ function splashImageUrls(spec) {
|
|
|
49979
49817
|
if (spec.dark?.backgroundImageUrl) urls.add(spec.dark.backgroundImageUrl);
|
|
49980
49818
|
return [...urls];
|
|
49981
49819
|
}
|
|
49982
|
-
var
|
|
49820
|
+
var import_node_module3, import_config_plugin_splash, require3;
|
|
49983
49821
|
var init_app_splash = __esm({
|
|
49984
49822
|
"cli/app-splash.ts"() {
|
|
49985
49823
|
"use strict";
|
|
49986
|
-
|
|
49824
|
+
import_node_module3 = require("node:module");
|
|
49987
49825
|
import_config_plugin_splash = require("peach-engine/engine/config-plugin-splash");
|
|
49988
49826
|
init_backend_origin();
|
|
49989
49827
|
init_app_project();
|
|
49990
|
-
require3 = (0,
|
|
49828
|
+
require3 = (0, import_node_module3.createRequire)(__sootsim_import_meta_url);
|
|
49991
49829
|
}
|
|
49992
49830
|
});
|
|
49993
49831
|
|
|
@@ -50844,7 +50682,7 @@ function desktopHostExecutable() {
|
|
|
50844
50682
|
function bundleValue(app, key2) {
|
|
50845
50683
|
const read = (0, import_node_child_process13.spawnSync)(
|
|
50846
50684
|
"plutil",
|
|
50847
|
-
["-extract", key2, "raw", "-o", "-",
|
|
50685
|
+
["-extract", key2, "raw", "-o", "-", import_node_path39.default.join(app, "Contents/Info.plist")],
|
|
50848
50686
|
{ encoding: "utf8" }
|
|
50849
50687
|
);
|
|
50850
50688
|
return read.status === 0 ? read.stdout.trim() : null;
|
|
@@ -50855,8 +50693,8 @@ function isNativeHostBundle(app) {
|
|
|
50855
50693
|
function placedHostVersion() {
|
|
50856
50694
|
if (desktopHostPlatform() === "linux-x64") {
|
|
50857
50695
|
try {
|
|
50858
|
-
const version =
|
|
50859
|
-
return /^\d+\.\d+$/.test(version) &&
|
|
50696
|
+
const version = import_node_fs37.default.readFileSync(import_node_path39.default.join(desktopHostsDir(), "active"), "utf8").trim();
|
|
50697
|
+
return /^\d+\.\d+$/.test(version) && import_node_fs37.default.existsSync(import_node_path39.default.join(desktopHostDir(version), desktopHostExecutable())) ? version : null;
|
|
50860
50698
|
} catch {
|
|
50861
50699
|
return null;
|
|
50862
50700
|
}
|
|
@@ -50872,18 +50710,18 @@ function headlessHostCommand() {
|
|
|
50872
50710
|
if (!version) return null;
|
|
50873
50711
|
const dir = desktopHostDir(version);
|
|
50874
50712
|
return [
|
|
50875
|
-
|
|
50713
|
+
import_node_path39.default.join(dir, "bin/node"),
|
|
50876
50714
|
"--experimental-vm-modules",
|
|
50877
|
-
|
|
50715
|
+
import_node_path39.default.join(dir, "node/host.mjs")
|
|
50878
50716
|
];
|
|
50879
50717
|
}
|
|
50880
|
-
var import_node_child_process13,
|
|
50718
|
+
var import_node_child_process13, import_node_fs37, import_node_path39, MAC_HOST_APP, HOST_BUNDLE_ID;
|
|
50881
50719
|
var init_desktop_host_delivery = __esm({
|
|
50882
50720
|
"src/desktop-host-delivery.ts"() {
|
|
50883
50721
|
"use strict";
|
|
50884
50722
|
import_node_child_process13 = require("node:child_process");
|
|
50885
|
-
|
|
50886
|
-
|
|
50723
|
+
import_node_fs37 = __toESM(require("node:fs"), 1);
|
|
50724
|
+
import_node_path39 = __toESM(require("node:path"), 1);
|
|
50887
50725
|
init_src();
|
|
50888
50726
|
init_home_paths();
|
|
50889
50727
|
MAC_HOST_APP = "/Applications/Peach.app";
|
|
@@ -52431,8 +52269,8 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
|
|
|
52431
52269
|
};
|
|
52432
52270
|
}
|
|
52433
52271
|
const lock = parseLinuxBrowserLibsLock(linux_browser_libs_lock_default);
|
|
52434
|
-
const dir = (0,
|
|
52435
|
-
if (!(0,
|
|
52272
|
+
const dir = (0, import_node_path40.join)(rnxHomeDir(), "linux-libs", `${lock.id}-${arch}`);
|
|
52273
|
+
if (!(0, import_node_fs38.existsSync)((0, import_node_path40.join)(dir, LINUX_BROWSER_LIBS_MARKER))) {
|
|
52436
52274
|
const url = `${DEFAULT_CLI_RELEASE_ORIGIN}/${linuxBrowserLibsKey(lock.id, arch)}`;
|
|
52437
52275
|
process.stderr.write(
|
|
52438
52276
|
`peach: this system lacks ${missing.length} shared libraries ${browser} links; downloading them\u2026
|
|
@@ -52460,7 +52298,7 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
|
|
|
52460
52298
|
};
|
|
52461
52299
|
}
|
|
52462
52300
|
}
|
|
52463
|
-
const libraryPath = [(0,
|
|
52301
|
+
const libraryPath = [(0, import_node_path40.join)(dir, "lib"), (0, import_node_path40.join)(dir, "lib", "nss")].join(":");
|
|
52464
52302
|
const stillMissing = missingLibraries(executablePath, libraryPath);
|
|
52465
52303
|
if (stillMissing.length) {
|
|
52466
52304
|
return {
|
|
@@ -52470,13 +52308,13 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
|
|
|
52470
52308
|
}
|
|
52471
52309
|
return { ok: true, libraryPath };
|
|
52472
52310
|
}
|
|
52473
|
-
var import_node_child_process14,
|
|
52311
|
+
var import_node_child_process14, import_node_fs38, import_node_path40, LINUX_BROWSER_LIBS_ARCHES, LINUX_BROWSER_LIBS_MARKER;
|
|
52474
52312
|
var init_linux_browser_libs = __esm({
|
|
52475
52313
|
"cli/drivers/linux-browser-libs.ts"() {
|
|
52476
52314
|
"use strict";
|
|
52477
52315
|
import_node_child_process14 = require("node:child_process");
|
|
52478
|
-
|
|
52479
|
-
|
|
52316
|
+
import_node_fs38 = require("node:fs");
|
|
52317
|
+
import_node_path40 = require("node:path");
|
|
52480
52318
|
init_src();
|
|
52481
52319
|
init_home_paths();
|
|
52482
52320
|
init_is_record();
|
|
@@ -52495,18 +52333,18 @@ function resolvePlaywright() {
|
|
|
52495
52333
|
roots.push(`${playwrightCoreDir(PINNED_PLAYWRIGHT_CORE.version)}/`);
|
|
52496
52334
|
for (const root of roots) {
|
|
52497
52335
|
try {
|
|
52498
|
-
const requireFromRoot = (0,
|
|
52336
|
+
const requireFromRoot = (0, import_node_module4.createRequire)(root);
|
|
52499
52337
|
for (const spec of ["playwright", "playwright-chromium", "playwright-core"]) {
|
|
52500
52338
|
try {
|
|
52501
52339
|
const modulePath = requireFromRoot.resolve(spec);
|
|
52502
52340
|
const packageJsonPath = requireFromRoot.resolve(`${spec}/package.json`);
|
|
52503
|
-
const parsed = JSON.parse((0,
|
|
52341
|
+
const parsed = JSON.parse((0, import_node_fs39.readFileSync)(packageJsonPath, "utf8"));
|
|
52504
52342
|
if (!isRecord(parsed) || typeof parsed.version !== "string") continue;
|
|
52505
|
-
const corePackagePath = (0,
|
|
52343
|
+
const corePackagePath = (0, import_node_module4.createRequire)(modulePath).resolve(
|
|
52506
52344
|
"playwright-core/package.json"
|
|
52507
52345
|
);
|
|
52508
|
-
const cliPath = (0,
|
|
52509
|
-
if (!(0,
|
|
52346
|
+
const cliPath = (0, import_node_path41.join)((0, import_node_path41.dirname)(corePackagePath), "cli.js");
|
|
52347
|
+
if (!(0, import_node_fs39.existsSync)(cliPath)) continue;
|
|
52510
52348
|
return {
|
|
52511
52349
|
spec,
|
|
52512
52350
|
modulePath,
|
|
@@ -52534,7 +52372,7 @@ async function provisionPlaywright() {
|
|
|
52534
52372
|
await installVerifiedTarball({
|
|
52535
52373
|
url: `https://registry.npmjs.org/playwright-core/-/playwright-core-${version}.tgz`,
|
|
52536
52374
|
digest: { algorithm, encoding: "base64", value: digest },
|
|
52537
|
-
destDir: (0,
|
|
52375
|
+
destDir: (0, import_node_path41.join)(playwrightCoreDir(version), "node_modules", "playwright-core"),
|
|
52538
52376
|
installedMarker: "package.json",
|
|
52539
52377
|
// npm tarballs hold the package under a leading `package/`
|
|
52540
52378
|
stripComponents: 1,
|
|
@@ -52577,7 +52415,7 @@ function probeBrowser(resolved, env) {
|
|
|
52577
52415
|
return {
|
|
52578
52416
|
ok: true,
|
|
52579
52417
|
executablePath: parsed.executablePath,
|
|
52580
|
-
exists: parsed.exists && (0,
|
|
52418
|
+
exists: parsed.exists && (0, import_node_fs39.existsSync)(parsed.executablePath)
|
|
52581
52419
|
};
|
|
52582
52420
|
} catch (error) {
|
|
52583
52421
|
return {
|
|
@@ -52650,7 +52488,7 @@ async function launchProvisionedPlaywright() {
|
|
|
52650
52488
|
const env = { ...process.env };
|
|
52651
52489
|
const browser = await ensurePlaywrightBrowser(resolved, softwareChromeAllowed(), env);
|
|
52652
52490
|
if (!browser.ok) throw new Error(browser.message);
|
|
52653
|
-
const playwright = (0,
|
|
52491
|
+
const playwright = (0, import_node_module4.createRequire)(resolved.modulePath)(
|
|
52654
52492
|
resolved.modulePath
|
|
52655
52493
|
);
|
|
52656
52494
|
const browserEnv = browser.libraryPath ? {
|
|
@@ -52662,14 +52500,14 @@ async function launchProvisionedPlaywright() {
|
|
|
52662
52500
|
{ headless: true }
|
|
52663
52501
|
);
|
|
52664
52502
|
}
|
|
52665
|
-
var import_node_child_process15,
|
|
52503
|
+
var import_node_child_process15, import_node_fs39, import_node_module4, import_node_path41;
|
|
52666
52504
|
var init_playwright_provisioning = __esm({
|
|
52667
52505
|
"cli/drivers/playwright-provisioning.ts"() {
|
|
52668
52506
|
"use strict";
|
|
52669
52507
|
import_node_child_process15 = require("node:child_process");
|
|
52670
|
-
|
|
52671
|
-
|
|
52672
|
-
|
|
52508
|
+
import_node_fs39 = require("node:fs");
|
|
52509
|
+
import_node_module4 = require("node:module");
|
|
52510
|
+
import_node_path41 = require("node:path");
|
|
52673
52511
|
init_src();
|
|
52674
52512
|
init_reap_browser();
|
|
52675
52513
|
init_home_paths();
|
|
@@ -53148,12 +52986,12 @@ var init_runtime_diagnostics = __esm({
|
|
|
53148
52986
|
// cli/commands/skills.ts
|
|
53149
52987
|
function getSkillsDir() {
|
|
53150
52988
|
if (typeof __PEACH_BUNDLED_SKILLS__ !== "undefined") {
|
|
53151
|
-
const dir =
|
|
52989
|
+
const dir = path34.join(rnxHomeDir(), "skills", getCliVersion());
|
|
53152
52990
|
for (const [file, body] of Object.entries(__PEACH_BUNDLED_SKILLS__)) {
|
|
53153
|
-
const target =
|
|
53154
|
-
if (
|
|
53155
|
-
|
|
53156
|
-
|
|
52991
|
+
const target = path34.join(dir, file);
|
|
52992
|
+
if (fs29.existsSync(target)) continue;
|
|
52993
|
+
fs29.mkdirSync(path34.dirname(target), { recursive: true });
|
|
52994
|
+
fs29.writeFileSync(target, body);
|
|
53157
52995
|
}
|
|
53158
52996
|
return dir;
|
|
53159
52997
|
}
|
|
@@ -53161,10 +52999,10 @@ function getSkillsDir() {
|
|
|
53161
52999
|
const pkgPath = (0, import_url3.fileURLToPath)(
|
|
53162
53000
|
import_meta3.resolve(`${rnxPublicBrand.packageName}/package.json`)
|
|
53163
53001
|
);
|
|
53164
|
-
return primaryCheckoutPath(
|
|
53002
|
+
return primaryCheckoutPath(path34.join(path34.dirname(pkgPath), "skills"));
|
|
53165
53003
|
} catch {
|
|
53166
|
-
const __dirname =
|
|
53167
|
-
return primaryCheckoutPath(
|
|
53004
|
+
const __dirname = path34.dirname((0, import_url3.fileURLToPath)(__sootsim_import_meta_url));
|
|
53005
|
+
return primaryCheckoutPath(path34.resolve(__dirname, "../../skills"));
|
|
53168
53006
|
}
|
|
53169
53007
|
}
|
|
53170
53008
|
function primaryCheckoutPath(dir) {
|
|
@@ -53187,39 +53025,39 @@ function primaryCheckoutPath(dir) {
|
|
|
53187
53025
|
} catch {
|
|
53188
53026
|
return dir;
|
|
53189
53027
|
}
|
|
53190
|
-
if (
|
|
53191
|
-
const primary =
|
|
53192
|
-
return
|
|
53028
|
+
if (path34.basename(common) !== ".git") return dir;
|
|
53029
|
+
const primary = path34.join(path34.dirname(common), path34.relative(top, dir));
|
|
53030
|
+
return fs29.existsSync(primary) ? primary : dir;
|
|
53193
53031
|
}
|
|
53194
53032
|
function skillsDir() {
|
|
53195
53033
|
skillsDirPath ??= getSkillsDir();
|
|
53196
53034
|
return skillsDirPath;
|
|
53197
53035
|
}
|
|
53198
53036
|
function targetFromHome(envName, fallbackDir) {
|
|
53199
|
-
const home = process.env[envName] ||
|
|
53200
|
-
return
|
|
53037
|
+
const home = process.env[envName] || path34.join(os9.homedir(), fallbackDir);
|
|
53038
|
+
return path34.join(home, "skills");
|
|
53201
53039
|
}
|
|
53202
53040
|
function codexTargets() {
|
|
53203
53041
|
const homes = /* @__PURE__ */ new Map();
|
|
53204
53042
|
const userHome = process.env.HOME || os9.homedir();
|
|
53205
|
-
const primaryCodexHome = process.env.CODEX_HOME ||
|
|
53206
|
-
homes.set(
|
|
53043
|
+
const primaryCodexHome = process.env.CODEX_HOME || path34.join(userHome, ".codex");
|
|
53044
|
+
homes.set(path34.resolve(primaryCodexHome), "codex");
|
|
53207
53045
|
const tmCodexHomes = process.env.TM_CODEX_HOMES;
|
|
53208
53046
|
if (tmCodexHomes) {
|
|
53209
|
-
for (const h of tmCodexHomes.split(
|
|
53047
|
+
for (const h of tmCodexHomes.split(path34.delimiter)) {
|
|
53210
53048
|
if (h.trim()) {
|
|
53211
|
-
const resolved =
|
|
53049
|
+
const resolved = path34.resolve(h.trim());
|
|
53212
53050
|
if (!homes.has(resolved)) {
|
|
53213
|
-
homes.set(resolved,
|
|
53051
|
+
homes.set(resolved, path34.basename(resolved).replace(/^\./, ""));
|
|
53214
53052
|
}
|
|
53215
53053
|
}
|
|
53216
53054
|
}
|
|
53217
53055
|
}
|
|
53218
|
-
const tmHome = process.env.TM_HOME ||
|
|
53219
|
-
const enginePath =
|
|
53220
|
-
if (
|
|
53056
|
+
const tmHome = process.env.TM_HOME || path34.join(userHome, ".team-machine");
|
|
53057
|
+
const enginePath = path34.join(tmHome, "engine.yaml");
|
|
53058
|
+
if (fs29.existsSync(enginePath)) {
|
|
53221
53059
|
try {
|
|
53222
|
-
const content =
|
|
53060
|
+
const content = fs29.readFileSync(enginePath, "utf8");
|
|
53223
53061
|
let inCodex = false;
|
|
53224
53062
|
let inAccounts = false;
|
|
53225
53063
|
let currentAccount = "";
|
|
@@ -53249,9 +53087,9 @@ function codexTargets() {
|
|
|
53249
53087
|
if (match) {
|
|
53250
53088
|
let homeDir = match[1].trim();
|
|
53251
53089
|
if (homeDir.startsWith("~")) {
|
|
53252
|
-
homeDir =
|
|
53090
|
+
homeDir = path34.join(userHome, homeDir.slice(1));
|
|
53253
53091
|
}
|
|
53254
|
-
const resolved =
|
|
53092
|
+
const resolved = path34.resolve(homeDir);
|
|
53255
53093
|
if (!homes.has(resolved)) {
|
|
53256
53094
|
homes.set(resolved, `codex-${currentAccount}`);
|
|
53257
53095
|
}
|
|
@@ -53262,13 +53100,13 @@ function codexTargets() {
|
|
|
53262
53100
|
}
|
|
53263
53101
|
}
|
|
53264
53102
|
try {
|
|
53265
|
-
for (const entry of
|
|
53103
|
+
for (const entry of fs29.readdirSync(userHome)) {
|
|
53266
53104
|
if (entry.startsWith(".codex-")) {
|
|
53267
|
-
const fullPath =
|
|
53105
|
+
const fullPath = path34.join(userHome, entry);
|
|
53268
53106
|
try {
|
|
53269
|
-
const stat2 =
|
|
53107
|
+
const stat2 = fs29.statSync(fullPath);
|
|
53270
53108
|
if (stat2.isDirectory()) {
|
|
53271
|
-
const resolved =
|
|
53109
|
+
const resolved = path34.resolve(fullPath);
|
|
53272
53110
|
if (!homes.has(resolved)) {
|
|
53273
53111
|
homes.set(resolved, entry.replace(/^\./, ""));
|
|
53274
53112
|
}
|
|
@@ -53283,7 +53121,7 @@ function codexTargets() {
|
|
|
53283
53121
|
for (const [homePath, label] of homes) {
|
|
53284
53122
|
targets.push({
|
|
53285
53123
|
label,
|
|
53286
|
-
dir:
|
|
53124
|
+
dir: path34.join(homePath, "skills")
|
|
53287
53125
|
});
|
|
53288
53126
|
}
|
|
53289
53127
|
return targets;
|
|
@@ -53299,7 +53137,7 @@ function hasInstalledPeachSkills() {
|
|
|
53299
53137
|
(file) => /^([^/]+)\/SKILL\.md$/.exec(file)?.[1] ?? []
|
|
53300
53138
|
) : listSkills().map((skill7) => skill7.name);
|
|
53301
53139
|
return defaultAgentTargets().some(
|
|
53302
|
-
({ dir }) => names.some((name2) =>
|
|
53140
|
+
({ dir }) => names.some((name2) => fs29.existsSync(path34.join(dir, name2, "SKILL.md")))
|
|
53303
53141
|
);
|
|
53304
53142
|
}
|
|
53305
53143
|
function parseSkillFrontmatter(content) {
|
|
@@ -53342,26 +53180,26 @@ function readFrontmatterField(frontmatter, field) {
|
|
|
53342
53180
|
return null;
|
|
53343
53181
|
}
|
|
53344
53182
|
function listSkills() {
|
|
53345
|
-
if (!
|
|
53183
|
+
if (!fs29.existsSync(skillsDir())) return [];
|
|
53346
53184
|
const skills = [];
|
|
53347
|
-
for (const entry of
|
|
53348
|
-
const skillMd =
|
|
53349
|
-
if (!
|
|
53350
|
-
const meta = parseSkillFrontmatter(
|
|
53185
|
+
for (const entry of fs29.readdirSync(skillsDir())) {
|
|
53186
|
+
const skillMd = path34.join(skillsDir(), entry, "SKILL.md");
|
|
53187
|
+
if (!fs29.existsSync(skillMd)) continue;
|
|
53188
|
+
const meta = parseSkillFrontmatter(fs29.readFileSync(skillMd, "utf8"));
|
|
53351
53189
|
if (meta) {
|
|
53352
53190
|
skills.push({ name: entry, description: meta.description });
|
|
53353
53191
|
}
|
|
53354
53192
|
}
|
|
53355
53193
|
return skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
53356
53194
|
}
|
|
53357
|
-
var import_child_process7,
|
|
53195
|
+
var import_child_process7, fs29, os9, path34, import_url3, import_meta3, skillsDirPath;
|
|
53358
53196
|
var init_skills = __esm({
|
|
53359
53197
|
"cli/commands/skills.ts"() {
|
|
53360
53198
|
"use strict";
|
|
53361
53199
|
import_child_process7 = require("child_process");
|
|
53362
|
-
|
|
53200
|
+
fs29 = __toESM(require("fs"), 1);
|
|
53363
53201
|
os9 = __toESM(require("os"), 1);
|
|
53364
|
-
|
|
53202
|
+
path34 = __toESM(require("path"), 1);
|
|
53365
53203
|
import_url3 = require("url");
|
|
53366
53204
|
init_cli_version();
|
|
53367
53205
|
init_home_paths();
|
|
@@ -53822,11 +53660,11 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
|
|
|
53822
53660
|
);
|
|
53823
53661
|
}
|
|
53824
53662
|
const { executable, prefixArgs } = rnxSelfInvocation();
|
|
53825
|
-
const bridgeLogPath =
|
|
53663
|
+
const bridgeLogPath = import_node_path42.default.join(
|
|
53826
53664
|
import_node_os11.default.tmpdir(),
|
|
53827
53665
|
`peach-bridge-${Date.now()}-${process.pid}.log`
|
|
53828
53666
|
);
|
|
53829
|
-
const bridgeLogFd =
|
|
53667
|
+
const bridgeLogFd = import_node_fs40.default.openSync(bridgeLogPath, "a");
|
|
53830
53668
|
let child;
|
|
53831
53669
|
try {
|
|
53832
53670
|
child = (0, import_node_child_process16.spawn)(
|
|
@@ -53840,7 +53678,7 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
|
|
|
53840
53678
|
}
|
|
53841
53679
|
);
|
|
53842
53680
|
} finally {
|
|
53843
|
-
|
|
53681
|
+
import_node_fs40.default.closeSync(bridgeLogFd);
|
|
53844
53682
|
}
|
|
53845
53683
|
if (resources) {
|
|
53846
53684
|
resources.bridge = child;
|
|
@@ -53876,7 +53714,7 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
|
|
|
53876
53714
|
await sleep(150);
|
|
53877
53715
|
}
|
|
53878
53716
|
const reason = childExit ? `peach bridge exited before becoming ready (exit ${childExit})` : `peach bridge did not start within ${Math.round(OPEN_BRIDGE_SPAWN_TIMEOUT_MS / 1e3)}s`;
|
|
53879
|
-
const bridgeLog =
|
|
53717
|
+
const bridgeLog = import_node_fs40.default.readFileSync(bridgeLogPath, "utf8").trim().slice(-2e3);
|
|
53880
53718
|
throw new Error(
|
|
53881
53719
|
`${reason}${bridgeLog ? `
|
|
53882
53720
|
${bridgeLog}` : ""}
|
|
@@ -53899,7 +53737,7 @@ function assertExplicitBridgeLock(preferredPort, explicitPort, lock) {
|
|
|
53899
53737
|
async function ensureRuntimeForOpen() {
|
|
53900
53738
|
if (resolveDevCheckoutRuntimeRoot()) return;
|
|
53901
53739
|
const active = readActiveRuntime();
|
|
53902
|
-
if (active &&
|
|
53740
|
+
if (active && import_node_fs40.default.existsSync(runtimeDir(active))) return;
|
|
53903
53741
|
console.error(" installing peach engine runtime...");
|
|
53904
53742
|
const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
|
|
53905
53743
|
await runRuntime2(["install"], {});
|
|
@@ -54047,10 +53885,10 @@ async function buildResolvedBundleOpenUrl(target, baseUrl, opts = {}) {
|
|
|
54047
53885
|
}
|
|
54048
53886
|
function normalizeReplacementPath(filePath) {
|
|
54049
53887
|
if (filePath.startsWith("~/")) {
|
|
54050
|
-
return
|
|
53888
|
+
return import_node_path42.default.join(import_node_os11.default.homedir(), filePath.slice(2));
|
|
54051
53889
|
}
|
|
54052
|
-
if (
|
|
54053
|
-
return
|
|
53890
|
+
if (import_node_path42.default.isAbsolute(filePath)) return filePath;
|
|
53891
|
+
return import_node_path42.default.resolve(process.cwd(), filePath);
|
|
54054
53892
|
}
|
|
54055
53893
|
function parseOpenRuntimeConfig(args) {
|
|
54056
53894
|
const modules = {};
|
|
@@ -54069,7 +53907,7 @@ function parseOpenRuntimeConfig(args) {
|
|
|
54069
53907
|
}
|
|
54070
53908
|
const moduleName = raw2.slice(0, eqIndex).trim();
|
|
54071
53909
|
const filePath = normalizeReplacementPath(raw2.slice(eqIndex + 1).trim());
|
|
54072
|
-
if (!
|
|
53910
|
+
if (!import_node_fs40.default.existsSync(filePath)) {
|
|
54073
53911
|
console.error(` peach open: replacement file not found: ${filePath}`);
|
|
54074
53912
|
rnxExit(1);
|
|
54075
53913
|
}
|
|
@@ -54105,7 +53943,7 @@ async function resolveAppProjectForBundleUrl(bundleUrl, projectRoot) {
|
|
|
54105
53943
|
return advertisedRoot ? resolveAppProject(advertisedRoot) : null;
|
|
54106
53944
|
}
|
|
54107
53945
|
async function ensureConfiguredRuntime(version) {
|
|
54108
|
-
if (
|
|
53946
|
+
if (import_node_fs40.default.existsSync(import_node_path42.default.join(runtimeDir(version), "index.html"))) return;
|
|
54109
53947
|
console.error(` installing configured engine runtime ${version}...`);
|
|
54110
53948
|
const result = await rnxRuntime.install({
|
|
54111
53949
|
version,
|
|
@@ -54223,22 +54061,6 @@ async function stampAppSplash(urlStr, project) {
|
|
|
54223
54061
|
return urlStr;
|
|
54224
54062
|
}
|
|
54225
54063
|
}
|
|
54226
|
-
function stampNativeFirebaseConfig(urlStr, project) {
|
|
54227
|
-
const url = new URL(urlStr);
|
|
54228
|
-
if (!url.searchParams.get("bundle") || !project) return urlStr;
|
|
54229
|
-
try {
|
|
54230
|
-
url.searchParams.set(
|
|
54231
|
-
"nativeFirebase",
|
|
54232
|
-
JSON.stringify(readNativeFirebaseConfig(project.appDir))
|
|
54233
|
-
);
|
|
54234
|
-
} catch (error) {
|
|
54235
|
-
url.searchParams.set(
|
|
54236
|
-
"nativeFirebase",
|
|
54237
|
-
JSON.stringify({ error: error instanceof Error ? error.message : String(error) })
|
|
54238
|
-
);
|
|
54239
|
-
}
|
|
54240
|
-
return url.toString();
|
|
54241
|
-
}
|
|
54242
54064
|
function stampAppCatalog(urlStr, project) {
|
|
54243
54065
|
try {
|
|
54244
54066
|
const url = new URL(urlStr);
|
|
@@ -54274,14 +54096,12 @@ async function buildShellUrl(target, baseUrl = resolveDefaultShellBaseUrl(), opt
|
|
|
54274
54096
|
const resolved = await resolveShellUrl(target, baseUrl, opts);
|
|
54275
54097
|
const project = opts.project ?? await resolveAppProjectForBundleUrl(bundleUrlOf(resolved));
|
|
54276
54098
|
const expoRoot = project?.appDir ?? null;
|
|
54277
|
-
const stamped =
|
|
54278
|
-
|
|
54279
|
-
await stampAppSplash(await stampAppFonts(resolved, project), project),
|
|
54280
|
-
project
|
|
54281
|
-
),
|
|
54099
|
+
const stamped = stampAppCatalog(
|
|
54100
|
+
await stampAppSplash(await stampAppFonts(resolved, project), project),
|
|
54282
54101
|
project
|
|
54283
54102
|
);
|
|
54284
54103
|
const expoStamped = new URL(stamped);
|
|
54104
|
+
expoStamped.searchParams.delete("nativeFirebase");
|
|
54285
54105
|
if (opts.bundleOriginOverride)
|
|
54286
54106
|
expoStamped.searchParams.set("bundleOriginOverride", opts.bundleOriginOverride);
|
|
54287
54107
|
if (opts.hostDriver) expoStamped.searchParams.set("peachHostDriver", opts.hostDriver);
|
|
@@ -54447,7 +54267,7 @@ function playwrightHostPidForSim(sim) {
|
|
|
54447
54267
|
function signalDriverLaunchConnected(result) {
|
|
54448
54268
|
if (!result.connectAckFile) return false;
|
|
54449
54269
|
try {
|
|
54450
|
-
|
|
54270
|
+
import_node_fs40.default.writeFileSync(
|
|
54451
54271
|
result.connectAckFile,
|
|
54452
54272
|
`${JSON.stringify({ connectedAt: Date.now(), pid: result.pid ?? null })}
|
|
54453
54273
|
`,
|
|
@@ -54461,7 +54281,7 @@ function signalDriverLaunchConnected(result) {
|
|
|
54461
54281
|
function readUnservedUrl(result) {
|
|
54462
54282
|
if (!result.diagnosticLogPath) return null;
|
|
54463
54283
|
try {
|
|
54464
|
-
const detail =
|
|
54284
|
+
const detail = import_node_fs40.default.readFileSync(result.diagnosticLogPath, "utf8");
|
|
54465
54285
|
const match = detail.match(/\[unserved\] nothing serves (\S+)/);
|
|
54466
54286
|
return match ? match[1] : null;
|
|
54467
54287
|
} catch {
|
|
@@ -54471,19 +54291,19 @@ function readUnservedUrl(result) {
|
|
|
54471
54291
|
function printDriverDiagnosticLogTail(result) {
|
|
54472
54292
|
if (!result.diagnosticLogPath) return;
|
|
54473
54293
|
try {
|
|
54474
|
-
const detail =
|
|
54294
|
+
const detail = import_node_fs40.default.readFileSync(result.diagnosticLogPath, "utf8").trim();
|
|
54475
54295
|
if (!detail) {
|
|
54476
|
-
console.error(` ${
|
|
54296
|
+
console.error(` ${import_node_path42.default.basename(result.diagnosticLogPath)} was empty`);
|
|
54477
54297
|
return;
|
|
54478
54298
|
}
|
|
54479
54299
|
const shown = detail.length > 4e3 ? `\u2026
|
|
54480
54300
|
${detail.slice(-4e3)}` : detail;
|
|
54481
|
-
console.error(` ${
|
|
54301
|
+
console.error(` ${import_node_path42.default.basename(result.diagnosticLogPath)}:`);
|
|
54482
54302
|
console.error(shown);
|
|
54483
54303
|
} catch (err) {
|
|
54484
54304
|
const message = err instanceof Error ? err.message : String(err);
|
|
54485
54305
|
console.error(
|
|
54486
|
-
` failed to read ${
|
|
54306
|
+
` failed to read ${import_node_path42.default.basename(result.diagnosticLogPath)}: ${message}`
|
|
54487
54307
|
);
|
|
54488
54308
|
}
|
|
54489
54309
|
}
|
|
@@ -55521,14 +55341,14 @@ async function runCloseCommand(args, opts = {}) {
|
|
|
55521
55341
|
bridge.close();
|
|
55522
55342
|
}
|
|
55523
55343
|
}
|
|
55524
|
-
var import_node_child_process16,
|
|
55344
|
+
var import_node_child_process16, import_node_fs40, import_node_os11, import_node_path42, import_app_catalog_wire, import_devices2, import_ws4, DEFAULT_DRIVER_CONNECT_TIMEOUT_MS, DRIVER_CONNECT_INTERVAL_MS, DRIVER_CONNECT_HOST_GRACE_MS, OPEN_BRIDGE_SPAWN_TIMEOUT_MS, OPEN_BRIDGE_RUNTIME_TIMEOUT_MS, SHELL_APPS, DEV_BUNDLE_RESOLVE_ATTEMPTS, DEV_BUNDLE_RESOLVE_INTERVAL_MS;
|
|
55525
55345
|
var init_control = __esm({
|
|
55526
55346
|
"cli/commands/control.ts"() {
|
|
55527
55347
|
"use strict";
|
|
55528
55348
|
import_node_child_process16 = require("node:child_process");
|
|
55529
|
-
|
|
55349
|
+
import_node_fs40 = __toESM(require("node:fs"), 1);
|
|
55530
55350
|
import_node_os11 = __toESM(require("node:os"), 1);
|
|
55531
|
-
|
|
55351
|
+
import_node_path42 = __toESM(require("node:path"), 1);
|
|
55532
55352
|
import_app_catalog_wire = require("peach-engine/engine/app-catalog-wire");
|
|
55533
55353
|
import_devices2 = require("peach-engine/settings/devices");
|
|
55534
55354
|
import_ws4 = require("ws");
|
|
@@ -55542,7 +55362,6 @@ var init_control = __esm({
|
|
|
55542
55362
|
init_flow_timeout_scale();
|
|
55543
55363
|
init_home_paths();
|
|
55544
55364
|
init_native_dev_bundle_url();
|
|
55545
|
-
init_native_firebase_config();
|
|
55546
55365
|
init_profiles();
|
|
55547
55366
|
init_public_brand();
|
|
55548
55367
|
init_runtime_assets();
|
|
@@ -56989,16 +56808,16 @@ function readRecentShellAppId(state) {
|
|
|
56989
56808
|
}
|
|
56990
56809
|
function resolveProjectRelativeFlowBase(flowDir) {
|
|
56991
56810
|
if (!flowDir) return process.cwd();
|
|
56992
|
-
return
|
|
56811
|
+
return path36.basename(flowDir) === ".maestro" ? path36.dirname(flowDir) : flowDir;
|
|
56993
56812
|
}
|
|
56994
56813
|
function resolveFlowScreenshotPathWithMode(screenshotDir, name2, opts) {
|
|
56995
56814
|
const normalizedName = name2.endsWith(".png") ? name2 : `${name2}.png`;
|
|
56996
|
-
if (
|
|
56815
|
+
if (path36.isAbsolute(normalizedName)) return normalizedName;
|
|
56997
56816
|
if (opts.mode === "flow" && /[\\/]/.test(normalizedName)) {
|
|
56998
56817
|
const baseDir = normalizedName.startsWith("./") || normalizedName.startsWith("../") ? opts.flowDir ?? process.cwd() : resolveProjectRelativeFlowBase(opts.flowDir);
|
|
56999
|
-
return
|
|
56818
|
+
return path36.resolve(baseDir, normalizedName);
|
|
57000
56819
|
}
|
|
57001
|
-
return
|
|
56820
|
+
return path36.join(screenshotDir, normalizedName);
|
|
57002
56821
|
}
|
|
57003
56822
|
function normalizeFlowScreenshotSpec(step) {
|
|
57004
56823
|
if (typeof step === "string") {
|
|
@@ -57052,12 +56871,12 @@ function normalizeBareStringStep(verb) {
|
|
|
57052
56871
|
function parseFlowSteps(content) {
|
|
57053
56872
|
return parseFlowFile(content).steps;
|
|
57054
56873
|
}
|
|
57055
|
-
var
|
|
56874
|
+
var fs32, path36, import_devices4, import_proof_frame, DEFAULT_TIMEOUT, ASSERTION_LOOKUP_MS, FLOW_TIMEOUT_SCALE, scaledTimeout, MAESTRO_SELECTOR_KEYS, UNSUPPORTED_SELECTOR_KEYS, ACCESSIBILITY_SELECTOR_KEYS, ACCESSIBILITY_TRAIT_FILTERS, MAESTRO_PERMISSION_KINDS, MAESTRO_PERMISSION_STATUS, SootSimBridgeFlowRunner;
|
|
57056
56875
|
var init_bridge_flow_runner = __esm({
|
|
57057
56876
|
"cli/bridge-flow-runner.ts"() {
|
|
57058
56877
|
"use strict";
|
|
57059
|
-
|
|
57060
|
-
|
|
56878
|
+
fs32 = __toESM(require("fs"), 1);
|
|
56879
|
+
path36 = __toESM(require("path"), 1);
|
|
57061
56880
|
import_devices4 = require("peach-engine/settings/devices");
|
|
57062
56881
|
import_proof_frame = __toESM(require_proof_frame(), 1);
|
|
57063
56882
|
init_flow_timeout_scale();
|
|
@@ -57369,14 +57188,14 @@ var init_bridge_flow_runner = __esm({
|
|
|
57369
57188
|
if (chunks.length === 0) {
|
|
57370
57189
|
throw new Error("recording requested but no video buffer was produced");
|
|
57371
57190
|
}
|
|
57372
|
-
|
|
57191
|
+
fs32.mkdirSync(this.opts.recordingOutputDir, { recursive: true });
|
|
57373
57192
|
const videoMime = stopped.mime || this.opts.recordingFormat || "video/webm";
|
|
57374
57193
|
const extension = videoMime.includes("mp4") ? "mp4" : "webm";
|
|
57375
|
-
const outputPath =
|
|
57194
|
+
const outputPath = path36.join(
|
|
57376
57195
|
this.opts.recordingOutputDir,
|
|
57377
57196
|
`peach-${Date.now()}.${extension}`
|
|
57378
57197
|
);
|
|
57379
|
-
|
|
57198
|
+
fs32.writeFileSync(outputPath, Buffer.concat(chunks));
|
|
57380
57199
|
return outputPath;
|
|
57381
57200
|
}
|
|
57382
57201
|
async waitForRecordingTail(opts) {
|
|
@@ -57997,7 +57816,7 @@ var init_bridge_flow_runner = __esm({
|
|
|
57997
57816
|
flowDir: this.opts.flowDir
|
|
57998
57817
|
}
|
|
57999
57818
|
);
|
|
58000
|
-
|
|
57819
|
+
fs32.mkdirSync(path36.dirname(outputPath), { recursive: true });
|
|
58001
57820
|
const layers = spec.layers ?? this.opts.screenshotLayers;
|
|
58002
57821
|
const screenshotRequest = {
|
|
58003
57822
|
type: "screenshot",
|
|
@@ -58032,11 +57851,11 @@ var init_bridge_flow_runner = __esm({
|
|
|
58032
57851
|
throw new Error("could not read current device model for framed screenshot");
|
|
58033
57852
|
}
|
|
58034
57853
|
const framed = await composeFramedScreenshot(rawBuffer, model);
|
|
58035
|
-
|
|
57854
|
+
fs32.writeFileSync(outputPath, framed);
|
|
58036
57855
|
console.log(`[flow] screenshot: ${outputPath} (frame: ${model})`);
|
|
58037
57856
|
return outputPath;
|
|
58038
57857
|
}
|
|
58039
|
-
|
|
57858
|
+
fs32.writeFileSync(outputPath, rawBuffer);
|
|
58040
57859
|
console.log(`[flow] screenshot: ${outputPath}`);
|
|
58041
57860
|
return outputPath;
|
|
58042
57861
|
}
|
|
@@ -58058,10 +57877,10 @@ var init_bridge_flow_runner = __esm({
|
|
|
58058
57877
|
// + a11y tree + console errors/warnings + failed network requests +
|
|
58059
57878
|
// shell state, all under one directory so post-mortem is one grep away.
|
|
58060
57879
|
async captureFailureBundle(outputDir, context) {
|
|
58061
|
-
|
|
57880
|
+
fs32.mkdirSync(outputDir, { recursive: true });
|
|
58062
57881
|
const write = (name2, content) => {
|
|
58063
57882
|
try {
|
|
58064
|
-
|
|
57883
|
+
fs32.writeFileSync(path36.join(outputDir, name2), content);
|
|
58065
57884
|
} catch {
|
|
58066
57885
|
}
|
|
58067
57886
|
};
|
|
@@ -58656,8 +58475,8 @@ var init_bridge_flow_runner = __esm({
|
|
|
58656
58475
|
runScript(target) {
|
|
58657
58476
|
const spec = typeof target === "string" ? { file: target } : target;
|
|
58658
58477
|
if (!spec.file) throw new Error("runScript requires a file");
|
|
58659
|
-
const scriptPath =
|
|
58660
|
-
const source =
|
|
58478
|
+
const scriptPath = path36.resolve(this.opts.flowDir, spec.file);
|
|
58479
|
+
const source = fs32.readFileSync(scriptPath, "utf8");
|
|
58661
58480
|
this.js.evaluate(source, { env: spec.env });
|
|
58662
58481
|
console.log(`[flow] runScript: ${spec.file} done`);
|
|
58663
58482
|
}
|
|
@@ -59017,14 +58836,14 @@ var init_bridge_flow_runner = __esm({
|
|
|
59017
58836
|
for (const [k, v] of Object.entries(env)) this.js.putEnv(k, v);
|
|
59018
58837
|
}
|
|
59019
58838
|
if (file) {
|
|
59020
|
-
const flowPath =
|
|
59021
|
-
const flowContent =
|
|
58839
|
+
const flowPath = path36.resolve(this.opts.flowDir, file);
|
|
58840
|
+
const flowContent = fs32.readFileSync(flowPath, "utf8");
|
|
59022
58841
|
const { frontmatter } = parseFlowFile(flowContent);
|
|
59023
58842
|
if (frontmatter.env && typeof frontmatter.env === "object") {
|
|
59024
58843
|
this.js.defineVariables(frontmatter.env);
|
|
59025
58844
|
}
|
|
59026
58845
|
const previousDir = this.opts.flowDir;
|
|
59027
|
-
this.opts.flowDir =
|
|
58846
|
+
this.opts.flowDir = path36.dirname(flowPath);
|
|
59028
58847
|
try {
|
|
59029
58848
|
await this.runFlow(parseFlowSteps(flowContent));
|
|
59030
58849
|
} finally {
|
|
@@ -59195,8 +59014,8 @@ __export(registry_exports, {
|
|
|
59195
59014
|
skillRegistry: () => skillRegistry
|
|
59196
59015
|
});
|
|
59197
59016
|
module.exports = __toCommonJS(registry_exports);
|
|
59198
|
-
var
|
|
59199
|
-
var
|
|
59017
|
+
var fs33 = __toESM(require("fs"), 1);
|
|
59018
|
+
var path37 = __toESM(require("path"), 1);
|
|
59200
59019
|
|
|
59201
59020
|
// src/skills/builtin/a11y-review.ts
|
|
59202
59021
|
init_reap_browser();
|
|
@@ -59215,8 +59034,8 @@ var skill = {
|
|
|
59215
59034
|
},
|
|
59216
59035
|
async execute(params, context) {
|
|
59217
59036
|
const { chromium } = await import("playwright");
|
|
59218
|
-
const
|
|
59219
|
-
const
|
|
59037
|
+
const path38 = await import("path");
|
|
59038
|
+
const fs34 = await import("fs");
|
|
59220
59039
|
const browser = await launchReapedChrome((options) => chromium.launch(options), {
|
|
59221
59040
|
headless: true
|
|
59222
59041
|
});
|
|
@@ -59273,9 +59092,9 @@ var skill = {
|
|
|
59273
59092
|
warnings: issues.filter((i) => i.severity === "warning").length,
|
|
59274
59093
|
tree: typeof tree === "string" ? tree : JSON.stringify(tree)
|
|
59275
59094
|
};
|
|
59276
|
-
const reportPath =
|
|
59277
|
-
|
|
59278
|
-
|
|
59095
|
+
const reportPath = path38.join(context.outputDir, "a11y-report.json");
|
|
59096
|
+
fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
|
|
59097
|
+
fs34.writeFileSync(reportPath, JSON.stringify(report, null, 2));
|
|
59279
59098
|
return {
|
|
59280
59099
|
success: issues.filter((i) => i.severity === "error").length === 0,
|
|
59281
59100
|
message: `${report.errors} errors, ${report.warnings} warnings across ${report.nodeCount} nodes`,
|
|
@@ -59308,14 +59127,14 @@ var skill2 = {
|
|
|
59308
59127
|
}
|
|
59309
59128
|
},
|
|
59310
59129
|
async execute(params, context) {
|
|
59311
|
-
const
|
|
59312
|
-
const
|
|
59130
|
+
const fs34 = await import("node:fs");
|
|
59131
|
+
const path38 = await import("node:path");
|
|
59313
59132
|
const { COMPAT_RESULT_CAVEAT: COMPAT_RESULT_CAVEAT2, formatPackageStatus: formatPackageStatus2, formatScanCounts: formatScanCounts2, scanDeps: scanDeps2 } = await Promise.resolve().then(() => (init_web(), web_exports));
|
|
59314
|
-
const packagePath =
|
|
59315
|
-
if (!
|
|
59133
|
+
const packagePath = path38.join(context.projectDir, "package.json");
|
|
59134
|
+
if (!fs34.existsSync(packagePath)) {
|
|
59316
59135
|
return { success: false, message: "No package.json found" };
|
|
59317
59136
|
}
|
|
59318
|
-
const parsed = JSON.parse(
|
|
59137
|
+
const parsed = JSON.parse(fs34.readFileSync(packagePath, "utf8"));
|
|
59319
59138
|
if (!parsed || typeof parsed !== "object") {
|
|
59320
59139
|
return { success: false, message: "package.json is not an object" };
|
|
59321
59140
|
}
|
|
@@ -59327,9 +59146,9 @@ var skill2 = {
|
|
|
59327
59146
|
}) : scanDeps2(parsed);
|
|
59328
59147
|
const packageResult = params.packageName ? scan.packages[0] : void 0;
|
|
59329
59148
|
const message = packageResult ? `${params.packageName}: ${formatPackageStatus2(packageResult)}. ${COMPAT_RESULT_CAVEAT2}` : `${formatScanCounts2(scan)}. ${COMPAT_RESULT_CAVEAT2}`;
|
|
59330
|
-
const reportPath =
|
|
59331
|
-
|
|
59332
|
-
|
|
59149
|
+
const reportPath = path38.join(context.outputDir, "compat-report.json");
|
|
59150
|
+
fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
|
|
59151
|
+
fs34.writeFileSync(reportPath, `${JSON.stringify(scan, null, 2)}
|
|
59333
59152
|
`);
|
|
59334
59153
|
return {
|
|
59335
59154
|
success: true,
|
|
@@ -59371,8 +59190,8 @@ var skill3 = {
|
|
|
59371
59190
|
record: { type: "boolean", description: "Record video of the flow" }
|
|
59372
59191
|
},
|
|
59373
59192
|
async execute(params, context) {
|
|
59374
|
-
const
|
|
59375
|
-
const
|
|
59193
|
+
const fs34 = await import("fs");
|
|
59194
|
+
const path38 = await import("path");
|
|
59376
59195
|
const yaml = await Promise.resolve().then(() => (init_browser(), browser_exports));
|
|
59377
59196
|
const { DEFAULT_SOOTSIM_BRIDGE_PORT: DEFAULT_SOOTSIM_BRIDGE_PORT3 } = await Promise.resolve().then(() => (init_bridge_constants(), bridge_constants_exports));
|
|
59378
59197
|
const { SootSimBridgeHost: SootSimBridgeHost2 } = await Promise.resolve().then(() => (init_bridge_host(), bridge_host_exports));
|
|
@@ -59382,7 +59201,7 @@ var skill3 = {
|
|
|
59382
59201
|
const host2 = new SootSimBridgeHost2({ port: DEFAULT_SOOTSIM_BRIDGE_PORT3 });
|
|
59383
59202
|
host2.start({ silent: true });
|
|
59384
59203
|
try {
|
|
59385
|
-
const flowContent =
|
|
59204
|
+
const flowContent = fs34.readFileSync(params.flowPath, "utf8");
|
|
59386
59205
|
const fmMatch = flowContent.match(/^---\n([\s\S]*?)\n---\n?/);
|
|
59387
59206
|
const stepsBody = fmMatch ? flowContent.slice(fmMatch[0].length) : flowContent;
|
|
59388
59207
|
const steps = yaml.parse(stepsBody);
|
|
@@ -59409,7 +59228,7 @@ var skill3 = {
|
|
|
59409
59228
|
});
|
|
59410
59229
|
const driver = new SootSimBridgeFlowRunner2(bridge, {
|
|
59411
59230
|
screenshotDir: context.outputDir,
|
|
59412
|
-
flowDir:
|
|
59231
|
+
flowDir: path38.dirname(path38.resolve(params.flowPath)),
|
|
59413
59232
|
simId,
|
|
59414
59233
|
recordingOutputDir: params.record ? context.outputDir : void 0
|
|
59415
59234
|
});
|
|
@@ -59431,7 +59250,7 @@ var skill3 = {
|
|
|
59431
59250
|
simId,
|
|
59432
59251
|
videoPath: videoPath || void 0
|
|
59433
59252
|
},
|
|
59434
|
-
artifacts: videoPath ? [{ type: "video", name:
|
|
59253
|
+
artifacts: videoPath ? [{ type: "video", name: path38.basename(videoPath), path: videoPath }] : void 0
|
|
59435
59254
|
};
|
|
59436
59255
|
} finally {
|
|
59437
59256
|
try {
|
|
@@ -59478,8 +59297,8 @@ var skill4 = {
|
|
|
59478
59297
|
},
|
|
59479
59298
|
async execute(params, context) {
|
|
59480
59299
|
const { chromium } = await import("playwright");
|
|
59481
|
-
const
|
|
59482
|
-
const
|
|
59300
|
+
const path38 = await import("path");
|
|
59301
|
+
const fs34 = await import("fs");
|
|
59483
59302
|
const browser = await launchReapedChrome((options) => chromium.launch(options), {
|
|
59484
59303
|
headless: true
|
|
59485
59304
|
});
|
|
@@ -59507,9 +59326,9 @@ var skill4 = {
|
|
|
59507
59326
|
...profile,
|
|
59508
59327
|
fps: syncCount > 0 ? (syncCount / (duration / 1e3)).toFixed(1) : "0"
|
|
59509
59328
|
};
|
|
59510
|
-
const reportPath =
|
|
59511
|
-
|
|
59512
|
-
|
|
59329
|
+
const reportPath = path38.join(context.outputDir, "perf-report.json");
|
|
59330
|
+
fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
|
|
59331
|
+
fs34.writeFileSync(reportPath, JSON.stringify(report, null, 2));
|
|
59513
59332
|
return {
|
|
59514
59333
|
success: true,
|
|
59515
59334
|
message: `${report.fps} fps, ${profile.avgSyncMs?.toFixed(1)}ms avg sync, ${nodeCount} nodes`,
|
|
@@ -59542,8 +59361,8 @@ var skill5 = {
|
|
|
59542
59361
|
},
|
|
59543
59362
|
async execute(params, context) {
|
|
59544
59363
|
const { chromium } = await import("playwright");
|
|
59545
|
-
const
|
|
59546
|
-
const
|
|
59364
|
+
const path38 = await import("path");
|
|
59365
|
+
const fs34 = await import("fs");
|
|
59547
59366
|
const browser = await launchReapedChrome((options) => chromium.launch(options), {
|
|
59548
59367
|
headless: true
|
|
59549
59368
|
});
|
|
@@ -59551,8 +59370,8 @@ var skill5 = {
|
|
|
59551
59370
|
try {
|
|
59552
59371
|
await page.goto(context.url, { waitUntil: "networkidle" });
|
|
59553
59372
|
await page.waitForTimeout(2e3);
|
|
59554
|
-
const outputPath =
|
|
59555
|
-
|
|
59373
|
+
const outputPath = path38.join(context.outputDir, `${params.name}.png`);
|
|
59374
|
+
fs34.mkdirSync(path38.dirname(outputPath), { recursive: true });
|
|
59556
59375
|
await page.screenshot({ path: outputPath });
|
|
59557
59376
|
return {
|
|
59558
59377
|
success: true,
|
|
@@ -59593,8 +59412,8 @@ var skill6 = {
|
|
|
59593
59412
|
},
|
|
59594
59413
|
async execute(params, context) {
|
|
59595
59414
|
const { chromium } = await import("playwright");
|
|
59596
|
-
const
|
|
59597
|
-
const
|
|
59415
|
+
const path38 = await import("path");
|
|
59416
|
+
const fs34 = await import("fs");
|
|
59598
59417
|
const browser = await launchReapedChrome((options) => chromium.launch(options), {
|
|
59599
59418
|
headless: true
|
|
59600
59419
|
});
|
|
@@ -59602,14 +59421,14 @@ var skill6 = {
|
|
|
59602
59421
|
try {
|
|
59603
59422
|
await page.goto(context.url, { waitUntil: "networkidle" });
|
|
59604
59423
|
await page.waitForTimeout(2e3);
|
|
59605
|
-
const currentPath =
|
|
59606
|
-
|
|
59424
|
+
const currentPath = path38.join(context.outputDir, `${params.name}-current.png`);
|
|
59425
|
+
fs34.mkdirSync(path38.dirname(currentPath), { recursive: true });
|
|
59607
59426
|
await page.screenshot({ path: currentPath });
|
|
59608
59427
|
try {
|
|
59609
59428
|
const { PNG } = await import("pngjs");
|
|
59610
59429
|
const pixelmatch = (await import("pixelmatch")).default;
|
|
59611
|
-
const baseline = PNG.sync.read(
|
|
59612
|
-
const current = PNG.sync.read(
|
|
59430
|
+
const baseline = PNG.sync.read(fs34.readFileSync(params.baseline));
|
|
59431
|
+
const current = PNG.sync.read(fs34.readFileSync(currentPath));
|
|
59613
59432
|
const { width, height } = baseline;
|
|
59614
59433
|
const diff = new PNG({ width, height });
|
|
59615
59434
|
const numDiffPixels = pixelmatch(
|
|
@@ -59620,8 +59439,8 @@ var skill6 = {
|
|
|
59620
59439
|
height,
|
|
59621
59440
|
{ threshold: params.threshold || 0.1 }
|
|
59622
59441
|
);
|
|
59623
|
-
const diffPath =
|
|
59624
|
-
|
|
59442
|
+
const diffPath = path38.join(context.outputDir, `${params.name}-diff.png`);
|
|
59443
|
+
fs34.writeFileSync(diffPath, PNG.sync.write(diff));
|
|
59625
59444
|
const totalPixels = width * height;
|
|
59626
59445
|
const diffPercent = (numDiffPixels / totalPixels * 100).toFixed(2);
|
|
59627
59446
|
return {
|
|
@@ -59685,10 +59504,10 @@ var skillRegistry = {
|
|
|
59685
59504
|
},
|
|
59686
59505
|
// load skills from a project manifest (rnx-skills.json)
|
|
59687
59506
|
async loadFromManifest(projectDir) {
|
|
59688
|
-
const manifestPath =
|
|
59689
|
-
if (!
|
|
59507
|
+
const manifestPath = path37.join(projectDir, "rnx-skills.json");
|
|
59508
|
+
if (!fs33.existsSync(manifestPath)) return;
|
|
59690
59509
|
try {
|
|
59691
|
-
const manifest = JSON.parse(
|
|
59510
|
+
const manifest = JSON.parse(fs33.readFileSync(manifestPath, "utf8"));
|
|
59692
59511
|
if (Array.isArray(manifest.skills)) {
|
|
59693
59512
|
for (const entry of manifest.skills) {
|
|
59694
59513
|
if (typeof entry === "string") {
|
|
@@ -59699,7 +59518,7 @@ var skillRegistry = {
|
|
|
59699
59518
|
}
|
|
59700
59519
|
} else if (entry.file) {
|
|
59701
59520
|
try {
|
|
59702
|
-
const mod = await import(
|
|
59521
|
+
const mod = await import(path37.resolve(projectDir, entry.file));
|
|
59703
59522
|
if (mod.skill) this.register(mod.skill);
|
|
59704
59523
|
} catch {
|
|
59705
59524
|
}
|
|
@@ -59712,10 +59531,10 @@ var skillRegistry = {
|
|
|
59712
59531
|
// auto-discover skills based on project dependencies
|
|
59713
59532
|
suggestSkills(projectDir) {
|
|
59714
59533
|
const suggestions = [];
|
|
59715
|
-
const pkgPath =
|
|
59716
|
-
if (!
|
|
59534
|
+
const pkgPath = path37.join(projectDir, "package.json");
|
|
59535
|
+
if (!fs33.existsSync(pkgPath)) return suggestions;
|
|
59717
59536
|
try {
|
|
59718
|
-
const pkg = JSON.parse(
|
|
59537
|
+
const pkg = JSON.parse(fs33.readFileSync(pkgPath, "utf8"));
|
|
59719
59538
|
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
59720
59539
|
if (deps["detox"] || deps["maestro"]) {
|
|
59721
59540
|
suggestions.push("maestro-test");
|