peachsim 0.1.669 → 0.1.670
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 +8 -5
- package/cli/commands/inspect/core.ts +7 -5
- package/cli/commands/inspect/wait-selector.ts +2 -11
- package/cli/commands/inspect.ts +6 -59
- package/cli/commands/kotlin.ts +6 -4
- package/cli/commands/skills.ts +28 -7
- package/cli/commands/upgrade.ts +18 -3
- package/cli/main.ts +21 -0
- package/cli/output-redaction.ts +182 -0
- package/cli/parse-args.ts +1 -0
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +29 -19
- 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 +260 -17
- 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 +2 -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 +259 -16
- 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 +115 -0
- package/dist-lib/native-firebase-metadata.mjs +86 -0
- 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 +2 -2
- package/dist-lib/sdk.mjs +2 -2
- package/dist-lib/skills.cjs +479 -203
- 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.cjs +1 -1
- package/dist-lib/vite-swift.cjs +21 -13
- package/dist-lib/vite.cjs +1 -1
- package/kotlin/AppSources/androidx/activity/ActivityFlags.kt +9 -0
- package/kotlin/AppSources/androidx/activity/BackEventCompat.kt +25 -4
- package/kotlin/AppSources/androidx/activity/ComponentActivity.kt +15 -4
- package/kotlin/AppSources/androidx/activity/EdgeToEdge.kt +12 -8
- package/kotlin/AppSources/androidx/activity/ExperimentalActivityApi.kt +6 -0
- package/kotlin/AppSources/androidx/activity/OnBackPressedCallback.kt +50 -9
- package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +67 -89
- package/kotlin/AppSources/androidx/activity/compose/BackHandler.kt +55 -24
- package/kotlin/AppSources/androidx/activity/compose/internal/BackHandlerCompat.kt +38 -0
- package/kotlin/AppSources/androidx/activity/compose/internal/BackHandlerDispatcherCompat.kt +27 -0
- package/kotlin/AppSources/dev/peach/app/PeachApp.kt +5 -5
- package/kotlin/ComposeSources/PeachComposeHost.kt +31 -7
- package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +1 -1
- package/kotlin/fixtures/kotlin-app-variants/Browse.kt +73 -0
- package/kotlin/fixtures/kotlin-app-variants/Focus.kt +62 -0
- package/kotlin/fixtures/kotlin-app-variants/Lists.kt +57 -0
- package/kotlin/fixtures/kotlin-app-variants/Nav.kt +47 -0
- package/kotlin/fixtures/kotlin-app-variants/Nested.kt +64 -0
- package/kotlin/fixtures/kotlin-app-variants/Pan.kt +38 -0
- package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +44 -0
- package/kotlin/fixtures/kotlin-app-variants/Press.kt +43 -0
- package/kotlin/fixtures/kotlin-app-variants/Transition.kt +69 -0
- package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +22 -0
- package/kotlin/toolchain.json +30 -2
- package/package.json +8 -1
- package/skills/contrast/SKILL.md +2 -1
- package/skills/peach-debug/SKILL.md +2 -2
- package/skills/peach-test/SKILL.md +3 -3
- package/src/expo-swift-host.ts +13 -4
- package/src/kotlin-app.ts +35 -16
- package/src/kotlin-host.ts +1 -0
- package/src/metro-plugin.ts +24 -0
- package/src/native-firebase-config.ts +202 -21
- package/src/native-firebase-metadata.ts +114 -0
- package/src/swift-host.ts +30 -15
- package/src/vite-plugin.ts +46 -2
- package/kotlin/AppSources/androidx/activity/Cancellable.kt +0 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -2743,7 +2743,8 @@ async function readOrInferModuleIdentity(bundle, mode, inferModuleIdentity) {
|
|
|
2743
2743
|
}
|
|
2744
2744
|
async function buildRnxCloudArtifact(bundle, options = {}) {
|
|
2745
2745
|
const mode = options.mode ?? "production";
|
|
2746
|
-
const
|
|
2746
|
+
const firebase = (0, import_native_firebase_metadata.detachNativeFirebaseFooter)(bundle);
|
|
2747
|
+
const nativeIdentity = (0, import_native_app_identity.detachNativeAppIdentityFooter)(firebase.source);
|
|
2747
2748
|
const identity = await readOrInferModuleIdentity(
|
|
2748
2749
|
nativeIdentity.source,
|
|
2749
2750
|
mode,
|
|
@@ -2771,7 +2772,7 @@ async function buildRnxCloudArtifact(bundle, options = {}) {
|
|
|
2771
2772
|
})
|
|
2772
2773
|
]);
|
|
2773
2774
|
const body = pieces.map((piece) => piece.code).join("\n");
|
|
2774
|
-
const code = body + (nativeIdentity.identity ? (0, import_native_app_identity.createNativeAppIdentityFooter)(nativeIdentity.identity) : "") + (0, import_metro_production_bundle.createRNXMetroModuleIdentityFooter)({
|
|
2775
|
+
const code = body + (nativeIdentity.identity ? (0, import_native_app_identity.createNativeAppIdentityFooter)(nativeIdentity.identity) : "") + (firebase.config ? (0, import_native_firebase_metadata.createNativeFirebaseFooter)(firebase.config) : "") + (0, import_metro_production_bundle.createRNXMetroModuleIdentityFooter)({
|
|
2775
2776
|
version: identity.version,
|
|
2776
2777
|
identitySource: identity.identitySource,
|
|
2777
2778
|
modulePaths: identity.modulePaths,
|
|
@@ -2834,12 +2835,13 @@ async function buildRnxCloudArtifact(bundle, options = {}) {
|
|
|
2834
2835
|
}
|
|
2835
2836
|
};
|
|
2836
2837
|
}
|
|
2837
|
-
var import_metro_production_bundle, import_native_app_identity, import_terser, MODULE_PATHS_REQUIRED, SOURCE_MAP_REQUIRED, MINIFY_OPTIONS;
|
|
2838
|
+
var import_metro_production_bundle, import_native_app_identity, import_native_firebase_metadata, import_terser, MODULE_PATHS_REQUIRED, SOURCE_MAP_REQUIRED, MINIFY_OPTIONS;
|
|
2838
2839
|
var init_metroCloudArtifact = __esm({
|
|
2839
2840
|
"../contrast-bundler/src/metroCloudArtifact.ts"() {
|
|
2840
2841
|
"use strict";
|
|
2841
2842
|
import_metro_production_bundle = require("peachsim/metro-production-bundle");
|
|
2842
2843
|
import_native_app_identity = require("peachsim/native-app-identity");
|
|
2844
|
+
import_native_firebase_metadata = require("peachsim/native-firebase-metadata");
|
|
2843
2845
|
import_terser = require("terser");
|
|
2844
2846
|
init_metroAssetArtifact();
|
|
2845
2847
|
init_metroDebugSourceMap();
|
|
@@ -7480,13 +7482,11 @@ async function compile(packagePath, entry, stamp, moduleRootOverride, hosted, sn
|
|
|
7480
7482
|
stamp,
|
|
7481
7483
|
package: content
|
|
7482
7484
|
};
|
|
7483
|
-
const toolchain =
|
|
7484
|
-
|
|
7485
|
-
|
|
7486
|
-
|
|
7487
|
-
|
|
7488
|
-
throw new Error(`swift toolchain manifest at ${moduleRoot} has no release`);
|
|
7489
|
-
}
|
|
7485
|
+
const toolchain = localSwiftToolchain(moduleRoot);
|
|
7486
|
+
if (!toolchain)
|
|
7487
|
+
throw new Error(
|
|
7488
|
+
`the Swift toolchain ${moduleRoot}/toolchain.json names is not installed under ~/Library/Developer/Toolchains`
|
|
7489
|
+
);
|
|
7490
7490
|
const artifact = await compileSwiftProjectUnit(snapshotCompileInput(snapshot, entry), {
|
|
7491
7491
|
// the compile rewrites Sources/App in its root before swiftpm builds, and
|
|
7492
7492
|
// its lock orders one process only: two vites on one root (a lane's dev
|
|
@@ -7499,14 +7499,24 @@ async function compile(packagePath, entry, stamp, moduleRootOverride, hosted, sn
|
|
|
7499
7499
|
(0, import_node_crypto4.createHash)("sha256").update(`${moduleRoot}\0${import_node_path9.default.resolve(packagePath)}`).digest("hex").slice(0, 16)
|
|
7500
7500
|
),
|
|
7501
7501
|
moduleRoot,
|
|
7502
|
-
|
|
7503
|
-
toolchainBin: import_node_path9.default.join(
|
|
7504
|
-
import_node_os3.default.homedir(),
|
|
7505
|
-
`Library/Developer/Toolchains/${release}.xctoolchain/usr/bin`
|
|
7506
|
-
)
|
|
7502
|
+
...toolchain
|
|
7507
7503
|
});
|
|
7508
7504
|
return { ...artifact, stamp, package: content };
|
|
7509
7505
|
}
|
|
7506
|
+
function localSwiftToolchain(moduleRoot) {
|
|
7507
|
+
const manifest = import_node_path9.default.join(moduleRoot, "toolchain.json");
|
|
7508
|
+
if (!import_node_fs9.default.existsSync(manifest)) return null;
|
|
7509
|
+
const toolchain = JSON.parse(import_node_fs9.default.readFileSync(manifest, "utf8"));
|
|
7510
|
+
const release = toolchain && typeof toolchain === "object" ? Reflect.get(toolchain, "release") : void 0;
|
|
7511
|
+
if (typeof release !== "string") {
|
|
7512
|
+
throw new Error(`swift toolchain manifest at ${moduleRoot} has no release`);
|
|
7513
|
+
}
|
|
7514
|
+
const toolchainBin = import_node_path9.default.join(
|
|
7515
|
+
import_node_os3.default.homedir(),
|
|
7516
|
+
`Library/Developer/Toolchains/${release}.xctoolchain/usr/bin`
|
|
7517
|
+
);
|
|
7518
|
+
return import_node_fs9.default.existsSync(import_node_path9.default.join(toolchainBin, "swift")) ? { release, toolchainBin } : null;
|
|
7519
|
+
}
|
|
7510
7520
|
async function compileRemote(packagePath, entry, snapshot, hosted) {
|
|
7511
7521
|
const auth = hosted ? null : resolveCliAuth();
|
|
7512
7522
|
if (!hosted && (!auth || auth.kind === "github")) {
|
|
@@ -7822,6 +7832,8 @@ async function handleExpoSwiftRequest(req, res) {
|
|
|
7822
7832
|
pending = (async () => {
|
|
7823
7833
|
const files = await collectExpoSwiftSources(root);
|
|
7824
7834
|
if (!files) return null;
|
|
7835
|
+
const moduleRoot = import_node_path10.default.resolve(import_meta2.dirname, "../../sootsim-swift");
|
|
7836
|
+
if (!localSwiftToolchain(moduleRoot)) return null;
|
|
7825
7837
|
const key = (0, import_node_crypto5.createHash)("sha256").update(import_node_fs10.default.realpathSync(root)).digest("hex");
|
|
7826
7838
|
const packagePath = import_node_path10.default.join(import_node_os4.default.tmpdir(), "peach-expo-swift", key);
|
|
7827
7839
|
const sources = import_node_path10.default.join(packagePath, "Sources");
|
|
@@ -7832,12 +7844,10 @@ async function handleExpoSwiftRequest(req, res) {
|
|
|
7832
7844
|
import_node_fs10.default.mkdirSync(import_node_path10.default.dirname(target), { recursive: true });
|
|
7833
7845
|
import_node_fs10.default.writeFileSync(target, content);
|
|
7834
7846
|
}
|
|
7835
|
-
const moduleRoot = import_node_path10.default.resolve(import_meta2.dirname, "../../sootsim-swift");
|
|
7836
|
-
const local = import_node_fs10.default.existsSync(import_node_path10.default.join(moduleRoot, "toolchain.json"));
|
|
7837
7847
|
const artifact = await artifactFor(
|
|
7838
7848
|
projectFor(packagePath),
|
|
7839
7849
|
EXPO_SWIFT_ENTRY,
|
|
7840
|
-
|
|
7850
|
+
moduleRoot
|
|
7841
7851
|
);
|
|
7842
7852
|
const host2 = req.headers.host;
|
|
7843
7853
|
if (!host2) throw new Error("Expo Swift request has no host");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/host/fetch-proxy-overrides.ts
|
|
4
4
|
var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -4805,27 +4805,177 @@ function parsePlistSource(source) {
|
|
|
4805
4805
|
}
|
|
4806
4806
|
|
|
4807
4807
|
// src/native-firebase-config.ts
|
|
4808
|
-
function readNativeFirebaseConfig(projectRoot) {
|
|
4808
|
+
function readNativeFirebaseConfig(projectRoot, platforms = ["ios", "android"]) {
|
|
4809
4809
|
const result = {};
|
|
4810
|
-
|
|
4811
|
-
|
|
4810
|
+
let config = {};
|
|
4811
|
+
const appJsonPath = import_node_path6.default.join(projectRoot, "app.json");
|
|
4812
|
+
const appJson = import_node_fs6.default.existsSync(appJsonPath) ? JSON.parse(import_node_fs6.default.readFileSync(appJsonPath, "utf8")) : null;
|
|
4813
|
+
const staticExpo = isRecord(appJson) && (isRecord(appJson.expo) || [appJson.ios, appJson.android].some(
|
|
4814
|
+
(value) => isRecord(value) && typeof value.googleServicesFile === "string"
|
|
4815
|
+
));
|
|
4816
|
+
const dynamicExpo = [
|
|
4812
4817
|
"app.config.js",
|
|
4813
4818
|
"app.config.ts",
|
|
4814
4819
|
"app.config.cjs",
|
|
4815
4820
|
"app.config.mjs"
|
|
4816
|
-
].some((name2) => import_node_fs6.default.existsSync(import_node_path6.default.join(projectRoot, name2)))
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
|
|
4820
|
-
|
|
4821
|
-
|
|
4822
|
-
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4821
|
+
].some((name2) => import_node_fs6.default.existsSync(import_node_path6.default.join(projectRoot, name2)));
|
|
4822
|
+
if (staticExpo || dynamicExpo) {
|
|
4823
|
+
const require2 = (0, import_node_module2.createRequire)(import_node_path6.default.join(projectRoot, "package.json"));
|
|
4824
|
+
const configModule = require2("@expo/config");
|
|
4825
|
+
if (!isRecord(configModule) || typeof configModule.getConfig !== "function")
|
|
4826
|
+
throw new Error("Expo native configuration is unavailable.");
|
|
4827
|
+
const resolved = Reflect.apply(configModule.getConfig, configModule, [
|
|
4828
|
+
projectRoot,
|
|
4829
|
+
{ skipSDKVersionRequirement: true }
|
|
4830
|
+
]);
|
|
4831
|
+
config = isRecord(resolved) && isRecord(resolved.exp) ? resolved.exp : {};
|
|
4832
|
+
}
|
|
4833
|
+
const ios = config.ios;
|
|
4834
|
+
if (platforms.includes("ios") && (!isRecord(ios) || typeof ios.googleServicesFile !== "string")) {
|
|
4835
|
+
const iosRoot = import_node_path6.default.join(projectRoot, "ios");
|
|
4836
|
+
if (import_node_fs6.default.existsSync(iosRoot)) {
|
|
4837
|
+
const projects = import_node_fs6.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
|
|
4838
|
+
if (projects.length > 1)
|
|
4839
|
+
throw new Error("native Firebase configuration requires a selected Xcode project");
|
|
4840
|
+
if (projects.length === 1) {
|
|
4841
|
+
const require2 = (0, import_node_module2.createRequire)(import_node_path6.default.join(projectRoot, "package.json"));
|
|
4842
|
+
const xcode = require2("xcode");
|
|
4843
|
+
if (!isRecord(xcode) || typeof xcode.project !== "function")
|
|
4844
|
+
throw new Error("native Xcode project parser is unavailable");
|
|
4845
|
+
const project = Reflect.apply(xcode.project, xcode, [
|
|
4846
|
+
import_node_path6.default.join(iosRoot, projects[0].name, "project.pbxproj")
|
|
4847
|
+
]);
|
|
4848
|
+
if (!isRecord(project) || typeof project.parseSync !== "function")
|
|
4849
|
+
throw new Error("native Xcode project is malformed");
|
|
4850
|
+
Reflect.apply(project.parseSync, project, []);
|
|
4851
|
+
const hash = project.hash;
|
|
4852
|
+
const native = isRecord(hash) ? hash.project : null;
|
|
4853
|
+
const objects = isRecord(native) ? native.objects : null;
|
|
4854
|
+
if (!isRecord(objects)) throw new Error("native Xcode objects are malformed");
|
|
4855
|
+
const unquote = (value) => typeof value === "string" ? value.replace(/^"|"$/g, "") : "";
|
|
4856
|
+
const targets = isRecord(objects.PBXNativeTarget) ? Object.values(objects.PBXNativeTarget).filter(
|
|
4857
|
+
(target2) => isRecord(target2) && unquote(target2.productType) === "com.apple.product-type.application"
|
|
4858
|
+
) : [];
|
|
4859
|
+
if (targets.length > 1)
|
|
4860
|
+
throw new Error("native Firebase configuration requires a selected app target");
|
|
4861
|
+
const target = targets[0];
|
|
4862
|
+
if (isRecord(target) && Array.isArray(target.buildPhases)) {
|
|
4863
|
+
const buildPhases = target.buildPhases;
|
|
4864
|
+
const filePaths = /* @__PURE__ */ new Map();
|
|
4865
|
+
const groups = isRecord(objects.PBXGroup) ? objects.PBXGroup : {};
|
|
4866
|
+
const references = isRecord(objects.PBXFileReference) ? objects.PBXFileReference : {};
|
|
4867
|
+
const nativeProjects = isRecord(objects.PBXProject) ? Object.values(objects.PBXProject) : [];
|
|
4868
|
+
const roots = nativeProjects.filter(isRecord).map((value) => value.mainGroup);
|
|
4869
|
+
const pending = roots.filter((id) => typeof id === "string").map((id) => ({ id, base: iosRoot }));
|
|
4870
|
+
const visited = /* @__PURE__ */ new Map();
|
|
4871
|
+
while (pending.length) {
|
|
4872
|
+
const item = pending.pop();
|
|
4873
|
+
if (!item) break;
|
|
4874
|
+
const previous = visited.get(item.id);
|
|
4875
|
+
if (previous !== void 0) {
|
|
4876
|
+
if (previous !== item.base)
|
|
4877
|
+
throw new Error("native Xcode group has ambiguous parents");
|
|
4878
|
+
continue;
|
|
4879
|
+
}
|
|
4880
|
+
visited.set(item.id, item.base);
|
|
4881
|
+
const group = groups[item.id];
|
|
4882
|
+
if (!isRecord(group) || !Array.isArray(group.children)) continue;
|
|
4883
|
+
const sourceTree = unquote(group.sourceTree);
|
|
4884
|
+
if (sourceTree && sourceTree !== "<group>" && sourceTree !== "SOURCE_ROOT")
|
|
4885
|
+
continue;
|
|
4886
|
+
const directory = import_node_path6.default.resolve(
|
|
4887
|
+
sourceTree === "SOURCE_ROOT" ? iosRoot : item.base,
|
|
4888
|
+
unquote(group.path)
|
|
4889
|
+
);
|
|
4890
|
+
for (const child of group.children) {
|
|
4891
|
+
if (!isRecord(child) || typeof child.value !== "string") continue;
|
|
4892
|
+
if (isRecord(groups[child.value])) {
|
|
4893
|
+
pending.push({ id: child.value, base: directory });
|
|
4894
|
+
continue;
|
|
4895
|
+
}
|
|
4896
|
+
const file = references[child.value];
|
|
4897
|
+
if (!isRecord(file)) continue;
|
|
4898
|
+
const tree = unquote(file.sourceTree);
|
|
4899
|
+
if (tree !== "<group>" && tree !== "SOURCE_ROOT") continue;
|
|
4900
|
+
const filePath = import_node_path6.default.resolve(
|
|
4901
|
+
tree === "SOURCE_ROOT" ? iosRoot : directory,
|
|
4902
|
+
unquote(file.path)
|
|
4903
|
+
);
|
|
4904
|
+
const values = filePaths.get(child.value) ?? /* @__PURE__ */ new Set();
|
|
4905
|
+
values.add(filePath);
|
|
4906
|
+
filePaths.set(child.value, values);
|
|
4907
|
+
}
|
|
4908
|
+
}
|
|
4909
|
+
const buildFiles = isRecord(objects.PBXBuildFile) ? objects.PBXBuildFile : {};
|
|
4910
|
+
const filesInPhase = (section, name2) => {
|
|
4911
|
+
if (!isRecord(section)) return [];
|
|
4912
|
+
const paths = [];
|
|
4913
|
+
for (const phase of buildPhases) {
|
|
4914
|
+
if (!isRecord(phase) || typeof phase.value !== "string") continue;
|
|
4915
|
+
const value = section[phase.value];
|
|
4916
|
+
if (!isRecord(value) || !Array.isArray(value.files)) continue;
|
|
4917
|
+
for (const entry of value.files) {
|
|
4918
|
+
if (!isRecord(entry) || typeof entry.value !== "string") continue;
|
|
4919
|
+
const file = buildFiles[entry.value];
|
|
4920
|
+
if (!isRecord(file) || typeof file.fileRef !== "string") continue;
|
|
4921
|
+
const reference = references[file.fileRef];
|
|
4922
|
+
if (!isRecord(reference) || !name2.test(import_node_path6.default.basename(unquote(reference.path))))
|
|
4923
|
+
continue;
|
|
4924
|
+
const candidates = filePaths.get(file.fileRef);
|
|
4925
|
+
if (!candidates || candidates.size !== 1)
|
|
4926
|
+
throw new Error("native Firebase build resource path is unresolved");
|
|
4927
|
+
paths.push(...candidates);
|
|
4928
|
+
}
|
|
4929
|
+
}
|
|
4930
|
+
return paths;
|
|
4931
|
+
};
|
|
4932
|
+
const delegates = filesInPhase(
|
|
4933
|
+
objects.PBXSourcesBuildPhase,
|
|
4934
|
+
/^AppDelegate\.(swift|mm|m)$/
|
|
4935
|
+
);
|
|
4936
|
+
const defaultConfigured = delegates.some((file) => {
|
|
4937
|
+
const source = import_node_fs6.default.readFileSync(file, "utf8").replace(
|
|
4938
|
+
/\/\*[\s\S]*?\*\/|\/\/[^\n]*|"(?:\\.|[^"\\])*"/g,
|
|
4939
|
+
(token) => token.startsWith('"') ? '""' : token.replace(/[^\n]/g, " ")
|
|
4940
|
+
);
|
|
4941
|
+
const launch = /(?:\bfunc\s+application\s*\([\s\S]*?didFinishLaunchingWithOptions[\s\S]*?\)\s*->\s*Bool|^-\s*\(BOOL\)\s*application\s*:[\s\S]*?didFinishLaunchingWithOptions[^\{]*)\s*\{/m.exec(
|
|
4942
|
+
source
|
|
4943
|
+
);
|
|
4944
|
+
if (!launch) return false;
|
|
4945
|
+
const body = source.slice(launch.index + launch[0].length);
|
|
4946
|
+
const configure = /^\s*(?:FirebaseApp\s*\.\s*configure\s*\(\s*\)|\[FIRApp\s+configure\])/m.exec(
|
|
4947
|
+
body
|
|
4948
|
+
);
|
|
4949
|
+
if (!configure) return false;
|
|
4950
|
+
const before = body.slice(0, configure.index);
|
|
4951
|
+
let depth = 1;
|
|
4952
|
+
for (const token of before) {
|
|
4953
|
+
if (token === "{") depth += 1;
|
|
4954
|
+
if (token === "}") depth -= 1;
|
|
4955
|
+
if (depth === 0) return false;
|
|
4956
|
+
}
|
|
4957
|
+
if (depth !== 1 || /\b(?:return|throw)\b|^\s*#(?:if|elseif|else)/m.test(before))
|
|
4958
|
+
throw new Error(
|
|
4959
|
+
"native Firebase initialization must be unconditional in the app launch method"
|
|
4960
|
+
);
|
|
4961
|
+
return true;
|
|
4962
|
+
});
|
|
4963
|
+
if (defaultConfigured) {
|
|
4964
|
+
const resources = filesInPhase(
|
|
4965
|
+
objects.PBXResourcesBuildPhase,
|
|
4966
|
+
/^GoogleService-Info\.plist$/
|
|
4967
|
+
);
|
|
4968
|
+
if (resources.length !== 1)
|
|
4969
|
+
throw new Error(
|
|
4970
|
+
"native Firebase default initialization requires one GoogleService-Info.plist build resource"
|
|
4971
|
+
);
|
|
4972
|
+
config.ios = { googleServicesFile: import_node_path6.default.relative(projectRoot, resources[0]) };
|
|
4973
|
+
}
|
|
4974
|
+
}
|
|
4975
|
+
}
|
|
4976
|
+
}
|
|
4977
|
+
}
|
|
4978
|
+
for (const platform of platforms) {
|
|
4829
4979
|
const native = config[platform];
|
|
4830
4980
|
if (!isRecord(native) || typeof native.googleServicesFile !== "string") continue;
|
|
4831
4981
|
try {
|
|
@@ -4883,6 +5033,84 @@ function readNativeFirebaseConfig(projectRoot) {
|
|
|
4883
5033
|
return result;
|
|
4884
5034
|
}
|
|
4885
5035
|
|
|
5036
|
+
// src/native-firebase-metadata.ts
|
|
5037
|
+
var PREFIX = "globalThis.__peachNativeFirebaseConfig=";
|
|
5038
|
+
var MODULE_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
5039
|
+
var PLATFORMS = ["ios", "android"];
|
|
5040
|
+
function readNativeFirebaseMetadata(value) {
|
|
5041
|
+
if (value === null || value === void 0) return null;
|
|
5042
|
+
if (typeof value !== "object" || Array.isArray(value))
|
|
5043
|
+
throw new Error("native Firebase configuration is malformed");
|
|
5044
|
+
if (Object.keys(value).some((key) => !PLATFORMS.some((name2) => name2 === key)))
|
|
5045
|
+
throw new Error("native Firebase configuration has an invalid platform");
|
|
5046
|
+
const result = {};
|
|
5047
|
+
for (const platform of PLATFORMS) {
|
|
5048
|
+
const options = Reflect.get(value, platform);
|
|
5049
|
+
if (options === void 0) continue;
|
|
5050
|
+
if (!options || typeof options !== "object" || Array.isArray(options))
|
|
5051
|
+
throw new Error("native Firebase options are malformed");
|
|
5052
|
+
const error = Reflect.get(options, "error");
|
|
5053
|
+
if (typeof error === "string")
|
|
5054
|
+
throw new Error(`native Firebase configuration: ${error}`);
|
|
5055
|
+
const apiKey = Reflect.get(options, "apiKey");
|
|
5056
|
+
const appId = Reflect.get(options, "appId");
|
|
5057
|
+
const projectId = Reflect.get(options, "projectId");
|
|
5058
|
+
if (typeof apiKey !== "string" || !apiKey || typeof appId !== "string" || !appId || typeof projectId !== "string" || !projectId)
|
|
5059
|
+
throw new Error("native Firebase options require apiKey, appId and projectId");
|
|
5060
|
+
const native = { apiKey, appId, projectId };
|
|
5061
|
+
for (const key of [
|
|
5062
|
+
"databaseURL",
|
|
5063
|
+
"gaTrackingId",
|
|
5064
|
+
"storageBucket",
|
|
5065
|
+
"messagingSenderId",
|
|
5066
|
+
"clientId",
|
|
5067
|
+
"androidClientID",
|
|
5068
|
+
"deepLinkUrlScheme"
|
|
5069
|
+
]) {
|
|
5070
|
+
const field = Reflect.get(options, key);
|
|
5071
|
+
if (field === void 0) continue;
|
|
5072
|
+
if (typeof field !== "string")
|
|
5073
|
+
throw new Error(`native Firebase option ${key} is malformed`);
|
|
5074
|
+
native[key] = field;
|
|
5075
|
+
}
|
|
5076
|
+
result[platform] = native;
|
|
5077
|
+
}
|
|
5078
|
+
return result;
|
|
5079
|
+
}
|
|
5080
|
+
function createNativeFirebaseFooter(config) {
|
|
5081
|
+
const json = JSON.stringify(config).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
5082
|
+
return `
|
|
5083
|
+
${PREFIX}${json};`;
|
|
5084
|
+
}
|
|
5085
|
+
function readNativeFirebaseFooter(source) {
|
|
5086
|
+
const start = source.lastIndexOf(`
|
|
5087
|
+
${PREFIX}`);
|
|
5088
|
+
if (start < 0) return null;
|
|
5089
|
+
const lineEnd = source.indexOf("\n", start + 1);
|
|
5090
|
+
const line = source.slice(start + 1, lineEnd < 0 ? void 0 : lineEnd);
|
|
5091
|
+
if (!line.endsWith(";")) throw new Error("native Firebase footer is truncated");
|
|
5092
|
+
const parsed = JSON.parse(line.slice(PREFIX.length, -1));
|
|
5093
|
+
const config = readNativeFirebaseMetadata(parsed);
|
|
5094
|
+
if (config === null) throw new Error("native Firebase footer has no configuration");
|
|
5095
|
+
return config;
|
|
5096
|
+
}
|
|
5097
|
+
function detachNativeFirebaseFooter(source) {
|
|
5098
|
+
const config = readNativeFirebaseFooter(source);
|
|
5099
|
+
if (config === null) return { source, config };
|
|
5100
|
+
const start = source.lastIndexOf(`
|
|
5101
|
+
${PREFIX}`);
|
|
5102
|
+
const lineEnd = source.indexOf("\n", start + 1);
|
|
5103
|
+
const end = lineEnd < 0 ? source.length : lineEnd;
|
|
5104
|
+
return { source: source.slice(0, start) + source.slice(end), config };
|
|
5105
|
+
}
|
|
5106
|
+
function insertNativeFirebaseFooter(source, config) {
|
|
5107
|
+
const detached = detachNativeFirebaseFooter(source).source;
|
|
5108
|
+
const start = detached.lastIndexOf(`
|
|
5109
|
+
${MODULE_PREFIX}`);
|
|
5110
|
+
const footer = createNativeFirebaseFooter(config);
|
|
5111
|
+
return start < 0 ? detached + footer : detached.slice(0, start) + footer + detached.slice(start);
|
|
5112
|
+
}
|
|
5113
|
+
|
|
4886
5114
|
// src/metro-plugin.ts
|
|
4887
5115
|
var prefix = "/__soot";
|
|
4888
5116
|
function readCallableMetroExport(moduleValue, label) {
|
|
@@ -5005,6 +5233,21 @@ function withRNX(config) {
|
|
|
5005
5233
|
};
|
|
5006
5234
|
}
|
|
5007
5235
|
}
|
|
5236
|
+
if ([...graph.dependencies?.values() ?? []].some(
|
|
5237
|
+
(module2) => module2.path.replace(/\\/g, "/").includes("/@react-native-firebase/app/")
|
|
5238
|
+
)) {
|
|
5239
|
+
const firebase = readNativeFirebaseMetadata(
|
|
5240
|
+
readNativeFirebaseConfig(
|
|
5241
|
+
cfgProjectRoot,
|
|
5242
|
+
typeof bundlePlatform === "string" ? [bundlePlatform] : void 0
|
|
5243
|
+
)
|
|
5244
|
+
);
|
|
5245
|
+
if (firebase)
|
|
5246
|
+
annotated = typeof annotated === "string" ? insertNativeFirebaseFooter(annotated, firebase) : {
|
|
5247
|
+
...annotated,
|
|
5248
|
+
code: insertNativeFirebaseFooter(annotated.code, firebase)
|
|
5249
|
+
};
|
|
5250
|
+
}
|
|
5008
5251
|
return annotated;
|
|
5009
5252
|
}
|
|
5010
5253
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/kotlin-host.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -405,6 +405,7 @@ async function kotlinAppArtifact(app, moduleRoot, origin) {
|
|
|
405
405
|
` { ${app.applicationClass ?? "android.app.Application"}() },`,
|
|
406
406
|
` { ${app.launcher.targetClass}() },`,
|
|
407
407
|
` ${app.handlesUiMode},`,
|
|
408
|
+
` ${kotlinString(app.softInputAdjust)},`,
|
|
408
409
|
" androidx.lifecycle.viewmodel.viewModelFactory {",
|
|
409
410
|
...viewModels.map(viewModelInitializer),
|
|
410
411
|
" },",
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.670 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|