@ricsam/isolate-client 0.0.1 → 0.1.0
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/README.md +112 -43
- package/dist/cjs/connection.cjs +504 -0
- package/dist/cjs/connection.cjs.map +10 -0
- package/dist/cjs/index.cjs +39 -0
- package/dist/cjs/index.cjs.map +10 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/types.cjs +26 -0
- package/dist/cjs/types.cjs.map +9 -0
- package/dist/mjs/connection.mjs +477 -0
- package/dist/mjs/connection.mjs.map +10 -0
- package/dist/mjs/index.mjs +8 -0
- package/dist/mjs/index.mjs.map +10 -0
- package/dist/mjs/package.json +5 -0
- package/dist/mjs/types.mjs +3 -0
- package/dist/mjs/types.mjs.map +9 -0
- package/dist/types/connection.d.ts +8 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/types.d.ts +164 -0
- package/package.json +47 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/connection.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Connection handling for the isolate client.\n */\n\nimport { connect as netConnect, type Socket } from \"node:net\";\nimport {\n createFrameParser,\n buildFrame,\n MessageType,\n type Message,\n type ResponseOk,\n type ResponseError,\n type CreateRuntimeRequest,\n type DisposeRuntimeRequest,\n type EvalRequest,\n type DispatchRequestRequest,\n type TickRequest,\n type CallbackInvoke,\n type CallbackResponseMsg,\n type CallbackRegistration,\n type RuntimeCallbackRegistrations,\n type CreateRuntimeResult,\n type SerializedResponse,\n type SetupTestEnvRequest,\n type RunTestsRequest,\n type RunTestsResult,\n type SetupPlaywrightRequest,\n type RunPlaywrightTestsRequest,\n type ResetPlaywrightTestsRequest,\n type GetCollectedDataRequest,\n type PlaywrightTestResult,\n type CollectedData,\n type PlaywrightEvent,\n} from \"@ricsam/isolate-protocol\";\nimport type {\n ConnectOptions,\n DaemonConnection,\n RuntimeOptions,\n RemoteRuntime,\n DispatchOptions,\n ConsoleCallbacks,\n FetchCallback,\n FileSystemCallbacks,\n PlaywrightSetupOptions,\n PlaywrightEventHandler,\n} from \"./types.cjs\";\n\nconst DEFAULT_TIMEOUT = 30000;\n\ninterface PendingRequest {\n resolve: (data: unknown) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\ninterface ConnectionState {\n socket: Socket;\n pendingRequests: Map<number, PendingRequest>;\n callbacks: Map<number, (...args: unknown[]) => unknown>;\n nextRequestId: number;\n nextCallbackId: number;\n connected: boolean;\n /** Playwright event handlers per isolate */\n playwrightEventHandlers: Map<string, PlaywrightEventHandler>;\n}\n\n/**\n * Connect to the isolate daemon.\n */\nexport async function connect(options: ConnectOptions = {}): Promise<DaemonConnection> {\n const socket = await createSocket(options);\n\n const state: ConnectionState = {\n socket,\n pendingRequests: new Map(),\n callbacks: new Map(),\n nextRequestId: 1,\n nextCallbackId: 1,\n connected: true,\n playwrightEventHandlers: new Map(),\n };\n\n const parser = createFrameParser();\n\n socket.on(\"data\", (data) => {\n try {\n for (const frame of parser.feed(new Uint8Array(data))) {\n handleMessage(frame.message, state);\n }\n } catch (err) {\n console.error(\"Error parsing frame:\", err);\n }\n });\n\n socket.on(\"close\", () => {\n state.connected = false;\n // Reject all pending requests\n for (const [, pending] of state.pendingRequests) {\n pending.reject(new Error(\"Connection closed\"));\n }\n state.pendingRequests.clear();\n });\n\n socket.on(\"error\", (err) => {\n console.error(\"Socket error:\", err);\n });\n\n return {\n createRuntime: (runtimeOptions) =>\n createRuntime(state, runtimeOptions),\n close: async () => {\n state.connected = false;\n socket.destroy();\n },\n isConnected: () => state.connected,\n };\n}\n\n/**\n * Create a socket connection.\n */\nfunction createSocket(options: ConnectOptions): Promise<Socket> {\n return new Promise((resolve, reject) => {\n const timeout = options.timeout ?? DEFAULT_TIMEOUT;\n\n let socket: Socket;\n\n const onError = (err: Error) => {\n reject(err);\n };\n\n const onConnect = () => {\n socket.removeListener(\"error\", onError);\n resolve(socket);\n };\n\n if (options.socket) {\n socket = netConnect(options.socket, onConnect);\n } else {\n socket = netConnect(\n options.port ?? 47891,\n options.host ?? \"127.0.0.1\",\n onConnect\n );\n }\n\n socket.on(\"error\", onError);\n\n // Connection timeout\n const timeoutId = setTimeout(() => {\n socket.destroy();\n reject(new Error(\"Connection timeout\"));\n }, timeout);\n\n socket.once(\"connect\", () => {\n clearTimeout(timeoutId);\n });\n });\n}\n\n/**\n * Handle an incoming message from the daemon.\n */\nfunction handleMessage(message: Message, state: ConnectionState): void {\n switch (message.type) {\n case MessageType.RESPONSE_OK: {\n const response = message as ResponseOk;\n const pending = state.pendingRequests.get(response.requestId);\n if (pending) {\n state.pendingRequests.delete(response.requestId);\n if (pending.timeoutId) clearTimeout(pending.timeoutId);\n pending.resolve(response.data);\n }\n break;\n }\n\n case MessageType.RESPONSE_ERROR: {\n const response = message as ResponseError;\n const pending = state.pendingRequests.get(response.requestId);\n if (pending) {\n state.pendingRequests.delete(response.requestId);\n if (pending.timeoutId) clearTimeout(pending.timeoutId);\n const error = new Error(response.message);\n if (response.details) {\n error.name = response.details.name;\n if (response.details.stack) {\n error.stack = response.details.stack;\n }\n }\n pending.reject(error);\n }\n break;\n }\n\n case MessageType.CALLBACK_INVOKE: {\n const invoke = message as CallbackInvoke;\n handleCallbackInvoke(invoke, state);\n break;\n }\n\n case MessageType.PONG:\n // Heartbeat response, ignore\n break;\n\n case MessageType.PLAYWRIGHT_EVENT: {\n const event = message as PlaywrightEvent;\n const handler = state.playwrightEventHandlers.get(event.isolateId);\n if (handler) {\n switch (event.eventType) {\n case \"consoleLog\":\n handler.onConsoleLog?.(event.payload as { level: string; args: unknown[] });\n break;\n case \"networkRequest\":\n handler.onNetworkRequest?.(event.payload as { url: string; method: string; headers: Record<string, string>; timestamp: number });\n break;\n case \"networkResponse\":\n handler.onNetworkResponse?.(event.payload as { url: string; status: number; headers: Record<string, string>; timestamp: number });\n break;\n }\n }\n break;\n }\n\n default:\n console.warn(`Unexpected message type: ${message.type}`);\n }\n}\n\n/**\n * Handle a callback invocation from the daemon.\n */\nasync function handleCallbackInvoke(\n invoke: CallbackInvoke,\n state: ConnectionState\n): Promise<void> {\n const callback = state.callbacks.get(invoke.callbackId);\n\n const response: CallbackResponseMsg = {\n type: MessageType.CALLBACK_RESPONSE,\n requestId: invoke.requestId,\n };\n\n if (!callback) {\n response.error = {\n name: \"Error\",\n message: `Unknown callback: ${invoke.callbackId}`,\n };\n } else {\n try {\n const result = await callback(...invoke.args);\n response.result = result;\n } catch (err) {\n const error = err as Error;\n response.error = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n }\n\n sendMessage(state.socket, response);\n}\n\n/**\n * Send a message to the daemon.\n */\nfunction sendMessage(socket: Socket, message: Message): void {\n const frame = buildFrame(message);\n socket.write(frame);\n}\n\n/**\n * Send a request and wait for response.\n */\nfunction sendRequest<T>(\n state: ConnectionState,\n message: Message,\n timeout = DEFAULT_TIMEOUT\n): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!state.connected) {\n reject(new Error(\"Not connected\"));\n return;\n }\n\n const requestId = (message as { requestId: number }).requestId;\n\n const timeoutId = setTimeout(() => {\n state.pendingRequests.delete(requestId);\n reject(new Error(\"Request timeout\"));\n }, timeout);\n\n state.pendingRequests.set(requestId, {\n resolve: resolve as (data: unknown) => void,\n reject,\n timeoutId,\n });\n\n sendMessage(state.socket, message);\n });\n}\n\n/**\n * Create a runtime in the daemon.\n */\nasync function createRuntime(\n state: ConnectionState,\n options: RuntimeOptions = {}\n): Promise<RemoteRuntime> {\n // Register callbacks\n const callbacks: RuntimeCallbackRegistrations = {};\n\n if (options.console) {\n callbacks.console = registerConsoleCallbacks(state, options.console);\n }\n\n if (options.fetch) {\n callbacks.fetch = registerFetchCallback(state, options.fetch);\n }\n\n if (options.fs) {\n callbacks.fs = registerFsCallbacks(state, options.fs);\n }\n\n const requestId = state.nextRequestId++;\n const request: CreateRuntimeRequest = {\n type: MessageType.CREATE_RUNTIME,\n requestId,\n options: {\n memoryLimit: options.memoryLimit,\n callbacks,\n },\n };\n\n const result = await sendRequest<CreateRuntimeResult>(state, request);\n const isolateId = result.isolateId;\n\n return {\n isolateId,\n\n eval: async (code: string, filename?: string) => {\n const reqId = state.nextRequestId++;\n const req: EvalRequest = {\n type: MessageType.EVAL,\n requestId: reqId,\n isolateId,\n code,\n filename,\n };\n const res = await sendRequest<{ value: unknown }>(state, req);\n return res.value;\n },\n\n dispatchRequest: async (\n request: Request,\n dispatchOptions?: DispatchOptions\n ) => {\n const reqId = state.nextRequestId++;\n const serialized = await serializeRequest(request);\n const req: DispatchRequestRequest = {\n type: MessageType.DISPATCH_REQUEST,\n requestId: reqId,\n isolateId,\n request: serialized,\n options: dispatchOptions,\n };\n const res = await sendRequest<{ response: SerializedResponse }>(\n state,\n req,\n dispatchOptions?.timeout ?? DEFAULT_TIMEOUT\n );\n return deserializeResponse(res.response);\n },\n\n tick: async (ms?: number) => {\n const reqId = state.nextRequestId++;\n const req: TickRequest = {\n type: MessageType.TICK,\n requestId: reqId,\n isolateId,\n ms,\n };\n await sendRequest(state, req);\n },\n\n setupTestEnvironment: async () => {\n const reqId = state.nextRequestId++;\n const req: SetupTestEnvRequest = {\n type: MessageType.SETUP_TEST_ENV,\n requestId: reqId,\n isolateId,\n };\n await sendRequest(state, req);\n },\n\n runTests: async (timeout?: number) => {\n const reqId = state.nextRequestId++;\n const req: RunTestsRequest = {\n type: MessageType.RUN_TESTS,\n requestId: reqId,\n isolateId,\n timeout,\n };\n return sendRequest<RunTestsResult>(state, req, timeout ?? DEFAULT_TIMEOUT);\n },\n\n setupPlaywright: async (playwrightOptions?: PlaywrightSetupOptions) => {\n const reqId = state.nextRequestId++;\n const req: SetupPlaywrightRequest = {\n type: MessageType.SETUP_PLAYWRIGHT,\n requestId: reqId,\n isolateId,\n options: {\n browserType: playwrightOptions?.browserType,\n headless: playwrightOptions?.headless,\n baseURL: playwrightOptions?.baseURL,\n },\n };\n\n // Register event handlers if provided\n if (playwrightOptions?.onConsoleLog || playwrightOptions?.onNetworkRequest || playwrightOptions?.onNetworkResponse) {\n state.playwrightEventHandlers.set(isolateId, {\n onConsoleLog: playwrightOptions.onConsoleLog,\n onNetworkRequest: playwrightOptions.onNetworkRequest,\n onNetworkResponse: playwrightOptions.onNetworkResponse,\n });\n }\n\n await sendRequest(state, req);\n },\n\n runPlaywrightTests: async (timeout?: number) => {\n const reqId = state.nextRequestId++;\n const req: RunPlaywrightTestsRequest = {\n type: MessageType.RUN_PLAYWRIGHT_TESTS,\n requestId: reqId,\n isolateId,\n timeout,\n };\n return sendRequest<PlaywrightTestResult>(state, req, timeout ?? DEFAULT_TIMEOUT);\n },\n\n resetPlaywrightTests: async () => {\n const reqId = state.nextRequestId++;\n const req: ResetPlaywrightTestsRequest = {\n type: MessageType.RESET_PLAYWRIGHT_TESTS,\n requestId: reqId,\n isolateId,\n };\n await sendRequest(state, req);\n },\n\n getCollectedData: async () => {\n const reqId = state.nextRequestId++;\n const req: GetCollectedDataRequest = {\n type: MessageType.GET_COLLECTED_DATA,\n requestId: reqId,\n isolateId,\n };\n return sendRequest<CollectedData>(state, req);\n },\n\n dispose: async () => {\n // Clean up event handlers\n state.playwrightEventHandlers.delete(isolateId);\n\n const reqId = state.nextRequestId++;\n const req: DisposeRuntimeRequest = {\n type: MessageType.DISPOSE_RUNTIME,\n requestId: reqId,\n isolateId,\n };\n await sendRequest(state, req);\n },\n };\n}\n\n/**\n * Register console callbacks.\n */\nfunction registerConsoleCallbacks(\n state: ConnectionState,\n callbacks: ConsoleCallbacks\n): Record<string, CallbackRegistration> {\n const registrations: Record<string, CallbackRegistration> = {};\n\n const register = (name: string, fn: (...args: unknown[]) => void) => {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, (_level: unknown, ...args: unknown[]) => {\n fn(...args);\n });\n registrations[name] = { callbackId, name, async: false };\n };\n\n if (callbacks.log) register(\"log\", callbacks.log);\n if (callbacks.warn) register(\"warn\", callbacks.warn);\n if (callbacks.error) register(\"error\", callbacks.error);\n if (callbacks.info) register(\"info\", callbacks.info);\n if (callbacks.debug) register(\"debug\", callbacks.debug);\n if (callbacks.dir) register(\"dir\", callbacks.dir);\n\n return registrations;\n}\n\n/**\n * Register fetch callback.\n */\nfunction registerFetchCallback(\n state: ConnectionState,\n callback: FetchCallback\n): CallbackRegistration {\n const callbackId = state.nextCallbackId++;\n\n state.callbacks.set(callbackId, async (serialized: unknown) => {\n const request = deserializeRequest(serialized as SerializedRequestData);\n const response = await callback(request);\n return serializeResponse(response);\n });\n\n return { callbackId, name: \"fetch\", async: true };\n}\n\n/**\n * Register file system callbacks.\n */\nfunction registerFsCallbacks(\n state: ConnectionState,\n callbacks: FileSystemCallbacks\n): Record<string, CallbackRegistration> {\n const registrations: Record<string, CallbackRegistration> = {};\n\n // readFile: (path: string) => Promise<ArrayBuffer>\n if (callbacks.readFile) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown) => {\n const result = await callbacks.readFile!(path as string);\n // Convert ArrayBuffer to Uint8Array for serialization\n return new Uint8Array(result);\n });\n registrations.readFile = { callbackId, name: \"readFile\", async: true };\n }\n\n // writeFile: (path: string, data: ArrayBuffer) => Promise<void>\n if (callbacks.writeFile) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown, data: unknown) => {\n // Convert Uint8Array or array back to ArrayBuffer\n let buffer: ArrayBuffer;\n if (data instanceof Uint8Array) {\n buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer;\n } else if (Array.isArray(data)) {\n buffer = new Uint8Array(data as number[]).buffer;\n } else if (data instanceof ArrayBuffer) {\n buffer = data;\n } else {\n buffer = new ArrayBuffer(0);\n }\n await callbacks.writeFile!(path as string, buffer);\n });\n registrations.writeFile = { callbackId, name: \"writeFile\", async: true };\n }\n\n // unlink: (path: string) => Promise<void>\n if (callbacks.unlink) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown) => {\n await callbacks.unlink!(path as string);\n });\n registrations.unlink = { callbackId, name: \"unlink\", async: true };\n }\n\n // readdir: (path: string) => Promise<string[]>\n if (callbacks.readdir) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown) => {\n return callbacks.readdir!(path as string);\n });\n registrations.readdir = { callbackId, name: \"readdir\", async: true };\n }\n\n // mkdir: (path: string, options?: { recursive?: boolean }) => Promise<void>\n if (callbacks.mkdir) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown, options: unknown) => {\n await callbacks.mkdir!(path as string, options as { recursive?: boolean });\n });\n registrations.mkdir = { callbackId, name: \"mkdir\", async: true };\n }\n\n // rmdir: (path: string) => Promise<void>\n if (callbacks.rmdir) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown) => {\n await callbacks.rmdir!(path as string);\n });\n registrations.rmdir = { callbackId, name: \"rmdir\", async: true };\n }\n\n // stat: (path: string) => Promise<{ isFile: boolean; isDirectory: boolean; size: number }>\n if (callbacks.stat) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (path: unknown) => {\n return callbacks.stat!(path as string);\n });\n registrations.stat = { callbackId, name: \"stat\", async: true };\n }\n\n // rename: (from: string, to: string) => Promise<void>\n if (callbacks.rename) {\n const callbackId = state.nextCallbackId++;\n state.callbacks.set(callbackId, async (from: unknown, to: unknown) => {\n await callbacks.rename!(from as string, to as string);\n });\n registrations.rename = { callbackId, name: \"rename\", async: true };\n }\n\n return registrations;\n}\n\n// ============================================================================\n// Request/Response Serialization\n// ============================================================================\n\ninterface SerializedRequestData {\n method: string;\n url: string;\n headers: [string, string][];\n body: Uint8Array | null;\n}\n\ninterface SerializedResponseData {\n status: number;\n statusText: string;\n headers: [string, string][];\n body: Uint8Array | null;\n}\n\nasync function serializeRequest(request: Request): Promise<SerializedRequestData> {\n const headers: [string, string][] = [];\n request.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n\n let body: Uint8Array | null = null;\n if (request.body) {\n body = new Uint8Array(await request.arrayBuffer());\n }\n\n return {\n method: request.method,\n url: request.url,\n headers,\n body,\n };\n}\n\nasync function serializeResponse(response: Response): Promise<SerializedResponseData> {\n const headers: [string, string][] = [];\n response.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n\n let body: Uint8Array | null = null;\n if (response.body) {\n body = new Uint8Array(await response.arrayBuffer());\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers,\n body,\n };\n}\n\nfunction deserializeRequest(data: SerializedRequestData): Request {\n return new Request(data.url, {\n method: data.method,\n headers: data.headers,\n body: data.body as unknown as BodyInit | null | undefined,\n });\n}\n\nfunction deserializeResponse(data: SerializedResponse): Response {\n return new Response(data.body as unknown as BodyInit | null, {\n status: data.status,\n statusText: data.statusText,\n headers: data.headers,\n });\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "AC520FAF0080FE0764756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// @bun @bun-cjs
|
|
2
|
+
(function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
7
|
+
var __toCommonJS = (from) => {
|
|
8
|
+
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
if (entry)
|
|
10
|
+
return entry;
|
|
11
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
13
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
}));
|
|
17
|
+
__moduleCache.set(from, entry);
|
|
18
|
+
return entry;
|
|
19
|
+
};
|
|
20
|
+
var __export = (target, all) => {
|
|
21
|
+
for (var name in all)
|
|
22
|
+
__defProp(target, name, {
|
|
23
|
+
get: all[name],
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
set: (newValue) => all[name] = () => newValue
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// packages/isolate-client/src/index.ts
|
|
31
|
+
var exports_src = {};
|
|
32
|
+
__export(exports_src, {
|
|
33
|
+
connect: () => import_connection.connect
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(exports_src);
|
|
36
|
+
var import_connection = require("./connection.cjs");
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
//# debugId=1FA5A03712B1298A64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * @ricsam/isolate-client\n *\n * Client library for connecting to the isolate daemon.\n * Works with Bun, Node.js, and other JavaScript runtimes.\n */\n\nexport { connect } from \"./connection.cjs\";\nexport type {\n ConnectOptions,\n DaemonConnection,\n RuntimeOptions,\n RemoteRuntime,\n DispatchOptions,\n ConsoleCallbacks,\n FetchCallback,\n FileSystemCallbacks,\n TestResults,\n TestResult,\n PlaywrightSetupOptions,\n PlaywrightTestResults,\n PlaywrightEventHandler,\n CollectedData,\n} from \"./types.cjs\";\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOwB,IAAxB;",
|
|
8
|
+
"debugId": "1FA5A03712B1298A64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @bun @bun-cjs
|
|
2
|
+
(function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
7
|
+
var __toCommonJS = (from) => {
|
|
8
|
+
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
if (entry)
|
|
10
|
+
return entry;
|
|
11
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
13
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
}));
|
|
17
|
+
__moduleCache.set(from, entry);
|
|
18
|
+
return entry;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// packages/isolate-client/src/types.ts
|
|
22
|
+
var exports_types = {};
|
|
23
|
+
module.exports = __toCommonJS(exports_types);
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
//# debugId=6B3AD296393BE8B464756E2164756E21
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/isolate-client/src/connection.ts
|
|
3
|
+
import { connect as netConnect } from "net";
|
|
4
|
+
import {
|
|
5
|
+
createFrameParser,
|
|
6
|
+
buildFrame,
|
|
7
|
+
MessageType
|
|
8
|
+
} from "@ricsam/isolate-protocol";
|
|
9
|
+
var DEFAULT_TIMEOUT = 30000;
|
|
10
|
+
async function connect(options = {}) {
|
|
11
|
+
const socket = await createSocket(options);
|
|
12
|
+
const state = {
|
|
13
|
+
socket,
|
|
14
|
+
pendingRequests: new Map,
|
|
15
|
+
callbacks: new Map,
|
|
16
|
+
nextRequestId: 1,
|
|
17
|
+
nextCallbackId: 1,
|
|
18
|
+
connected: true,
|
|
19
|
+
playwrightEventHandlers: new Map
|
|
20
|
+
};
|
|
21
|
+
const parser = createFrameParser();
|
|
22
|
+
socket.on("data", (data) => {
|
|
23
|
+
try {
|
|
24
|
+
for (const frame of parser.feed(new Uint8Array(data))) {
|
|
25
|
+
handleMessage(frame.message, state);
|
|
26
|
+
}
|
|
27
|
+
} catch (err) {
|
|
28
|
+
console.error("Error parsing frame:", err);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
socket.on("close", () => {
|
|
32
|
+
state.connected = false;
|
|
33
|
+
for (const [, pending] of state.pendingRequests) {
|
|
34
|
+
pending.reject(new Error("Connection closed"));
|
|
35
|
+
}
|
|
36
|
+
state.pendingRequests.clear();
|
|
37
|
+
});
|
|
38
|
+
socket.on("error", (err) => {
|
|
39
|
+
console.error("Socket error:", err);
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
createRuntime: (runtimeOptions) => createRuntime(state, runtimeOptions),
|
|
43
|
+
close: async () => {
|
|
44
|
+
state.connected = false;
|
|
45
|
+
socket.destroy();
|
|
46
|
+
},
|
|
47
|
+
isConnected: () => state.connected
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function createSocket(options) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
53
|
+
let socket;
|
|
54
|
+
const onError = (err) => {
|
|
55
|
+
reject(err);
|
|
56
|
+
};
|
|
57
|
+
const onConnect = () => {
|
|
58
|
+
socket.removeListener("error", onError);
|
|
59
|
+
resolve(socket);
|
|
60
|
+
};
|
|
61
|
+
if (options.socket) {
|
|
62
|
+
socket = netConnect(options.socket, onConnect);
|
|
63
|
+
} else {
|
|
64
|
+
socket = netConnect(options.port ?? 47891, options.host ?? "127.0.0.1", onConnect);
|
|
65
|
+
}
|
|
66
|
+
socket.on("error", onError);
|
|
67
|
+
const timeoutId = setTimeout(() => {
|
|
68
|
+
socket.destroy();
|
|
69
|
+
reject(new Error("Connection timeout"));
|
|
70
|
+
}, timeout);
|
|
71
|
+
socket.once("connect", () => {
|
|
72
|
+
clearTimeout(timeoutId);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function handleMessage(message, state) {
|
|
77
|
+
switch (message.type) {
|
|
78
|
+
case MessageType.RESPONSE_OK: {
|
|
79
|
+
const response = message;
|
|
80
|
+
const pending = state.pendingRequests.get(response.requestId);
|
|
81
|
+
if (pending) {
|
|
82
|
+
state.pendingRequests.delete(response.requestId);
|
|
83
|
+
if (pending.timeoutId)
|
|
84
|
+
clearTimeout(pending.timeoutId);
|
|
85
|
+
pending.resolve(response.data);
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case MessageType.RESPONSE_ERROR: {
|
|
90
|
+
const response = message;
|
|
91
|
+
const pending = state.pendingRequests.get(response.requestId);
|
|
92
|
+
if (pending) {
|
|
93
|
+
state.pendingRequests.delete(response.requestId);
|
|
94
|
+
if (pending.timeoutId)
|
|
95
|
+
clearTimeout(pending.timeoutId);
|
|
96
|
+
const error = new Error(response.message);
|
|
97
|
+
if (response.details) {
|
|
98
|
+
error.name = response.details.name;
|
|
99
|
+
if (response.details.stack) {
|
|
100
|
+
error.stack = response.details.stack;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
pending.reject(error);
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case MessageType.CALLBACK_INVOKE: {
|
|
108
|
+
const invoke = message;
|
|
109
|
+
handleCallbackInvoke(invoke, state);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case MessageType.PONG:
|
|
113
|
+
break;
|
|
114
|
+
case MessageType.PLAYWRIGHT_EVENT: {
|
|
115
|
+
const event = message;
|
|
116
|
+
const handler = state.playwrightEventHandlers.get(event.isolateId);
|
|
117
|
+
if (handler) {
|
|
118
|
+
switch (event.eventType) {
|
|
119
|
+
case "consoleLog":
|
|
120
|
+
handler.onConsoleLog?.(event.payload);
|
|
121
|
+
break;
|
|
122
|
+
case "networkRequest":
|
|
123
|
+
handler.onNetworkRequest?.(event.payload);
|
|
124
|
+
break;
|
|
125
|
+
case "networkResponse":
|
|
126
|
+
handler.onNetworkResponse?.(event.payload);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
default:
|
|
133
|
+
console.warn(`Unexpected message type: ${message.type}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function handleCallbackInvoke(invoke, state) {
|
|
137
|
+
const callback = state.callbacks.get(invoke.callbackId);
|
|
138
|
+
const response = {
|
|
139
|
+
type: MessageType.CALLBACK_RESPONSE,
|
|
140
|
+
requestId: invoke.requestId
|
|
141
|
+
};
|
|
142
|
+
if (!callback) {
|
|
143
|
+
response.error = {
|
|
144
|
+
name: "Error",
|
|
145
|
+
message: `Unknown callback: ${invoke.callbackId}`
|
|
146
|
+
};
|
|
147
|
+
} else {
|
|
148
|
+
try {
|
|
149
|
+
const result = await callback(...invoke.args);
|
|
150
|
+
response.result = result;
|
|
151
|
+
} catch (err) {
|
|
152
|
+
const error = err;
|
|
153
|
+
response.error = {
|
|
154
|
+
name: error.name,
|
|
155
|
+
message: error.message,
|
|
156
|
+
stack: error.stack
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
sendMessage(state.socket, response);
|
|
161
|
+
}
|
|
162
|
+
function sendMessage(socket, message) {
|
|
163
|
+
const frame = buildFrame(message);
|
|
164
|
+
socket.write(frame);
|
|
165
|
+
}
|
|
166
|
+
function sendRequest(state, message, timeout = DEFAULT_TIMEOUT) {
|
|
167
|
+
return new Promise((resolve, reject) => {
|
|
168
|
+
if (!state.connected) {
|
|
169
|
+
reject(new Error("Not connected"));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const requestId = message.requestId;
|
|
173
|
+
const timeoutId = setTimeout(() => {
|
|
174
|
+
state.pendingRequests.delete(requestId);
|
|
175
|
+
reject(new Error("Request timeout"));
|
|
176
|
+
}, timeout);
|
|
177
|
+
state.pendingRequests.set(requestId, {
|
|
178
|
+
resolve,
|
|
179
|
+
reject,
|
|
180
|
+
timeoutId
|
|
181
|
+
});
|
|
182
|
+
sendMessage(state.socket, message);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async function createRuntime(state, options = {}) {
|
|
186
|
+
const callbacks = {};
|
|
187
|
+
if (options.console) {
|
|
188
|
+
callbacks.console = registerConsoleCallbacks(state, options.console);
|
|
189
|
+
}
|
|
190
|
+
if (options.fetch) {
|
|
191
|
+
callbacks.fetch = registerFetchCallback(state, options.fetch);
|
|
192
|
+
}
|
|
193
|
+
if (options.fs) {
|
|
194
|
+
callbacks.fs = registerFsCallbacks(state, options.fs);
|
|
195
|
+
}
|
|
196
|
+
const requestId = state.nextRequestId++;
|
|
197
|
+
const request = {
|
|
198
|
+
type: MessageType.CREATE_RUNTIME,
|
|
199
|
+
requestId,
|
|
200
|
+
options: {
|
|
201
|
+
memoryLimit: options.memoryLimit,
|
|
202
|
+
callbacks
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const result = await sendRequest(state, request);
|
|
206
|
+
const isolateId = result.isolateId;
|
|
207
|
+
return {
|
|
208
|
+
isolateId,
|
|
209
|
+
eval: async (code, filename) => {
|
|
210
|
+
const reqId = state.nextRequestId++;
|
|
211
|
+
const req = {
|
|
212
|
+
type: MessageType.EVAL,
|
|
213
|
+
requestId: reqId,
|
|
214
|
+
isolateId,
|
|
215
|
+
code,
|
|
216
|
+
filename
|
|
217
|
+
};
|
|
218
|
+
const res = await sendRequest(state, req);
|
|
219
|
+
return res.value;
|
|
220
|
+
},
|
|
221
|
+
dispatchRequest: async (request2, dispatchOptions) => {
|
|
222
|
+
const reqId = state.nextRequestId++;
|
|
223
|
+
const serialized = await serializeRequest(request2);
|
|
224
|
+
const req = {
|
|
225
|
+
type: MessageType.DISPATCH_REQUEST,
|
|
226
|
+
requestId: reqId,
|
|
227
|
+
isolateId,
|
|
228
|
+
request: serialized,
|
|
229
|
+
options: dispatchOptions
|
|
230
|
+
};
|
|
231
|
+
const res = await sendRequest(state, req, dispatchOptions?.timeout ?? DEFAULT_TIMEOUT);
|
|
232
|
+
return deserializeResponse(res.response);
|
|
233
|
+
},
|
|
234
|
+
tick: async (ms) => {
|
|
235
|
+
const reqId = state.nextRequestId++;
|
|
236
|
+
const req = {
|
|
237
|
+
type: MessageType.TICK,
|
|
238
|
+
requestId: reqId,
|
|
239
|
+
isolateId,
|
|
240
|
+
ms
|
|
241
|
+
};
|
|
242
|
+
await sendRequest(state, req);
|
|
243
|
+
},
|
|
244
|
+
setupTestEnvironment: async () => {
|
|
245
|
+
const reqId = state.nextRequestId++;
|
|
246
|
+
const req = {
|
|
247
|
+
type: MessageType.SETUP_TEST_ENV,
|
|
248
|
+
requestId: reqId,
|
|
249
|
+
isolateId
|
|
250
|
+
};
|
|
251
|
+
await sendRequest(state, req);
|
|
252
|
+
},
|
|
253
|
+
runTests: async (timeout) => {
|
|
254
|
+
const reqId = state.nextRequestId++;
|
|
255
|
+
const req = {
|
|
256
|
+
type: MessageType.RUN_TESTS,
|
|
257
|
+
requestId: reqId,
|
|
258
|
+
isolateId,
|
|
259
|
+
timeout
|
|
260
|
+
};
|
|
261
|
+
return sendRequest(state, req, timeout ?? DEFAULT_TIMEOUT);
|
|
262
|
+
},
|
|
263
|
+
setupPlaywright: async (playwrightOptions) => {
|
|
264
|
+
const reqId = state.nextRequestId++;
|
|
265
|
+
const req = {
|
|
266
|
+
type: MessageType.SETUP_PLAYWRIGHT,
|
|
267
|
+
requestId: reqId,
|
|
268
|
+
isolateId,
|
|
269
|
+
options: {
|
|
270
|
+
browserType: playwrightOptions?.browserType,
|
|
271
|
+
headless: playwrightOptions?.headless,
|
|
272
|
+
baseURL: playwrightOptions?.baseURL
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
if (playwrightOptions?.onConsoleLog || playwrightOptions?.onNetworkRequest || playwrightOptions?.onNetworkResponse) {
|
|
276
|
+
state.playwrightEventHandlers.set(isolateId, {
|
|
277
|
+
onConsoleLog: playwrightOptions.onConsoleLog,
|
|
278
|
+
onNetworkRequest: playwrightOptions.onNetworkRequest,
|
|
279
|
+
onNetworkResponse: playwrightOptions.onNetworkResponse
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
await sendRequest(state, req);
|
|
283
|
+
},
|
|
284
|
+
runPlaywrightTests: async (timeout) => {
|
|
285
|
+
const reqId = state.nextRequestId++;
|
|
286
|
+
const req = {
|
|
287
|
+
type: MessageType.RUN_PLAYWRIGHT_TESTS,
|
|
288
|
+
requestId: reqId,
|
|
289
|
+
isolateId,
|
|
290
|
+
timeout
|
|
291
|
+
};
|
|
292
|
+
return sendRequest(state, req, timeout ?? DEFAULT_TIMEOUT);
|
|
293
|
+
},
|
|
294
|
+
resetPlaywrightTests: async () => {
|
|
295
|
+
const reqId = state.nextRequestId++;
|
|
296
|
+
const req = {
|
|
297
|
+
type: MessageType.RESET_PLAYWRIGHT_TESTS,
|
|
298
|
+
requestId: reqId,
|
|
299
|
+
isolateId
|
|
300
|
+
};
|
|
301
|
+
await sendRequest(state, req);
|
|
302
|
+
},
|
|
303
|
+
getCollectedData: async () => {
|
|
304
|
+
const reqId = state.nextRequestId++;
|
|
305
|
+
const req = {
|
|
306
|
+
type: MessageType.GET_COLLECTED_DATA,
|
|
307
|
+
requestId: reqId,
|
|
308
|
+
isolateId
|
|
309
|
+
};
|
|
310
|
+
return sendRequest(state, req);
|
|
311
|
+
},
|
|
312
|
+
dispose: async () => {
|
|
313
|
+
state.playwrightEventHandlers.delete(isolateId);
|
|
314
|
+
const reqId = state.nextRequestId++;
|
|
315
|
+
const req = {
|
|
316
|
+
type: MessageType.DISPOSE_RUNTIME,
|
|
317
|
+
requestId: reqId,
|
|
318
|
+
isolateId
|
|
319
|
+
};
|
|
320
|
+
await sendRequest(state, req);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
function registerConsoleCallbacks(state, callbacks) {
|
|
325
|
+
const registrations = {};
|
|
326
|
+
const register = (name, fn) => {
|
|
327
|
+
const callbackId = state.nextCallbackId++;
|
|
328
|
+
state.callbacks.set(callbackId, (_level, ...args) => {
|
|
329
|
+
fn(...args);
|
|
330
|
+
});
|
|
331
|
+
registrations[name] = { callbackId, name, async: false };
|
|
332
|
+
};
|
|
333
|
+
if (callbacks.log)
|
|
334
|
+
register("log", callbacks.log);
|
|
335
|
+
if (callbacks.warn)
|
|
336
|
+
register("warn", callbacks.warn);
|
|
337
|
+
if (callbacks.error)
|
|
338
|
+
register("error", callbacks.error);
|
|
339
|
+
if (callbacks.info)
|
|
340
|
+
register("info", callbacks.info);
|
|
341
|
+
if (callbacks.debug)
|
|
342
|
+
register("debug", callbacks.debug);
|
|
343
|
+
if (callbacks.dir)
|
|
344
|
+
register("dir", callbacks.dir);
|
|
345
|
+
return registrations;
|
|
346
|
+
}
|
|
347
|
+
function registerFetchCallback(state, callback) {
|
|
348
|
+
const callbackId = state.nextCallbackId++;
|
|
349
|
+
state.callbacks.set(callbackId, async (serialized) => {
|
|
350
|
+
const request = deserializeRequest(serialized);
|
|
351
|
+
const response = await callback(request);
|
|
352
|
+
return serializeResponse(response);
|
|
353
|
+
});
|
|
354
|
+
return { callbackId, name: "fetch", async: true };
|
|
355
|
+
}
|
|
356
|
+
function registerFsCallbacks(state, callbacks) {
|
|
357
|
+
const registrations = {};
|
|
358
|
+
if (callbacks.readFile) {
|
|
359
|
+
const callbackId = state.nextCallbackId++;
|
|
360
|
+
state.callbacks.set(callbackId, async (path) => {
|
|
361
|
+
const result = await callbacks.readFile(path);
|
|
362
|
+
return new Uint8Array(result);
|
|
363
|
+
});
|
|
364
|
+
registrations.readFile = { callbackId, name: "readFile", async: true };
|
|
365
|
+
}
|
|
366
|
+
if (callbacks.writeFile) {
|
|
367
|
+
const callbackId = state.nextCallbackId++;
|
|
368
|
+
state.callbacks.set(callbackId, async (path, data) => {
|
|
369
|
+
let buffer;
|
|
370
|
+
if (data instanceof Uint8Array) {
|
|
371
|
+
buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
372
|
+
} else if (Array.isArray(data)) {
|
|
373
|
+
buffer = new Uint8Array(data).buffer;
|
|
374
|
+
} else if (data instanceof ArrayBuffer) {
|
|
375
|
+
buffer = data;
|
|
376
|
+
} else {
|
|
377
|
+
buffer = new ArrayBuffer(0);
|
|
378
|
+
}
|
|
379
|
+
await callbacks.writeFile(path, buffer);
|
|
380
|
+
});
|
|
381
|
+
registrations.writeFile = { callbackId, name: "writeFile", async: true };
|
|
382
|
+
}
|
|
383
|
+
if (callbacks.unlink) {
|
|
384
|
+
const callbackId = state.nextCallbackId++;
|
|
385
|
+
state.callbacks.set(callbackId, async (path) => {
|
|
386
|
+
await callbacks.unlink(path);
|
|
387
|
+
});
|
|
388
|
+
registrations.unlink = { callbackId, name: "unlink", async: true };
|
|
389
|
+
}
|
|
390
|
+
if (callbacks.readdir) {
|
|
391
|
+
const callbackId = state.nextCallbackId++;
|
|
392
|
+
state.callbacks.set(callbackId, async (path) => {
|
|
393
|
+
return callbacks.readdir(path);
|
|
394
|
+
});
|
|
395
|
+
registrations.readdir = { callbackId, name: "readdir", async: true };
|
|
396
|
+
}
|
|
397
|
+
if (callbacks.mkdir) {
|
|
398
|
+
const callbackId = state.nextCallbackId++;
|
|
399
|
+
state.callbacks.set(callbackId, async (path, options) => {
|
|
400
|
+
await callbacks.mkdir(path, options);
|
|
401
|
+
});
|
|
402
|
+
registrations.mkdir = { callbackId, name: "mkdir", async: true };
|
|
403
|
+
}
|
|
404
|
+
if (callbacks.rmdir) {
|
|
405
|
+
const callbackId = state.nextCallbackId++;
|
|
406
|
+
state.callbacks.set(callbackId, async (path) => {
|
|
407
|
+
await callbacks.rmdir(path);
|
|
408
|
+
});
|
|
409
|
+
registrations.rmdir = { callbackId, name: "rmdir", async: true };
|
|
410
|
+
}
|
|
411
|
+
if (callbacks.stat) {
|
|
412
|
+
const callbackId = state.nextCallbackId++;
|
|
413
|
+
state.callbacks.set(callbackId, async (path) => {
|
|
414
|
+
return callbacks.stat(path);
|
|
415
|
+
});
|
|
416
|
+
registrations.stat = { callbackId, name: "stat", async: true };
|
|
417
|
+
}
|
|
418
|
+
if (callbacks.rename) {
|
|
419
|
+
const callbackId = state.nextCallbackId++;
|
|
420
|
+
state.callbacks.set(callbackId, async (from, to) => {
|
|
421
|
+
await callbacks.rename(from, to);
|
|
422
|
+
});
|
|
423
|
+
registrations.rename = { callbackId, name: "rename", async: true };
|
|
424
|
+
}
|
|
425
|
+
return registrations;
|
|
426
|
+
}
|
|
427
|
+
async function serializeRequest(request) {
|
|
428
|
+
const headers = [];
|
|
429
|
+
request.headers.forEach((value, key) => {
|
|
430
|
+
headers.push([key, value]);
|
|
431
|
+
});
|
|
432
|
+
let body = null;
|
|
433
|
+
if (request.body) {
|
|
434
|
+
body = new Uint8Array(await request.arrayBuffer());
|
|
435
|
+
}
|
|
436
|
+
return {
|
|
437
|
+
method: request.method,
|
|
438
|
+
url: request.url,
|
|
439
|
+
headers,
|
|
440
|
+
body
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
async function serializeResponse(response) {
|
|
444
|
+
const headers = [];
|
|
445
|
+
response.headers.forEach((value, key) => {
|
|
446
|
+
headers.push([key, value]);
|
|
447
|
+
});
|
|
448
|
+
let body = null;
|
|
449
|
+
if (response.body) {
|
|
450
|
+
body = new Uint8Array(await response.arrayBuffer());
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
status: response.status,
|
|
454
|
+
statusText: response.statusText,
|
|
455
|
+
headers,
|
|
456
|
+
body
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
function deserializeRequest(data) {
|
|
460
|
+
return new Request(data.url, {
|
|
461
|
+
method: data.method,
|
|
462
|
+
headers: data.headers,
|
|
463
|
+
body: data.body
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
function deserializeResponse(data) {
|
|
467
|
+
return new Response(data.body, {
|
|
468
|
+
status: data.status,
|
|
469
|
+
statusText: data.statusText,
|
|
470
|
+
headers: data.headers
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
export {
|
|
474
|
+
connect
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
//# debugId=944ECBC62DEB63FB64756E2164756E21
|