@statewalker/webrun-devtools
Version:
DevTools Extension for the StateWalker WebRun framework
161 lines (160 loc) • 14.2 kB
JavaScript
//#region src/api-client-ws/connectToWs.js
async function e(e, t) {
let n = new WebSocket(e);
await new Promise((e) => n.onopen = function() {
n.onopen = null, e();
});
let r = new MessageChannel(), i = r.port1, a = r.port2;
n.onmessage = ({ data: e }) => i.postMessage(JSON.parse(e)), i.onmessage = ({ data: e }) => n.send(JSON.stringify(e));
let o = i.close.bind(i), s = n.close.bind(n), c = a.close.bind(r.port2), l = () => {
c(), o(), s();
};
return i.close = l, r.port2.close = l, t && (t.aborted && l(), t.addEventListener("abort", () => l())), r.port2;
}
//#endregion
//#region src/api-client-ws/loadConnectionInfo.js
function t({ port: e, versionUrl: t = `http://127.0.0.1:${e}/json/version`, http: n = console.log, retryPeriod: r = 500, fetchJson: i = async (e) => await (await fetch(e, { mode: "cors" })).json() }) {
let a, o, s = new Promise((e, n) => {
let s = e;
o = n, a = setInterval(async () => {
try {
let e = await i(t);
clearInterval(a), a = 0, s(e);
} catch {}
}, r);
});
return s.finally(() => a && clearInterval(a)), Object.assign(s, { close: o });
}
var n = (/* @__PURE__ */ "Accessibility.disable,Accessibility.enable,Animation.disable,Animation.enable,Animation.releaseAnimations,Animation.seekAnimations,Animation.setPaused,Animation.setPlaybackRate,Animation.setTiming,Audits.checkContrast,Audits.disable,Audits.enable,Autofill.disable,Autofill.enable,Autofill.setAddresses,Autofill.trigger,BackgroundService.clearEvents,BackgroundService.setRecording,BackgroundService.startObserving,BackgroundService.stopObserving,Browser.addPrivacySandboxEnrollmentOverride,Browser.cancelDownload,Browser.close,Browser.crash,Browser.crashGpuProcess,Browser.executeBrowserCommand,Browser.grantPermissions,Browser.resetPermissions,Browser.setDockTile,Browser.setDownloadBehavior,Browser.setPermission,Browser.setWindowBounds,CSS.disable,CSS.enable,CSS.forcePseudoState,CSS.setEffectivePropertyValueForNode,CSS.setLocalFontsEnabled,CSS.startRuleUsageTracking,CSS.trackComputedStyleUpdates,CacheStorage.deleteCache,CacheStorage.deleteEntry,Cast.disable,Cast.enable,Cast.setSinkToUse,Cast.startDesktopMirroring,Cast.startTabMirroring,Cast.stopCasting,Console.clearMessages,Console.disable,Console.enable,DOM.disable,DOM.discardSearchResults,DOM.enable,DOM.focus,DOM.hideHighlight,DOM.highlightNode,DOM.highlightRect,DOM.markUndoableState,DOM.redo,DOM.removeAttribute,DOM.removeNode,DOM.requestChildNodes,DOM.scrollIntoViewIfNeeded,DOM.setAttributeValue,DOM.setAttributesAsText,DOM.setFileInputFiles,DOM.setInspectedNode,DOM.setNodeStackTracesEnabled,DOM.setNodeValue,DOM.setOuterHTML,DOM.undo,DOMDebugger.removeDOMBreakpoint,DOMDebugger.removeEventListenerBreakpoint,DOMDebugger.removeInstrumentationBreakpoint,DOMDebugger.removeXHRBreakpoint,DOMDebugger.setBreakOnCSPViolation,DOMDebugger.setDOMBreakpoint,DOMDebugger.setEventListenerBreakpoint,DOMDebugger.setInstrumentationBreakpoint,DOMDebugger.setXHRBreakpoint,DOMSnapshot.disable,DOMSnapshot.enable,DOMStorage.clear,DOMStorage.disable,DOMStorage.enable,DOMStorage.removeDOMStorageItem,DOMStorage.setDOMStorageItem,Database.disable,Database.enable,Debugger.continueToLocation,Debugger.disable,Debugger.pause,Debugger.pauseOnAsyncCall,Debugger.removeBreakpoint,Debugger.resume,Debugger.setAsyncCallStackDepth,Debugger.setBlackboxPatterns,Debugger.setBlackboxedRanges,Debugger.setBreakpointsActive,Debugger.setPauseOnExceptions,Debugger.setReturnValue,Debugger.setSkipAllPauses,Debugger.setVariableValue,Debugger.stepInto,Debugger.stepOut,Debugger.stepOver,DeviceAccess.cancelPrompt,DeviceAccess.disable,DeviceAccess.enable,DeviceAccess.selectPrompt,DeviceOrientation.clearDeviceOrientationOverride,DeviceOrientation.setDeviceOrientationOverride,Emulation.clearDeviceMetricsOverride,Emulation.clearGeolocationOverride,Emulation.clearIdleOverride,Emulation.resetPageScaleFactor,Emulation.setAutoDarkModeOverride,Emulation.setAutomationOverride,Emulation.setCPUThrottlingRate,Emulation.setDefaultBackgroundColorOverride,Emulation.setDeviceMetricsOverride,Emulation.setDisabledImageTypes,Emulation.setDocumentCookieDisabled,Emulation.setEmitTouchEventsForMouse,Emulation.setEmulatedMedia,Emulation.setEmulatedVisionDeficiency,Emulation.setFocusEmulationEnabled,Emulation.setGeolocationOverride,Emulation.setHardwareConcurrencyOverride,Emulation.setIdleOverride,Emulation.setLocaleOverride,Emulation.setNavigatorOverrides,Emulation.setPageScaleFactor,Emulation.setScriptExecutionDisabled,Emulation.setScrollbarsHidden,Emulation.setTimezoneOverride,Emulation.setTouchEmulationEnabled,Emulation.setUserAgentOverride,Emulation.setVisibleSize,EventBreakpoints.removeInstrumentationBreakpoint,EventBreakpoints.setInstrumentationBreakpoint,FedCm.confirmIdpLogin,FedCm.disable,FedCm.dismissDialog,FedCm.enable,FedCm.resetCooldown,FedCm.selectAccount,Fetch.continueRequest,Fetch.continueResponse,Fetch.continueWithAuth,Fetch.disable,Fetch.enable,Fetch.failRequest,Fetch.fulfillRequest,HeadlessExperimental.disable,HeadlessExperimental.enable,HeapProfiler.addInspectedHeapObject,HeapProfiler.collectGarbage,HeapProfiler.disable,HeapProfiler.enable,HeapProfiler.startSampling,HeapProfiler.startTrackingHeapObjects,HeapProfiler.stopTrackingHeapObjects,HeapProfiler.takeHeapSnapshot,IO.close,IndexedDB.clearObjectStore,IndexedDB.deleteDatabase,IndexedDB.deleteObjectStoreEntries,IndexedDB.disable,IndexedDB.enable,Input.cancelDragging,Input.dispatchDragEvent,Input.dispatchKeyEvent,Input.dispatchMouseEvent,Input.dispatchTouchEvent,Input.emulateTouchFromMouseEvent,Input.imeSetComposition,Input.insertText,Input.setIgnoreInputEvents,Input.setInterceptDrags,Input.synthesizePinchGesture,Input.synthesizeScrollGesture,Input.synthesizeTapGesture,Inspector.disable,Inspector.enable,LayerTree.disable,LayerTree.enable,LayerTree.releaseSnapshot,Log.clear,Log.disable,Log.enable,Log.startViolationsReport,Log.stopViolationsReport,Media.disable,Media.enable,Memory.forciblyPurgeJavaScriptMemory,Memory.prepareForLeakDetection,Memory.setPressureNotificationsSuppressed,Memory.simulatePressureNotification,Memory.startSampling,Memory.stopSampling,Network.clearAcceptedEncodingsOverride,Network.clearBrowserCache,Network.clearBrowserCookies,Network.continueInterceptedRequest,Network.deleteCookies,Network.disable,Network.emulateNetworkConditions,Network.enable,Network.enableReportingApi,Network.replayXHR,Network.setAcceptedEncodings,Network.setAttachDebugStack,Network.setBlockedURLs,Network.setBypassServiceWorker,Network.setCacheDisabled,Network.setCookies,Network.setExtraHTTPHeaders,Network.setRequestInterception,Network.setUserAgentOverride,Overlay.disable,Overlay.enable,Overlay.hideHighlight,Overlay.highlightFrame,Overlay.highlightNode,Overlay.highlightQuad,Overlay.highlightRect,Overlay.highlightSourceOrder,Overlay.setInspectMode,Overlay.setPausedInDebuggerMessage,Overlay.setShowAdHighlights,Overlay.setShowContainerQueryOverlays,Overlay.setShowDebugBorders,Overlay.setShowFPSCounter,Overlay.setShowFlexOverlays,Overlay.setShowGridOverlays,Overlay.setShowHinge,Overlay.setShowHitTestBorders,Overlay.setShowIsolatedElements,Overlay.setShowLayoutShiftRegions,Overlay.setShowPaintRects,Overlay.setShowScrollBottleneckRects,Overlay.setShowScrollSnapOverlays,Overlay.setShowViewportSizeOnResize,Overlay.setShowWebVitals,Page.addCompilationCache,Page.bringToFront,Page.clearCompilationCache,Page.clearDeviceMetricsOverride,Page.clearDeviceOrientationOverride,Page.clearGeolocationOverride,Page.close,Page.crash,Page.deleteCookie,Page.disable,Page.enable,Page.generateTestReport,Page.handleJavaScriptDialog,Page.navigateToHistoryEntry,Page.produceCompilationCache,Page.reload,Page.removeScriptToEvaluateOnLoad,Page.removeScriptToEvaluateOnNewDocument,Page.resetNavigationHistory,Page.screencastFrameAck,Page.setAdBlockingEnabled,Page.setBypassCSP,Page.setDeviceMetricsOverride,Page.setDeviceOrientationOverride,Page.setDocumentContent,Page.setDownloadBehavior,Page.setFontFamilies,Page.setFontSizes,Page.setGeolocationOverride,Page.setInterceptFileChooserDialog,Page.setLifecycleEventsEnabled,Page.setPrerenderingAllowed,Page.setRPHRegistrationMode,Page.setSPCTransactionMode,Page.setTouchEmulationEnabled,Page.setWebLifecycleState,Page.startScreencast,Page.stopLoading,Page.stopScreencast,Page.waitForDebugger,Performance.disable,Performance.enable,Performance.setTimeDomain,PerformanceTimeline.enable,Preload.disable,Preload.enable,Profiler.disable,Profiler.enable,Profiler.setSamplingInterval,Profiler.start,Profiler.stopPreciseCoverage,Runtime.addBinding,Runtime.disable,Runtime.discardConsoleEntries,Runtime.enable,Runtime.releaseObject,Runtime.releaseObjectGroup,Runtime.removeBinding,Runtime.runIfWaitingForDebugger,Runtime.setAsyncCallStackDepth,Runtime.setCustomObjectFormatterEnabled,Runtime.setMaxCallStackSizeToCapture,Runtime.terminateExecution,Security.disable,Security.enable,Security.handleCertificateError,Security.setIgnoreCertificateErrors,Security.setOverrideCertificateErrors,ServiceWorker.deliverPushMessage,ServiceWorker.disable,ServiceWorker.dispatchPeriodicSyncEvent,ServiceWorker.dispatchSyncEvent,ServiceWorker.enable,ServiceWorker.inspectWorker,ServiceWorker.setForceUpdateOnPageLoad,ServiceWorker.skipWaiting,ServiceWorker.startWorker,ServiceWorker.stopAllWorkers,ServiceWorker.stopWorker,ServiceWorker.unregister,ServiceWorker.updateRegistration,Storage.clearCookies,Storage.clearDataForOrigin,Storage.clearDataForStorageKey,Storage.clearSharedStorageEntries,Storage.deleteSharedStorageEntry,Storage.deleteStorageBucket,Storage.overrideQuotaForOrigin,Storage.resetSharedStorageBudget,Storage.setAttributionReportingLocalTestingMode,Storage.setAttributionReportingTracking,Storage.setCookies,Storage.setInterestGroupTracking,Storage.setSharedStorageEntry,Storage.setSharedStorageTracking,Storage.setStorageBucketTracking,Storage.trackCacheStorageForOrigin,Storage.trackCacheStorageForStorageKey,Storage.trackIndexedDBForOrigin,Storage.trackIndexedDBForStorageKey,Storage.untrackCacheStorageForOrigin,Storage.untrackCacheStorageForStorageKey,Storage.untrackIndexedDBForOrigin,Storage.untrackIndexedDBForStorageKey,Target.activateTarget,Target.autoAttachRelated,Target.detachFromTarget,Target.disposeBrowserContext,Target.exposeDevToolsProtocol,Target.sendMessageToTarget,Target.setAutoAttach,Target.setDiscoverTargets,Target.setRemoteLocations,Tethering.bind,Tethering.unbind,Tracing.end,Tracing.recordClockSyncMarker,Tracing.start,WebAudio.disable,WebAudio.enable,WebAuthn.addCredential,WebAuthn.clearCredentials,WebAuthn.disable,WebAuthn.enable,WebAuthn.removeCredential,WebAuthn.removeVirtualAuthenticator,WebAuthn.setAutomaticPresenceSimulation,WebAuthn.setResponseOverrideBits,WebAuthn.setUserVerified".split(",")).reduce((e, t) => (e[t] = !0, e), {});
function r(e) {
return !n[e];
}
(/* @__PURE__ */ "Accessibility.Audits.CSS.CacheStorage.Console.DOM.DOMDebugger.DOMSnapshot.Database.Debugger.Emulation.Fetch.IO.Input.Inspector.Log.Network.Overlay.Page.Performance.Profiler.Runtime.Storage.Target.Tracing.WebAudio.WebAuthn".split(".")).reduce((e, t) => (e[t] = !0, e), {});
function i(e) {
return r;
}
//#endregion
//#region src/api-client-ws/newDebuggerApi.js
async function a(e, { inBrowser: t = !1, hasResponse: n = i(t) } = {}) {
let r = 1;
async function a(t, i = {}, ...a) {
let o = r++, s = new Promise((r, s) => {
try {
let c = n(t);
c && e.addEventListener("message", function t({ data: n }) {
if (o !== n.id) return;
e.removeEventListener("message", t);
let { result: i, error: a } = n;
a ? s(a) : r(i);
}), e.postMessage(Object.assign({
id: o,
method: t,
params: i
}, ...a)), c || r();
} catch (e) {
s(e);
}
});
return console.log("[>>>]", {
callId: o,
method: t,
params: i
}), s.then((e) => console.log("[<<<]", {
callId: o,
method: t,
params: i,
result: e
})).catch((e) => console.log("[<<<]", {
callId: o,
method: t,
params: i,
error: e
})), s;
}
let o = {}, s = {}, c = [], l = [];
async function u(e, t, n = {}) {
let { targetId: r } = e, i = o[r];
return await a(t, n, { sessionId: i });
}
async function d() {
return (await a("Target.getTargets")).targetInfos;
}
async function f(e) {
let { targetId: t } = e, { sessionId: n } = await a("Target.attachToTarget", {
targetId: t,
flatten: !0
});
o[t] = n, s[n] = t;
}
async function p(e) {
let { targetId: t } = e, n = o[t];
delete o[t], delete s[n], await a("Target.detachFromTarget", { sessionId: n });
}
function m(e, t) {
let n;
return {
addListener: (r) => {
t.push(r), n || (n = ({ data: e }) => {
if (!e.method || e.method === "Target.detachedFromTarget") return;
let { method: n, params: r, sessionId: i } = e, a = {
targetId: s[i],
sessionId: i
};
for (let e of t) e(a, n, r);
}, e.addEventListener("message", n));
},
removeListener: (r) => {
for (let e = t.length - 1; e >= 0; e--) t[e] === r && t.splice(e, 1);
!t.length && n && (e.removeEventListener("message", n), n = null);
}
};
}
function h(e, t) {
let n;
return {
addListener: (r) => {
t.push(r), n || (n = ({ data: e }) => {
let { method: n, params: r } = e;
if (n === "Target.detachedFromTarget") for (let e of t) e(r, "canceled_by_user");
}, e.addEventListener("message", n));
},
removeListener: (r) => {
for (let e = t.length - 1; e >= 0; e--) t[e] === r && t.splice(e, 1);
!t.length && n && (e.removeEventListener("message", n), n = null);
}
};
}
return {
sendCommand: u,
attach: f,
detach: p,
getTargets: d,
onEvent: m(e, c),
onDetach: h(e, l)
};
}
//#endregion
//#region src/api-client-ws/listenConnectionInfo.js
async function* o(e) {
let n;
try {
for (;;) {
let r = t(e);
n = r.close, yield await r;
}
} finally {
n && n();
}
}
//#endregion
//#region src/api-client-ws/index.js
async function s({ wsUrl: n, ...r }) {
n ||= (await t(r)).webSocketDebuggerUrl;
let i = new AbortController();
return {
debugger: await a(await e(n, i.signal)),
close: () => i.abort()
};
}
//#endregion
export { e as connectToWs, s as default, o as listenConnectionInfo, t as loadConnectionInfo, a as newDebuggerApi };