agent-device 0.21.24 → 0.21.25
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/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.24.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +47 -103
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
- package/dist/src/absence-observation-errors.js +1 -0
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +2 -2
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android-system-surface-disclosure.js +1 -0
- package/dist/src/android-text-entry.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/app-backend.js +1 -1
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +4 -3
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution-facade.js +1 -1
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/aws-device-farm-connection.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/browserstack-connection.js +1 -1
- package/dist/src/capture-disclosure.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +17 -14
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +3 -1
- package/dist/src/cli.js +3 -3
- package/dist/src/client-companion-tunnel.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +8 -2
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-metadata.js +73 -1
- package/dist/src/command-policy.js +1 -0
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-surface.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection-verification.js +1 -1
- package/dist/src/connection.js +3 -3
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-liveness-probe.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +3 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +5 -3
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-release.js +1 -1
- package/dist/src/device-shell.js +1 -1
- package/dist/src/device.js +3 -1
- package/dist/src/devicectl.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/expo-dev-client-launch.js +1 -0
- package/dist/src/file.js +3 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-plan.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -1
- package/dist/src/ime-state.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-error.js +1 -0
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +5 -1
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/inventory.js +2 -2
- package/dist/src/inventory6.js +1 -1
- package/dist/src/io.d.ts +2 -2
- package/dist/src/ios-client.js +1 -1
- package/dist/src/ios-settings.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-adapter.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/keyed-lock.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +2 -10
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/log-stream.js +9 -9
- package/dist/src/mechanics.js +16 -16
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -1
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/observability.js +1 -1
- package/dist/src/open-target-resolution.js +1 -1
- package/dist/src/output-path.js +1 -1
- package/dist/src/overlay.js +1 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-apple-resources.js +1 -0
- package/dist/src/platform-runtime-claim-recovery.js +1 -0
- package/dist/src/platform-runtime-daemon-services.js +1 -0
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plugin.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-resize.js +1 -0
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/process-entry.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -1
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-policy.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +2 -2
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native-overlay2.js +3 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/recording.js +2 -2
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/remote-config-core.js +1 -1
- package/dist/src/replay-backend-registry.js +1 -0
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay-maestro-backend.js +117 -0
- package/dist/src/replay-script-selection.js +1 -0
- package/dist/src/replay.js +1 -3
- package/dist/src/replay2.js +1 -0
- package/dist/src/reporting.js +3 -3
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-providers.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/runner-cache-retention.js +1 -1
- package/dist/src/runner-cache-trim.js +1 -1
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-device-set.js +1 -1
- package/dist/src/runner-error-classification.js +3 -3
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-lease.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-retention.js +1 -0
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-startup-transport.js +1 -0
- package/dist/src/runner-toolchain-probe.js +1 -1
- package/dist/src/runner.js +2 -1
- package/dist/src/runtime-command-surface.js +1 -0
- package/dist/src/runtime-deployment.js +1 -1
- package/dist/src/runtime-factory.js +1 -0
- package/dist/src/runtime-session.js +1 -0
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +2 -1
- package/dist/src/runtime10.js +2 -1
- package/dist/src/runtime2.js +5 -2
- package/dist/src/runtime3.js +1 -5
- package/dist/src/runtime4.js +5 -1
- package/dist/src/runtime5.js +1 -5
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screenshot-image.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -0
- package/dist/src/screenshot3.js +5 -5
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +1 -1
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.d.ts +4 -2
- package/dist/src/sdk-selectors.d.ts +4 -5
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-pipeline-policy.js +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +2 -2
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-replay-runtime-failure-response.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -0
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -1
- package/dist/src/simctl-settings.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-chrome.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-evidence.js +1 -0
- package/dist/src/snapshot-node-lookup.js +1 -0
- package/dist/src/snapshot-occlusion.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/src.js +5 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +2 -1
- package/dist/src/store.js +1 -1
- package/dist/src/surface-snapshot2.js +1 -1
- package/dist/src/target-evidence-tree.js +1 -0
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/undici.js +8 -8
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +2 -0
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/wait.js +1 -0
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/package.json +9 -11
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.manifest.json +0 -16
- package/dist/src/adb-transport.js +0 -1
- package/dist/src/alert-runtime.js +0 -1
- package/dist/src/app-deployment-resolution.js +0 -2
- package/dist/src/app-inventory-contract.js +0 -1
- package/dist/src/app-log-session-resource.js +0 -1
- package/dist/src/application-lifecycle-runtime.js +0 -1
- package/dist/src/auth-session.js +0 -1
- package/dist/src/browserstack-device-features.js +0 -1
- package/dist/src/browserstack.js +0 -1
- package/dist/src/cache.js +0 -1
- package/dist/src/capture.js +0 -1
- package/dist/src/catalog.js +0 -1
- package/dist/src/click-button.js +0 -1
- package/dist/src/client-metro-companion.js +0 -1
- package/dist/src/client-options.js +0 -3
- package/dist/src/daemon-client-transport.js +0 -1
- package/dist/src/daemon-http.js +0 -1
- package/dist/src/device-rotation.js +0 -1
- package/dist/src/device-session.js +0 -3
- package/dist/src/device2.js +0 -1
- package/dist/src/device3.js +0 -3
- package/dist/src/dispatch-resolve.js +0 -4
- package/dist/src/format.js +0 -2
- package/dist/src/gesture-plan-types.js +0 -1
- package/dist/src/host.js +0 -1
- package/dist/src/ime-settings-record.js +0 -1
- package/dist/src/interaction-ref-policy.js +0 -1
- package/dist/src/interactor-operation-binding.js +0 -1
- package/dist/src/keyboard-actions.js +0 -1
- package/dist/src/lease-context.js +0 -1
- package/dist/src/lease-registry-scope.js +0 -1
- package/dist/src/lease-scope.js +0 -1
- package/dist/src/managed-device-scope.js +0 -1
- package/dist/src/manifest.js +0 -1
- package/dist/src/observe-until.js +0 -1
- package/dist/src/output-common.js +0 -5
- package/dist/src/owner-identity.js +0 -3
- package/dist/src/path-resolution.js +0 -1
- package/dist/src/perf-runtime-plan.js +0 -1
- package/dist/src/platform-runtime-app-log-process.js +0 -1
- package/dist/src/platform-runtime-managed-owner.js +0 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
- package/dist/src/png.js +0 -1
- package/dist/src/provider-session-ownership.js +0 -2
- package/dist/src/providers.js +0 -1
- package/dist/src/registry.js +0 -68
- package/dist/src/remote-connection-state.js +0 -1
- package/dist/src/request-admission.js +0 -1
- package/dist/src/request-cancellation.js +0 -1
- package/dist/src/request-progress-protocol.js +0 -1
- package/dist/src/runner-cache-metadata.js +0 -2
- package/dist/src/runner-disposal.js +0 -1
- package/dist/src/runner-session-types.js +0 -1
- package/dist/src/runtime-admission.js +0 -1
- package/dist/src/runtime11.js +0 -2
- package/dist/src/screen-recording-resource-recovery.js +0 -1
- package/dist/src/screenshot-result.js +0 -1
- package/dist/src/script.js +0 -1
- package/dist/src/scroll-command.js +0 -1
- package/dist/src/scroll-gesture.js +0 -1
- package/dist/src/scroll-indicator.js +0 -1
- package/dist/src/session-artifact-paths.js +0 -1
- package/dist/src/session-paths.js +0 -1
- package/dist/src/session-repair-tombstone.js +0 -1
- package/dist/src/session-snapshot.js +0 -1
- package/dist/src/snapshot-private-evidence.js +0 -1
- package/dist/src/snapshot4.js +0 -1
- package/dist/src/src4.js +0 -1
- package/dist/src/src5.js +0 -1
- package/dist/src/src6.js +0 -1
- package/dist/src/src7.js +0 -2
- package/dist/src/src8.js +0 -115
- package/dist/src/string-enum.js +0 -1
- package/dist/src/success-text.js +0 -1
- package/dist/src/transport.js +0 -3
- package/dist/src/ttl-memo.js +0 -1
- package/dist/src/verified-file.js +0 -1
- package/dist/src/window-state.js +0 -1
- /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{v as
|
|
2
|
-
`);o=t.pop()??``;for(let e of t)await
|
|
3
|
-
`);return
|
|
1
|
+
import{P as e,U as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch-runner.js";import{r}from"./diagnostics.js";import"./diagnostics2.js";import{N as i,g as a,h as o,y as s}from"./sdk-device.js";import{n as c}from"./session.js";import{A as l,D as u,N as d,O as f,S as p,f as m,j as ee,k as h,x as te,y as g}from"./file.js";import{i as _,r as ne,t as re}from"./app-log-files.js";import{d as ie,g as ae,l as oe,u as se}from"./exec.js";import"./command.js";import"./process.js";import{t as v}from"./platform-runtime-android-mechanics.js";import{t as y}from"./perf-runtime.js";import{a as ce,n as le}from"./durable-resource.js";import{n as ue}from"./async-lifecycle.js";import{m as b,p as de}from"./src3.js";import{r as fe}from"./device-inventory-context.js";import{createTemporaryTextFile as pe,n as me,r as he,t as ge}from"./platform-runtime-host.js";import x from"node:fs";import S from"node:path";import{setTimeout as _e}from"node:timers/promises";function C(e){let t=S.resolve(e.sessionsDir),n=S.resolve(e.pathname);if(S.basename(n)!==e.basename)throw Error(`${e.label} is outside the daemon-owned sessions directory`);if(x.existsSync(t)&&x.existsSync(S.dirname(n))){let r=x.realpathSync.native(t),i=x.realpathSync.native(S.dirname(n));if(i!==r&&!i.startsWith(`${r}${S.sep}`))throw Error(`${e.label} resolves outside the daemon-owned sessions directory`);return S.join(i,e.basename)}if(n!==t&&!n.startsWith(`${t}${S.sep}`))throw Error(`${e.label} is outside the daemon-owned sessions directory`);return n}const w=`app-log.pid`;function ve(e,t={}){let n=S.resolve(e),r=t.launch??Se;return Object.freeze({start:async(e,t)=>await xe(n,e,r,t),readMarker:async e=>T(n,e),clearMarker:async e=>E(n,e),inspect:async e=>Ne(e),terminate:async e=>await O(e)})}async function ye(e){let t=[],n=[];if(!x.existsSync(e))return{recovered:t,retained:n};let r=S.resolve(e);for(let e of x.readdirSync(r,{withFileTypes:!0})){if(!e.isDirectory())continue;let i=S.join(r,e.name);if(x.existsSync(S.join(i,`app-log.resource.json`)))continue;let a=S.join(i,w),o=T(r,a);if(o.status!==`missing`){if(o.status===`invalid`){n.push({markerPath:a,reason:`invalid`,message:o.message});continue}if(await O(o.marker)===`ownership-lost`){let e=be(o.marker.command);n.push({markerPath:a,reason:`ownership-lost`,...e?{device:e}:{}});continue}E(r,a),t.push(a)}}return Object.freeze({recovered:Object.freeze(t),retained:Object.freeze(n)})}function be(e){let t=/(?:^|\s)(?:\S*\/)?adb\s+-s\s+([^\s]+)/.exec(e)?.[1];if(t)return Object.freeze({id:t,family:`android`,kind:t.startsWith(`emulator-`)?`emulator`:`device`,target:`mobile`});let n=/(?:^|\s)xcrun\s+(?:--set\s+\S+\s+)?simctl\s+spawn\s+([^\s]+)/.exec(e)?.[1];if(n)return Object.freeze({id:n,family:`apple`,appleOs:`ios`,kind:`simulator`,target:`mobile`});let r=/(?:^|\s)xcrun\s+devicectl\b[^\n]*?\s--device\s+([^\s]+)/.exec(e)?.[1];if(r)return Object.freeze({id:r,family:`apple`,appleOs:`ios`,kind:`device`,target:`mobile`,iosPhysicalDeviceBackend:`coredevice`})}async function xe(e,t,n,r){we(e,t.markerPath),r?.throwIfAborted();let i=await n(t.command,r),a=i.child,o=Te(a,t.output),s=await Ee(e,t.markerPath,i),c=i.wait.then(async e=>(await o(),e)).finally(()=>{t.markerPath&&s&&ke(e,t.markerPath,s)}),l=De(a,c);return{marker:s,wait:c,terminate:l,[Symbol.asyncDispose]:l}}function Se(e,t){let n=Ce(e);return se(n.executable,[...n.args],{allowFailure:n.allowFailure,cwd:n.cwd,env:n.env?{...process.env,...n.env}:void 0,captureOutput:!1,signal:t})}function Ce(e){return e.kind===`host`?e.request:{executable:`adb`,args:[`-s`,e.serial,...e.args],...e.options}}function we(e,t){if(t&&T(e,t).status!==`missing`)throw Error(`Existing app-log process marker evidence must be recovered before start`)}function Te(e,t){let n=Promise.resolve(),r,i=i=>{n=n.then(async()=>await t.write(i)).catch(t=>{r??=t,typeof e.exitCode!=`number`&&e.kill(`SIGKILL`)})};return e.stdout?.on(`data`,i),e.stderr?.on(`data`,i),async()=>{if(await n,r!==void 0)throw r}}async function Ee(e,t,n){let r=n.child.pid?await je(n.child.pid):void 0;try{if(!r)throw Error(`Managed app-log process did not expose a complete ownership marker`);return t&&Me(e,t,r),r}catch(e){throw n.child.kill(`SIGKILL`),await n.wait.catch(()=>void 0),e}}function De(e,t){let n;return async()=>await(n??=(async()=>{typeof e.exitCode!=`number`&&(e.kill(`SIGINT`),await Oe(t,2e3)||e.kill(`SIGKILL`),await t.catch(()=>void 0))})())}async function Oe(e,t){return await new Promise(n=>{let r=setTimeout(()=>n(!1),t),i=()=>{clearTimeout(r),n(!0)};e.then(i,i)})}function ke(e,t,n){let r=T(e,t);r.status===`decoded`&&r.marker.pid===n.pid&&r.marker.startTime===n.startTime&&r.marker.command===n.command&&E(e,t)}function Ae(e){let t=h(e),n=u(e);if(!(!t||!n))return Object.freeze({pid:e,startTime:t,command:n})}async function je(e){for(let t=0;t<5;t+=1){let t=Ae(e);if(t)return t;await new Promise(e=>setTimeout(e,10))}}function T(e,t){let n=D(e,t),r;try{let e=_(n);if(e===void 0)return{status:`missing`};r=e}catch(e){return{status:`invalid`,message:e instanceof Error?e.message:`App-log process marker is invalid`}}try{let e=JSON.parse(x.readFileSync(r,`utf8`));return de(e)}catch(e){return{status:`invalid`,message:e instanceof Error?e.message:`App-log process marker is invalid`}}finally{x.closeSync(r)}}function Me(e,t,n){let r=D(e,t);if(T(e,r).status!==`missing`)throw Error(`Existing app-log process marker evidence must be recovered before replacement`);x.mkdirSync(S.dirname(r),{recursive:!0});let i=`${r}.${process.pid}.${Date.now()}.tmp`,a,o=!1,s=!1;try{a=x.openSync(i,`wx`,384),x.writeFileSync(a,`${JSON.stringify(n)}\n`),x.fsyncSync(a),x.closeSync(a),a=void 0,x.linkSync(i,r),o=!0,x.unlinkSync(i);let e=x.openSync(S.dirname(r),`r`);try{x.fsyncSync(e)}finally{x.closeSync(e)}s=!0}finally{if(a!==void 0)try{x.closeSync(a)}catch{}if(!s)for(let e of o?[r,i]:[i])try{x.unlinkSync(e)}catch{}}}function E(e,t){let n=D(e,t);try{x.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`)throw e}}function D(e,t){return C({sessionsDir:e,pathname:t,basename:w,label:`App-log process marker`})}function Ne(e){return g(e.pid)?k(e)?`owned-alive`:`ownership-lost`:`missing`}async function O(e){if(!g(e.pid))return`already-missing`;if(!k(e))return`ownership-lost`;try{process.kill(e.pid,`SIGTERM`)}catch{return`already-missing`}if(!await d(e.pid,2e3)){if(!k(e))return`ownership-lost`;try{process.kill(e.pid,`SIGKILL`)}catch{return`already-missing`}await d(e.pid,2e3)}return g(e.pid)?`ownership-lost`:`terminated`}function k(e){return!e.startTime||!e.command?!1:h(e.pid)===e.startTime&&u(e.pid)===e.command}async function Pe(e,t){t=A(e,t),re(t);let n=ne(t),r;try{r=x.createWriteStream(t,{fd:n,autoClose:!0})}catch(e){throw x.closeSync(n),e}let i;r.on(`error`,e=>{i??=e});let a=Ie(),o=``,s=Promise.resolve(),c,l=e=>{let t=s.then(e);return s=t.catch(()=>void 0),t},u=async e=>{let t=`${o}${e}`.split(`
|
|
2
|
+
`);o=t.pop()??``;for(let e of t)await M(r,j(`${e}\n`,a))};return{write:async e=>await l(async()=>await u(Le(e))),[Symbol.asyncDispose]:async()=>{c??=l(async()=>{if(o&&=(await M(r,j(o,a)),``),await Re(r),i)throw i}),await c}}}async function Fe(e,t,n){if(t=A(e,t),!Number.isInteger(n)||n<1||n>1048576)throw TypeError(`App-log tail size must be between 1 byte and 1 MiB`);let r=_(t);if(r===void 0)return``;let i=x.fstatSync(r).size,a=Math.min(i,n),o=i-a,s=+(o>0),c=Buffer.alloc(a+s);try{x.readSync(r,c,0,c.length,o-s)}finally{x.closeSync(r)}let l=c.subarray(s).toString(`utf8`);if(s===0||c[0]===10)return l;let u=l.indexOf(`
|
|
3
|
+
`);return u<0?``:l.slice(u+1)}function A(e,t){return C({sessionsDir:e,pathname:t,basename:`app.log`,label:`App-log output`})}function Ie(){return(process.env.AGENT_DEVICE_APP_LOG_REDACT_PATTERNS??``).split(`,`).map(e=>e.trim()).filter(Boolean).flatMap(e=>{try{return[new RegExp(e,`gi`)]}catch{return[]}})}function j(e,t){return t.reduce((e,t)=>e.replace(t,`[REDACTED]`),e)}function Le(e){return typeof e==`string`?e:Buffer.from(e).toString(`utf8`)}async function M(e,t){t&&await new Promise((n,r)=>{e.write(t,e=>e?r(e):n())})}async function Re(e){e.closed||await new Promise((t,n)=>{e.once(`error`,n),e.end(()=>{e.off(`error`,n),t()})})}function ze(e){return Object.freeze({appLogs:Object.freeze({resolveSession:e.resolveSessionArtifacts,readRecent:async(t,n)=>{let{outputPath:r}=e.resolveSessionArtifacts(t);return Be(r,n)},readProcessMarker:async t=>{let{pidPath:n}=e.resolveSessionArtifacts(t);return await e.processes.readMarker(n)}}),networkTransports:Object.freeze({resolve:e.resolveTransport})})}function Be(e,t){if(!Number.isInteger(t)||t<1||t>2e4)throw TypeError(`Network app-log scan lines must be between 1 and 20000`);let n=_(e);if(n===void 0)return Object.freeze({path:e,exists:!1,text:``,skippedLines:0});try{let r=Ve(x.readFileSync(n,`utf8`),t);return Object.freeze({path:e,exists:!0,...r})}finally{x.closeSync(n)}}function Ve(e,t){let n=e.split(`
|
|
4
4
|
`),r=Math.max(0,n.length-t);return Object.freeze({text:n.slice(r).join(`
|
|
5
|
-
`),skippedLines:r})}function O(e={}){let t=Object.freeze({resolve:async e=>{let{createAndroidScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-android-host.js`);return await t(e)}}),n=Object.freeze({resolve:async e=>{let{resolveWebScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-web-host.js`);return await t(e)}}),r=Object.freeze({prepare:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().prepare(e)},copy:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().copy(e)},remove:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);return await t().remove(e)}}),i=Object.freeze({sniff:async e=>{let{createScreenRecordingFinalizer:t}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);await t().sniff(e)},complete:async(e,t)=>{let{createScreenRecordingFinalizer:n}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);return await n().complete(e,t)}}),a=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({apple:k(),android:t,harmony:A(),web:n,outputs:r,finalize:i,ownedProcesses:a})}function k(){let e=async()=>{let{createAppleScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-apple-host.js`);return e()};return Object.freeze({availability:async t=>(await e()).availability(t),runRunner:async(t,n,r)=>await(await e()).runRunner(t,n,r),startSimulator:async(t,n,r)=>await(await e()).startSimulator(t,n,r),inspectProcess:async t=>await(await e()).inspectProcess(t),terminateProcess:async t=>await(await e()).terminateProcess(t),inspectRunner:async(t,n,r)=>await(await e()).inspectRunner(t,n,r),retrieveRunnerRecording:async(t,n,r,i)=>await(await e()).retrieveRunnerRecording(t,n,r,i),captureClockAnchor:async(t,n,r)=>await(await e()).captureClockAnchor(t,n,r),isRunnerBundleId:async t=>await(await e()).isRunnerBundleId(t)})}function A(){let e=async()=>{let{createHarmonyScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-harmony-host.js`);return e()};return Object.freeze({start:async(t,n,r)=>await(await e()).start(t,n,r),stop:async(t,n)=>await(await e()).stop(t,n),findMedia:async(t,n,r)=>await(await e()).findMedia(t,n,r),stageMedia:async(t,n,r)=>await(await e()).stageMedia(t,n,r),stagedFileSize:async(t,n,r)=>await(await e()).stagedFileSize(t,n,r),pull:async(t,n,r)=>await(await e()).pull(t,n,r),remove:async(t,n,r)=>await(await e()).remove(t,n,r),removeMedia:async(t,n,r)=>await(await e()).removeMedia(t,n,r)})}function j(e={}){let t=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({hostCapture:Object.freeze({info:Object.freeze({source:`system-audio`,backend:`macos-screencapturekit`,sourceCount:1,notes:M}),start:async e=>{let{startMacOsAudioProbeProcess:t}=await import(`./macos-facade.js`),n=await t(e),r=await y(n.child.pid??void 0);return Object.freeze({...r===void 0?{}:{marker:r},wait:n.wait,terminate:async()=>{n.child.kill(`SIGTERM`),await n.wait.catch(()=>{})}})},inspectProcess:async e=>b(e),terminateProcess:async e=>await v([e])}),web:Object.freeze({resolve:async e=>{if(e.platform!==`web`)return;let{resolveWebProvider:t}=await import(`./src6.js`).then(e=>e.i),n=await t(),r=n.probeAudio?.bind(n);if(r)return Object.freeze({probe:async e=>await r({action:e.action,durationMs:e.durationMs,bucketMs:e.bucketMs})})}}),ownedProcesses:t})}function M(e){return[`Audio probe samples host system audio through ScreenCaptureKit for this ${a(e)?`iOS simulator`:e.platform===`android`?`Android emulator`:`macOS session`}; it is not app-instrumented audio.`,`Screen Recording permission is required for host system audio capture.`,`Other audible host apps can contribute to the measured buckets.`]}const N=f,P=async()=>await import(`./perf-facade.js`),F=Object.freeze({resourceKind:p,version:1,encode:e=>e,decode:Te});async function I(t,n,r){if(r.kind!==`xctrace`)throw U(`Apple`,`xctrace`,r.kind);let i=r.template??(r.mode===`cpu-profile`?`Time Profiler`:`Animation Hitches`),a=await P(),o=await a.startAppleXctracePerfCapture({device:t,appBundleId:r.appId,mode:r.mode,template:i,outPath:r.outPath}),s=await y(o.child.pid??void 0);if(!s)throw await a.cleanupAppleXctracePerfCapture(o).catch(()=>{}),new e(`COMMAND_FAILED`,`Apple xctrace exposed no exact process identity`);return R(t,n,r,{family:`apple`,marker:s,capture:Ce(o)},_e(o),B(`started`,o))}async function L(e,t,n){let r=await N(),i;if(n.mode===`cpu-profile`){if(n.kind!==`simpleperf`)throw U(`Android`,`simpleperf`,n.kind);i=await r.startAndroidSimpleperfProfile(e,n.appId,n.outPath)}else{if(n.kind!==`perfetto`)throw U(`Android`,`perfetto`,n.kind);i=await r.startAndroidPerfettoTrace(e,n.appId,n.outPath)}return R(e,t,n,{family:`android`,capture:i},ve(e,i),V(i))}function R(e,t,n,i,a,o){return Object.freeze({pendingHandle:new ie(a),envelope:re({resourceKind:p,sessionId:n.sessionId,device:r(e),owner:t,fence:n.fence,lifecycle:`open`,descriptor:ne(F,i)}),response:o})}function _e(e){return z({initialOutPath:e.outPath,inspect:()=>B(`started`,e),finish:async t=>await P().then(async n=>B(`stopped`,await n.stopAppleXctracePerfCapture(e,t))),cleanup:async()=>await P().then(async t=>{await t.cleanupAppleXctracePerfCapture(e)})})}function ve(e,t){return z({initialOutPath:t.outPath,inspect:()=>V(t),finish:async n=>{let r=await N();return V(t.kind===`simpleperf`?await r.stopAndroidSimpleperfProfile(e,t,n):await r.stopAndroidPerfettoTrace(e,t,n))},cleanup:async()=>{await(await N()).cleanupAndroidNativePerfSession(e,t)}})}function z(e){let t=e.initialOutPath,n,r,i=async()=>await e.cleanup().then(()=>({status:`cleaned`}),H);return Object.freeze({inspect:e.inspect,setOutputPath:e=>{t=e},finish:async()=>n??=e.finish(t).then(e=>({status:`completed`,result:e}),e=>{throw n=void 0,e}),forceCleanup:async()=>r??=i(),[Symbol.asyncDispose]:async()=>{we(await(r??=i()))}})}async function ye(e){let t=m(e,F);if(t.status!==`decoded`||t.descriptor.family!==`apple`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};let n=await b(t.descriptor.marker);if(n===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(n===`missing`)return{status:`already-missing`};let r=await v([t.descriptor.marker]);return r===`terminated`?{status:`cleaned`}:r===`already-missing`?{status:`already-missing`}:{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function be(e){let t=m(e,F);if(t.status!==`decoded`)return t;if(t.descriptor.family!==`apple`)return{status:`unreattachable`,reason:`descriptor-invalid`};let n=await b(t.descriptor.marker);return n===`owned-alive`?{status:`unreattachable`,reason:`transport-not-reattachable`}:n===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`missing`}}async function xe(e){let t=m(e,F);return t.status===`decoded`?t.descriptor.family===`android`?{status:`unreattachable`,reason:`transport-not-reattachable`}:{status:`unreattachable`,reason:`descriptor-invalid`}:t}async function Se(e,t){let n=m(t,F);if(n.status!==`decoded`||n.descriptor.family!==`android`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};try{return await(await N()).cleanupAndroidNativePerfSession(e,n.descriptor.capture),{status:`cleaned`}}catch(e){return H(e)}}function Ce(e){let{child:t,wait:n,...r}=e;return r}function B(e,t){return{perf:e,kind:t.kind,mode:t.mode,template:t.template,outPath:t.outPath,appBundleId:t.appBundleId,deviceId:t.deviceId,platform:t.platform,targetPids:t.targetPids,targetProcesses:t.targetProcesses,startedAt:t.startedAt,endedAt:t.endedAt}}function V(e){let t={action:e.action,platform:`android`,type:e.type,packageName:e.packageName,appPid:e.appPid,profilerPid:e.profilerPid,state:e.state,startedAt:new Date(e.startedAt).toISOString(),stoppedAt:typeof e.stoppedAt==`number`?new Date(e.stoppedAt).toISOString():void 0,outPath:e.outPath,sizeBytes:e.sizeBytes,remotePath:e.remotePath,method:e.method,message:e.message,...e.action===`stop`?{durationMs:e.durationMs,summary:e.summary}:{}};return e.kind===`simpleperf`?{...t,kind:`simpleperf`,mode:`cpu-profile`}:{...t,kind:`perfetto`,mode:`trace`}}function H(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:String(e)}}function we(t){if(t.status===`cleanup-pending`)throw new e(`COMMAND_FAILED`,t.message??`Perf capture cleanup could not be confirmed`,{reason:t.reason})}function U(t,n,r){return new e(`INVALID_ARGS`,`${t} native perf requires --kind ${n}, not ${r}`)}function Te(e){return e.family===`android`&&Ee(e.capture)?{status:`decoded`,descriptor:{family:`android`,capture:e.capture}}:e.family===`apple`&&ke(e.capture)&&Ne(e.marker)?{status:`decoded`,descriptor:{family:`apple`,capture:e.capture,marker:e.marker}}:{status:`invalid`,message:`Perf capture descriptor body is invalid`}}function Ee(e){return t(e)?De(e.kind,e.type)&&W(e,[`packageName`,`appPid`,`profilerPid`,`remotePath`,`outPath`])&&typeof e.startedAt==`number`&&Oe(e.state)&&Ae(e,[`stoppedAt`,`sizeBytes`]):!1}function De(e,t){return e===`simpleperf`&&t===`cpu-profile`||e===`perfetto`&&t===`trace`}function Oe(e){return e===`running`||e===`stopped`}function ke(e){return t(e)&&e.kind===`xctrace`&&(e.mode===`cpu-profile`||e.mode===`trace`)&&W(e,[`template`,`outPath`,`appBundleId`,`deviceId`,`startedAt`])&&o(e.platform)&&je(e.targetProcesses)&&Me(e.targetPids)}function W(e,t){return t.every(t=>typeof e[t]==`string`)}function Ae(e,t){return t.every(t=>e[t]===void 0||typeof e[t]==`number`)}function je(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function Me(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function Ne(e){return t(e)&&typeof e.pid==`number`&&typeof e.startTime==`string`&&typeof e.command==`string`}const G=f,Pe=f,Fe=f,K=async()=>await import(`./perf-facade.js`),q=async()=>await import(`./perf-facade.js`),Ie=async()=>await import(`./perf-facade.js`),Le=async()=>await import(`./src4.js`).then(e=>e.b);function Re(){let e=Object.freeze({sampleFrames:async(e,t)=>await(await K()).sampleAppleFramePerf(e,t),frameSampling:async e=>(await q()).buildAppleFrameSamplingMetadata(e),sampleMemory:async(e,t)=>await(await K()).sampleAppleMemoryPerf(e,t),memorySampling:async e=>(await q()).buildAppleMemorySamplingMetadata(e),memorySnapshotSupport:async e=>(await q()).buildAppleMemorySnapshotSupport(e),captureMemorySnapshot:async(e,t,n)=>await(await K()).captureAppleMemorySnapshot(e,t,n),start:async(e,t,n)=>await I(e,t,n),reattach:async(e,{envelope:t})=>await be(t),cleanup:async(e,{envelope:t})=>await ye(t),writeProfileReport:async e=>await(await Ie()).writeAppleXctracePerfReport({tracePath:e.tracePath,outPath:e.outPath,template:e.template,appBundleId:e.appId})}),t=Object.freeze({sampleFrames:async(e,t)=>await(await Pe()).sampleAndroidFramePerf(e,t),sampleMemory:async(e,t)=>await(await G()).sampleAndroidMemoryPerf(e,t),captureMemorySnapshot:async(e,t,n)=>await(await G()).captureAndroidHeapSnapshot(e,t,n),start:async(e,t,n)=>await L(e,t,n),reattach:async(e,{envelope:t})=>await xe(t),cleanup:async(e,{envelope:t})=>await Se(e,t),writeProfileReport:async(e,t)=>await(await Fe()).writeAndroidSimpleperfReport(e,ze(t.profile,t.tracePath),t.outPath)}),n=Object.freeze({sampleMemory:async(e,t)=>await(await Le()).sampleHarmonyMemoryPerf(e,t)});return Object.freeze({apple:e,android:t,harmony:n})}function ze(t,n){if(t?.kind!==`simpleperf`||t.type!==`cpu-profile`||t.mode!==`cpu-profile`)throw new e(`INVALID_ARGS`,`Stopped Simpleperf profile metadata is malformed.`);return{type:`cpu-profile`,kind:`simpleperf`,packageName:t.packageName,appPid:t.appPid,profilerPid:t.profilerPid,remotePath:t.remotePath,outPath:n,startedAt:t.startedAt?Date.parse(t.startedAt):Date.now(),state:`stopped`,...t.stoppedAt?{stoppedAt:Date.parse(t.stoppedAt)}:{},...t.sizeBytes===void 0?{}:{sizeBytes:t.sizeBytes}}}function Be(){return Object.freeze({ensureConnected:async(e,t)=>{t.throwIfAborted();try{let{resolveIosPhysicalDeviceControl:n}=await import(`./physical-device-facade.js`);await n(e).ensureReady(e,t),t.throwIfAborted()}catch(e){throw t.throwIfAborted(),e}}})}function Ve(){return Object.freeze({keepHot:e=>{import(`./runner-operations-facade.js`).then(({prewarmAppleRunnerCache:t})=>t(e,{})).catch(()=>{})},wasRecentlyObservedBooted:async e=>{let{wasSimulatorRecentlyObservedBooted:t}=await import(`./simulator-facade.js`);return t(e)},markBooted:e=>{import(`./simulator-facade.js`).then(({markSimulatorBooted:t})=>t(e)).catch(()=>{})}})}function He(){return Object.freeze({discover:async(e,t)=>{t.throwIfAborted();let n=await ae(e);return t.throwIfAborted(),n},launch:(e,t)=>{let n=[`-avd`,e];return t&&n.push(`-no-window`,`-no-audio`),d(`emulator`,n)},terminate:async e=>{await c({pids:[e],termTimeoutMs:1500,killTimeoutMs:1500})}})}function Ue(e,t,n=()=>{}){let r,i,a=async()=>(r??=t.apple({appleTools:e.appleTools}),await r),o=async()=>(i??=t.android({commands:e.commands}),await i),s=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await a()).shutdownTarget(e,t))}),c=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await o()).shutdownTarget(e,t))}),l=Object.freeze({canShutdownTarget:async e=>await We(e,a,o),shutdownTarget:async e=>(n(),await Ge(e,a,o))});return Object.freeze({apple:s,android:c,close:l})}async function We(e,t,n){return e.platform===`apple`?(await t()).canShutdownTarget(e):e.platform===`android`&&(await n()).canShutdownTarget(e)}async function Ge(e,t,n){let r=new AbortController().signal;return e.platform===`apple`?await(await t()).shutdownTarget(e,r):e.platform===`android`?await(await n()).shutdownTarget(e,r):{success:!1,exitCode:-1,stdout:``,stderr:`Cannot shut down unsupported device ${e.platform}/${e.kind}`}}function Ke(){return Object.freeze({withInvalidatedAppResolutionCache:async(e,t)=>{let{invalidateIosAppResolutionCache:n}=await import(`./app-resolution-facade.js`);return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareIosInstallArtifact:n}=await import(`./install-artifact-facade.js`);return await n(e.source,t)},resolveAppBundleId:async(e,t)=>{let{resolveIosApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function qe(){return Object.freeze({bundletoolJar:process.env.AGENT_DEVICE_BUNDLETOOL_JAR?.trim()||void 0,withInvalidatedAppResolutionCache:async(e,t)=>{let{withAndroidAppResolutionCacheInvalidated:n}=await f();return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareAndroidInstallArtifact:n}=await f();return await n(e.source,t)},resolveAppPackage:async(e,t)=>{let{resolveAndroidApp:n}=await f(),r=await n(e,t);if(r.type===`intent`){let{AppError:e}=await import(`./sdk-contracts.js`).then(e=>e.U);throw new e(`INVALID_ARGS`,`App uninstall requires a package name, not an intent`)}return r.value}})}function Je(){return Object.freeze({probeClipboardShellSupport:async(e,t)=>{try{let{runAndroidShell:n,androidClipboardShellSupportForResult:r}=await f();return await r(await n(e,[`cmd`,`clipboard`,`get`,`text`],{allowFailure:!0,signal:t}))}catch{return`probe-failed`}},runAdb:async(e,t,n,r)=>{let{runAndroidAdb:i}=await f(),a=await i(e,t,{allowFailure:n.allowFailure,timeoutMs:n.timeoutMs,signal:r});return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}},installPackage:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e),o=a.install?await a.install(t,{replace:n.replace,signal:r}):await a.exec([`install`,...n.replace?[`-r`]:[],t],{signal:r});return{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode}},installBundle:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e).installBundle;return a?(await a(t,{mode:n,signal:r}),!0):!1}})}let Ye;const J=()=>Ye??=import(`./runner-operations-facade.js`);let Xe;const Y=()=>Xe??=import(`./platform-runtime-runtime-hints.js`);let Ze;const Qe=()=>Ze??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let $e;const et=()=>$e??=import(`./app-resolution-facade.js`);let tt;const X=()=>tt??=import(`./macos-facade.js`);let nt;const rt=()=>nt??=import(`./retry2.js`).then(e=>e.t);function Z(){return Object.freeze({resolveOpenTarget:async(e,t)=>await it(e,t),prewarmRunnerCache:async(e,t,n)=>{let{prewarmAppleRunnerCache:r}=await J();await r(e,Q(t,n))},prewarmRunnerSession:async(e,t,n,r,i)=>{let{prewarmIosRunnerSession:a}=await J();await a(e,{...Q(t,n),propagateError:r,...i})},notifyRunnerAppRelaunched:async(e,t,n)=>{let{notifyIosRunnerAppRelaunched:r}=await J();await r(e,Q(t,n))},stopRunnerSession:async e=>{let{stopIosRunnerSession:t}=await J();await t(e)},hasLiveRunnerSession:async(e,t)=>{let{hasLiveIosRunnerSession:n}=await J();return n(e,{requestId:t.requestId})},releaseSpeculativeRunner:async(e,t)=>{let{releaseSpeculativeIosRunnerSessionFor:n}=await J();return await n(e,{requestId:t.requestId})},releaseRunnerOnClose:async(e,t)=>{let{releaseIosRunnerOnClose:n}=await J();await n(e,t)},prepareRunner:async(e,t,n)=>{let{Deadline:r}=await rt(),{prepareIosRunner:i}=await J(),a=Date.now();return await i(e,{...Q(t.execution,n),cleanStaleBundles:!0,buildTimeoutMs:t.timeoutMs,healthTimeoutMs:t.timeoutMs,prepareDeadline:r.fromTimeoutMs(t.timeoutMs,a),startupTimeoutMs:t.timeoutMs})},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await Y();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await Y();await n({device:e,...t})},dismissCloseAlerts:async(e,t)=>await st(e,t),detachRunnerSessionsForShutdown:async()=>{let{detachIosRunnerSessionsForShutdown:e}=await J();await e()},finalizeRunnerSessionsForShutdown:async()=>{let{stopAllIosRunnerSessions:e}=await J();await e()}})}async function it(t,n){if(n.foreground){let n=await at(t);if(n)return n;throw new e(`AMBIGUOUS_MATCH`,`open --foreground requires exactly one running app on the selected iOS simulator.`,{reason:`foreground_app_ambiguous`,hint:`Pass an explicit app instead: agent-device open <app> --platform ios.`})}let r=await ot(t,n.surface),{resolveSessionAppBundleIdForTarget:i}=await Qe();return{appBundleId:r.appBundleId??await i(t,n.target,n.currentAppBundleId),appName:r.appName??n.target}}async function at(e){if(!a(e)||e.kind!==`simulator`)return;let{detectSoleRunningIosSimulatorApp:t}=await et(),n=await t(e);return n?{appBundleId:n.bundleId,appName:n.name}:void 0}async function ot(e,t){if(!i(e)||t===`app`||t===`desktop`||t===`menubar`)return{};let{resolveFrontmostMacOsApp:n}=await X(),r=await n();return{appBundleId:r.bundleId,appName:r.appName}}function Q(e,t){return{requestId:e.requestId,logPath:e.logPath,traceLogPath:e.traceLogPath,verbose:e.verbose,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext,signal:t}}async function st(e,t){if(!i(e))return;let{runMacOsAlertAction:n}=await X();await n(`dismiss`,t.surface===`frontmost-app`?{surface:`frontmost-app`}:t.appBundleId?{bundleId:t.appBundleId}:{})}let ct;const lt=()=>ct??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let ut;const $=()=>ut??=import(`./platform-runtime-runtime-hints.js`);function dt(){return Object.freeze({resolveOpenTarget:async(e,t)=>await ft(e,t),inferOpenedAppBundleId:async(e,t,n)=>{if(n)return n;try{let{inferAndroidPackageAfterOpen:r}=await f();return await r(e,t,n)}catch{return n}},resetFramePerfStats:async(e,t)=>{let{resetAndroidFramePerfStats:n}=await f();await n(e,t)},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await $();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await $();await n({device:e,...t})},activateTestIme:async(t,r)=>{let{activateAndroidTestIme:i}=await f(),a=await i(t,r);if(a.outcome===`helper-unavailable`){n({level:`warn`,phase:`android_test_ime_activate_failed`,data:{device:t.id,error:a.reason,...a.hint===void 0?{}:{hint:a.hint}}});return}if(a.persistFailed&&!(!a.alreadyActive&&!a.activated))throw new e(`COMMAND_FAILED`,`Android test IME recovery records could not be persisted for ${t.name??t.id}.`,{reason:`android_test_ime_recovery_fence_failed`,deviceId:t.id})},restoreTestIme:async(t,n)=>{let{restoreAndroidTestIme:r}=await f(),i=await r(t,{stateDir:n.stateDir,shutdownTarget:n.shutdownTarget,signal:n.signal});if(i.reason===`set-failed`||i.reason===`record-unreadable`)throw new e(`COMMAND_FAILED`,`Android test IME could not be restored on ${t.name??t.id}.`,{reason:`android_test_ime_restore_incomplete`,deviceId:t.id})},recoverTestImeStartup:async e=>{let{listAndroidAdbSerialsQuick:t,restoreOrphanedAndroidTestImeOnDaemonStartup:n}=await f();await n({stateDir:e.stateDir,listSerials:t})},hasTestImeRecoveryEvidence:async e=>{let{readAndroidTestImeRecoveryMarkers:t}=await f();return(await t(e)).length>0}})}async function ft(e,t){let{resolveSessionAppBundleIdForTarget:n}=await lt();return{appBundleId:await n(e,t.target,t.currentAppBundleId),appName:t.target}}function pt(){return Object.freeze({resolve:async(e,t)=>{let{getLocalInteractor:n}=await import(`./interactors.js`).then(e=>e.n);return await n(e,t)}})}function mt(e){return Object.freeze({recoverStartupResources:async t=>{await e.android.hasTestImeRecoveryEvidence(t.stateDir)&&await e.android.recoverTestImeStartup(t)},detachForDaemonShutdown:async()=>await e.apple.detachRunnerSessionsForShutdown(),finalizeDaemonShutdown:async()=>await e.apple.finalizeRunnerSessionsForShutdown()})}function ht(e){return Object.freeze({captureSurface:async(t,n,r)=>t.platform===`linux`?await e.linux(n,r):(gt(t),await e.macos(n,r)),presentIosAcquisition:async(e,t)=>{let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(e,t)}})}function gt(e){if(e.platform!==`apple`||e.appleOs!==`macos`)throw TypeError(`Apple surface capture requires a non-app macOS surface`)}async function _t(e,t){let n=e?.surface===void 0?void 0:s(e.surface,`native`);if(!n)throw TypeError(`Apple surface capture requires a helper-routed macOS surface`);let{captureMacOsSurfaceSnapshot:r}=await import(`./macos-facade.js`);return await r({...e,surface:n},t)}function vt(e){let t=_(e.sessionsDir),n=Object.freeze({mode:`local`,start:t.start}),r=le(),i=Object.freeze({which:async e=>await ee(e)?e:void 0,run:async(e,t)=>{let n=await te(e.executable,ue(e),{allowFailure:e.allowFailure,cwd:e.cwd,env:e.env?{...process.env,...e.env}:void 0,signal:t,timeoutMs:e.timeoutMs});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}}),a=T({resolveSessionArtifacts:e.resolveSessionArtifacts,processes:t,resolveTransport:async e=>{if(e.platform!==`web`)return Object.freeze({mode:`local`});let{resolveWebNetworkTransport:t}=await import(`./platform-runtime-network-web-transport.js`);return await t(e)}}),o=Z(),s=dt();return Object.freeze({commands:i,appleTools:r,toolchains:ce(),artifacts:Object.freeze({resolveSession:e.resolveSessionArtifacts}),outputs:Object.freeze({openAppend:async t=>await fe(e.sessionsDir,t),readTail:async(t,n)=>await pe(e.sessionsDir,t,n)}),processes:t,processTransports:Object.freeze({resolve:async t=>{if(t.platform!==`android`)return n;let{resolveAndroidAppLogProcessTransport:r}=await import(`./platform-runtime-app-log-android-transport.js`);return r(e.sessionsDir,t,n)}}),...a,appleDeployment:Ke(),androidDeployment:qe(),androidTools:Je(),temporaryFiles:Object.freeze({create:async e=>await se(e)}),deviceReadiness:Object.freeze({applePhysical:Be(),appleAutomation:Ve(),androidEmulator:He()}),deviceShutdown:Ue({appleTools:r,commands:i},e.shutdownLoaders,e.assertShutdownAllowed),screenRecording:O({ownedProcesses:e.ownedProcesses}),audioProbe:j({ownedProcesses:e.ownedProcesses}),perf:Re(),snapshot:e.snapshot,localInteractors:pt(),appleApplications:o,androidApplications:s,applicationResources:mt({android:s,apple:o}),clock:Object.freeze({now:()=>Date.now(),sleep:async(e,t)=>{await de(e,void 0,t?{signal:t}:void 0)}})})}export{vt as createPlatformRuntimeHost,ht as createSnapshotRuntimeHost,_t as loadMacOsSurfaceSnapshot,h as recoverLegacyAppLogMarkersAfterDaemonLock};
|
|
5
|
+
`),skippedLines:r})}function He(e={}){let t=Object.freeze({resolve:async e=>{let{createAndroidScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-android-host.js`);return await t(e)}}),n=Object.freeze({resolve:async e=>{let{resolveWebScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-web-host.js`);return await t(e)}}),r=Object.freeze({prepare:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().prepare(e)},copy:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().copy(e)},remove:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);return await t().remove(e)}}),i=Object.freeze({sniff:async e=>{let{createScreenRecordingFinalizer:t}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);await t().sniff(e)},complete:async(e,t)=>{let{createScreenRecordingFinalizer:n}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);return await n().complete(e,t)}}),a=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({apple:Ue(),android:t,harmony:We(),web:n,outputs:r,finalize:i,ownedProcesses:a})}function Ue(){let e=async()=>{let{createAppleScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-apple-host.js`);return e()};return Object.freeze({availability:async t=>(await e()).availability(t),runRunner:async(t,n,r)=>await(await e()).runRunner(t,n,r),startSimulator:async(t,n,r)=>await(await e()).startSimulator(t,n,r),inspectProcess:async t=>await(await e()).inspectProcess(t),terminateProcess:async t=>await(await e()).terminateProcess(t),inspectRunner:async(t,n,r)=>await(await e()).inspectRunner(t,n,r),retrieveRunnerRecording:async(t,n,r,i)=>await(await e()).retrieveRunnerRecording(t,n,r,i),captureClockAnchor:async(t,n,r)=>await(await e()).captureClockAnchor(t,n,r),isRunnerBundleId:async t=>await(await e()).isRunnerBundleId(t)})}function We(){let e=async()=>{let{createHarmonyScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-harmony-host.js`);return e()};return Object.freeze({start:async(t,n,r)=>await(await e()).start(t,n,r),stop:async(t,n)=>await(await e()).stop(t,n),findMedia:async(t,n,r)=>await(await e()).findMedia(t,n,r),stageMedia:async(t,n,r)=>await(await e()).stageMedia(t,n,r),stagedFileSize:async(t,n,r)=>await(await e()).stagedFileSize(t,n,r),pull:async(t,n,r)=>await(await e()).pull(t,n,r),remove:async(t,n,r)=>await(await e()).remove(t,n,r),removeMedia:async(t,n,r)=>await(await e()).removeMedia(t,n,r)})}const N=2e3,P=(e,t)=>e===t;async function F(e){if(e===void 0)return;let[t,n]=await Promise.all([Promise.resolve(h(e)),Promise.resolve(u(e))]);return t&&n?Object.freeze({pid:e,startTime:t,command:n}):void 0}async function Ge(e){let t=await Ke(e.pid),n=m([e.pid],t),r=(await Promise.all(n.map(async e=>await F(e.pid)))).filter(e=>e!==void 0);return Object.freeze([e,...r.filter(t=>t.pid!==e.pid)])}async function Ke(e){try{return await p({timeoutMs:5e3})}catch(n){return r({level:`warn`,phase:`screen_recording_process_tree_unreadable`,data:{rootPid:e,reason:t(n)}}),[]}}function I(e,t=P){return!g(e.pid)||te(e.pid)?`missing`:Ze(e,t)?`owned-alive`:`ownership-lost`}async function qe(e,t){if(!g(e.pid))return`gone`;let n=await f(e.pid,5e3);return n.zombie===!0?`gone`:e.startTime.length===0||e.command.length===0?`not-ours`:n.startTime===null||n.command===null?`unprovable`:n.startTime===e.startTime&&t(e.command,n.command)?`ours`:`not-ours`}async function L(e,t,n=P){let r=t?.child.pid,i=async e=>({marker:e,evidence:await qe(e,n)}),a=({marker:e,evidence:t})=>t===`ours`||t===`unprovable`&&e.pid===r,o=await Promise.all(e.map(i)),s=o[0],c=new Set(e.map(({pid:e})=>e)),l=s!==void 0&&a(s)?await Ge(s.marker):[],u=await Promise.all(l.filter(({pid:e})=>!c.has(e)).map(async e=>await i(e))),d=[...o,...u],f=d.filter(a).map(({marker:e})=>e);if(f.length===0)return Je(d.map(({evidence:e})=>e));let p=new Set(f.map(({pid:e})=>e)),m=d.filter(({marker:e,evidence:t})=>!p.has(e.pid)&&t!==`gone`);for(let[e,r]of[[`SIGINT`,5e3],[`SIGTERM`,N],[`SIGKILL`,N]])if(Ye(f,e,t),await Xe(f,r,t,n))return m.length===0?`terminated`:`ownership-lost`;return`ownership-lost`}function Je(e){return e.every(e=>e===`gone`)?`already-missing`:`ownership-lost`}function Ye(e,t,n){let r=n?.child.pid;l(e.map(({pid:e})=>e).filter(e=>e!==r),t),r!==void 0&&e.some(({pid:e})=>e===r)&&n?.child.kill(t)}async function Xe(e,t,n,r){let i=n?.child.pid,a=n?await Qe(n.wait,t):!1;return await Promise.all(e.filter(({pid:e})=>!a||e!==i).map(async({pid:e})=>await d(e,t))),e.every(e=>a&&e.pid===i||I(e,r)===`missing`)}function Ze(e,t){let n=u(e.pid);return e.startTime.length>0&&e.command.length>0&&h(e.pid)===e.startTime&&n!==null&&t(e.command,n)}async function Qe(e,t){return await Promise.race([e.then(()=>!0,()=>!0),new Promise(e=>setTimeout(()=>e(!1),t))])}function $e(e={}){let t=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({hostCapture:Object.freeze({info:Object.freeze({source:`system-audio`,backend:`macos-screencapturekit`,sourceCount:1,notes:et}),start:async e=>{let{startMacOsAudioProbeProcess:t}=await import(`./macos-facade.js`),n=await t(e),r=await F(n.child.pid??void 0);return Object.freeze({...r===void 0?{}:{marker:r},wait:n.wait,terminate:async()=>{n.child.kill(`SIGTERM`),await n.wait.catch(()=>{})}})},inspectProcess:async e=>I(e),terminateProcess:async e=>await L([e])}),web:Object.freeze({resolve:async e=>{if(e.platform!==`web`)return;let{resolveWebProvider:t}=await import(`./src2.js`).then(e=>e.i),n=await t(),r=n.probeAudio?.bind(n);if(r)return Object.freeze({probe:async e=>await r({action:e.action,durationMs:e.durationMs,bucketMs:e.bucketMs})})}}),ownedProcesses:t})}function et(e){return[`Audio probe samples host system audio through ScreenCaptureKit for this ${o(e)?`iOS simulator`:e.platform===`android`?`Android emulator`:`macOS session`}; it is not app-instrumented audio.`,`Screen Recording permission is required for host system audio capture.`,`Other audible host apps can contribute to the measured buckets.`]}const R=v,z=async()=>await import(`./perf-facade.js`),B=Object.freeze({resourceKind:y,version:1,encode:e=>e,decode:dt});async function tt(t,n,r){if(r.kind!==`xctrace`)throw K(`Apple`,`xctrace`,r.kind);let i=r.template??(r.mode===`cpu-profile`?`Time Profiler`:`Animation Hitches`),a=await z(),o=await a.startAppleXctracePerfCapture({device:t,appBundleId:r.appId,mode:r.mode,template:i,outPath:r.outPath}),s=await F(o.child.pid??void 0);if(!s)throw await a.cleanupAppleXctracePerfCapture(o).catch(()=>{}),new e(`COMMAND_FAILED`,`Apple xctrace exposed no exact process identity`);return V(t,n,r,{family:`apple`,marker:s,capture:lt(o)},rt(o),U(`started`,o))}async function nt(e,t,n){let r=await R(),i;if(n.mode===`cpu-profile`){if(n.kind!==`simpleperf`)throw K(`Android`,`simpleperf`,n.kind);i=await r.startAndroidSimpleperfProfile(e,n.appId,n.outPath)}else{if(n.kind!==`perfetto`)throw K(`Android`,`perfetto`,n.kind);i=await r.startAndroidPerfettoTrace(e,n.appId,n.outPath)}return V(e,t,n,{family:`android`,capture:i},it(e,i),W(i))}function V(e,t,n,r,a,o){return Object.freeze({pendingHandle:new ue(a),envelope:le({resourceKind:y,sessionId:n.sessionId,device:i(e),owner:t,fence:n.fence,lifecycle:`open`,descriptor:ce(B,r)}),response:o})}function rt(e){return H({initialOutPath:e.outPath,inspect:()=>U(`started`,e),finish:async t=>await z().then(async n=>U(`stopped`,await n.stopAppleXctracePerfCapture(e,t))),cleanup:async()=>await z().then(async t=>{await t.cleanupAppleXctracePerfCapture(e)})})}function it(e,t){return H({initialOutPath:t.outPath,inspect:()=>W(t),finish:async n=>{let r=await R();return W(t.kind===`simpleperf`?await r.stopAndroidSimpleperfProfile(e,t,n):await r.stopAndroidPerfettoTrace(e,t,n))},cleanup:async()=>{await(await R()).cleanupAndroidNativePerfSession(e,t)}})}function H(e){let t=e.initialOutPath,n,r,i=async()=>await e.cleanup().then(()=>({status:`cleaned`}),G);return Object.freeze({inspect:e.inspect,setOutputPath:e=>{t=e},finish:async()=>n??=e.finish(t).then(e=>({status:`completed`,result:e}),e=>{throw n=void 0,e}),forceCleanup:async()=>r??=i(),[Symbol.asyncDispose]:async()=>{ut(await(r??=i()))}})}async function at(e){let t=b(e,B);if(t.status!==`decoded`||t.descriptor.family!==`apple`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};let n=await I(t.descriptor.marker);if(n===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(n===`missing`)return{status:`already-missing`};let r=await L([t.descriptor.marker]);return r===`terminated`?{status:`cleaned`}:r===`already-missing`?{status:`already-missing`}:{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function ot(e){let t=b(e,B);if(t.status!==`decoded`)return t;if(t.descriptor.family!==`apple`)return{status:`unreattachable`,reason:`descriptor-invalid`};let n=await I(t.descriptor.marker);return n===`owned-alive`?{status:`unreattachable`,reason:`transport-not-reattachable`}:n===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`missing`}}async function st(e){let t=b(e,B);return t.status===`decoded`?t.descriptor.family===`android`?{status:`unreattachable`,reason:`transport-not-reattachable`}:{status:`unreattachable`,reason:`descriptor-invalid`}:t}async function ct(e,t){let n=b(t,B);if(n.status!==`decoded`||n.descriptor.family!==`android`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};try{return await(await R()).cleanupAndroidNativePerfSession(e,n.descriptor.capture),{status:`cleaned`}}catch(e){return G(e)}}function lt(e){let{child:t,wait:n,...r}=e;return r}function U(e,t){return{perf:e,kind:t.kind,mode:t.mode,template:t.template,outPath:t.outPath,appBundleId:t.appBundleId,deviceId:t.deviceId,platform:t.platform,targetPids:t.targetPids,targetProcesses:t.targetProcesses,startedAt:t.startedAt,endedAt:t.endedAt}}function W(e){let t={action:e.action,platform:`android`,type:e.type,packageName:e.packageName,appPid:e.appPid,profilerPid:e.profilerPid,state:e.state,startedAt:new Date(e.startedAt).toISOString(),stoppedAt:typeof e.stoppedAt==`number`?new Date(e.stoppedAt).toISOString():void 0,outPath:e.outPath,sizeBytes:e.sizeBytes,remotePath:e.remotePath,method:e.method,message:e.message,...e.action===`stop`?{durationMs:e.durationMs,summary:e.summary}:{}};return e.kind===`simpleperf`?{...t,kind:`simpleperf`,mode:`cpu-profile`}:{...t,kind:`perfetto`,mode:`trace`}}function G(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:String(e)}}function ut(t){if(t.status===`cleanup-pending`)throw new e(`COMMAND_FAILED`,t.message??`Perf capture cleanup could not be confirmed`,{reason:t.reason})}function K(t,n,r){return new e(`INVALID_ARGS`,`${t} native perf requires --kind ${n}, not ${r}`)}function dt(e){return e.family===`android`&&ft(e.capture)?{status:`decoded`,descriptor:{family:`android`,capture:e.capture}}:e.family===`apple`&&ht(e.capture)&&yt(e.marker)?{status:`decoded`,descriptor:{family:`apple`,capture:e.capture,marker:e.marker}}:{status:`invalid`,message:`Perf capture descriptor body is invalid`}}function ft(e){return n(e)?pt(e.kind,e.type)&&q(e,[`packageName`,`appPid`,`profilerPid`,`remotePath`,`outPath`])&&typeof e.startedAt==`number`&&mt(e.state)&>(e,[`stoppedAt`,`sizeBytes`]):!1}function pt(e,t){return e===`simpleperf`&&t===`cpu-profile`||e===`perfetto`&&t===`trace`}function mt(e){return e===`running`||e===`stopped`}function ht(e){return n(e)&&e.kind===`xctrace`&&(e.mode===`cpu-profile`||e.mode===`trace`)&&q(e,[`template`,`outPath`,`appBundleId`,`deviceId`,`startedAt`])&&s(e.platform)&&_t(e.targetProcesses)&&vt(e.targetPids)}function q(e,t){return t.every(t=>typeof e[t]==`string`)}function gt(e,t){return t.every(t=>e[t]===void 0||typeof e[t]==`number`)}function _t(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function vt(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function yt(e){return n(e)&&typeof e.pid==`number`&&typeof e.startTime==`string`&&typeof e.command==`string`}const J=v,bt=v,xt=v,Y=async()=>await import(`./perf-facade.js`),X=async()=>await import(`./perf-facade.js`),St=async()=>await import(`./perf-facade.js`),Ct=async()=>await import(`./platform-runtime.js`).then(e=>e.U);function wt(){let e=Object.freeze({sampleFrames:async(e,t)=>await(await Y()).sampleAppleFramePerf(e,t),frameSampling:async e=>(await X()).buildAppleFrameSamplingMetadata(e),sampleMemory:async(e,t)=>await(await Y()).sampleAppleMemoryPerf(e,t),memorySampling:async e=>(await X()).buildAppleMemorySamplingMetadata(e),memorySnapshotSupport:async e=>(await X()).buildAppleMemorySnapshotSupport(e),captureMemorySnapshot:async(e,t,n)=>await(await Y()).captureAppleMemorySnapshot(e,t,n),start:async(e,t,n)=>await tt(e,t,n),reattach:async(e,{envelope:t})=>await ot(t),cleanup:async(e,{envelope:t})=>await at(t),writeProfileReport:async e=>await(await St()).writeAppleXctracePerfReport({tracePath:e.tracePath,outPath:e.outPath,template:e.template,appBundleId:e.appId})}),t=Object.freeze({sampleFrames:async(e,t)=>await(await bt()).sampleAndroidFramePerf(e,t),sampleMemory:async(e,t)=>await(await J()).sampleAndroidMemoryPerf(e,t),captureMemorySnapshot:async(e,t,n)=>await(await J()).captureAndroidHeapSnapshot(e,t,n),start:async(e,t,n)=>await nt(e,t,n),reattach:async(e,{envelope:t})=>await st(t),cleanup:async(e,{envelope:t})=>await ct(e,t),writeProfileReport:async(e,t)=>await(await xt()).writeAndroidSimpleperfReport(e,Tt(t.profile,t.tracePath),t.outPath)}),n=Object.freeze({sampleMemory:async(e,t)=>await(await Ct()).sampleHarmonyMemoryPerf(e,t)});return Object.freeze({apple:e,android:t,harmony:n})}function Tt(t,n){if(t?.kind!==`simpleperf`||t.type!==`cpu-profile`||t.mode!==`cpu-profile`)throw new e(`INVALID_ARGS`,`Stopped Simpleperf profile metadata is malformed.`);return{type:`cpu-profile`,kind:`simpleperf`,packageName:t.packageName,appPid:t.appPid,profilerPid:t.profilerPid,remotePath:t.remotePath,outPath:n,startedAt:t.startedAt?Date.parse(t.startedAt):Date.now(),state:`stopped`,...t.stoppedAt?{stoppedAt:Date.parse(t.stoppedAt)}:{},...t.sizeBytes===void 0?{}:{sizeBytes:t.sizeBytes}}}function Et(){return Object.freeze({ensureConnected:async(e,t)=>{t.throwIfAborted();try{let{resolveIosPhysicalDeviceControl:n}=await import(`./physical-device-facade.js`);await n(e).ensureReady(e,t),t.throwIfAborted()}catch(e){throw t.throwIfAborted(),e}}})}function Dt(){return Object.freeze({keepHot:e=>{import(`./runner-operations-facade.js`).then(({prewarmAppleRunnerCache:t})=>t(e,{})).catch(()=>{})},wasRecentlyObservedBooted:async e=>{let{wasSimulatorRecentlyObservedBooted:t}=await import(`./simulator-facade.js`);return t(e)},markBooted:e=>{import(`./simulator-facade.js`).then(({markSimulatorBooted:t})=>t(e)).catch(()=>{})}})}function Ot(){return Object.freeze({discover:async(e,t)=>{t.throwIfAborted();let n=await fe(e);return t.throwIfAborted(),n},launch:(e,t)=>{let n=[`-avd`,e];return t&&n.push(`-no-window`,`-no-audio`),ie(`emulator`,n)},terminate:async e=>{await ee({pids:[e],termTimeoutMs:1500,killTimeoutMs:1500})}})}function kt(e,t,n=()=>{}){let r,i,a=async()=>(r??=t.apple({appleTools:e.appleTools}),await r),o=async()=>(i??=t.android({commands:e.commands}),await i),s=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await a()).shutdownTarget(e,t))}),c=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await o()).shutdownTarget(e,t))}),l=Object.freeze({canShutdownTarget:async e=>await At(e,a,o),shutdownTarget:async e=>(n(),await jt(e,a,o))});return Object.freeze({apple:s,android:c,close:l})}async function At(e,t,n){return e.platform===`apple`?(await t()).canShutdownTarget(e):e.platform===`android`&&(await n()).canShutdownTarget(e)}async function jt(e,t,n){let r=new AbortController().signal;return e.platform===`apple`?await(await t()).shutdownTarget(e,r):e.platform===`android`?await(await n()).shutdownTarget(e,r):{success:!1,exitCode:-1,stdout:``,stderr:`Cannot shut down unsupported device ${e.platform}/${e.kind}`}}function Mt(){return Object.freeze({withInvalidatedAppResolutionCache:async(e,t)=>{let{invalidateIosAppResolutionCache:n}=await import(`./app-resolution-facade.js`);return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareIosInstallArtifact:n}=await import(`./install-artifact-facade.js`);return await n(e.source,t)},resolveAppBundleId:async(e,t)=>{let{resolveIosApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function Nt(){return Object.freeze({bundletoolJar:process.env.AGENT_DEVICE_BUNDLETOOL_JAR?.trim()||void 0,withInvalidatedAppResolutionCache:async(e,t)=>{let{withAndroidAppResolutionCacheInvalidated:n}=await v();return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareAndroidInstallArtifact:n}=await v();return await n(e.source,t)},resolveAppPackage:async(e,t)=>{let{resolveAndroidApp:n}=await v(),r=await n(e,t);if(r.type===`intent`){let{AppError:e}=await import(`./sdk-contracts.js`).then(e=>e.W);throw new e(`INVALID_ARGS`,`App uninstall requires a package name, not an intent`)}return r.value}})}function Pt(){return Object.freeze({probeClipboardShellSupport:async(e,t)=>{try{let{runAndroidShell:n,androidClipboardShellSupportForResult:r}=await v();return await r(await n(e,[`cmd`,`clipboard`,`get`,`text`],{allowFailure:!0,signal:t}))}catch{return`probe-failed`}},runAdb:async(e,t,n,r)=>{let{runAndroidAdb:i}=await v(),a=await i(e,t,{allowFailure:n.allowFailure,timeoutMs:n.timeoutMs,signal:r});return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}},installPackage:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await v(),a=i(e),o=a.install?await a.install(t,{replace:n.replace,signal:r}):await a.exec([`install`,...n.replace?[`-r`]:[],t],{signal:r});return{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode}},installBundle:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await v(),a=i(e).installBundle;return a?(await a(t,{mode:n,signal:r}),!0):!1}})}let Ft;const Z=()=>Ft??=import(`./runner-operations-facade.js`);let It;const Q=()=>It??=import(`./platform-runtime-runtime-hints.js`);let Lt;const Rt=()=>Lt??=import(`./platform-runtime-open-target.js`);let zt;const Bt=()=>zt??=import(`./app-resolution-facade.js`);let Vt;const Ht=()=>Vt??=import(`./macos-facade.js`);let Ut;const Wt=()=>Ut??=import(`./retry2.js`).then(e=>e.t);function Gt(){return Object.freeze({resolveOpenTarget:async(e,t)=>await Kt(e,t),prewarmRunnerCache:async(e,t,n)=>{let{prewarmAppleRunnerCache:r}=await Z();await r(e,$(t,n))},prewarmRunnerSession:async(e,t,n,r,i)=>{let{prewarmIosRunnerSession:a}=await Z();await a(e,{...$(t,n),propagateError:r,...i})},notifyRunnerAppRelaunched:async(e,t,n)=>{let{notifyIosRunnerAppRelaunched:r}=await Z();await r(e,$(t,n))},stopRunnerSession:async e=>{let{stopIosRunnerSession:t}=await Z();await t(e)},hasLiveRunnerSession:async(e,t)=>{let{hasLiveIosRunnerSession:n}=await Z();return n(e,{requestId:t.requestId})},releaseSpeculativeRunner:async(e,t)=>{let{releaseSpeculativeIosRunnerSessionFor:n}=await Z();return await n(e,{requestId:t.requestId})},releaseRunnerOnClose:async(e,t)=>{let{releaseIosRunnerOnClose:n}=await Z();await n(e,t)},prepareRunner:async(e,t,n)=>{let{Deadline:r}=await Wt(),{prepareIosRunner:i}=await Z(),a=Date.now();return await i(e,{...$(t.execution,n),cleanStaleBundles:!0,buildTimeoutMs:t.timeoutMs,healthTimeoutMs:t.timeoutMs,prepareDeadline:r.fromTimeoutMs(t.timeoutMs,a),startupTimeoutMs:t.timeoutMs})},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await Q();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await Q();await n({device:e,...t})},dismissCloseAlerts:async(e,t)=>await Yt(e,t),detachRunnerSessionsForShutdown:async()=>{let{detachIosRunnerSessionsForShutdown:e}=await Z();await e()},finalizeRunnerSessionsForShutdown:async()=>{let{stopAllIosRunnerSessions:e}=await Z();await e()}})}async function Kt(t,n){if(n.foreground){let n=await qt(t);if(n)return n;throw new e(`AMBIGUOUS_MATCH`,`open --foreground requires exactly one running app on the selected iOS simulator.`,{reason:`foreground_app_ambiguous`,hint:`Pass an explicit app instead: agent-device open <app> --platform ios.`})}let r=await Jt(t,n.surface),{resolveSessionAppBundleIdForTarget:i}=await Rt();return{appBundleId:r.appBundleId??await i(t,n.target,n.currentAppBundleId),appName:r.appName??n.target}}async function qt(e){if(!o(e)||e.kind!==`simulator`)return;let{detectSoleRunningIosSimulatorApp:t}=await Bt(),n=await t(e);return n?{appBundleId:n.bundleId,appName:n.name}:void 0}async function Jt(e,t){if(!a(e)||t===`app`||t===`desktop`||t===`menubar`)return{};let{resolveFrontmostMacOsApp:n}=await Ht(),r=await n();return{appBundleId:r.bundleId,appName:r.appName}}function $(e,t){return{requestId:e.requestId,logPath:e.logPath,traceLogPath:e.traceLogPath,verbose:e.verbose,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext,signal:t}}async function Yt(e,t){if(!a(e))return;let{runMacOsAlertAction:n}=await Ht();await n(`dismiss`,t.surface===`frontmost-app`?{surface:`frontmost-app`}:t.appBundleId?{bundleId:t.appBundleId}:{})}let Xt;const Zt=()=>Xt??=import(`./platform-runtime-open-target.js`);let Qt;const $t=()=>Qt??=import(`./platform-runtime-runtime-hints.js`);function en(){return Object.freeze({resolveOpenTarget:async(e,t)=>await tn(e,t),inferOpenedAppBundleId:async(e,t,n)=>{if(n)return n;try{let{inferAndroidPackageAfterOpen:r}=await v();return await r(e,t,n)}catch{return n}},resetFramePerfStats:async(e,t)=>{let{resetAndroidFramePerfStats:n}=await v();await n(e,t)},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await $t();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await $t();await n({device:e,...t})},activateTestIme:async(t,n)=>{let{activateAndroidTestIme:i}=await v(),a=await i(t,n);if(a.outcome===`helper-unavailable`){r({level:`warn`,phase:`android_test_ime_activate_failed`,data:{device:t.id,error:a.reason,...a.hint===void 0?{}:{hint:a.hint}}});return}if(a.persistFailed&&!(!a.alreadyActive&&!a.activated))throw new e(`COMMAND_FAILED`,`Android test IME recovery records could not be persisted for ${t.name??t.id}.`,{reason:`android_test_ime_recovery_fence_failed`,deviceId:t.id})},restoreTestIme:async(t,n)=>{let{restoreAndroidTestIme:r}=await v(),i=await r(t,{stateDir:n.stateDir,shutdownTarget:n.shutdownTarget,signal:n.signal});if(i.reason===`set-failed`||i.reason===`record-unreadable`)throw new e(`COMMAND_FAILED`,`Android test IME could not be restored on ${t.name??t.id}.`,{reason:`android_test_ime_restore_incomplete`,deviceId:t.id})},recoverTestImeStartup:async e=>{let{listAndroidAdbSerialsQuick:t,restoreOrphanedAndroidTestImeOnDaemonStartup:n}=await v();await n({stateDir:e.stateDir,listSerials:t})},hasTestImeRecoveryEvidence:async e=>{let{readAndroidTestImeRecoveryMarkers:t}=await v();return(await t(e)).length>0}})}async function tn(e,t){let{resolveSessionAppBundleIdForTarget:n}=await Zt();return{appBundleId:await n(e,t.target,t.currentAppBundleId),appName:t.target}}function nn(){return Object.freeze({resolve:async(e,t)=>{let{getLocalInteractor:n}=await import(`./interactors.js`).then(e=>e.n);return await n(e,t)}})}function rn(e){return Object.freeze({recoverStartupResources:async t=>{await e.android.hasTestImeRecoveryEvidence(t.stateDir)&&await e.android.recoverTestImeStartup(t)},detachForDaemonShutdown:async()=>await e.apple.detachRunnerSessionsForShutdown(),finalizeDaemonShutdown:async()=>await e.apple.finalizeRunnerSessionsForShutdown()})}function an(e){return Object.freeze({captureSurface:async(t,n,r)=>t.platform===`linux`?await e.linux(n,r):(on(t),await e.macos(n,r)),presentIosAcquisition:async(e,t)=>{let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(e,t)}})}function on(e){if(e.platform!==`apple`||e.appleOs!==`macos`)throw TypeError(`Apple surface capture requires a non-app macOS surface`)}async function sn(e,t){let n=e?.surface===void 0?void 0:c(e.surface,`native`);if(!n)throw TypeError(`Apple surface capture requires a helper-routed macOS surface`);let{captureMacOsSurfaceSnapshot:r}=await import(`./macos-facade.js`);return await r({...e,surface:n},t)}function cn(e){let t=ve(e.sessionsDir),n=Object.freeze({mode:`local`,start:t.start}),r=he(),i=Object.freeze({which:async e=>await ae(e)?e:void 0,run:async(e,t)=>{let n=await oe(e.executable,ge(e),{allowFailure:e.allowFailure,cwd:e.cwd,env:e.env?{...process.env,...e.env}:void 0,signal:t,timeoutMs:e.timeoutMs});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}}),a=ze({resolveSessionArtifacts:e.resolveSessionArtifacts,processes:t,resolveTransport:async e=>{if(e.platform!==`web`)return Object.freeze({mode:`local`});let{resolveWebNetworkTransport:t}=await import(`./platform-runtime-network-web-transport.js`);return await t(e)}}),o=Gt(),s=en();return Object.freeze({commands:i,appleTools:r,toolchains:me(),artifacts:Object.freeze({resolveSession:e.resolveSessionArtifacts}),outputs:Object.freeze({openAppend:async t=>await Pe(e.sessionsDir,t),readTail:async(t,n)=>await Fe(e.sessionsDir,t,n)}),processes:t,processTransports:Object.freeze({resolve:async t=>{if(t.platform!==`android`)return n;let{resolveAndroidAppLogProcessTransport:r}=await import(`./platform-runtime-app-log-android-transport.js`);return r(e.sessionsDir,t,n)}}),...a,appleDeployment:Mt(),androidDeployment:Nt(),androidTools:Pt(),temporaryFiles:Object.freeze({create:async e=>await pe(e)}),deviceReadiness:Object.freeze({applePhysical:Et(),appleAutomation:Dt(),androidEmulator:Ot()}),deviceShutdown:kt({appleTools:r,commands:i},e.shutdownLoaders,e.assertShutdownAllowed),screenRecording:He({ownedProcesses:e.ownedProcesses}),audioProbe:$e({ownedProcesses:e.ownedProcesses}),perf:wt(),snapshot:e.snapshot,localInteractors:nn(),appleApplications:o,androidApplications:s,applicationResources:rn({android:s,apple:o}),clock:Object.freeze({now:()=>Date.now(),sleep:async(e,t)=>{await _e(e,void 0,t?{signal:t}:void 0)}})})}export{ve as a,cn as createPlatformRuntimeHost,an as createSnapshotRuntimeHost,L as i,sn as loadMacOsSurfaceSnapshot,F as n,Ge as r,ye as recoverLegacyAppLogMarkersAfterDaemonLock,I as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`);async function
|
|
1
|
+
import{I as e,P as t}from"./sdk-contracts.js";import{h as n}from"./sdk-device.js";import{r}from"./exec.js";import"./command.js";import{n as i}from"./runtime-transport-hints.js";import{t as a}from"./platform-runtime-android-mechanics.js";import{n as o}from"./device-shell.js";import{n as s}from"./entities.js";const c=`debug_http_host`,l=`dev_server_https`,u=`RCT_jsLocation`,d=`RCT_packager_scheme`,f=`React Native runtime hints require adb run-as access to the app sandbox. Verify the app is debuggable and the selected package/device are correct.`,p=[`<?xml version="1.0" encoding="utf-8" standalone="yes" ?>`,`<map>`,`</map>`,``].join(`
|
|
2
|
+
`);async function m(e){let{device:t,appId:r,values:a}=e;if(!r)return;let o=i({metroHost:a.metroHost,metroPort:a.metroPort?Number(a.metroPort):void 0,bundleUrl:a.bundleUrl});if(o){if(t.platform===`android`){await _(t,r,o);return}n(t)&&t.kind===`simulator`&&await E(t,r,o)}}async function h(e){let{device:t,appId:r}=e;if(r){if(t.platform===`android`){await v(t,r);return}n(t)&&t.kind===`simulator`&&await D(t,r)}}function g(e){return[`shared_prefs/${e}_preferences.xml`,`shared_prefs/ReactNativeDevPrefs.xml`]}async function _(e,t,n){await P(t);let r=[];for(let i of g(t)){let a=A(await b(e,t,i),c,`${n.host}:${n.port}`);a=j(a,l,n.scheme===`https`),r.push({path:i,xml:a})}await x(e,t,r)}async function v(e,t){await P(t);let n=[];for(let r of g(t)){let i=await b(e,t,r),a=N(N(i,c),l);a!==i&&n.push({path:r,xml:a})}n.length!==0&&await x(e,t,n)}async function y(e,t,n){let{runAndroidAdb:r}=await a();return await r(e,t,n)}async function b(e,t,n){let r=await y(e,o(`adb`,`shell`,[`run-as`,t,`cat`,n]),{allowFailure:!0});return r.exitCode===0?k(r.stdout):p}async function x(e,t,n){await S(e,t);try{await w(e,t,n)}catch(e){throw T(e,t)}}async function S(e,t){let n=o(`adb`,`shell`,[`run-as`,t,`id`]),r=await y(e,n,{allowFailure:!0});if(r.exitCode!==0)throw C(r,t,n)}function C(e,n,i){let a=I(e.stdout,e.stderr);return new t(`COMMAND_FAILED`,a?`Failed to access Android app sandbox for ${n}`:`Failed to probe Android app sandbox for ${n}`,r(e,{package:n,cmd:`adb`,args:i,hint:a?f:`adb shell run-as probe failed. Check adb connectivity and that the device is reachable. Inspect stderr/details for more information.`}))}async function w(e,t,n){await y(e,o(`adb`,`shell`,[`run-as`,t,`mkdir`,`-p`,`shared_prefs`]));for(let r of n)await y(e,o(`adb`,`shell`,[`run-as`,t,`tee`,r.path]),{stdin:r.xml.trimEnd()})}function T(n,r){let i=e(n);if(i.code===`TOOL_MISSING`)return i;let a=I(typeof i.details?.stdout==`string`?i.details.stdout:``,typeof i.details?.stderr==`string`?i.details.stderr:``);return new t(`COMMAND_FAILED`,a?`Failed to access Android app sandbox for ${r}`:`Failed to write Android runtime hints for ${r}`,{...i.details??{},package:r,cmd:`adb`,phase:`write-runtime-hints`,hint:a?f:`adb run-as succeeded, but writing React Native dev-server preferences failed. Inspect stderr/details for the failing shell command.`},i)}async function E(e,t,n){await O(e,[`spawn`,e.id,`defaults`,`write`,t,u,`-string`,`${n.host}:${n.port}`]),await O(e,[`spawn`,e.id,`defaults`,`write`,t,d,`-string`,n.scheme])}async function D(e,t){await O(e,[`spawn`,e.id,`defaults`,`delete`,t,u],{allowFailure:!0}),await O(e,[`spawn`,e.id,`defaults`,`delete`,t,d],{allowFailure:!0})}async function O(e,t,n){let[{buildSimctlArgsForDevice:r},{runXcrun:i}]=await Promise.all([import(`./simctl-facade.js`),import(`./tool-provider-facade.js`)]);await i(r(e,t),n)}function k(e){let t=e.trim();return!t.includes(`<map`)||!t.includes(`</map>`)?p:`${t}\n`}function A(e,t,n){let r=` <string name="${s(t)}">${s(n)}</string>`;return M(N(e,t),r)}function j(e,t,n){let r=` <boolean name="${s(t)}" value="${n?`true`:`false`}" />`;return M(N(e,t),r)}function M(e,t){return k(e).replace(`</map>`,`${t}\n</map>`)}function N(e,t){let n=F(t);return k(e).replace(RegExp(`^\\s*<string name="${n}">[\\s\\S]*?<\\/string>\\n?`,`m`),``).replace(RegExp(`^\\s*<boolean name="${n}" value="(?:true|false)"\\s*\\/?>\\n?`,`m`),``)}async function P(e){let{classifyAndroidAppTarget:n,formatAndroidInstalledPackageRequiredMessage:r}=await a();if(n(e)!==`binary`)return;let i=r(e);throw new t(`INVALID_ARGS`,i,{package:e,hint:i})}function F(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)}function I(e,t){let n=`${e}\n${t}`.toLowerCase();return[`run-as: package not debuggable`,`run-as: permission denied`,`run-as: package is unknown`,`run-as: unknown package`,`is unknown`,`is not an application`,`could not set capabilities`].some(e=>n.includes(e))}export{m as applyRuntimeHintValues,h as clearRuntimeHintValues};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./platform-runtime-android-mechanics.js";import{
|
|
1
|
+
import{t as e}from"./platform-runtime-android-mechanics.js";import{o as t,s as n}from"./device-shell.js";import{n as r}from"./video.js";import i from"node:path";const a={medium:8e6,high:2e7};async function o(o){let{resolveAndroidAdbExecutor:c,resolveScopedAndroidAdbBackgroundTransport:l,runAdbShell:u}=await e(),d=c(o),f=l(o),p=async(e,t)=>await u(d,e,{allowFailure:!0,timeoutMs:5e3,signal:t}),m=async(e,t)=>{let n=await p([`test`,`-e`,e],t);return n.exitCode===0?`present`:n.exitCode===1&&n.stderr.trim()===``?`absent`:`uncertain`};return Object.freeze({mode:f.mode,start:async({remotePath:e,quality:r=`medium`},i)=>{let o=(await p([t(`screenrecord --bit-rate ${a[r]} ${n(e)} >/dev/null 2>&1 & echo $!`)],i)).stdout.split(/\s+/).find(e=>/^\d+$/.test(e));if(!o)throw Error(`Android screenrecord did not return a process id`);let c=await s(p,{pid:o,remotePath:e,startTime:``},i);if(c.status!==`owned-alive`||!c.process)throw Error(`Android screenrecord did not expose a complete process identity`);return Object.freeze({process:c.process})},inspect:async(e,t)=>(await s(p,e,t)).status,stop:async(e,t,n)=>{let r=await s(p,e,n);return r.status===`missing`?`already-missing`:r.status===`foreign-writer`?`ownership-lost`:r.status===`owned-alive`?(await p([`kill`,t?.force?`-9`:`-2`,e.pid],n)).exitCode===0?`stopped`:`uncertain`:r.status},exists:async(e,t)=>{let n=await m(e,t);return n===`present`||n!==`absent`&&`uncertain`},size:async(e,t)=>{let n=await m(e,t);if(n!==`present`)return n===`absent`?void 0:`uncertain`;let r=await p([`stat`,`-c`,`%s`,e],t);if(r.exitCode!==0)return`uncertain`;let i=Number(r.stdout.trim());return Number.isSafeInteger(i)&&i>=0?i:`uncertain`},probeRunningWriters:async(e,t)=>{let n=await p([`ps`,`-A`,`-o`,`pid=`],t);if(n.exitCode!==0)return{writers:[],conclusive:!1};let r=n.stdout.split(/\s+/).filter(e=>/^\d+$/.test(e)),i=await Promise.all(r.map(async n=>await s(p,{pid:n,remotePath:e,startTime:``},t)));return{writers:i.flatMap(e=>e.status===`owned-alive`&&e.process?[e.process]:[]),conclusive:!i.some(e=>e.status===`uncertain`)}},pullPlayable:async({remotePath:e,outputPath:t},n)=>{let i=await d([`pull`,e,t],{allowFailure:!0,signal:n});return{...i,playable:i.exitCode===0&&await r(t)}},remove:async(e,t)=>(await p([`rm`,`-f`,e],t)).exitCode===0,manifestPathFor:e=>`${i.posix.dirname(e)}/agent-device-recording-active.json`,readManifest:async(e,t)=>{let n=await p([`test`,`-e`,e],t);if(n.exitCode!==0)return n.exitCode===1&&n.stderr.trim()===``?{status:`missing`}:{status:`unavailable`,message:n.stderr.trim()||`Android recording manifest probe failed`};let r=await p([`cat`,e],t);return r.exitCode===0?{status:`read`,contents:r.stdout}:{status:`unavailable`,message:r.stderr.trim()||`Android recording manifest could not be read`}},writeManifest:async({manifestPath:e,contents:r},i)=>{let a=`${e}.tmp`;if((await p([t(`printf %s ${n(r)} > ${n(a)} && mv -f ${n(a)} ${n(e)}`)],i)).exitCode!==0)throw Error(`failed to write Android recording manifest`)},removeManifest:async(e,t)=>(await p([`rm`,`-f`,e],t)).exitCode===0})}async function s(e,t,n){let r=await c(e,t.pid,n);if(r!==`present`)return{status:r};let i=await e([`cat`,`/proc/${t.pid}/stat`],n);if(i.exitCode!==0)return{status:`uncertain`};let a=u(i.stdout);if(!a)return{status:`uncertain`};let o=await e([`cat`,`/proc/${t.pid}/cmdline`],n);return o.exitCode===0?l(o.stdout,t.remotePath)?t.startTime.length>0&&t.startTime!==a?{status:`foreign-writer`}:{status:`owned-alive`,process:Object.freeze({pid:t.pid,remotePath:t.remotePath,startTime:a})}:{status:`ownership-lost`}:{status:`uncertain`}}async function c(e,t,n){let r=await e([`test`,`-d`,`/proc/${t}`],n);return r.exitCode===0?`present`:r.exitCode===1&&r.stderr.trim()===``?`missing`:`uncertain`}function l(e,t){let n=e.split(`\0`).filter(e=>e.length>0),r=n[0];return r!==void 0&&i.posix.basename(r)===`screenrecord`&&n.at(-1)===t}function u(e){let t=e.lastIndexOf(`)`);if(t<0)return;let n=e.slice(t+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:void 0}export{o as createAndroidScreenRecordingTransport};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{y as e}from"./file.js";import"./process.js";import{t}from"./scoped-provider.js";import n from"node:path";const r=Object.freeze({authority:`local-lease`,available:!0,start:i,inspect:async(e,t)=>await d(e,t),stop:async({device:e,runnerSessionId:t,appBundleId:n,signal:r})=>{let{runAppleRunnerCommand:i}=await import(`./runner-operations-facade.js`);await i(e,{command:`recordStop`,appBundleId:n},{signal:r,expectedRunnerSessionId:t})}});async function i({device:e,appBundleId:t,outputPath:n,fps:r,signal:i}){let{readRunnerSessionLiveness:s,runAppleRunnerCommand:c}=await import(`./runner-operations-facade.js`),l=`agent-device-recording-${Date.now()}.mp4`,u=e.appleOs===`macos`||e.kind!==`device`?void 0:`tmp/${l}`,d=await c(e,{command:`recordStart`,outPath:a(e,n,l,u),...r===void 0?{}:{fps:r},appBundleId:t},{signal:i}),f=s(e.id);if(!f||f.liveness!==`ready`)throw Error(`Apple runner recording did not expose a durable runner session identity`);try{i?.throwIfAborted()}catch(n){throw await c(e,{command:`recordStop`,appBundleId:t},{expectedRunnerSessionId:f.sessionId}).catch(()=>{}),n}return o(f.sessionId,u,d)}function a(e,t,r,i){return e.appleOs===`macos`?t:i===void 0?n.basename(t):r}function o(e,t,n){return Object.freeze({runnerSessionId:e,...t===void 0?{}:{remotePath:t},...typeof n.recorderStartUptimeMs==`number`?{recorderStartUptimeMs:n.recorderStartUptimeMs}:{}})}const s=Object.freeze({authority:`scoped-provider`,available:!1,start:async()=>{throw Error(`Scoped Apple runner provider does not expose durable recording authority`)},inspect:async()=>`ownership-lost`,stop:async()=>{throw Error(`Scoped Apple runner recording authority is unavailable`)}}),c=t(r);function l(){return c.resolve()}async function u(e,t){return await c.run(e??s,t)}async function d(t,n){let{readRunnerSessionLiveness:r,readStaleRunnerLease:i,verifyLeaseRunnerPidIdentity:a}=await import(`./runner-operations-facade.js`),o=r(t.id);if(o)return o.liveness===`gone`?`missing`:o.sessionId===n?`owned-alive`:`ownership-lost`;let s=await i(t.id);return s?s.sessionId===n?s.runnerPid===null||!e(s.runnerPid)?`missing`:await a(s,s.runnerPid)?`owned-alive`:`ownership-lost`:`ownership-lost`:`missing`}export{l as resolveAppleRunnerScreenRecordingTransport,u as withAppleRunnerScreenRecordingTransport};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{r as t}from"./exec.js";import"./command.js";import{i as n,n as r,r as i,t as a}from"./platform-runtime-
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{r as t}from"./exec.js";import"./command.js";import{i as n,n as r,r as i,t as a}from"./platform-runtime-operation-host.js";import o from"node:fs";const s=(e,t)=>{if(e===t)return!0;let n=/^(?:\S*\/)?xcrun simctl (.+)$/.exec(e)?.[1],r=/^(?:\S*\/)?simctl (.+)$/.exec(t)?.[1];return n!==void 0&&n===r&&/^(?:--set .+ )?io \S+ recordVideo .+$/.test(n)};async function c(e,t,a){let{resolveAppleSimulatorScreenRecordingTransport:c}=await import(`./platform-runtime-screen-recording-apple-transport.js`);a?.throwIfAborted();let p;try{p=await u(c().start({device:e,outputPath:t,signal:a}),a),a?.throwIfAborted()}catch(e){throw p&&await d(p),o.rmSync(t,{force:!0}),a?.throwIfAborted(),e}if(!p)throw Error(`simctl recordVideo acquisition did not return a process`);let m;try{if(m=await l(p.child.pid,p.wait,a),!m)throw Error(`simctl recordVideo did not expose a complete process identity`)}catch(e){throw await d(p),a?.throwIfAborted(),e}try{await h(t,p.wait,a);let e=await r(m.pid)??m,n=await i(e);return f(p,n)}catch(e){throw await n([m],p,s).catch(()=>{}),await p.wait.catch(()=>void 0),o.rmSync(t,{force:!0}),a?.throwIfAborted(),e}}async function l(e,t,n){let i=g(t),a=e===void 0?0:80;for(let t=0;t<=a;t+=1){n?.throwIfAborted();let o=await r(e);if(o)return o;let s=await Promise.race([i,t<a?v(25,n).then(()=>void 0):Promise.resolve(void 0)]);if(s)throw _(s)}}async function u(e,t){let n=Promise.resolve(e);if(!t)return await n;if(t.aborted)throw`child`in e?await d(e):n.then(d).catch(()=>void 0),t.reason;let r=()=>{},i=new Promise((e,n)=>{let i=()=>n(t.reason);t.addEventListener(`abort`,i,{once:!0}),r=()=>t.removeEventListener(`abort`,i),t.aborted&&i()});try{return await Promise.race([n,i])}catch(e){throw t.aborted?(n.then(d).catch(()=>void 0),t.reason):e}finally{r()}}async function d(e){e.child.kill(`SIGINT`);let t=new AbortController;await Promise.race([e.wait.then(()=>!0,()=>!0),v(5e3,t.signal).then(()=>!1)]).finally(()=>t.abort())||(e.child.kill(`SIGKILL`),await e.wait.catch(()=>void 0))}function f(e,t){let r,i=!1,a=()=>n(t,e,s).then(e=>{if(e===`ownership-lost`)throw Error(`simctl recordVideo process ownership changed before cleanup`);i=e===`terminated`}),o=()=>(r??=a().catch(e=>{throw r=void 0,e}),r),c=e.wait.then(async e=>{let t=r;return t&&await t.catch(()=>void 0),i&&e.exitCode!==0?{...e,exitCode:0}:e});return Object.freeze({markers:Object.freeze([...t]),wait:c,terminate:o})}function p(e){return a(e,s)}async function m(e){return await n([e],void 0,s)}async function h(e,t,n){let r=g(t),i;r.then(e=>{i=e}),await Promise.resolve();for(let t=0;t<=60;t+=1){if(n?.throwIfAborted(),i)throw _(i);if(o.existsSync(e)){let e=await Promise.race([r,v(50,n).then(()=>void 0)]);if(e)throw _(e);return}if(t===60)throw Error(`simctl recordVideo did not create its output within 15000ms`);let a=await Promise.race([r,v(250,n).then(()=>void 0)]);if(a)throw _(a)}}function g(e){return e.then(e=>({kind:`exited`,result:e}),e=>({kind:`failed`,error:e}))}function _(n){if(n.kind===`failed`)return n.error instanceof Error?n.error:Error(String(n.error));let{exitCode:r}=n.result;return r===16?new e(`DEVICE_IN_USE`,`CoreSimulator host recording is already in progress`,t({...n.result,exitCode:r},{reason:`apple_simulator_recording_busy`,retriable:!1,hint:`Stop the active recording with record stop in its owning session. If a previous recorder died and no recording is active, ask the host operator to restart the CoreSimulator stream service before retrying.`})):Error(`simctl recordVideo exited with code ${r}`)}function v(e,t){return t?.throwIfAborted(),new Promise((n,r)=>{let i=e=>{clearTimeout(a),t?.removeEventListener(`abort`,o),e===void 0?n():r(e)},a=setTimeout(()=>i(),e);if(!t)return;let o=()=>i(t.reason);t.addEventListener(`abort`,o,{once:!0}),t.aborted&&o()})}export{p as inspectAppleSimulatorRecordingProcess,c as startAppleSimulatorRecording,m as terminateAppleSimulatorRecordingProcess};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(){return Object.freeze({start:async(e,t,r)=>await n(e,[`aa`,`start`,`-b`,`com.huawei.hmos.screenrecorder`,`-a`,`com.huawei.hmos.screenrecorder.ServiceExtAbility`,`--ps`,`CustomizedFileName`,t],r),stop:async(e,t)=>await n(e,[`aa`,`start`,`-b`,`com.huawei.hmos.screenrecorder`,`-a`,`com.huawei.hmos.screenrecorder.ServiceExtAbility`],t),findMedia:async(e,t,r)=>(await n(e,[`mediatool`,`query`,t,`-u`],r)).stdout.match(/file:\/\/[^\s"']+/)?.[0],stageMedia:async(e,t,r)=>(await n(e,[`mediatool`,`recv`,t.mediaUri,t.remotePath],r)).exitCode===0,stagedFileSize:async(e,t,r)=>{let i=await n(e,[`stat`,`-c`,`%s`,t],r);if(i.exitCode!==0)return;let a=Number(i.stdout.trim());return Number.isSafeInteger(a)&&a>0?a:void 0},pull:async(e,n,r)=>await t(e,[`file`,`recv`,n.remotePath,n.outputPath],r),remove:async(e,t,r)=>(await n(e,[`rm`,`-f`,t],r)).exitCode===0,removeMedia:async(e,t,r)=>(await n(e,[`mediatool`,`delete`,t],r)).exitCode===0})}async function t(e,t,n){let{runHarmonyHdc:r}=await import(`./
|
|
1
|
+
function e(){return Object.freeze({start:async(e,t,r)=>await n(e,[`aa`,`start`,`-b`,`com.huawei.hmos.screenrecorder`,`-a`,`com.huawei.hmos.screenrecorder.ServiceExtAbility`,`--ps`,`CustomizedFileName`,t],r),stop:async(e,t)=>await n(e,[`aa`,`start`,`-b`,`com.huawei.hmos.screenrecorder`,`-a`,`com.huawei.hmos.screenrecorder.ServiceExtAbility`],t),findMedia:async(e,t,r)=>(await n(e,[`mediatool`,`query`,t,`-u`],r)).stdout.match(/file:\/\/[^\s"']+/)?.[0],stageMedia:async(e,t,r)=>(await n(e,[`mediatool`,`recv`,t.mediaUri,t.remotePath],r)).exitCode===0,stagedFileSize:async(e,t,r)=>{let i=await n(e,[`stat`,`-c`,`%s`,t],r);if(i.exitCode!==0)return;let a=Number(i.stdout.trim());return Number.isSafeInteger(a)&&a>0?a:void 0},pull:async(e,n,r)=>await t(e,[`file`,`recv`,n.remotePath,n.outputPath],r),remove:async(e,t,r)=>(await n(e,[`rm`,`-f`,t],r)).exitCode===0,removeMedia:async(e,t,r)=>(await n(e,[`mediatool`,`delete`,t],r)).exitCode===0})}async function t(e,t,n){let{runHarmonyHdc:r}=await import(`./platform-runtime.js`).then(e=>e.U);return await r(e,t,{allowFailure:!0,signal:n})}async function n(e,t,n){let{runHarmonyShell:r}=await import(`./platform-runtime.js`).then(e=>e.U);return await r(e,t,{allowFailure:!0,signal:n})}export{e as createHarmonyScreenRecordingHost};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e){if(e.platform!==`web`)return;let{hasScopedWebProvider:t,resolveWebProvider:n}=await import(`./
|
|
1
|
+
async function e(e){if(e.platform!==`web`)return;let{hasScopedWebProvider:t,resolveWebProvider:n}=await import(`./src2.js`).then(e=>e.i);if(!await t())return;let r=await n();if(!(!r.startRecording||!r.stopRecording))return Object.freeze({start:async e=>await r.startRecording(e),stop:async()=>await r.stopRecording()})}export{e as resolveWebScreenRecordingTransport};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e}from"./sdk-device.js";import{t
|
|
1
|
+
import{F as e}from"./sdk-device.js";import{C as t,E as n,F as r,H as i,M as a,R as o,T as s,U as c,V as l,X as u,Z as d,_ as f,b as p,c as m,i as h,k as g,l as _,n as v,p as y,q as b}from"./perf-runtime.js";import{i as x}from"./touch-runtime.js";import{n as S}from"./audio-probe-runtime.js";const C={appLog:!0,apps:!0,appDeployment:!0,appState:!0,network:!0,screenRecording:!0,screenshot:!0,snapshot:!0,viewport:!0,focus:!0,gesture:!0,scroll:!0,typeText:!0,touch:!0,elementText:!0,back:!0,orientation:!0,fold:!0,tvRemote:!0,keyboard:!0,clipboard:!0,systemButton:!0,triggerAppEvent:!0,settings:!0,readAlert:!0,awaitAlert:!0,acceptAlert:!0,dismissAlert:!0,audioProbeCapture:!0,audioProbeQuery:!0,perf:!0,readiness:!0,shutdown:!0};function w(e){let t={};for(let n of Object.keys(C))t[n]=e(n);return t}function T(e){return Object.freeze({...w(()=>e),lifecycle:d({resolveOpenTarget:e,prepareApplicationOpen:e,openApplication:e,applyRuntimeHints:e,clearRuntimeHints:e,closeApplication:e,finalizeApplicationClose:e,prepareAppleRunner:e,configureProviderPortReverse:e})})}function E(e,t,n){return Object.freeze({device:e,owner:t,facts:D(e,t,n),operations:Object.freeze({}),[Symbol.asyncDispose]:async()=>void 0})}function D(d,C,w){let T=k(w);return Object.freeze({device:{...e(d),providerMode:O(C)},operations:{appLogInspect:T.appLog,appLogDoctor:T.appLog,appLogStart:T.appLog,appLogReattach:T.appLog,appLogCleanup:T.appLog,listApps:T.apps,deployApp:T.appDeployment,materializeAppSource:T.appDeployment,deployMaterializedApp:T.appDeployment,sendPushNotification:T.appDeployment,appState:T.appState,networkDump:T.network,screenRecordingStart:T.screenRecording,screenRecordingReattach:T.screenRecording,screenRecordingCleanup:T.screenRecording,...u({capture:T.screenshot}),...b({capture:T.snapshot,customActions:T.snapshot,withoutActiveApp:T.snapshot}),...c({findText:T.snapshot}),...i({setViewport:T.viewport}),...l({focus:T.focus}),...o({unsupported:T.gesture}),...r({scroll:T.scroll}),...a({type:T.typeText}),...x({unsupported:T.touch,tap:T.touch,longPress:T.touch,fill:T.touch}),...g({readTextAtPoint:T.elementText}),...n({back:T.back}),...s({orientation:T.orientation}),setFoldPose:T.fold,...t({tvRemote:T.tvRemote}),...p({unsupported:T.keyboard}),...f({unsupported:T.clipboard}),...y({unsupported:T.systemButton}),..._({triggerAppEvent:T.triggerAppEvent}),...m({setSetting:T.settings,readSetting:T.settings}),...h({read:T.readAlert,wait:T.awaitAlert,accept:T.acceptAlert,dismiss:T.dismissAlert}),...S({capture:T.audioProbeCapture,query:T.audioProbeQuery}),...v({frames:T.perf,memorySample:T.perf,memorySnapshot:T.perf,nativeCapture:T.perf,profileReport:T.perf}),ensureReady:T.readiness,bootTarget:T.readiness,bootTargetHeadless:T.readiness,shutdownTarget:T.shutdown,...T.lifecycle}})}function O(e){switch(e.kind){case`local-family`:return`local`;case`provider-runtime`:return`provider-runtime`}}function k(e){return Object.freeze({...w(t=>Object.freeze({...e[t]??e.network})),lifecycle:d(e.lifecycle)})}export{E as n,D as r,T as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{F as n,I as r,L as i,N as a,f as o}from"./sdk-device.js";import{$t as s,A as c,en as l,tn as u}from"./sdk-batch.js";import{i as d,o as f,t as p}from"./device.js";import{t as ee}from"./startup-recovery-fence.js";import{i as m,n as h,r as g}from"./src2.js";import{n as _,t as v}from"./src3.js";import{i as te,m as ne}from"./src4.js";import{c as re,g as y,n as b}from"./src5.js";import{r as x,t as S}from"./src6.js";import{n as C,r as ie,t as w}from"./platform-runtime-unavailable.js";const T=Object.freeze({family:`android`});function ae(e){let t,n=()=>(t??=import(`./observation.js`).then(({createAndroidObservationAdapter:t})=>t(e)),t);return Object.freeze({readAppState:async(...e)=>await(await n()).readAppState(...e),readBlockingDialog:async(...e)=>await(await n()).readBlockingDialog(...e),readAppFocus:async(...e)=>await(await n()).readAppFocus(...e),readSnapshotNodes:async(...e)=>await(await n()).readSnapshotNodes(...e),tap:async(...e)=>await(await n()).tap(...e),openApp:async(...e)=>await(await n()).openApp(...e),readScreenSize:async(...e)=>await(await n()).readScreenSize(...e),isPermissionPackage:async(...e)=>await(await n()).isPermissionPackage(...e)})}async function oe(e,t){let{readAndroidAppStateWithExecutor:n}=await import(`./app-state.js`);return await n(e,t)}function se(e){return Object.freeze({...T,loadRuntime:async t=>{await e.bindAdbHost();let{createAndroidPlatformRuntime:n}=await import(`./runtime3.js`);return n(t)}})}function ce(e){let t=Object.freeze({sdkRoots:Object.freeze([...new Set(e.sdkRoots.map(e=>e.trim()).filter(Boolean))])});return Object.freeze({...T,loadInventory:async e=>{let{createAndroidInventory:n}=await import(`./inventory.js`);return n(e,t)}})}async function le(e){let{createAndroidShutdownRuntime:t}=await import(`./runtime4.js`);return t(e)}function ue(e){let t=new Map,n=new Map;for(let r of e.providerModules??[]){let{runtime:e,module:i}=r,a=l(i.owner);if(i.owner.provider!==e.provider)throw z(`Provider platform runtime metadata is invalid: ${a}`);if(t.has(a))throw z(`Duplicate platform runtime owner: ${a}`);if(n.has(e))throw z(`Duplicate platform module registration for ${e.provider}`);t.set(a,r),n.set(e,i)}let r=new Map;for(let t of e.managedOwners??[]){let e=l(t);if(r.has(e))throw z(`Duplicate platform runtime owner: ${e}`);r.set(e,t)}let i=new Map,a=new Map,o=new Map,s=new Map,c,d=async()=>{c??=e.loadHost();try{return await c}catch(e){throw c=void 0,e}},f,p,m=Object.freeze({recoverStartupResources:async e=>{await ee(e.stateDir,async()=>{await(await d()).applicationResources.recoverStartupResources(e)})},detachForDaemonShutdown:async()=>{f??=d().then(async e=>await e.applicationResources.detachForDaemonShutdown()),await f},finalizeDaemonShutdown:async()=>{p??=d().then(async e=>await e.applicationResources.finalizeDaemonShutdown()),await p}}),h=e=>{let t=l(e.owner),n=s.get(t);if(n&&n!==e)throw z(`Duplicate platform runtime owner: ${t}`);return s.set(t,e),e},g=async t=>{let n=i.get(t);if(n)return await n;let r=e.modules.get(t);if(!r)throw z(`Missing platform runtime module for ${t}`);if(r.family!==t)throw z(`Platform runtime module registered for ${t} declares ${r.family}`);let a=d().then(async e=>{let n=await r.loadRuntime(e);if(n.owner.kind!==`local-family`||n.owner.family!==t)throw z(`Platform runtime module for ${t} returned a different local owner`);return h(n)});i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}},_=async e=>{let t=a.get(e);if(t)return await t;let n=d().then(async t=>{let n=await e.loadRuntime(t);if(!u(n.owner,e.owner))throw z(`Provider platform runtime returned a different advertised owner`);return h(n)});a.set(e,n);try{return await n}catch(t){throw a.get(e)===n&&a.delete(e),t}},v=async e=>{let t=l(e),n=r.get(t);if(!n)throw R(e);let i=o.get(t);if(i)return i;let{createManagedLocalRuntimeOwner:a}=await import(`./platform-runtime-managed-owner.js`),s=h(a({owner:n,loadLocal:g}));return o.set(t,s),s};return Object.freeze({applicationLifecycle:m,inspectFacts:async t=>{let r=E(e.providerRuntimes,t);if(r){let e=n.get(r);return e?await D(await _(e),t):L(r,t)}return await D(await g(t.platform),t)},bind:async r=>{if(r.intent.kind===`exact-owner`)return await O(await P(r.intent.owner,t,_,g,v),r);let i=E(e.providerRuntimes,r.device);if(i){let e=n.get(i);return e?await O(await _(e),r):I(i,r.device)}return await O(await g(r.device.platform),r)},shutdown:async()=>{await Promise.allSettled([...s.values()].map(async e=>await e.shutdown())),s.clear(),i.clear(),a.clear(),o.clear()}})}function E(e,t){let n=(e??[]).filter(e=>e.ownsDevice(t));if(n.length>1)throw z(`Multiple provider runtimes claim the selected device`);return n[0]}async function D(e,t){let n=await e.inspectFacts(t);if(!M(t,e.owner,n))throw z(`Platform runtime facts do not match the selected device and owner`);return n}async function O(e,t){let n=await e.bind(t),r=k(e,n,t);if(!r)return n;let i;try{await n[Symbol.asyncDispose]()}catch(e){i=e instanceof Error?e.message:String(e)}throw z(r,i)}function k(e,t,n){if(!u(t.owner,e.owner))return`Platform binding returned a different owner than the selected runtime`;if(!A(t.owner,n))return`Exact platform binding returned a different persisted owner`;if(!r(a(t.device),a(n.device)))return`Platform binding returned a different device identity`;if(!j(t))return`Platform binding facts do not match its device and owner`}function A(e,t){return t.intent.kind!==`exact-owner`||u(e,t.intent.owner)}function j(e){return M(e.device,e.owner,e.facts)}function M(e,t,r){return i(r.device,n(e))&&N(r.device.providerMode,t)}function N(e,t){switch(t.kind){case`local-family`:return e===`local`||e===`transport-composed`;case`managed-local`:return e===`local`||e===`transport-composed`;case`provider-runtime`:return e===`provider-runtime`}}async function P(e,t,n,r,i){switch(e.kind){case`local-family`:{let t=await r(e.family);if(u(t.owner,e))return t;throw R(e)}case`managed-local`:return await i(e);case`provider-runtime`:{let r=t.get(l(e));if(r)return await n(r.module);throw R(e)}}}const F=Object.freeze({available:!1,reason:`unsupported-provider-mode`});function I(e,t){let n=s(e.provider,`default`);return C(t,n,w(F))}function L(e,t){return ie(t,s(e.provider,`default`),w(F))}function R(e){return new t(`UNSUPPORTED_OPERATION`,`The exact platform runtime owner is unavailable.`,{reason:`owner-unavailable`,owner:l(e)})}function z(e,n){return new t(`COMMAND_FAILED`,e,{reason:`runtime-contract-invalid`,...n?{cleanupError:n}:{}})}function B(e){let t=V(e.registry,e.loadHost),n=e.provider,r=n?async(e,r)=>{r.signal.throwIfAborted();let i=await n.discover(f(e),r.signal);return r.signal.throwIfAborted(),ge(i),i.kind===`inventory`?{devices:d(i.devices.map(e=>({...e})),e),source:`provider`}:{devices:await t.discover(e,r),source:`local`}}:async(e,n)=>({devices:await t.discover(e,n),source:`local`}),i=Object.freeze({discover:async(e,t)=>(await r(e,t)).devices,discoverWithSource:r});return Object.freeze({providerFirst:i,localOnly:t,findInstalledApp:async(e,t)=>{let{findIosSimulatorInstalledApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function V(e,t){let n,r=async()=>{n??=t();try{return await n}catch(e){throw n=void 0,e}},i=new Map,a=async t=>{let n=i.get(t);if(n)return await n;let a=H(e.get(t),r);i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}};return Object.freeze({discover:async(e,t)=>{if(t.signal.throwIfAborted(),e.platform)return await W(a,G(e.platform),e,t);let n=await Promise.all(p.map(async n=>{try{let r=await W(a,G(n),{...e,platform:n},t);return Array.isArray(r)?r:[]}catch{return[]}}));return t.signal.throwIfAborted(),n.flat()}})}async function H(e,t){switch(e.family){case`apple`:return await e.loadInventory(U(await t()));case`android`:return await e.loadInventory(de(await t()));case`harmonyos`:return await e.loadInventory(fe(await t()));case`vega`:return await e.loadInventory(pe(await t()));case`linux`:return await e.loadInventory(me(await t()));case`web`:return await e.loadInventory()}}function U(e){return Object.freeze({appleTools:e.appleTools,files:e.files,hostName:e.hostName,hostOs:e.hostOs,observations:e.observations})}function de(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory,toolchains:e.toolchains})}function fe(e){return Object.freeze({commands:e.commands,files:e.files,toolchains:e.toolchains})}function pe(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory})}function me(e){return Object.freeze({hostName:e.hostName,hostOs:e.hostOs})}async function W(e,t,n,r){let i=await e(t);r.signal.throwIfAborted();let a=await i.discover(n,r);return r.signal.throwIfAborted(),he(t,a),d(a,n)}function G(e){return o(e)?`apple`:e}function he(e,n){let r=n.find(t=>t.platform!==e);if(r)throw new t(`COMMAND_FAILED`,`Platform inventory source ${e} returned a ${r.platform} device.`,{expectedFamily:e,actualFamily:r.platform,deviceId:r.id})}function ge(e){if(typeof e==`object`&&e){let t=e;if(t.kind===`declined`&&!(`devices`in t)||t.kind===`inventory`&&Array.isArray(t.devices))return}throw new t(`COMMAND_FAILED`,`Provider device inventory returned an invalid outcome.`,{reason:`provider_inventory_contract_violation`})}function _e(){return Object.freeze({async runAdb(e,t,n){let{runAndroidAdb:r}=await K(),i=await r(e,t,n);return{exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr}},async readSnapshotNodes(e){let{snapshotAndroid:t,androidSnapshotPublicationInput:n}=await K(),{buildSnapshotState:r}=await import(`./snapshot-state.js`).then(e=>e.n);return r(n(await t(e,{interactiveOnly:!1})),void 0).nodes},async openApp(e,t){let{openAndroidApp:n}=await K();await n(e,t)}})}async function K(){let{loadAndroidMechanics:e}=await import(`./platform-runtime-android-mechanics.js`).then(e=>e.n);return await e()}var ve=e({androidObservation:()=>J,createPlatformDeviceInventoryGateways:()=>X,createPlatformRuntimeGateway:()=>Q,createRequestPlatformProviders:()=>$,getAndroidAppStateWithAdb:()=>ye,platformModuleRegistry:()=>Y,platformRuntimeModules:()=>Z});async function ye(e,t){return await oe(e,t)}const q=ce({sdkRoots:Ce(process.env.ANDROID_SDK_ROOT,process.env.ANDROID_HOME)}),J=ae(_e()),be=Object.freeze({apple:async e=>await g(e),android:async e=>await le(e)}),xe=te({hdcSdkPath:process.env.HDC_SDK_PATH,devecoSdkHome:process.env.DEVECO_SDK_HOME,commandLineToolsHome:process.env.HARMONYOS_COMMAND_LINE_TOOLS}),Y=c([h,q,xe,v,re,S]);function X(e){return B({registry:Y,loadHost:async()=>{let{createDeviceInventoryHost:e}=await import(`./platform-runtime-host.js`);return e()},provider:e})}const Se=se({bindAdbHost:async()=>{await import(`./platform-runtime-android-adb-host.js`).then(e=>e.t)}}),Z=new Map([[`apple`,m],[`android`,Se],[`harmonyos`,ne],[`vega`,_],[`linux`,y],[`web`,x]]);function Q(e){return ue({modules:Z,loadHost:async()=>{let{createPlatformRuntimeHost:t,createSnapshotRuntimeHost:n,loadMacOsSurfaceSnapshot:r}=await import(`./platform-runtime-operation-host.js`);return t({sessionsDir:e.sessionsDir,resolveSessionArtifacts:e.resolveSessionArtifacts,shutdownLoaders:be,assertShutdownAllowed:e.assertShutdownAllowed,snapshot:n({linux:b,macos:r}),ownedProcesses:e.ownedProcesses})},providerRuntimes:e.providerRuntimes,providerModules:e.providerModules})}function $(e={}){let t,n=()=>(t??=import(`./request-providers.js`).then(({createComposedRequestPlatformProviders:t})=>t(e)),t);return Object.freeze({hasConfiguredResolvers:Object.values(e.providers??{}).some(Boolean),run:async(e,t)=>await(await n()).run(e,t)})}function Ce(...e){return e.flatMap(e=>{let t=e?.trim();return t?[t]:[]})}export{ve as a,$ as i,X as n,Q as r,J as t};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{C as n,E as r,O as i}from"./tv-remote.js";import{F as a,I as o,L as s,N as c,f as l}from"./sdk-device.js";import{$t as u,A as d,Qt as f,Zt as p}from"./sdk-batch.js";import{t as ee}from"./startup-recovery-fence.js";import{r as m,t as h}from"./src2.js";import{n as te,r as ne,t as re}from"./platform-runtime-unavailable.js";const ie=Object.freeze({family:`apple`}),ae=Object.freeze({...ie,loadRuntime:async e=>{let{createApplePlatformRuntime:t}=await import(`./runtime4.js`);return t(e)}}),oe=Object.freeze({...ie,loadInventory:async e=>{let{createAppleInventorySource:t}=await import(`./inventory2.js`);return t(e)}});async function se(e){let{createAppleShutdownRuntime:t}=await import(`./runtime5.js`);return t(e)}const ce={id:`apple`,platforms:[`apple`],familySelector:`apple`,providers:{platformGatedResolvers:[`appleRunnerProvider`,`appleToolProvider`]},createInteractor:async(e,t)=>{let{createAppleInteractor:n}=await import(`./interactor.js`);return n(e,t)}};var le=e({inventoryModule:()=>v,runtimeModule:()=>_,vegaPlugin:()=>y,vegaToolchainCheck:()=>de,withVegaToolProvider:()=>fe});function ue(e){return(async(...t)=>await(await e())(...t))}const g=Object.freeze({family:`vega`}),_=Object.freeze({...g,loadRuntime:async e=>{let{createVegaPlatformRuntime:t}=await import(`./runtime8.js`);return t(e)}}),v=Object.freeze({...g,loadInventory:async e=>{let{createVegaInventory:t}=await import(`./inventory5.js`);return t(e)}}),y={id:`vega`,platforms:[`vega`],providers:{platformGatedResolvers:[`vegaToolProvider`]},createInteractor:async(e,t)=>{let{createVegaInteractor:n}=await import(`./interactor2.js`);return n(e,t)}},de=ue(async()=>(await import(`./doctor2.js`)).vegaToolchainCheck);async function fe(e,t){let{withVegaToolProvider:n}=await import(`./tool-provider3.js`).then(e=>e.n);return await n(e,t)}const b=Object.freeze({family:`android`});function pe(e){let t,n=()=>(t??=import(`./observation.js`).then(({createAndroidObservationAdapter:t})=>t(e)),t);return Object.freeze({readAppState:async(...e)=>await(await n()).readAppState(...e),readBlockingDialog:async(...e)=>await(await n()).readBlockingDialog(...e),readAppFocus:async(...e)=>await(await n()).readAppFocus(...e),readSnapshotNodes:async(...e)=>await(await n()).readSnapshotNodes(...e),tap:async(...e)=>await(await n()).tap(...e),openApp:async(...e)=>await(await n()).openApp(...e),readScreenSize:async(...e)=>await(await n()).readScreenSize(...e),isPermissionPackage:async(...e)=>await(await n()).isPermissionPackage(...e)})}async function me(e,t){let{readAndroidAppStateWithExecutor:n}=await import(`./app-state.js`);return await n(e,t)}function he(e){return Object.freeze({...b,loadRuntime:async t=>{await e.bindAdbHost();let{createAndroidPlatformRuntime:n}=await import(`./runtime2.js`);return n(t)}})}function ge(e){let t=Object.freeze({sdkRoots:Object.freeze([...new Set(e.sdkRoots.map(e=>e.trim()).filter(Boolean))])});return Object.freeze({...b,loadInventory:async e=>{let{createAndroidInventory:n}=await import(`./inventory.js`);return n(e,t)}})}async function _e(e){let{createAndroidShutdownRuntime:t}=await import(`./runtime3.js`);return t(e)}var ve=e({appSwitcherHarmony:()=>F,backHarmony:()=>N,closeHarmonyApp:()=>T,createHarmonyInventoryModule:()=>H,doubleClickHarmony:()=>D,ensureHarmonyToolchainPathConfigured:()=>xe,fillHarmony:()=>A,harmonyToolchainCheck:()=>Ce,homeHarmony:()=>P,longPressHarmony:()=>O,openHarmonyApp:()=>w,performHarmonyGesture:()=>M,pressHarmony:()=>E,pressHarmonyKeyboardKey:()=>I,readHarmonyGestureViewport:()=>V,runHarmonyHdc:()=>ye,runHarmonyShell:()=>be,runtimeModule:()=>C,sampleHarmonyMemoryPerf:()=>Se,screenshotHarmony:()=>R,scrollHarmony:()=>j,setHarmonyOrientation:()=>L,setHarmonySetting:()=>z,snapshotHarmony:()=>B,typeHarmony:()=>k});function x(e){return(async(...t)=>await(await e())(...t))}const S=Object.freeze({family:`harmonyos`}),C=Object.freeze({...S,loadRuntime:async e=>{let{createHarmonyPlatformRuntime:t}=await import(`./runtime6.js`);return t(e)}}),w=x(async()=>(await import(`./app-lifecycle2.js`)).openHarmonyApp),T=x(async()=>(await import(`./app-lifecycle2.js`)).closeHarmonyApp),ye=x(async()=>(await import(`./hdc.js`)).runHarmonyHdc),be=x(async()=>(await import(`./hdc.js`)).runHarmonyShell),xe=x(async()=>(await import(`./hdc.js`)).ensureHarmonyToolchainPathConfigured),E=x(async()=>(await import(`./input-actions.js`)).pressHarmony),D=x(async()=>(await import(`./input-actions.js`)).doubleClickHarmony),O=x(async()=>(await import(`./input-actions.js`)).longPressHarmony),k=x(async()=>(await import(`./input-actions.js`)).typeHarmony),A=x(async()=>(await import(`./input-actions.js`)).fillHarmony),j=x(async()=>(await import(`./input-actions.js`)).scrollHarmony),M=x(async()=>(await import(`./input-actions.js`)).performHarmonyGesture),N=x(async()=>(await import(`./input-actions.js`)).backHarmony),P=x(async()=>(await import(`./input-actions.js`)).homeHarmony),F=x(async()=>(await import(`./input-actions.js`)).appSwitcherHarmony),I=x(async()=>(await import(`./input-actions.js`)).pressHarmonyKeyboardKey),L=x(async()=>(await import(`./input-actions.js`)).setHarmonyOrientation),R=x(async()=>(await import(`./screenshot.js`)).screenshotHarmony),z=x(async()=>(await import(`./settings2.js`)).setHarmonySetting),B=x(async()=>(await import(`./snapshot.js`)).snapshotHarmony),V=x(async()=>(await import(`./snapshot.js`)).readHarmonyGestureViewport),Se=x(async()=>(await import(`./perf.js`)).sampleHarmonyMemoryPerf),Ce=x(async()=>(await import(`./doctor.js`)).harmonyToolchainCheck);function H(e){let t=Object.freeze({hdcSdkPath:U(e.hdcSdkPath),devecoSdkHome:U(e.devecoSdkHome),commandLineToolsHome:U(e.commandLineToolsHome)});return Object.freeze({...S,loadInventory:async e=>{let{createHarmonyInventory:n}=await import(`./inventory3.js`);return n(e,t)}})}function U(e){return e?.trim()||void 0}var we=e({backLinux:()=>Ee,captureLinuxSurfaceSnapshot:()=>Y,closeLinuxApp:()=>Te,doubleClickLinux:()=>Ae,fillLinux:()=>je,focusLinux:()=>Me,homeLinux:()=>De,inventoryModule:()=>q,longPressLinux:()=>Ne,middleClickLinux:()=>Ie,openLinuxApp:()=>J,pressLinux:()=>Pe,readLinuxClipboard:()=>Oe,readLinuxTextAtPoint:()=>Ve,rightClickLinux:()=>Fe,runtimeModule:()=>K,screenshotLinux:()=>Be,scrollLinux:()=>Le,swipeLinux:()=>Re,typeLinux:()=>ze,withLinuxToolProvider:()=>He,writeLinuxClipboard:()=>ke});function W(e){return(async(...t)=>await(await e())(...t))}const G=Object.freeze({family:`linux`}),K=Object.freeze({...G,loadRuntime:async e=>{let{createLinuxPlatformRuntime:t}=await import(`./runtime7.js`);return t(e)}}),q=Object.freeze({...G,loadInventory:async e=>{let{createLinuxInventory:t}=await import(`./inventory4.js`);return t(e)}}),J=W(async()=>(await import(`./app-lifecycle3.js`)).openLinuxApp),Te=W(async()=>(await import(`./app-lifecycle3.js`)).closeLinuxApp),Ee=W(async()=>(await import(`./app-lifecycle3.js`)).backLinux),De=W(async()=>(await import(`./app-lifecycle3.js`)).homeLinux),Oe=W(async()=>(await import(`./clipboard.js`)).readLinuxClipboard),ke=W(async()=>(await import(`./clipboard.js`)).writeLinuxClipboard),Ae=W(async()=>(await import(`./input-actions2.js`)).doubleClickLinux),je=W(async()=>(await import(`./input-actions2.js`)).fillLinux),Me=W(async()=>(await import(`./input-actions2.js`)).focusLinux),Ne=W(async()=>(await import(`./input-actions2.js`)).longPressLinux),Pe=W(async()=>(await import(`./input-actions2.js`)).pressLinux),Fe=W(async()=>(await import(`./input-actions2.js`)).rightClickLinux),Ie=W(async()=>(await import(`./input-actions2.js`)).middleClickLinux),Le=W(async()=>(await import(`./input-actions2.js`)).scrollLinux),Re=W(async()=>(await import(`./input-actions2.js`)).swipeLinux),ze=W(async()=>(await import(`./input-actions2.js`)).typeLinux),Be=W(async()=>(await import(`./screenshot2.js`)).screenshotLinux),Y=W(async()=>(await import(`./surface-snapshot2.js`)).captureLinuxSurfaceSnapshot),Ve=W(async()=>(await import(`./snapshot2.js`)).readLinuxTextAtPoint);async function He(e,t){let{withLinuxToolProvider:n}=await import(`./tool-provider2.js`).then(e=>e.r);return await n(e,t)}function Ue(e){let t=new Map,n=new Map;for(let r of e.providerModules??[]){let{runtime:e,module:i}=r,a=f(i.owner);if(i.owner.provider!==e.provider)throw Z(`Provider platform runtime metadata is invalid: ${a}`);if(t.has(a))throw Z(`Duplicate platform runtime owner: ${a}`);if(n.has(e))throw Z(`Duplicate platform module registration for ${e.provider}`);t.set(a,r),n.set(e,i)}let r=new Map,i=new Map,a=new Map,o,s=async()=>{o??=e.loadHost();try{return await o}catch(e){throw o=void 0,e}},c,l,d=Object.freeze({recoverStartupResources:async e=>{await ee(e.stateDir,async()=>{await(await s()).applicationResources.recoverStartupResources(e)})},detachForDaemonShutdown:async()=>{c??=s().then(async e=>await e.applicationResources.detachForDaemonShutdown()),await c},finalizeDaemonShutdown:async()=>{l??=s().then(async e=>await e.applicationResources.finalizeDaemonShutdown()),await l}}),p=e=>{let t=f(e.owner),n=a.get(t);if(n&&n!==e)throw Z(`Duplicate platform runtime owner: ${t}`);return a.set(t,e),e},m=async t=>{let n=r.get(t);if(n)return await n;let i=e.modules.get(t);if(!i)throw Z(`Missing platform runtime module for ${t}`);if(i.family!==t)throw Z(`Platform runtime module registered for ${t} declares ${i.family}`);let a=s().then(async e=>{let n=await i.loadRuntime(e);if(n.owner.kind!==`local-family`||n.owner.family!==t)throw Z(`Platform runtime module for ${t} returned a different local owner`);return p(n)});r.set(t,a);try{return await a}catch(e){throw r.get(t)===a&&r.delete(t),e}},h=async e=>{let t=i.get(e);if(t)return await t;let n=s().then(async t=>{let n=await e.loadRuntime(t);if(!u(n.owner,e.owner))throw Z(`Provider platform runtime returned a different advertised owner`);return p(n)});i.set(e,n);try{return await n}catch(t){throw i.get(e)===n&&i.delete(e),t}};return Object.freeze({applicationLifecycle:d,inspectFacts:async t=>{let r=We(e.providerRuntimes,t);if(r){let e=n.get(r);return e?await Ge(await h(e),t):et(r,t)}return await Ge(await m(t.platform),t)},bind:async r=>{if(r.intent.kind===`exact-owner`)return await X(await Ze(r.intent.owner,t,h,m),r);let i=We(e.providerRuntimes,r.device);if(i){let e=n.get(i);return e?await X(await h(e),r):$e(i,r.device)}return await X(await m(r.device.platform),r)},shutdown:async()=>{await Promise.allSettled([...a.values()].map(async e=>await e.shutdown())),a.clear(),r.clear(),i.clear()}})}function We(e,t){let n=(e??[]).filter(e=>e.ownsDevice(t));if(n.length>1)throw Z(`Multiple provider runtimes claim the selected device`);return n[0]}async function Ge(e,t){let n=await e.inspectFacts(t);if(!Ye(t,e.owner,n))throw Z(`Platform runtime facts do not match the selected device and owner`);return n}async function X(e,t){let n=await e.bind(t),r=Ke(e,n,t);if(!r)return n;let i;try{await n[Symbol.asyncDispose]()}catch(e){i=e instanceof Error?e.message:String(e)}throw Z(r,i)}function Ke(e,t,n){if(!u(t.owner,e.owner))return`Platform binding returned a different owner than the selected runtime`;if(!qe(t.owner,n))return`Exact platform binding returned a different persisted owner`;if(!o(c(t.device),c(n.device)))return`Platform binding returned a different device identity`;if(!Je(t))return`Platform binding facts do not match its device and owner`}function qe(e,t){return t.intent.kind!==`exact-owner`||u(e,t.intent.owner)}function Je(e){return Ye(e.device,e.owner,e.facts)}function Ye(e,t,n){return s(n.device,a(e))&&Xe(n.device.providerMode,t)}function Xe(e,t){switch(t.kind){case`local-family`:return e===`local`||e===`transport-composed`;case`provider-runtime`:return e===`provider-runtime`}}async function Ze(e,t,n,r){switch(e.kind){case`local-family`:{let t=await r(e.family);if(u(t.owner,e))return t;throw tt(e)}case`provider-runtime`:{let r=t.get(f(e));if(r)return await n(r.module);throw tt(e)}}}const Qe=Object.freeze({available:!1,reason:`unsupported-provider-mode`});function $e(e,t){let n=p(e.provider,`default`);return te(t,n,re(Qe))}function et(e,t){return ne(t,p(e.provider,`default`),re(Qe))}function tt(e){return new t(`UNSUPPORTED_OPERATION`,`The exact platform runtime owner is unavailable.`,{reason:`owner-unavailable`,owner:f(e)})}function Z(e,n){return new t(`COMMAND_FAILED`,e,{reason:`runtime-contract-invalid`,...n?{cleanupError:n}:{}})}function nt(e){let t=rt(e.registry,e.loadHost),n=e.provider,a=n?async(e,a)=>{a.signal.throwIfAborted();let o=await n.discover(i(e),a.signal);return a.signal.throwIfAborted(),pt(o),o.kind===`inventory`?{devices:r(o.devices.map(e=>({...e})),e),source:`provider`}:{devices:await t.discover(e,a),source:`local`}}:async(e,n)=>({devices:await t.discover(e,n),source:`local`}),o=Object.freeze({discover:async(e,t)=>(await a(e,t)).devices,discoverWithSource:a});return Object.freeze({providerFirst:o,localOnly:t,findInstalledApp:async(e,t)=>{let{findIosSimulatorInstalledApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function rt(e,t){let r,i=async()=>{r??=t();try{return await r}catch(e){throw r=void 0,e}},a=new Map,o=async t=>{let n=a.get(t);if(n)return await n;let r=it(e.get(t),i);a.set(t,r);try{return await r}catch(e){throw a.get(t)===r&&a.delete(t),e}};return Object.freeze({discover:async(e,t)=>{if(t.signal.throwIfAborted(),e.platform)return await ut(o,dt(e.platform),e,t);let r=await Promise.all(n.map(async n=>{try{let r=await ut(o,dt(n),{...e,platform:n},t);return Array.isArray(r)?r:[]}catch{return[]}}));return t.signal.throwIfAborted(),r.flat()}})}async function it(e,t){switch(e.family){case`apple`:return await e.loadInventory(at(await t()));case`android`:return await e.loadInventory(ot(await t()));case`harmonyos`:return await e.loadInventory(st(await t()));case`vega`:return await e.loadInventory(ct(await t()));case`linux`:return await e.loadInventory(lt(await t()));case`web`:return await e.loadInventory()}}function at(e){return Object.freeze({appleTools:e.appleTools,files:e.files,hostName:e.hostName,hostOs:e.hostOs,observations:e.observations})}function ot(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory,toolchains:e.toolchains})}function st(e){return Object.freeze({commands:e.commands,files:e.files,toolchains:e.toolchains})}function ct(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory})}function lt(e){return Object.freeze({hostName:e.hostName,hostOs:e.hostOs})}async function ut(e,t,n,i){let a=await e(t);i.signal.throwIfAborted();let o=await a.discover(n,i);return i.signal.throwIfAborted(),ft(t,o),r(o,n)}function dt(e){return l(e)?`apple`:e}function ft(e,n){let r=n.find(t=>t.platform!==e);if(r)throw new t(`COMMAND_FAILED`,`Platform inventory source ${e} returned a ${r.platform} device.`,{expectedFamily:e,actualFamily:r.platform,deviceId:r.id})}function pt(e){if(typeof e==`object`&&e){let t=e;if(t.kind===`declined`&&!(`devices`in t)||t.kind===`inventory`&&Array.isArray(t.devices))return}throw new t(`COMMAND_FAILED`,`Provider device inventory returned an invalid outcome.`,{reason:`provider_inventory_contract_violation`})}function mt(){return Object.freeze({async runAdb(e,t,n){let{runAndroidAdb:r}=await Q(),i=await r(e,t,n);return{exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr}},async readSnapshotNodes(e){let{snapshotAndroid:t,androidSnapshotPublicationInput:n}=await Q(),{buildSnapshotState:r}=await import(`./snapshot-state.js`).then(e=>e.n);return r(n(await t(e,{interactiveOnly:!1})),void 0).nodes},async openApp(e,t){let{openAndroidApp:n}=await Q();await n(e,t)}})}async function Q(){let{loadAndroidMechanics:e}=await import(`./platform-runtime-android-mechanics.js`).then(e=>e.n);return await e()}var ht=e({androidObservation:()=>vt,createPlatformDeviceInventoryGateways:()=>St,createPlatformRuntimeGateway:()=>Tt,createRequestPlatformProviders:()=>$,getAndroidAppStateWithAdb:()=>gt,platformModuleRegistry:()=>xt,platformRuntimeModules:()=>wt});async function gt(e,t){return await me(e,t)}const _t=ge({sdkRoots:Et(process.env.ANDROID_SDK_ROOT,process.env.ANDROID_HOME)}),vt=pe(mt()),yt=Object.freeze({apple:async e=>await se(e),android:async e=>await _e(e)}),bt=H({hdcSdkPath:process.env.HDC_SDK_PATH,devecoSdkHome:process.env.DEVECO_SDK_HOME,commandLineToolsHome:process.env.HARMONYOS_COMMAND_LINE_TOOLS}),xt=d([oe,_t,bt,v,q,h]);function St(e){return nt({registry:xt,loadHost:async()=>{let{createDeviceInventoryHost:e}=await import(`./platform-runtime-host.js`);return e()},provider:e})}const Ct=he({bindAdbHost:async()=>{await import(`./platform-runtime-android-adb-host.js`).then(e=>e.t)}}),wt=new Map([[`apple`,ae],[`android`,Ct],[`harmonyos`,C],[`vega`,_],[`linux`,K],[`web`,m]]);function Tt(e){return Ue({modules:wt,loadHost:async()=>{let{createPlatformRuntimeHost:t,createSnapshotRuntimeHost:n,loadMacOsSurfaceSnapshot:r}=await import(`./platform-runtime-operation-host.js`);return t({sessionsDir:e.sessionsDir,resolveSessionArtifacts:e.resolveSessionArtifacts,shutdownLoaders:yt,assertShutdownAllowed:e.assertShutdownAllowed,snapshot:n({linux:Y,macos:r}),ownedProcesses:e.ownedProcesses})},providerRuntimes:e.providerRuntimes,providerModules:e.providerModules})}function $(e={}){let t,n=()=>(t??=import(`./request-providers.js`).then(({createComposedRequestPlatformProviders:t})=>t(e)),t);return Object.freeze({hasConfiguredResolvers:Object.values(e.providers??{}).some(Boolean),run:async(e,t)=>await(await n()).run(e,t)})}function Et(...e){return e.flatMap(e=>{let t=e?.trim();return t?[t]:[]})}export{A,L as B,Re as C,N as D,F as E,E as F,le as G,B as H,I,y as K,V as L,O as M,w as N,T as O,M as P,R,we as S,ke as T,ve as U,z as V,k as W,Oe as _,ht as a,Be as b,Te as c,Me as d,De as f,Pe as g,J as h,$ as i,P as j,D as k,Ae as l,Ie as m,St as n,Ee as o,Ne as p,ce as q,Tt as r,Y as s,vt as t,je as u,Ve as v,ze as w,Le as x,Fe as y,j as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{$t as t,en as n,tn as r}from"./sdk-batch.js";import{B as i,C as a,E as o,F as s,G as c,H as l,L as u,M as ee,P as d,Q as f,R as p,T as m,V as h,X as g,Y as _,Z as te,_ as ne,b as re,c as ie,i as ae,j as oe,l as se,p as ce,q as le}from"./perf-runtime.js";import{i as ue,n as de}from"./touch-runtime.js";import{r as v,t as fe}from"./platform-runtime-unavailable.js";import{a as pe,n as me,s as he}from"./runtime-deployment.js";import{n as ge}from"./src3.js";import{r as _e}from"./gesture-admission.js";import{n as ve}from"./interactor-operation-catalog.js";import{i as y,t as b}from"./application-lifecycle-interaction.js";function x(e){return b({owner:`WebDriver`,openTargetIdentity:`bundle-id`,closeBeforeRelaunch:!0,binding:y({device:e.device,signal:e.signal,resolveInteractor:t=>e.getInteractor(e.device,t)})})}const S=Object.freeze({available:!0}),C=n(`unsupported-provider-mode`),w=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose screen recording.`),T=n(`unsupported-provider-mode`,`Headless boot is unavailable for provider-owned devices.`),E=n(`owner-capability-missing`,`WebDriver provider runtimes do not expose app inventory.`),D=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose app deployment.`),O=n(`unsupported-provider-mode`,`Push notifications are unavailable for WebDriver provider-owned devices.`),k=me,A=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose snapshot capture for this device.`),j=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose screenshot capture for this device.`),M=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose iOS simulator custom snapshot actions.`),N=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose viewport resizing.`),P=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose focus for this device.`),F=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose text entry for this device.`),I=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose gestures for this device.`),L=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose scrolling for this device.`),ye=n(`unsupported-device-kind`,_e),be=n(`unsupported-provider-mode`,`WebDriver provider runtimes read element text from the captured tree only.`),R=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose back for this device.`),xe=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose home for this device.`),z=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose orientation for this device.`),B=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose tv-remote.`),V=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose this keyboard action for this device.`),H=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose clipboard access for this device.`),Se=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose the app switcher for this device.`),U=n(`unsupported-provider-mode`,`No WebDriver backend presses this system button.`),W=n(`unsupported-provider-mode`,`fold runs a HID helper through simctl spawn inside a foldable iPhone simulator on the daemon host; a WebDriver backend has no such simulator.`),G=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose native alert handling.`),K=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose device settings.`),q=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose app-event delivery for this device.`),Ce=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose a foreground app-state operation.`),J=n(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose the audio probe.`),we=n(`unsupported-provider-mode`,`Apple runner preparation is unavailable for WebDriver-owned devices.`),Te=n(`unsupported-provider-mode`,`WebDriver open is supported only for its owned iOS or Android mobile-device sessions.`),Ee=n(`unsupported-provider-mode`,`WebDriver close is supported only for its owned iOS or Android mobile-device sessions.`),Y=n(`unsupported-provider-mode`,`Runtime hints are not applied to provider-owned devices.`),De=n(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose port reverse.`);function Oe(e){let t=e.platform===`android`&&e.kind===`device`&&e.target===`mobile`||e.platform===`apple`&&e.kind===`device`&&e.target===`mobile`&&e.appleOs===`ios`,n=t?S:Te,r=t?S:Ee;return te({resolveOpenTarget:n,prepareApplicationOpen:n,openApplication:n,applyRuntimeHints:Y,clearRuntimeHints:Y,closeApplication:r,finalizeApplicationClose:r,prepareAppleRunner:we,configureProviderPortReverse:De})}function ke(n){return Object.freeze({owner:n.owner,ownsDevice:n.ownsDevice,inspectFacts:async e=>Q(n,e),bind:async r=>{if(r.intent.kind===`exact-owner`&&!t(r.intent.owner,n.owner))throw new e(`UNSUPPORTED_OPERATION`,`WebDriver runtime owner identity does not match`);if(!n.ownsDevice(r.device))throw new e(`UNSUPPORTED_PLATFORM`,`WebDriver runtime does not own this device`);if(!$(n,r.device))throw new e(`UNSUPPORTED_OPERATION`,`The WebDriver provider session is no longer active for this device.`);return X(n,r.device,r.scope.signal)},shutdown:async()=>void 0})}function Ae(e,t,n,a){let o={device:t,signal:n,resolveInteractor:n=>e.getInteractor?.(t,n),presentIosAcquisition:e.host.snapshot.presentIosAcquisition};return{...a.operations.captureSnapshot.available?c(o):{},...a.operations.captureScreenshot.available?_(o):{},...a.operations.focusPoint.available?i(o):{},...a.operations.typeText.available?oe(o):{},...u({...o,facts:a.operations}),...a.operations.scrollDirection.available?d(o):{},...ve({...o,facts:a.operations}),...r(a.operations.tapPoint,()=>de({...o,facts:a.operations,pause:async t=>await e.host.clock.sleep(t,n)}))}}function X(e,t,n){let r=t.platform===`apple`?`ios-device`:`android`,i=Q(e,t),a=i.operations.deployApp,o=Object.freeze({ensureReady:async()=>({...t,booted:!0}),bootTarget:async()=>({...t,booted:!0}),...f(x({device:t,signal:n,getInteractor:(t,n)=>e.getInteractor?.(t,n)}),i.operations),...Ae(e,t,n,i),networkDump:async t=>{let n=await e.host.appLogs.readRecent(t.sessionId,t.maxScanLines),{dump:i}=ge(n.text,{...t,path:n.path,exists:n.exists,lineNumberOffset:n.skippedLines,backend:r});return Object.freeze({source:`app-log`,backend:r,dump:i,notes:Object.freeze(i.entries.length===0?[`No HTTP(s) entries were found in recent session app logs.`]:[])})},...a.available&&e.deployment?{deployApp:async r=>await e.deployment.deployApp(t,r,n),materializeAppSource:async r=>await Pe(e.host,t,r,n),deployMaterializedApp:async r=>await e.deployment.deployMaterializedApp(t,r,n)}:{}});return Object.freeze({device:t,owner:e.owner,facts:i,operations:o,[Symbol.asyncDispose]:async()=>void 0})}function Z(e,t){return e?S:t}function je(e){return e.reachable?pe(e.capabilities,e.operation)?S:n(`owner-capability-missing`,he(e.capabilities,e.operation)):e.whenUnreachable}function Q(e,t){if(!$(e,t))return v(t,e.owner,{...fe(k),fold:W});let r=e.deployment?.fact(t)??D,i=v(t,e.owner,{appLog:C,appDeployment:D,network:C,screenRecording:w,screenshot:j,viewport:N,focus:P,gesture:I,scroll:L,typeText:F,touch:F,elementText:be,back:R,orientation:z,tvRemote:B,keyboard:V,clipboard:H,systemButton:U,fold:W,triggerAppEvent:q,settings:K,readAlert:G,awaitAlert:G,acceptAlert:G,dismissAlert:G,audioProbeCapture:J,audioProbeQuery:J,perf:J,lifecycle:Oe(t)}),c=e.getInteractor!==void 0&&Ne(t),u=c&&e.snapshotAvailable!==!1?S:A,d=c&&e.screenshotAvailable!==!1?S:j,f=(t,n)=>je({reachable:c,capabilities:e.capabilities,operation:t,whenUnreachable:n});return Object.freeze({device:i.device,operations:{...i.operations,deployApp:r,materializeAppSource:r,deployMaterializedApp:r,sendPushNotification:O,appState:Ce,networkDump:S,...le({capture:u,customActions:M,withoutActiveApp:u}),...g({capture:d}),...h({focus:Z(c,P)}),...ee({type:f(`type`,F)}),...ue({unsupported:P,tap:f(`tap`,P),longPress:f(`longPress`,P),fill:f(`fill`,F),fillRef:F}),...p({unsupported:I,plan:Z(c,I),directionalFling:Z(c,I),multiTouch:Me(t,c),targetAuthoredDrag:Z(c,I),viewport:Z(c,I)}),...s({scroll:f(`scroll`,L)}),...o({back:f(`back`,R)}),...m({orientation:f(`orientation`,z)}),...a({tvRemote:B}),...re({unsupported:V,dismiss:f(`keyboard`,V),...t.platform===`android`?{enter:f(`keyboard`,V),status:f(`keyboard`,V)}:{}}),...ne({unsupported:H,read:f(`clipboard.read`,H),write:f(`clipboard.write`,H)}),...ce({unsupported:U,home:f(`home`,xe),appSwitcher:f(`appSwitcher`,Se)}),setFoldPose:W,...se({triggerAppEvent:Z(c,q)}),...ie({setSetting:K,readSetting:K}),...ae({read:G,wait:G,accept:G,dismiss:G}),...l({setViewport:N}),ensureReady:S,bootTarget:S,bootTargetHeadless:T,listApps:E,shutdownTarget:n(`unsupported-provider-mode`,`WebDriver owns the target lifecycle for provider-owned devices.`)}})}function Me(e,t){return t?e.platform===`apple`?ye:S:I}function Ne(e){return e.kind===`device`&&e.target===`mobile`&&(e.platform===`android`||e.platform===`apple`&&e.appleOs===`ios`)}function $(e,t){return e.isSessionActive?.(t)??e.ownsDevice(t)}async function Pe(e,t,n,r){return t.platform===`apple`?await e.appleDeployment.prepareArtifact(n,{signal:r}):await e.androidDeployment.prepareArtifact(n,{signal:r})}export{ke as createWebDriverPlatformRuntimeOwner};
|
package/dist/src/plugin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./runtime-deployment.js";import"./
|
|
1
|
+
import"./runtime-deployment.js";import"./runtime.js";async function e(e){return(await import(`./runtime.js`).then(e=>e.n)).createCloudWebDriverRuntime(e)}export{e as createCloudWebDriverRuntime};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{i as n,o as r}from"./png-worker-contract.js";import{t as i}from"./png-encode.js";import a from"node:zlib";const o=[137,80,78,71,13,10,26,10],s=[`IHDR`,`PLTE`,`IDAT`,`IEND`],c=/^[A-Za-z]{4}$/;function l(e){return!c.test(e)||e[0]<=`Z`&&!s.includes(e)}function u(e){return o.every((t,n)=>e[n]===t)}function d(e){if(e.length<33||!u(e))return null;let t=Buffer.from(e.buffer,e.byteOffset,e.byteLength);if(t.readUInt32BE(8)!==13||t.toString(`ascii`,12,16)!==`IHDR`)return null;let n=t.subarray(12,29);return t.readUInt32BE(29)===a.crc32(n)>>>0?{width:t.readUInt32BE(16),height:t.readUInt32BE(20),bitDepth:e[24],colorType:e[25],compressionMethod:e[26],filterMethod:e[27],interlace:e[28]}:null}function f(e){return e===2?3:e===6?4:null}function p(e){if(!u(e))return null;let t=Buffer.from(e.buffer,e.byteOffset,e.byteLength),n=[],r=8;for(;r+12<=e.length;){let i=t.readUInt32BE(r);if(i>2147483647||r+12+i>e.length)return null;let o=t.subarray(r+4,r+8+i);if(t.readUInt32BE(r+8+i)!==a.crc32(o)>>>0)return null;let s=t.toString(`ascii`,r+4,r+8);if(l(s))return null;if(n.push({type:s,data:t.subarray(r+8,r+8+i)}),s===`IEND`)return r+12+i===e.length?n:null;r+=12+i}return null}const m=[0,1,2,3,4];function h(e,t,n,r){switch(e){case 1:return t;case 2:return n;case 3:return t+n>>1;case 4:return g(t,n,r);default:return 0}}function g(e,t,n){let r=e+t-n,i=Math.abs(r-e),a=Math.abs(r-t),o=Math.abs(r-n);return i<=a&&i<=o?e:a<=o?t:n}function _(e,t){return e+t&255}function v(e){let t=d(e);return t===null||t.bitDepth!==8||t.compressionMethod!==0||t.filterMethod!==0||t.interlace!==0||f(t.colorType)===null?null:t}function y(e,t,n){let r=f(t.colorType);if(r===null)return null;let i=D(e);if(i===null)return null;let a=t.width*r,o=t.height*(a+1),s=E(i,o);if(s===null||s.length<o)return null;for(let e=0;e<n.y+n.height;e+=1)if(!b(s,e,a,r))return null;if(!C(s,n.y+n.height,t.height,a))return null;let c=r===4&&!w(s,n,a)?4:3;return{width:n.width,height:n.height,channels:c,pixels:T(s,n,a,r,c)}}function b(e,t,n,r){let i=t*(n+1)+1,a=e[i-1];return m.includes(a)?a===0?!0:t===0?x(e,i,n,r,a):S(e,i,n,r,a):!1}function x(e,t,n,r,i){let a=t+n;if(i===1||i===4){for(let n=t+r;n<a;n+=1)e[n]=_(e[n],e[n-r]);return!0}for(let n=t;n<a;n+=1){let a=n>=t+r?e[n-r]:0;e[n]=_(e[n],h(i,a,0,0))}return!0}function S(e,t,n,r,i){let a=t+n,o=t-(n+1);if(i===1){for(let n=t+r;n<a;n+=1)e[n]=_(e[n],e[n-r]);return!0}if(i===2){for(let n=t;n<a;n+=1)e[n]=_(e[n],e[o+(n-t)]);return!0}for(let n=t;n<a;n+=1){let a=n-t,s=n>=t+r?e[n-r]:0;e[n]=_(e[n],h(i,s,e[o+a],n>=t+r?e[o+a-r]:0))}return!0}function C(e,t,n,r){for(let i=t;i<n;i+=1)if(!m.includes(e[i*(r+1)]))return!1;return!0}function w(e,t,n){let r=255;for(let i=t.y;i<t.y+t.height&&r===255;i+=1){let a=i*(n+1)+4;for(let n=0;n<t.width;n+=1)r&=e[a+(t.x+n)*4]}return r===255}function T(e,t,n,r,i){let a=t.width*i,o=new Uint8Array(t.height*a);for(let s=0;s<t.height;s+=1){let c=(s+t.y)*(n+1)+1+t.x*r,l=s*a;if(r===i)o.set(e.subarray(c,c+t.width*r),l);else for(let n=0;n<t.width;n+=1){let t=c+n*r,a=l+n*i;o[a]=e[t],o[a+1]=e[t+1],o[a+2]=e[t+2]}}return o}function E(e,t){try{return a.inflateSync(e,{maxOutputLength:t})}catch{return null}}function D(e){let t=p(e);if(t===null)return null;let n=[];for(let e of t){if(e.type===`PLTE`||e.type===`tRNS`)return null;e.type===`IDAT`&&n.push(e.data)}return n.length===0?null:Buffer.concat(n)}var O=e({cropPngBytes:()=>k});function k(e,t,n){let r=v(e);if(r!==null&&!N(t,r.width,r.height)){M(t,r.width,r.height);let n=y(e,r,t);if(n!==null)return i(n.pixels,n.width,n.height,n.channels)}return A(e,t,n)}function A(e,t,i){let a=n(e,i);return M(t,a.width,a.height),N(t,a.width,a.height)?null:r.PNG.sync.write(j(a,t))}function j(e,t){let n=new r.PNG({width:t.width,height:t.height});for(let r=0;r<t.height;r+=1){let i=((r+t.y)*e.width+t.x)*4;e.data.copy(n.data,r*n.width*4,i,i+t.width*4)}return n}function M(e,n,r){if(e.x+e.width>n||e.y+e.height>r)throw new t(`INVALID_ARGS`,`Screenshot crop box ${e.width}x${e.height} at (${e.x}, ${e.y}) exceeds the ${n}x${r} image`)}function N(e,t,n){return e.x===0&&e.y===0&&e.width===t&&e.height===n}export{O as n,k as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{pt as t}from"./tv-remote.js";import{i as n,o as r}from"./png-worker-client.js";import{o as i}from"./png-worker-contract.js";import{promises as a}from"node:fs";async function o(i,o){let{min:s,max:l}=t;if(!Number.isFinite(o)||o<s||o>l)throw new e(`INVALID_ARGS`,`Screenshot scale must be between ${s} and ${l}`);if(o===1)return;let u=await n(await a.readFile(i),`screenshot`),d=Math.max(1,Math.round(u.width*o)),f=Math.max(1,Math.round(u.height*o));await a.writeFile(i,await r(c(u,d,f)))}async function s(t,i,o){if(!Number.isInteger(i)||i<1||!Number.isInteger(o)||o<1)throw new e(`INVALID_ARGS`,`Screenshot resize dimensions must be positive integers`);let s=await n(await a.readFile(t),`screenshot`);(s.width!==i||s.height!==o)&&await a.writeFile(t,await r(c(s,i,o)))}function c(e,t,n){let r=new i.PNG({width:t,height:n});for(let i=0;i<n;i+=1){let a=i*e.height/n,o=(i+1)*e.height/n;for(let n=0;n<t;n+=1){let s=n*e.width/t,c=(n+1)*e.width/t,l=0,u=0,d=0,f=0,p=0;for(let t=Math.floor(a);t<Math.ceil(o);t+=1){let n=Math.min(t+1,o)-Math.max(t,a);for(let r=Math.floor(s);r<Math.ceil(c);r+=1){let i=n*(Math.min(r+1,c)-Math.max(r,s)),a=(t*e.width+r)*4;l+=(e.data[a]??0)*i,u+=(e.data[a+1]??0)*i,d+=(e.data[a+2]??0)*i,f+=(e.data[a+3]??0)*i,p+=i}}let m=(i*r.width+n)*4;r.data[m]=Math.round(l/p),r.data[m+1]=Math.round(u/p),r.data[m+2]=Math.round(d/p),r.data[m+3]=Math.round(f/p)}}return r}export{s as n,o as r,c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t,
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t,it as n}from"./sdk-contracts.js";import{r}from"./diagnostics.js";import"./diagnostics2.js";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./png-worker-contract.js";import u from"node:fs";import d from"node:path";import{fileURLToPath as f}from"node:url";import{Worker as p}from"node:worker_threads";function m(e,t){try{let n=f(e),r=d.extname(n)||`.js`;return[d.join(d.dirname(n),`${t}${r}`),d.join(d.dirname(n),`internal`,`${t}${r}`)].find(e=>u.existsSync(e))??null}catch{return null}}var h=e({computePngRgbDifferenceAsync:()=>L,computeScreenshotDiffPixelsAsync:()=>R,cropPngBytesAsync:()=>I,decodePngAsync:()=>M,decodeScreenshotImageAsync:()=>N,encodePngAsync:()=>F,prewarmPngWorker:()=>A,terminatePngWorker:()=>j,transcodeScreenshotToPngAsync:()=>z}),g=class extends Error{};let _=null,v=!1,y=!1,b=0;const x=new Map;function S(e){v=!0,!y&&(y=!0,r({level:`warn`,phase:`png_worker_unavailable`,data:{reason:e}}),process.emitWarning(`PNG worker unavailable, falling back to in-process PNG processing: ${e}`))}function C(e){let r=x.get(e.id);r&&(x.delete(e.id),E(),e.ok?r.resolve(e.result):r.reject(new t(n(e.error.code),e.error.message,e.error.details)))}function w(e,t){_===e&&(S(t.message),_=null,e.terminate().catch(()=>{}),T(new g(`PNG worker failed: ${t.message}`)))}function T(e){let t=[...x.values()];x.clear();for(let n of t)n.reject(e)}function E(){_&&(x.size>0?_.ref():_.unref())}function D(){if(v)return null;if(_)return _;let e=m(import.meta.url,`png-worker`);if(!e)return S(`worker entry module not found next to the current module`),null;try{let t=new p(e,{execArgv:e.endsWith(`.ts`)?[`--experimental-strip-types`]:[]});return t.on(`message`,C),t.on(`error`,e=>{w(t,e)}),t.on(`exit`,e=>{w(t,Error(`PNG worker exited with code ${e}`))}),t.unref(),_=t,t}catch(e){return S(`failed to spawn worker: ${e instanceof Error?e.message:String(e)}`),null}}function O(e){let t=D();if(!t)return Promise.reject(new g(`PNG worker is unavailable`));b+=1;let n=b;return new Promise((r,i)=>{x.set(n,{resolve:r,reject:i}),E();try{t.postMessage({...e,id:n})}catch(e){x.delete(n),E(),i(new g(`failed to post job to PNG worker: ${e instanceof Error?e.message:String(e)}`))}})}async function k(e,t){try{return await O(e)}catch(e){if(e instanceof g)return await t();throw e}}function A(){D()}async function j(){let e=_;_=null,T(new g(`PNG worker terminated`)),e&&await e.terminate()}async function M(e,t){return P(await k({kind:`decode`,png:e,label:t},()=>{let n=a(e,t);return{kind:`decode`,width:n.width,height:n.height,data:n.data}}))}async function N(e,t){return P(await k({kind:`decode-image`,image:e,label:t},async()=>{let{decodeScreenshotImage:n}=await import(`./screenshot-image.js`),r=n(e,t);return{kind:`decode-image`,width:r.width,height:r.height,data:r.data}}))}function P(e){let t=new s.PNG({width:e.width,height:e.height});return t.data=l(e.data),t}async function F(e){let t=await k({kind:`encode`,width:e.width,height:e.height,data:e.data},()=>({kind:`encode`,png:s.PNG.sync.write(e)}));return l(t.png)}async function I(e,t,n){let r=await k({kind:`crop`,png:e,label:n,box:t},async()=>{let{cropPngBytes:r}=await import(`./png-crop-bytes.js`).then(e=>e.n);return{kind:`crop`,png:r(e,t,n)}});return r.png===null?null:l(r.png)}async function L(e,t,n){let{kind:r,...i}=await k({kind:`rgb-difference`,firstPng:e,secondPng:t,label:n},()=>({kind:`rgb-difference`,...o(a(e,n),a(t,n))}));return i}async function R(e){let{kind:t,...n}=await k({kind:`diff-pixels`,...e},()=>({kind:`diff-pixels`,...c(e)}));return{...n,diffData:l(n.diffData)}}async function z(e,t){if(i(e))return e;let n=await k({kind:`jpeg-to-png`,image:e,label:t},async()=>{let{transcodeScreenshotToPng:n}=await import(`./screenshot-image.js`);return{kind:`jpeg-to-png`,png:n(e,t)}});return l(n.png)}export{N as a,A as c,M as i,j as l,R as n,F as o,I as r,h as s,L as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=.78,t={r:220,g:0,b:0};function n(n){let{baselineData:a,currentData:o,maxColorDistance:s}=n,c=n.width*n.height,l=Buffer.alloc(c*4),u=new Uint8Array(c),d=0;for(let n=0,c=0;n<a.length;n+=4,c+=1){let f=a[n]-o[n],p=a[n+1]-o[n+1],m=a[n+2]-o[n+2];if(Math.sqrt(f**2+p**2+m**2)>s){d+=1,u[c]=1;let a=r(o,n);l[n]=i(a,t.r,e),l[n+1]=i(a,t.g,e),l[n+2]=i(a,t.b,e),l[n+3]=255;continue}let h=r(o,n);l[n]=h,l[n+1]=h,l[n+2]=h,l[n+3]=255}return{diffData:l,diffMask:u,differentPixels:d}}function r(e,t){return i(Math.round(e[t]*.299+e[t+1]*.587+e[t+2]*.114),255,.72)}function i(e,t,n){return Math.round(e*(1-n)+t*n)}function a(e,t){let n={first:{width:e.width,height:e.height,dataLength:e.data.length},second:{width:t.width,height:t.height,dataLength:t.data.length}};if(e.width!==t.width||e.height!==t.height)return{...n,status:`dimension_mismatch`};let r=e.width*e.height;if(e.data.length!==t.data.length||e.data.length!==r*4)return{...n,status:`data_length_mismatch`};let i=0;for(let n=0;n<e.data.length;n+=4)i+=Math.abs(e.data[n]-t.data[n]),i+=Math.abs(e.data[n+1]-t.data[n+1]),i+=Math.abs(e.data[n+2]-t.data[n+2]);return{...n,status:`compared`,differencePercent:100*i/(765*r)}}function o(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}export{a as n,n as r,o as t};
|
|
1
|
+
import{i as e,t}from"./rolldown-runtime.js";import{P as n}from"./sdk-contracts.js";var r=t(((t,n)=>{let r=e(`util`),i=e(`stream`),a=n.exports=function(){i.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding=`utf8`,this.writable=!0};r.inherits(a,i),a.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit(`drain`))}.bind(this))},a.prototype.write=function(e,t){if(!this.writable)return this.emit(`error`,Error(`Stream not writable`)),!1;let n;return n=Buffer.isBuffer(e)?e:Buffer.from(e,t||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused},a.prototype.end=function(e,t){e&&this.write(e,t),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))},a.prototype.destroySoon=a.prototype.end,a.prototype._end=function(){this._reads.length>0&&this.emit(`error`,Error(`Unexpected end of input`)),this.destroy()},a.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit(`close`))},a.prototype._processReadAllowingLess=function(e){this._reads.shift();let t=this._buffers[0];t.length>e.length?(this._buffered-=e.length,this._buffers[0]=t.slice(e.length),e.func.call(this,t.slice(0,e.length))):(this._buffered-=t.length,this._buffers.shift(),e.func.call(this,t))},a.prototype._processRead=function(e){this._reads.shift();let t=0,n=0,r=Buffer.alloc(e.length);for(;t<e.length;){let i=this._buffers[n++],a=Math.min(i.length,e.length-t);i.copy(r,t,0,a),t+=a,a!==i.length&&(this._buffers[--n]=i.slice(a))}n>0&&this._buffers.splice(0,n),this._buffered-=e.length,e.func.call(this,r)},a.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}this._buffers&&!this.writable&&this._end()}catch(e){this.emit(`error`,e)}}})),i=t((e=>{let t=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];e.getImagePasses=function(e,n){let r=[],i=e%8,a=n%8,o=(e-i)/8,s=(n-a)/8;for(let e=0;e<t.length;e++){let n=t[e],c=o*n.x.length,l=s*n.y.length;for(let e=0;e<n.x.length&&n.x[e]<i;e++)c++;for(let e=0;e<n.y.length&&n.y[e]<a;e++)l++;c>0&&l>0&&r.push({width:c,height:l,index:e})}return r},e.getInterlaceIterator=function(e){return function(n,r,i){let a=n%t[i].x.length,o=(n-a)/t[i].x.length*8+t[i].x[a],s=r%t[i].y.length,c=(r-s)/t[i].y.length*8+t[i].y[s];return o*4+c*e*4}}})),a=t(((e,t)=>{t.exports=function(e,t,n){let r=e+t-n,i=Math.abs(r-e),a=Math.abs(r-t),o=Math.abs(r-n);return i<=a&&i<=o?e:a<=o?t:n}})),o=t(((e,t)=>{let n=i(),r=a();function o(e,t,n){let r=e*t;return n!==8&&(r=Math.ceil(r/(8/n))),r}let s=t.exports=function(e,t){let r=e.width,i=e.height,a=e.interlace,s=e.bpp,c=e.depth;if(this.read=t.read,this.write=t.write,this.complete=t.complete,this._imageIndex=0,this._images=[],a){let e=n.getImagePasses(r,i);for(let t=0;t<e.length;t++)this._images.push({byteWidth:o(e[t].width,s,c),height:e[t].height,lineIndex:0})}else this._images.push({byteWidth:o(r,s,c),height:i,lineIndex:0});this._xComparison=c===8?s:c===16?s*2:1};s.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))},s.prototype._unFilterType1=function(e,t,n){let r=this._xComparison,i=r-1;for(let a=0;a<n;a++){let n=e[1+a],o=a>i?t[a-r]:0;t[a]=n+o}},s.prototype._unFilterType2=function(e,t,n){let r=this._lastLine;for(let i=0;i<n;i++){let n=e[1+i],a=r?r[i]:0;t[i]=n+a}},s.prototype._unFilterType3=function(e,t,n){let r=this._xComparison,i=r-1,a=this._lastLine;for(let o=0;o<n;o++){let n=e[1+o],s=a?a[o]:0,c=o>i?t[o-r]:0,l=Math.floor((c+s)/2);t[o]=n+l}},s.prototype._unFilterType4=function(e,t,n){let i=this._xComparison,a=i-1,o=this._lastLine;for(let s=0;s<n;s++){let n=e[1+s],c=o?o[s]:0,l=s>a?t[s-i]:0,u=s>a&&o?o[s-i]:0,d=r(l,c,u);t[s]=n+d}},s.prototype._reverseFilterLine=function(e){let t=e[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(t===0)n=e.slice(1,i+1);else switch(n=Buffer.alloc(i),t){case 1:this._unFilterType1(e,n,i);break;case 2:this._unFilterType2(e,n,i);break;case 3:this._unFilterType3(e,n,i);break;case 4:this._unFilterType4(e,n,i);break;default:throw Error(`Unrecognised filter type - `+t)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}})),s=t(((t,n)=>{let i=e(`util`),a=r(),s=o(),c=n.exports=function(e){a.call(this);let t=[],n=this;this._filter=new s(e,{read:this.read.bind(this),write:function(e){t.push(e)},complete:function(){n.emit(`complete`,Buffer.concat(t))}}),this._filter.start()};i.inherits(c,a)})),c=t(((e,t)=>{t.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}})),l=t(((e,t)=>{let n=[];(function(){for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t&1?t=3988292384^t>>>1:t>>>=1;n[e]=t}})();let r=t.exports=function(){this._crc=-1};r.prototype.write=function(e){for(let t=0;t<e.length;t++)this._crc=n[(this._crc^e[t])&255]^this._crc>>>8;return!0},r.prototype.crc32=function(){return this._crc^-1},r.crc32=function(e){let t=-1;for(let r=0;r<e.length;r++)t=n[(t^e[r])&255]^t>>>8;return t^-1}})),u=t(((e,t)=>{let n=c(),r=l(),i=t.exports=function(e,t){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[n.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[n.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[n.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[n.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[n.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[n.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=t.read,this.error=t.error,this.metadata=t.metadata,this.gamma=t.gamma,this.transColor=t.transColor,this.palette=t.palette,this.parsed=t.parsed,this.inflateData=t.inflateData,this.finished=t.finished,this.simpleTransparency=t.simpleTransparency,this.headersFinished=t.headersFinished||function(){}};i.prototype.start=function(){this.read(n.PNG_SIGNATURE.length,this._parseSignature.bind(this))},i.prototype._parseSignature=function(e){let t=n.PNG_SIGNATURE;for(let n=0;n<t.length;n++)if(e[n]!==t[n]){this.error(Error(`Invalid file signature`));return}this.read(8,this._parseChunkBegin.bind(this))},i.prototype._parseChunkBegin=function(e){let t=e.readUInt32BE(0),i=e.readUInt32BE(4),a=``;for(let t=4;t<8;t++)a+=String.fromCharCode(e[t]);let o=!!(e[4]&32);if(!this._hasIHDR&&i!==n.TYPE_IHDR){this.error(Error(`Expected IHDR on beggining`));return}if(this._crc=new r,this._crc.write(Buffer.from(a)),this._chunks[i])return this._chunks[i](t);if(!o){this.error(Error(`Unsupported critical chunk type `+a));return}this.read(t+4,this._skipChunk.bind(this))},i.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))},i.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))},i.prototype._parseChunkEnd=function(e){let t=e.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==t){this.error(Error(`Crc error - `+t+` - `+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))},i.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))},i.prototype._parseIHDR=function(e){this._crc.write(e);let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i=e[8],a=e[9],o=e[10],s=e[11],c=e[12];if(i!==8&&i!==4&&i!==2&&i!==1&&i!==16){this.error(Error(`Unsupported bit depth `+i));return}if(!(a in n.COLORTYPE_TO_BPP_MAP)){this.error(Error(`Unsupported color type`));return}if(o!==0){this.error(Error(`Unsupported compression method`));return}if(s!==0){this.error(Error(`Unsupported filter method`));return}if(c!==0&&c!==1){this.error(Error(`Unsupported interlace method`));return}this._colorType=a;let l=n.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:t,height:r,depth:i,interlace:!!c,palette:!!(a&n.COLORTYPE_PALETTE),color:!!(a&n.COLORTYPE_COLOR),alpha:!!(a&n.COLORTYPE_ALPHA),bpp:l,colorType:a}),this._handleChunkEnd()},i.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))},i.prototype._parsePLTE=function(e){this._crc.write(e);let t=Math.floor(e.length/3);for(let n=0;n<t;n++)this._palette.push([e[n*3],e[n*3+1],e[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()},i.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))},i.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===n.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error(`Transparency chunk must be after palette`));return}if(e.length>this._palette.length){this.error(Error(`More transparent colors than palette size`));return}for(let t=0;t<e.length;t++)this._palette[t][3]=e[t];this.palette(this._palette)}this._colorType===n.COLORTYPE_GRAYSCALE&&this.transColor([e.readUInt16BE(0)]),this._colorType===n.COLORTYPE_COLOR&&this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]),this._handleChunkEnd()},i.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))},i.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/n.GAMMA_DIVISION),this._handleChunkEnd()},i.prototype._handleIDAT=function(e){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-e,this._parseIDAT.bind(this,e))},i.prototype._parseIDAT=function(e,t){if(this._crc.write(t),this._colorType===n.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error(`Expected palette not found`);this.inflateData(t);let r=e-t.length;r>0?this._handleIDAT(r):this._handleChunkEnd()},i.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))},i.prototype._parseIEND=function(e){this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}})),d=t((e=>{let t=i(),n=[function(){},function(e,t,n,r){if(r===t.length)throw Error(`Ran out of data`);let i=t[r];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=255},function(e,t,n,r){if(r+1>=t.length)throw Error(`Ran out of data`);let i=t[r];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=t[r+1]},function(e,t,n,r){if(r+2>=t.length)throw Error(`Ran out of data`);e[n]=t[r],e[n+1]=t[r+1],e[n+2]=t[r+2],e[n+3]=255},function(e,t,n,r){if(r+3>=t.length)throw Error(`Ran out of data`);e[n]=t[r],e[n+1]=t[r+1],e[n+2]=t[r+2],e[n+3]=t[r+3]}],r=[function(){},function(e,t,n,r){let i=t[0];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=r},function(e,t,n){let r=t[0];e[n]=r,e[n+1]=r,e[n+2]=r,e[n+3]=t[1]},function(e,t,n,r){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=r},function(e,t,n){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=t[3]}];function a(e,t){let n=[],r=0;function i(){if(r===e.length)throw Error(`Ran out of data`);let i=e[r];r++;let a,o,s,c,l,u,d,f;switch(t){default:throw Error(`unrecognised depth`);case 16:d=e[r],r++,n.push((i<<8)+d);break;case 4:d=i&15,f=i>>4,n.push(f,d);break;case 2:l=i&3,u=i>>2&3,d=i>>4&3,f=i>>6&3,n.push(f,d,u,l);break;case 1:a=i&1,o=i>>1&1,s=i>>2&1,c=i>>3&1,l=i>>4&1,u=i>>5&1,d=i>>6&1,f=i>>7&1,n.push(f,d,u,l,c,s,o,a)}}return{get:function(e){for(;n.length<e;)i();let t=n.slice(0,e);return n=n.slice(e),t},resetAfterLine:function(){n.length=0},end:function(){if(r!==e.length)throw Error(`extra data found`)}}}function o(e,t,r,i,a,o){let s=e.width,c=e.height,l=e.index;for(let e=0;e<c;e++)for(let c=0;c<s;c++){let s=r(c,e,l);n[i](t,a,s,o),o+=i}return o}function s(e,t,n,i,a,o){let s=e.width,c=e.height,l=e.index;for(let e=0;e<c;e++){for(let c=0;c<s;c++){let s=a.get(i),u=n(c,e,l);r[i](t,s,u,o)}a.resetAfterLine()}}e.dataToBitMap=function(e,n){let r=n.width,i=n.height,c=n.depth,l=n.bpp,u=n.interlace,d;c!==8&&(d=a(e,c));let f;f=c<=8?Buffer.alloc(r*i*4):new Uint16Array(r*i*4);let p=2**c-1,m=0,h,g;if(u)h=t.getImagePasses(r,i),g=t.getInterlaceIterator(r,i);else{let e=0;g=function(){let t=e;return e+=4,t},h=[{width:r,height:i}]}for(let t=0;t<h.length;t++)c===8?m=o(h[t],f,g,l,e,m):s(h[t],f,g,l,d,p);if(c===8){if(m!==e.length)throw Error(`extra data found`)}else d.end();return f}})),f=t(((e,t)=>{function n(e,t,n,r,i){let a=0;for(let o=0;o<r;o++)for(let r=0;r<n;r++){let n=i[e[a]];if(!n)throw Error(`index `+e[a]+` not in palette`);for(let e=0;e<4;e++)t[a+e]=n[e];a+=4}}function r(e,t,n,r,i){let a=0;for(let o=0;o<r;o++)for(let r=0;r<n;r++){let n=!1;if(i.length===1?i[0]===e[a]&&(n=!0):i[0]===e[a]&&i[1]===e[a+1]&&i[2]===e[a+2]&&(n=!0),n)for(let e=0;e<4;e++)t[a+e]=0;a+=4}}function i(e,t,n,r,i){let a=2**i-1,o=0;for(let i=0;i<r;i++)for(let r=0;r<n;r++){for(let n=0;n<4;n++)t[o+n]=Math.floor(e[o+n]*255/a+.5);o+=4}}t.exports=function(e,t,a=!1){let o=t.depth,s=t.width,c=t.height,l=t.colorType,u=t.transColor,d=t.palette,f=e;return l===3?n(e,f,s,c,d):(u&&r(e,f,s,c,u),o!==8&&!a&&(o===16&&(f=Buffer.alloc(s*c*4)),i(e,f,s,c,o))),f}})),p=t(((t,n)=>{let i=e(`util`),a=e(`zlib`),o=r(),c=s(),l=u(),p=d(),m=f(),h=n.exports=function(e){o.call(this),this._parser=new l(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,`gamma`),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};i.inherits(h,o),h.prototype._handleError=function(e){this.emit(`error`,e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on(`error`,function(){})),this.errord=!0},h.prototype._inflateData=function(e){if(!this._inflate){if(this._bitmapInfo.interlace)this._inflate=a.createInflate(),this._inflate.on(`error`,this.emit.bind(this,`error`)),this._filter.on(`complete`,this._complete.bind(this)),this._inflate.pipe(this._filter);else{let e=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,t=Math.max(e,a.Z_MIN_CHUNK);this._inflate=a.createInflate({chunkSize:t});let n=e,r=this.emit.bind(this,`error`);this._inflate.on(`error`,function(e){n&&r(e)}),this._filter.on(`complete`,this._complete.bind(this));let i=this._filter.write.bind(this._filter);this._inflate.on(`data`,function(e){n&&(e.length>n&&(e=e.slice(0,n)),n-=e.length,i(e))}),this._inflate.on(`end`,this._filter.end.bind(this._filter))}}this._inflate.write(e)},h.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new c(this._bitmapInfo)},h.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e},h.prototype._handlePalette=function(e){this._bitmapInfo.palette=e},h.prototype._simpleTransparency=function(){this._metaData.alpha=!0},h.prototype._headersFinished=function(){this.emit(`metadata`,this._metaData)},h.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit(`error`,`No Inflate block`))},h.prototype._complete=function(e){if(this.errord)return;let t;try{let n=p.dataToBitMap(e,this._bitmapInfo);t=m(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(e){this._handleError(e);return}this.emit(`parsed`,t)}})),m=t(((e,t)=>{let n=c();t.exports=function(e,t,r,i){let a=[n.COLORTYPE_COLOR_ALPHA,n.COLORTYPE_ALPHA].indexOf(i.colorType)!==-1;if(i.colorType===i.inputColorType){let t=(function(){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,256,!0),new Int16Array(e)[0]!==256})();if(i.bitDepth===8||i.bitDepth===16&&t)return e}let o=i.bitDepth===16?new Uint16Array(e.buffer):e,s=255,c=n.COLORTYPE_TO_BPP_MAP[i.inputColorType];c===4&&!i.inputHasAlpha&&(c=3);let l=n.COLORTYPE_TO_BPP_MAP[i.colorType];i.bitDepth===16&&(s=65535,l*=2);let u=Buffer.alloc(t*r*l),d=0,f=0,p=i.bgColor||{};p.red===void 0&&(p.red=s),p.green===void 0&&(p.green=s),p.blue===void 0&&(p.blue=s);function m(){let e,t,r,c=s;switch(i.inputColorType){case n.COLORTYPE_COLOR_ALPHA:c=o[d+3],e=o[d],t=o[d+1],r=o[d+2];break;case n.COLORTYPE_COLOR:e=o[d],t=o[d+1],r=o[d+2];break;case n.COLORTYPE_ALPHA:c=o[d+1],e=o[d],t=e,r=e;break;case n.COLORTYPE_GRAYSCALE:e=o[d],t=e,r=e;break;default:throw Error(`input color type:`+i.inputColorType+` is not supported at present`)}return i.inputHasAlpha&&(a||(c/=s,e=Math.min(Math.max(Math.round((1-c)*p.red+c*e),0),s),t=Math.min(Math.max(Math.round((1-c)*p.green+c*t),0),s),r=Math.min(Math.max(Math.round((1-c)*p.blue+c*r),0),s))),{red:e,green:t,blue:r,alpha:c}}for(let e=0;e<r;e++)for(let e=0;e<t;e++){let e=m(o,d);switch(i.colorType){case n.COLORTYPE_COLOR_ALPHA:case n.COLORTYPE_COLOR:i.bitDepth===8?(u[f]=e.red,u[f+1]=e.green,u[f+2]=e.blue,a&&(u[f+3]=e.alpha)):(u.writeUInt16BE(e.red,f),u.writeUInt16BE(e.green,f+2),u.writeUInt16BE(e.blue,f+4),a&&u.writeUInt16BE(e.alpha,f+6));break;case n.COLORTYPE_ALPHA:case n.COLORTYPE_GRAYSCALE:{let t=(e.red+e.green+e.blue)/3;i.bitDepth===8?(u[f]=t,a&&(u[f+1]=e.alpha)):(u.writeUInt16BE(t,f),a&&u.writeUInt16BE(e.alpha,f+2));break}default:throw Error(`unrecognised color Type `+i.colorType)}d+=c,f+=l}return u}})),h=t(((e,t)=>{let n=a();function r(e,t,n,r,i){for(let a=0;a<n;a++)r[i+a]=e[t+a]}function i(e,t,n){let r=0,i=t+n;for(let n=t;n<i;n++)r+=Math.abs(e[n]);return r}function o(e,t,n,r,i,a){for(let o=0;o<n;o++){let n=o>=a?e[t+o-a]:0,s=e[t+o]-n;r[i+o]=s}}function s(e,t,n,r){let i=0;for(let a=0;a<n;a++){let n=a>=r?e[t+a-r]:0,o=e[t+a]-n;i+=Math.abs(o)}return i}function c(e,t,n,r,i){for(let a=0;a<n;a++){let o=t>0?e[t+a-n]:0,s=e[t+a]-o;r[i+a]=s}}function l(e,t,n){let r=0,i=t+n;for(let a=t;a<i;a++){let i=t>0?e[a-n]:0,o=e[a]-i;r+=Math.abs(o)}return r}function u(e,t,n,r,i,a){for(let o=0;o<n;o++){let s=o>=a?e[t+o-a]:0,c=t>0?e[t+o-n]:0,l=e[t+o]-(s+c>>1);r[i+o]=l}}function d(e,t,n,r){let i=0;for(let a=0;a<n;a++){let o=a>=r?e[t+a-r]:0,s=t>0?e[t+a-n]:0,c=e[t+a]-(o+s>>1);i+=Math.abs(c)}return i}function f(e,t,r,i,a,o){for(let s=0;s<r;s++){let c=s>=o?e[t+s-o]:0,l=t>0?e[t+s-r]:0,u=t>0&&s>=o?e[t+s-(r+o)]:0,d=e[t+s]-n(c,l,u);i[a+s]=d}}function p(e,t,r,i){let a=0;for(let o=0;o<r;o++){let s=o>=i?e[t+o-i]:0,c=t>0?e[t+o-r]:0,l=t>0&&o>=i?e[t+o-(r+i)]:0,u=e[t+o]-n(s,c,l);a+=Math.abs(u)}return a}let m={0:r,1:o,2:c,3:u,4:f},h={0:i,1:s,2:l,3:d,4:p};t.exports=function(e,t,n,r,i){let a;if(!(`filterType`in r)||r.filterType===-1)a=[0,1,2,3,4];else if(typeof r.filterType==`number`)a=[r.filterType];else throw Error(`unrecognised filter types`);r.bitDepth===16&&(i*=2);let o=t*i,s=0,c=0,l=Buffer.alloc((o+1)*n),u=a[0];for(let t=0;t<n;t++){if(a.length>1){let t=1/0;for(let n=0;n<a.length;n++){let r=h[a[n]](e,c,o,i);r<t&&(u=a[n],t=r)}}l[s]=u,s++,m[u](e,c,o,l,s,i),s+=o,c+=o}return l}})),g=t(((t,n)=>{let r=c(),i=l(),a=m(),o=h(),s=e(`zlib`),u=n.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32768,e.deflateLevel=e.deflateLevel==null?9:e.deflateLevel,e.deflateStrategy=e.deflateStrategy==null?3:e.deflateStrategy,e.inputHasAlpha=e.inputHasAlpha==null||e.inputHasAlpha,e.deflateFactory=e.deflateFactory||s.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType==`number`?e.colorType:r.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType==`number`?e.inputColorType:r.COLORTYPE_COLOR_ALPHA,[r.COLORTYPE_GRAYSCALE,r.COLORTYPE_COLOR,r.COLORTYPE_COLOR_ALPHA,r.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw Error(`option color type:`+e.colorType+` is not supported at present`);if([r.COLORTYPE_GRAYSCALE,r.COLORTYPE_COLOR,r.COLORTYPE_COLOR_ALPHA,r.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw Error(`option input color type:`+e.inputColorType+` is not supported at present`);if(e.bitDepth!==8&&e.bitDepth!==16)throw Error(`option bit depth:`+e.bitDepth+` is not supported at present`)};u.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}},u.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())},u.prototype.filterData=function(e,t,n){let i=a(e,t,n,this._options),s=r.COLORTYPE_TO_BPP_MAP[this._options.colorType];return o(i,t,n,this._options,s)},u.prototype._packChunk=function(e,t){let n=t?t.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(e,4),t&&t.copy(r,8),r.writeInt32BE(i.crc32(r.slice(4,r.length-4)),r.length-4),r},u.prototype.packGAMA=function(e){let t=Buffer.alloc(4);return t.writeUInt32BE(Math.floor(e*r.GAMMA_DIVISION),0),this._packChunk(r.TYPE_gAMA,t)},u.prototype.packIHDR=function(e,t){let n=Buffer.alloc(13);return n.writeUInt32BE(e,0),n.writeUInt32BE(t,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(r.TYPE_IHDR,n)},u.prototype.packIDAT=function(e){return this._packChunk(r.TYPE_IDAT,e)},u.prototype.packIEND=function(){return this._packChunk(r.TYPE_IEND,null)}})),_=t(((t,n)=>{let r=e(`util`),i=e(`stream`),a=c(),o=g(),s=n.exports=function(e){i.call(this);let t=e||{};this._packer=new o(t),this._deflate=this._packer.createDeflate(),this.readable=!0};r.inherits(s,i),s.prototype.pack=function(e,t,n,r){this.emit(`data`,Buffer.from(a.PNG_SIGNATURE)),this.emit(`data`,this._packer.packIHDR(t,n)),r&&this.emit(`data`,this._packer.packGAMA(r));let i=this._packer.filterData(e,t,n);this._deflate.on(`error`,this.emit.bind(this,`error`)),this._deflate.on(`data`,function(e){this.emit(`data`,this._packer.packIDAT(e))}.bind(this)),this._deflate.on(`end`,function(){this.emit(`data`,this._packer.packIEND()),this.emit(`end`)}.bind(this)),this._deflate.end(i)}})),v=t(((t,n)=>{let r=e(`assert`).ok,i=e(`zlib`),a=e(`util`),o=e(`buffer`).kMaxLength;function s(e){if(!(this instanceof s))return new s(e);e&&e.chunkSize<i.Z_MIN_CHUNK&&(e.chunkSize=i.Z_MIN_CHUNK),i.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null&&(this._maxLength=e.maxLength)}function c(e){return new s(e)}function l(e,t){t&&process.nextTick(t),e._handle&&=(e._handle.close(),null)}s.prototype._processChunk=function(e,t,n){if(typeof n==`function`)return i.Inflate._processChunk.call(this,e,t,n);let a=this,s=e&&e.length,c=this._chunkSize-this._offset,u=this._maxLength,d=0,f=[],p=0,m;this.on(`error`,function(e){m=e});function h(e,t){if(a._hadError)return;let n=c-t;if(r(n>=0,`have should not go down`),n>0){let e=a._buffer.slice(a._offset,a._offset+n);if(a._offset+=n,e.length>u&&(e=e.slice(0,u)),f.push(e),p+=e.length,u-=e.length,u===0)return!1}return(t===0||a._offset>=a._chunkSize)&&(c=a._chunkSize,a._offset=0,a._buffer=Buffer.allocUnsafe(a._chunkSize)),t===0&&(d+=s-e,s=e,!0)}r(this._handle,`zlib binding closed`);let g;do g=this._handle.writeSync(t,e,d,s,this._buffer,this._offset,c),g||=this._writeState;while(!this._hadError&&h(g[0],g[1]));if(this._hadError)throw m;if(p>=o)throw l(this),RangeError(`Cannot create final Buffer. It would be larger than 0x`+o.toString(16)+` bytes`);let _=Buffer.concat(f,p);return l(this),_},a.inherits(s,i.Inflate);function u(e,t){if(typeof t==`string`&&(t=Buffer.from(t)),!(t instanceof Buffer))throw TypeError(`Not a string or buffer`);let n=e._finishFlushFlag;return n??=i.Z_FINISH,e._processChunk(t,n)}function d(e,t){return u(new s(t),e)}n.exports=t=d,t.Inflate=s,t.createInflate=c,t.inflateSync=d})),y=t(((e,t)=>{let n=t.exports=function(e){this._buffer=e,this._reads=[]};n.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t})},n.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let t=this._buffer;this._buffer=t.slice(e.length),e.func.call(this,t.slice(0,e.length))}else break}if(this._reads.length>0)throw Error(`There are some read requests waitng on finished stream`);if(this._buffer.length>0)throw Error(`unrecognised content at end of stream`)}})),b=t((e=>{let t=y(),n=o();e.process=function(e,r){let i=[],a=new t(e);return new n(r,{read:a.read.bind(a),write:function(e){i.push(e)},complete:function(){}}).start(),a.process(),Buffer.concat(i)}})),x=t(((t,n)=>{let r=!0,i=e(`zlib`),a=v();i.deflateSync||(r=!1);let o=y(),s=b(),c=u(),l=d(),p=f();n.exports=function(e,t){if(!r)throw Error(`To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0`);let n;function u(e){n=e}let d;function f(e){d=e}function m(e){d.transColor=e}function h(e){d.palette=e}function g(){d.alpha=!0}let _;function v(e){_=e}let y=[];function b(e){y.push(e)}let x=new o(e);if(new c(t,{read:x.read.bind(x),error:u,metadata:f,gamma:v,palette:h,transColor:m,inflateData:b,simpleTransparency:g}).start(),x.process(),n)throw n;let S=Buffer.concat(y);y.length=0;let C;if(d.interlace)C=i.inflateSync(S);else{let e=((d.width*d.bpp*d.depth+7>>3)+1)*d.height;C=a(S,{chunkSize:e,maxLength:e})}if(S=null,!C||!C.length)throw Error(`bad png - invalid inflate data response`);let w=s.process(C,d);S=null;let T=l.dataToBitMap(w,d);w=null;let E=p(T,d,t.skipRescale);return d.data=E,d.gamma=_||0,d}})),S=t(((t,n)=>{let r=!0,i=e(`zlib`);i.deflateSync||(r=!1);let a=c(),o=g();n.exports=function(e,t){if(!r)throw Error(`To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0`);let n=new o(t||{}),s=[];s.push(Buffer.from(a.PNG_SIGNATURE)),s.push(n.packIHDR(e.width,e.height)),e.gamma&&s.push(n.packGAMA(e.gamma));let c=n.filterData(e.data,e.width,e.height),l=i.deflateSync(c,n.getDeflateOptions());if(c=null,!l||!l.length)throw Error(`bad png - invalid compressed data response`);return s.push(n.packIDAT(l)),s.push(n.packIEND()),Buffer.concat(s)}})),C=t((e=>{let t=x(),n=S();e.read=function(e,n){return t(e,n||{})},e.write=function(e,t){return n(e,t)}})),w=t((t=>{let n=e(`util`),r=e(`stream`),i=p(),a=_(),o=C(),s=t.PNG=function(e){r.call(this),e||={},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new i(e),this._parser.on(`error`,this.emit.bind(this,`error`)),this._parser.on(`close`,this._handleClose.bind(this)),this._parser.on(`metadata`,this._metadata.bind(this)),this._parser.on(`gamma`,this._gamma.bind(this)),this._parser.on(`parsed`,function(e){this.data=e,this.emit(`parsed`,e)}.bind(this)),this._packer=new a(e),this._packer.on(`data`,this.emit.bind(this,`data`)),this._packer.on(`end`,this.emit.bind(this,`end`)),this._parser.on(`close`,this._handleClose.bind(this)),this._packer.on(`error`,this.emit.bind(this,`error`))};n.inherits(s,r),s.sync=o,s.prototype.pack=function(){return!this.data||!this.data.length?(this.emit(`error`,`No data provided`),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)},s.prototype.parse=function(e,t){if(t){let e,n;e=function(e){this.removeListener(`error`,n),this.data=e,t(null,this)}.bind(this),n=function(n){this.removeListener(`parsed`,e),t(n,null)}.bind(this),this.once(`parsed`,e),this.once(`error`,n)}return this.end(e),this},s.prototype.write=function(e){return this._parser.write(e),!0},s.prototype.end=function(e){this._parser.end(e)},s.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit(`metadata`,e)},s.prototype._gamma=function(e){this.gamma=e},s.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit(`close`)},s.bitblt=function(e,t,n,r,i,a,o,s){if(n|=0,r|=0,i|=0,a|=0,o|=0,s|=0,n>e.width||r>e.height||n+i>e.width||r+a>e.height)throw Error(`bitblt reading outside image`);if(o>t.width||s>t.height||o+i>t.width||s+a>t.height)throw Error(`bitblt writing outside image`);for(let c=0;c<a;c++)e.data.copy(t.data,(s+c)*t.width+o<<2,(r+c)*e.width+n<<2,(r+c)*e.width+n+i<<2)},s.prototype.bitblt=function(e,t,n,r,i,a,o){return s.bitblt(this,e,t,n,r,i,a,o),this},s.adjustGamma=function(e){if(e.gamma){for(let t=0;t<e.height;t++)for(let n=0;n<e.width;n++){let r=e.width*t+n<<2;for(let t=0;t<3;t++){let n=e.data[r+t]/255;n**=1/2.2/e.gamma,e.data[r+t]=Math.round(n*255)}}e.gamma=0}},s.prototype.adjustGamma=function(){s.adjustGamma(this)}}))();const T=Buffer.from([137,80,78,71,13,10,26,10]);function E(e){return e.subarray(0,T.length).equals(T)}function D(e,t){try{return w.PNG.sync.read(e)}catch(e){throw new n(`COMMAND_FAILED`,`Failed to decode ${t} as PNG`,{label:t,reason:e instanceof Error?e.message:String(e)})}}const O=.78,k={r:220,g:0,b:0};function A(e){let{baselineData:t,currentData:n,maxColorDistance:r}=e,i=e.width*e.height,a=Buffer.alloc(i*4),o=new Uint8Array(i),s=0;for(let e=0,i=0;e<t.length;e+=4,i+=1){let c=t[e]-n[e],l=t[e+1]-n[e+1],u=t[e+2]-n[e+2];if(Math.sqrt(c**2+l**2+u**2)>r){s+=1,o[i]=1;let t=j(n,e);a[e]=M(t,k.r,O),a[e+1]=M(t,k.g,O),a[e+2]=M(t,k.b,O),a[e+3]=255;continue}let d=j(n,e);a[e]=d,a[e+1]=d,a[e+2]=d,a[e+3]=255}return{diffData:a,diffMask:o,differentPixels:s}}function j(e,t){return M(Math.round(e[t]*.299+e[t+1]*.587+e[t+2]*.114),255,.72)}function M(e,t,n){return Math.round(e*(1-n)+t*n)}function N(e,t){let n={first:{width:e.width,height:e.height,dataLength:e.data.length},second:{width:t.width,height:t.height,dataLength:t.data.length}};if(e.width!==t.width||e.height!==t.height)return{...n,status:`dimension_mismatch`};let r=e.width*e.height;if(e.data.length!==t.data.length||e.data.length!==r*4)return{...n,status:`data_length_mismatch`};let i=0;for(let n=0;n<e.data.length;n+=4)i+=Math.abs(e.data[n]-t.data[n]),i+=Math.abs(e.data[n+1]-t.data[n+1]),i+=Math.abs(e.data[n+2]-t.data[n+2]);return{...n,status:`compared`,differencePercent:100*i/(765*r)}}function P(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}export{E as a,D as i,N as n,w as o,A as r,P as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{exitAfterFlush as e}from"./process-exit.js";async function t(t,n=async()=>await import(`./cli.js`)){let{runCli:r}=await n();return await r(t),await e(0)}export{t as runCliProcess};
|
|
1
|
+
import{exitAfterFlush as e}from"./process-exit.js";async function t(t,n=async()=>await import(`./cli.js`).then(e=>e.t)){let{runCli:r}=await n();return await r(t),await e(0)}export{t as runCliProcess};
|