wrangler 4.154.0 → 4.156.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.
@@ -438,7 +438,7 @@ function validateDurableObjectContainerApplications(config2, containers = getDur
438
438
  { telemetryMessage: "no DO defined that matches container class_name" }
439
439
  );
440
440
  }
441
- if (maybeBoundDO?.script_name !== void 0) {
441
+ if (maybeBoundDO?.script_name !== void 0 && maybeBoundDO.script_name !== config2.name) {
442
442
  throw new UserError(
443
443
  `The container ${container.name} is referencing the durable object ${container.class_name}, which appears to be defined on the ${maybeBoundDO.script_name} Worker instead (via the 'script_name' field). You cannot configure a container on a Durable Object that is defined in another Worker.`,
444
444
  {
@@ -30825,8 +30825,12 @@ ${resolution}`);
30825
30825
  }
30826
30826
  validateAdditionalProperties(diagnostics, field, Object.keys(value), [
30827
30827
  "binding",
30828
- "dataset"
30828
+ "dataset",
30829
+ "remote"
30829
30830
  ]);
30831
+ if (!isRemoteValid(value, field, diagnostics)) {
30832
+ isValid = false;
30833
+ }
30830
30834
  return isValid;
30831
30835
  }, "validateAnalyticsEngineBinding");
30832
30836
  validateWorkerNamespaceBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {
@@ -32310,7 +32314,6 @@ var init_binding_local_support = __esm({
32310
32314
  unsafe_hello_world: "local-only",
32311
32315
  durable_object_namespace: "local-only",
32312
32316
  fetcher: "local-only",
32313
- analytics_engine: "local-only",
32314
32317
  secrets_store_secret: "local-only",
32315
32318
  ratelimit: "local-only",
32316
32319
  worker_loader: "local-only",
@@ -32328,6 +32331,7 @@ var init_binding_local_support = __esm({
32328
32331
  // TODO: Miniflare currently ignores `remote: true` on queues, tracked in #13727.
32329
32332
  queue: "local-and-remote",
32330
32333
  flagship: "local-and-remote",
32334
+ analytics_engine: "local-and-remote",
32331
32335
  vectorize: "remote",
32332
32336
  mtls_certificate: "remote",
32333
32337
  dispatch_namespace: "remote",
@@ -34386,12 +34390,14 @@ function printBindings(bindings2, options) {
34386
34390
  }
34387
34391
  if (analytics_engine_datasets.length > 0) {
34388
34392
  output2.push(
34389
- ...analytics_engine_datasets.map(({ binding, dataset }) => {
34393
+ ...analytics_engine_datasets.map(({ binding, dataset, remote }) => {
34390
34394
  return {
34391
34395
  name: binding,
34392
34396
  type: getBindingTypeFriendlyName("analytics_engine"),
34393
34397
  value: dataset ?? binding,
34394
- mode: getMode({ isSimulatedLocally: true })
34398
+ mode: getMode({
34399
+ isSimulatedLocally: context2.remoteBindingsDisabled || !remote
34400
+ })
34395
34401
  };
34396
34402
  })
34397
34403
  );
@@ -50123,7 +50129,7 @@ var require_snapshot_utils = __commonJS({
50123
50129
  var require_snapshot_recorder = __commonJS({
50124
50130
  "../../node_modules/.pnpm/undici@7.30.1/node_modules/undici/lib/mock/snapshot-recorder.js"(exports2, module2) {
50125
50131
  init_import_meta_url();
50126
- var { writeFile: writeFile19, readFile: readFile26, mkdir: mkdir11 } = __require("fs/promises");
50132
+ var { writeFile: writeFile20, readFile: readFile26, mkdir: mkdir11 } = __require("fs/promises");
50127
50133
  var { dirname: dirname29, resolve: resolve37 } = __require("path");
50128
50134
  var { setTimeout: setTimeout9, clearTimeout: clearTimeout2 } = __require("timers");
50129
50135
  var { InvalidArgumentError, UndiciError } = require_errors();
@@ -50367,7 +50373,7 @@ var require_snapshot_recorder = __commonJS({
50367
50373
  hash: hash2,
50368
50374
  snapshot
50369
50375
  }));
50370
- await writeFile19(resolvedPath2, JSON.stringify(data, null, 2), { flush: true });
50376
+ await writeFile20(resolvedPath2, JSON.stringify(data, null, 2), { flush: true });
50371
50377
  }
50372
50378
  /**
50373
50379
  * Clears all recorded snapshots
@@ -61841,7 +61847,7 @@ var require_eventsource_stream = __commonJS({
61841
61847
  var buffer = __require("buffer");
61842
61848
  var { Transform: Transform2 } = __require("stream");
61843
61849
  var { isASCIINumber, isValidLastEventId } = require_util6();
61844
- var BOM = [239, 187, 191];
61850
+ var BOM2 = [239, 187, 191];
61845
61851
  var LF = 10;
61846
61852
  var CR = 13;
61847
61853
  var COLON = 58;
@@ -62221,20 +62227,20 @@ ${value}`;
62221
62227
  const second = this.peekBufferedByte(1);
62222
62228
  const third = this.peekBufferedByte(2);
62223
62229
  if (second === void 0) {
62224
- if (first === BOM[0]) {
62230
+ if (first === BOM2[0]) {
62225
62231
  return true;
62226
62232
  }
62227
62233
  this.checkBOM = false;
62228
62234
  return true;
62229
62235
  }
62230
62236
  if (third === void 0) {
62231
- if (first === BOM[0] && second === BOM[1]) {
62237
+ if (first === BOM2[0] && second === BOM2[1]) {
62232
62238
  return true;
62233
62239
  }
62234
62240
  this.checkBOM = false;
62235
62241
  return false;
62236
62242
  }
62237
- if (first === BOM[0] && second === BOM[1] && third === BOM[2]) {
62243
+ if (first === BOM2[0] && second === BOM2[1] && third === BOM2[2]) {
62238
62244
  this.discardLeadingBytes(3);
62239
62245
  }
62240
62246
  this.checkBOM = false;
@@ -68187,7 +68193,7 @@ var name, version2;
68187
68193
  var init_package = __esm({
68188
68194
  "package.json"() {
68189
68195
  name = "wrangler";
68190
- version2 = "4.154.0";
68196
+ version2 = "4.156.0";
68191
68197
  }
68192
68198
  });
68193
68199
 
@@ -140687,6 +140693,19 @@ async function fetchGraphqlResult(complianceConfig, init4 = {}, abortSignal) {
140687
140693
  throw new Error("A request to the Cloudflare API (/graphql) failed.");
140688
140694
  }
140689
140695
  }
140696
+ async function fetchGraphqlResultOrThrow(complianceConfig, init4 = {}) {
140697
+ const { response, status: status2, retryAfterMs } = await fetchInternal(
140698
+ complianceConfig,
140699
+ "/graphql",
140700
+ { ...init4, method: "POST" }
140701
+ );
140702
+ const errors = response.errors ?? [];
140703
+ if (status2 >= 400 || errors.length > 0) {
140704
+ const apiMessage = errors.flatMap((error64) => error64.message ?? []).join("; ") || `HTTP ${status2} with no error message`;
140705
+ throw new GraphQLAnalyticsError(status2, apiMessage, retryAfterMs);
140706
+ }
140707
+ return response;
140708
+ }
140690
140709
  async function fetchListResult2(complianceConfig, resource, init4 = {}, queryParams) {
140691
140710
  const credentials = await resolveCredentials(complianceConfig);
140692
140711
  return fetchListResultBase(
@@ -140767,6 +140786,7 @@ async function fetchCursorPage(complianceConfig, resource, init4 = {}, queryPara
140767
140786
  }
140768
140787
  return results;
140769
140788
  }
140789
+ var GraphQLAnalyticsError;
140770
140790
  var init_cfetch2 = __esm({
140771
140791
  "src/cfetch/index.ts"() {
140772
140792
  init_import_meta_url();
@@ -140777,6 +140797,25 @@ var init_cfetch2 = __esm({
140777
140797
  init_internal();
140778
140798
  __name(fetchResult2, "fetchResult");
140779
140799
  __name(fetchGraphqlResult, "fetchGraphqlResult");
140800
+ GraphQLAnalyticsError = class extends APIError {
140801
+ static {
140802
+ __name(this, "GraphQLAnalyticsError");
140803
+ }
140804
+ reason;
140805
+ apiMessage;
140806
+ constructor(status2, apiMessage, retryAfterMs) {
140807
+ const reason = status2 === 429 || /rate limiter budget depleted/i.test(apiMessage) ? "rate-limited" : status2 === 401 || status2 === 403 ? "unauthorized" : "other";
140808
+ super({
140809
+ text: `The GraphQL Analytics API returned an error: ${apiMessage}`,
140810
+ status: status2,
140811
+ retryAfterMs,
140812
+ telemetryMessage: `cfetch graphql ${reason}`
140813
+ });
140814
+ this.reason = reason;
140815
+ this.apiMessage = apiMessage;
140816
+ }
140817
+ };
140818
+ __name(fetchGraphqlResultOrThrow, "fetchGraphqlResultOrThrow");
140780
140819
  __name(fetchListResult2, "fetchListResult");
140781
140820
  __name(fetchPagedListResult2, "fetchPagedListResult");
140782
140821
  __name(fetchCursorPage, "fetchCursorPage");
@@ -141103,7 +141142,8 @@ function convertBindingsAndAssets(config2, result) {
141103
141142
  case "analytics-engine-dataset":
141104
141143
  analyticsEngineDatasets.push(omitUndefined({
141105
141144
  binding: name2,
141106
- dataset: binding.name
141145
+ dataset: binding.name,
141146
+ remote: binding.dev?.remote
141107
141147
  }));
141108
141148
  break;
141109
141149
  case "artifacts":
@@ -141864,7 +141904,8 @@ var init_dist3 = __esm({
141864
141904
  });
141865
141905
  AnalyticsEngineDatasetBindingSchema = strictObject({
141866
141906
  type: literal("analytics-engine-dataset"),
141867
- name: string2().optional()
141907
+ name: string2().optional(),
141908
+ dev: RemoteBindingDevSchema.optional()
141868
141909
  });
141869
141910
  FlagshipBindingSchema = strictObject({
141870
141911
  type: literal("flagship"),
@@ -156136,8 +156177,8 @@ var require_sync = __commonJS({
156136
156177
  }
156137
156178
  return x7;
156138
156179
  }, "maybeRealpathSync");
156139
- var defaultReadPackageSync = /* @__PURE__ */ __name(function defaultReadPackageSync2(readFileSync37, pkgfile) {
156140
- var body = readFileSync37(pkgfile);
156180
+ var defaultReadPackageSync = /* @__PURE__ */ __name(function defaultReadPackageSync2(readFileSync38, pkgfile) {
156181
+ var body = readFileSync38(pkgfile);
156141
156182
  try {
156142
156183
  var pkg = JSON.parse(body);
156143
156184
  return pkg;
@@ -156157,7 +156198,7 @@ var require_sync = __commonJS({
156157
156198
  }
156158
156199
  var opts = normalizeOptions2(x7, options);
156159
156200
  var isFile3 = opts.isFile || defaultIsFile;
156160
- var readFileSync37 = opts.readFileSync || fs40.readFileSync;
156201
+ var readFileSync38 = opts.readFileSync || fs40.readFileSync;
156161
156202
  var isDirectory4 = opts.isDirectory || defaultIsDir;
156162
156203
  var realpathSync5 = opts.realpathSync || defaultRealpathSync;
156163
156204
  var readPackageSync = opts.readPackageSync || defaultReadPackageSync;
@@ -156214,7 +156255,7 @@ var require_sync = __commonJS({
156214
156255
  if (!isFile3(pkgfile)) {
156215
156256
  return loadpkg(path111.dirname(dir2));
156216
156257
  }
156217
- var pkg = readPackageSync(readFileSync37, pkgfile);
156258
+ var pkg = readPackageSync(readFileSync38, pkgfile);
156218
156259
  if (pkg && opts.packageFilter) {
156219
156260
  pkg = opts.packageFilter(
156220
156261
  pkg,
@@ -156228,7 +156269,7 @@ var require_sync = __commonJS({
156228
156269
  var pkgfile = path111.join(maybeRealpathSync(realpathSync5, x8, opts), "/package.json");
156229
156270
  if (isFile3(pkgfile)) {
156230
156271
  try {
156231
- var pkg = readPackageSync(readFileSync37, pkgfile);
156272
+ var pkg = readPackageSync(readFileSync38, pkgfile);
156232
156273
  } catch (e11) {
156233
156274
  }
156234
156275
  if (pkg && opts.packageFilter) {
@@ -168519,6 +168560,26 @@ function maybeGetFile(filePath) {
168519
168560
  }
168520
168561
  }
168521
168562
  }
168563
+ function readAssetsIgnoreFile(filePath) {
168564
+ let contents;
168565
+ try {
168566
+ contents = fs14.readFileSync(filePath);
168567
+ } catch (error64) {
168568
+ if (thrownIsDoesNotExistError(error64)) {
168569
+ return;
168570
+ }
168571
+ throw error64;
168572
+ }
168573
+ try {
168574
+ const text = new util.TextDecoder("utf-8", { fatal: true }).decode(contents);
168575
+ if (text.includes("\0")) {
168576
+ throw new Error("Ignore patterns contain a null character.");
168577
+ }
168578
+ return text;
168579
+ } catch {
168580
+ throw new InvalidAssetsIgnoreError(filePath);
168581
+ }
168582
+ }
168522
168583
  async function createAssetsIgnoreFunction(dir2) {
168523
168584
  const cfAssetIgnorePath = path29.resolve(dir2, CF_ASSETS_IGNORE_FILENAME);
168524
168585
  const ignorePatterns = [
@@ -168529,7 +168590,7 @@ async function createAssetsIgnoreFunction(dir2) {
168529
168590
  `/${HEADERS_FILENAME}`
168530
168591
  ];
168531
168592
  let assetsIgnoreFilePresent = false;
168532
- const assetsIgnore = maybeGetFile(cfAssetIgnorePath);
168593
+ const assetsIgnore = readAssetsIgnoreFile(cfAssetIgnorePath);
168533
168594
  if (assetsIgnore !== void 0) {
168534
168595
  assetsIgnoreFilePresent = true;
168535
168596
  ignorePatterns.push(...assetsIgnore.split("\n"));
@@ -168539,7 +168600,7 @@ async function createAssetsIgnoreFunction(dir2) {
168539
168600
  assetsIgnoreFilePresent
168540
168601
  };
168541
168602
  }
168542
- var import_ignore, normalizeFilePath, getContentType;
168603
+ var import_ignore, normalizeFilePath, getContentType, InvalidAssetsIgnoreError;
168543
168604
  var init_helpers2 = __esm({
168544
168605
  "../workers-shared/utils/helpers.ts"() {
168545
168606
  init_import_meta_url();
@@ -168562,6 +168623,18 @@ var init_helpers2 = __esm({
168562
168623
  __name(createPatternMatcher, "createPatternMatcher");
168563
168624
  __name(thrownIsDoesNotExistError, "thrownIsDoesNotExistError");
168564
168625
  __name(maybeGetFile, "maybeGetFile");
168626
+ InvalidAssetsIgnoreError = class extends Error {
168627
+ static {
168628
+ __name(this, "InvalidAssetsIgnoreError");
168629
+ }
168630
+ constructor(filePath) {
168631
+ super(
168632
+ `The .assetsignore file at "${filePath}" must be UTF-8 encoded and must not contain null characters. Save the file as UTF-8 and try again.`
168633
+ );
168634
+ this.name = "InvalidAssetsIgnoreError";
168635
+ }
168636
+ };
168637
+ __name(readAssetsIgnoreFile, "readAssetsIgnoreFile");
168565
168638
  __name(createAssetsIgnoreFunction, "createAssetsIgnoreFunction");
168566
168639
  }
168567
168640
  });
@@ -169259,7 +169332,14 @@ Assets already uploaded have been saved, so the next attempt will automatically
169259
169332
  const files = await fs$1.readdir(dir2, { recursive: true });
169260
169333
  logReadFilesFromDirectory(dir2, files);
169261
169334
  const manifest = {};
169262
- const { assetsIgnoreFunction, assetsIgnoreFilePresent } = await createAssetsIgnoreFunction(dir2);
169335
+ const { assetsIgnoreFunction, assetsIgnoreFilePresent } = await createAssetsIgnoreFunction(dir2).catch((error64) => {
169336
+ if (error64 instanceof InvalidAssetsIgnoreError) {
169337
+ throw new UserError(error64.message, {
169338
+ telemetryMessage: "assets ignore invalid encoding"
169339
+ });
169340
+ }
169341
+ throw error64;
169342
+ });
169263
169343
  await Promise.all(
169264
169344
  files.map(async (relativeFilepath) => {
169265
169345
  if (assetsIgnoreFunction(relativeFilepath)) {
@@ -170819,7 +170899,7 @@ async function prepareDurableObjectContainerApplications(config2, durableObjectC
170819
170899
  versionsUploadCommand: versionsUploadCommand2
170820
170900
  }) {
170821
170901
  validateDurableObjectContainerApplications(
170822
- config2,
170902
+ { ...config2, name: scriptName },
170823
170903
  durableObjectContainerConfig,
170824
170904
  configFileName(config2.configPath, config2.userConfigPath)
170825
170905
  );
@@ -185088,7 +185168,10 @@ function buildMiniflareBindingOptions(config2, remoteProxyConnectionString) {
185088
185168
  analyticsEngineDatasets: Object.fromEntries(
185089
185169
  analyticsEngineDatasets.map((binding) => [
185090
185170
  binding.binding,
185091
- { dataset: binding.dataset ?? "dataset" }
185171
+ {
185172
+ dataset: binding.dataset ?? "dataset",
185173
+ ...remoteProxyConnectionString && binding.remote && { remoteProxyConnectionString }
185174
+ }
185092
185175
  ])
185093
185176
  ),
185094
185177
  workflows: Object.fromEntries(
@@ -186872,7 +186955,7 @@ var init_dist14 = __esm({
186872
186955
  init_wrapper();
186873
186956
  init_create_worker_upload_form();
186874
186957
  import_undici14 = __toESM(require_undici(), 1);
186875
- version3 = "0.0.54";
186958
+ version3 = "0.0.56";
186876
186959
  NoDefaultValueProvided2 = class extends UserError {
186877
186960
  static {
186878
186961
  __name(this, "NoDefaultValueProvided");
@@ -186883,7 +186966,7 @@ var init_dist14 = __esm({
186883
186966
  };
186884
186967
  __name(createRemoteBindingsAuth, "createRemoteBindingsAuth");
186885
186968
  __name(getRemoteBindingsAuthHook, "getRemoteBindingsAuthHook");
186886
- ProxyServerWorker_default = '// ../../node_modules/.pnpm/capnweb@0.12.0/node_modules/capnweb/dist/index-workers.js\nimport * as cfw from "cloudflare:workers";\nvar WORKERS_MODULE_SYMBOL = /* @__PURE__ */ Symbol("workers-module");\nglobalThis[WORKERS_MODULE_SYMBOL] = cfw;\nif (!Symbol.dispose) Symbol.dispose = /* @__PURE__ */ Symbol.for("dispose");\nif (!Symbol.asyncDispose) Symbol.asyncDispose = /* @__PURE__ */ Symbol.for("asyncDispose");\nif (!Promise.withResolvers) Promise.withResolvers = function() {\n let resolve;\n let reject;\n return {\n promise: new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n }),\n resolve,\n reject\n };\n};\nvar workersModule = globalThis[WORKERS_MODULE_SYMBOL];\nvar RpcTarget$1 = workersModule ? workersModule.RpcTarget : class {\n};\nvar AsyncFunction = (async function() {\n}).constructor;\nvar BUFFER_PROTOTYPE = typeof Buffer !== "undefined" ? Buffer.prototype : void 0;\nfunction typeForRpc(value) {\n switch (typeof value) {\n case "boolean":\n case "number":\n case "string":\n return "primitive";\n case "undefined":\n return "undefined";\n case "object":\n case "function":\n break;\n case "bigint":\n return "bigint";\n default:\n return "unsupported";\n }\n if (value === null) return "primitive";\n let prototype = Object.getPrototypeOf(value);\n switch (prototype) {\n case Object.prototype:\n return "object";\n case Function.prototype:\n case AsyncFunction.prototype:\n return "function";\n case Array.prototype:\n return "array";\n case Date.prototype:\n return "date";\n case Uint8Array.prototype:\n case BUFFER_PROTOTYPE:\n case ArrayBuffer.prototype:\n case DataView.prototype:\n case Int8Array.prototype:\n case Uint8ClampedArray.prototype:\n case Int16Array.prototype:\n case Uint16Array.prototype:\n case Int32Array.prototype:\n case Uint32Array.prototype:\n case BigInt64Array.prototype:\n case BigUint64Array.prototype:\n case Float32Array.prototype:\n case Float64Array.prototype:\n return "bytes";\n case WritableStream.prototype:\n return "writable";\n case ReadableStream.prototype:\n return "readable";\n case URL.prototype:\n return "url";\n case Headers.prototype:\n return "headers";\n case Request.prototype:\n return "request";\n case Response.prototype:\n return "response";\n case Blob.prototype:\n return "blob";\n case RpcStub$1.prototype:\n return "stub";\n case RpcPromise$1.prototype:\n return "rpc-promise";\n default:\n if (workersModule) {\n if (prototype == workersModule.RpcStub.prototype || value instanceof workersModule.ServiceStub) return "rpc-target";\n else if (prototype == workersModule.RpcPromise.prototype || prototype == workersModule.RpcProperty.prototype) return "rpc-thenable";\n }\n if (value instanceof RpcTarget$1) return "rpc-target";\n if (value instanceof Error) return "error";\n return "unsupported";\n }\n}\nfunction mapNotLoaded() {\n throw new Error("RPC map() implementation was not loaded.");\n}\nvar mapImpl = {\n applyMap: mapNotLoaded,\n sendMap: mapNotLoaded\n};\nfunction streamNotLoaded() {\n throw new Error("Stream implementation was not loaded.");\n}\nvar streamImpl = {\n createWritableStreamHook: streamNotLoaded,\n createWritableStreamFromHook: streamNotLoaded,\n createReadableStreamHook: streamNotLoaded\n};\nvar StubHook = class {\n stream(path, args) {\n let hook = this.call(path, args);\n let pulled;\n try {\n pulled = hook.pull();\n } catch (err) {\n hook.dispose();\n throw err;\n }\n let promise;\n if (pulled instanceof Promise) promise = pulled.then((p) => {\n p.dispose();\n });\n else {\n pulled.dispose();\n promise = Promise.resolve();\n }\n return { promise };\n }\n};\nvar ErrorStubHook = class extends StubHook {\n error;\n constructor(error) {\n super();\n this.error = error;\n }\n call(path, args) {\n args.dispose();\n return this;\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return this;\n }\n get(path) {\n return this;\n }\n dup() {\n return this;\n }\n pull() {\n return Promise.reject(this.error);\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n }\n onBroken(callback) {\n try {\n callback(this.error);\n } catch (err) {\n Promise.resolve(err);\n }\n }\n};\nvar DISPOSED_HOOK = new ErrorStubHook(/* @__PURE__ */ new Error("Attempted to use RPC stub after it has been disposed."));\nvar doCall = (hook, path, params) => {\n return hook.call(path, params);\n};\nfunction withCallInterceptor(interceptor, callback) {\n let oldValue = doCall;\n doCall = interceptor;\n try {\n return callback();\n } finally {\n doCall = oldValue;\n }\n}\nvar RAW_STUB = /* @__PURE__ */ Symbol("realStub");\nvar PROXY_HANDLERS = {\n apply(target, thisArg, argumentsList) {\n let stub = target.raw;\n return new RpcPromise$1(doCall(stub.hook, stub.pathIfPromise || [], RpcPayload.fromAppParams(argumentsList)), []);\n },\n get(target, prop, receiver) {\n let stub = target.raw;\n if (prop === RAW_STUB) return stub;\n else if (prop in RpcPromise$1.prototype) return stub[prop];\n else if (typeof prop === "string") return new RpcPromise$1(stub.hook, stub.pathIfPromise ? [...stub.pathIfPromise, prop] : [prop]);\n else if (prop === Symbol.dispose && (!stub.pathIfPromise || stub.pathIfPromise.length == 0)) return () => {\n stub.hook.dispose();\n stub.hook = DISPOSED_HOOK;\n };\n else return;\n },\n has(target, prop) {\n let stub = target.raw;\n if (prop === RAW_STUB) return true;\n else if (prop in RpcPromise$1.prototype) return prop in stub;\n else if (typeof prop === "string") return true;\n else if (prop === Symbol.dispose && (!stub.pathIfPromise || stub.pathIfPromise.length == 0)) return true;\n else return false;\n },\n construct(target, args) {\n throw new Error("An RPC stub cannot be used as a constructor.");\n },\n defineProperty(target, property, attributes) {\n throw new Error("Can\'t define properties on RPC stubs.");\n },\n deleteProperty(target, p) {\n throw new Error("Can\'t delete properties on RPC stubs.");\n },\n getOwnPropertyDescriptor(target, p) {\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target.raw);\n },\n isExtensible(target) {\n return false;\n },\n ownKeys(target) {\n return [];\n },\n preventExtensions(target) {\n return true;\n },\n set(target, p, newValue, receiver) {\n throw new Error("Can\'t assign properties on RPC stubs.");\n },\n setPrototypeOf(target, v) {\n throw new Error("Can\'t override prototype of RPC stubs.");\n }\n};\nvar RpcStub$1 = class RpcStub$12 extends RpcTarget$1 {\n constructor(hook, pathIfPromise) {\n super();\n if (!(hook instanceof StubHook)) {\n let value = hook;\n if (value instanceof RpcTarget$1 || value instanceof Function) hook = TargetStubHook.create(value, void 0);\n else hook = new PayloadStubHook(RpcPayload.fromAppReturn(value));\n if (pathIfPromise) throw new TypeError("RpcStub constructor expected one argument, received two.");\n }\n this.hook = hook;\n this.pathIfPromise = pathIfPromise;\n let func = () => {\n };\n func.raw = this;\n return new Proxy(func, PROXY_HANDLERS);\n }\n hook;\n pathIfPromise;\n dup() {\n let target = this[RAW_STUB];\n if (target.pathIfPromise) return new RpcStub$12(target.hook.get(target.pathIfPromise));\n else return new RpcStub$12(target.hook.dup());\n }\n onRpcBroken(callback) {\n this[RAW_STUB].hook.onBroken(callback);\n }\n map(func) {\n let { hook, pathIfPromise } = this[RAW_STUB];\n return mapImpl.sendMap(hook, pathIfPromise || [], func);\n }\n toString() {\n return "[object RpcStub]";\n }\n};\nvar RpcPromise$1 = class extends RpcStub$1 {\n constructor(hook, pathIfPromise) {\n if (hook instanceof StubHook) super(hook, pathIfPromise ?? []);\n else {\n if (pathIfPromise !== void 0) throw new TypeError("RpcPromise constructor expected one argument, received two.");\n let kind = typeForRpc(hook);\n if (kind === "rpc-promise") {\n let raw = unwrapStubAndPath(hook);\n if (raw.pathIfPromise.length > 0) super(raw.hook, raw.pathIfPromise);\n else {\n let adopted = raw.hook;\n raw.hook = DISPOSED_HOOK;\n super(adopted, []);\n }\n } else if (kind === "rpc-thenable") super(TargetStubHook.create(hook, void 0), []);\n else {\n let promiseHook = new PromiseStubHook(Promise.resolve(hook).then((value) => new PayloadStubHook(RpcPayload.fromAppReturn(value))));\n promiseHook.ignoreUnhandledRejections();\n super(promiseHook, []);\n }\n }\n }\n then(onfulfilled, onrejected) {\n return pullPromise(this).then(...arguments);\n }\n catch(onrejected) {\n return pullPromise(this).catch(...arguments);\n }\n finally(onfinally) {\n return pullPromise(this).finally(...arguments);\n }\n toString() {\n return "[object RpcPromise]";\n }\n};\nfunction unwrapStubTakingOwnership(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise && pathIfPromise.length > 0) return hook.get(pathIfPromise);\n else return hook;\n}\nfunction unwrapStubAndDup(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise) return hook.get(pathIfPromise);\n else return hook.dup();\n}\nfunction unwrapStubNoProperties(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise && pathIfPromise.length > 0) return;\n return hook;\n}\nfunction unwrapStubOrParent(stub) {\n return stub[RAW_STUB].hook;\n}\nfunction unwrapStubAndPath(stub) {\n return stub[RAW_STUB];\n}\nasync function pullPromise(promise) {\n let { hook, pathIfPromise } = promise[RAW_STUB];\n if (pathIfPromise.length > 0) hook = hook.get(pathIfPromise);\n return (await hook.pull()).deliverResolve();\n}\nvar RpcPayload = class RpcPayload2 {\n value;\n source;\n hooks;\n promises;\n static fromAppParams(value) {\n return new RpcPayload2(value, "params");\n }\n static fromAppReturn(value) {\n return new RpcPayload2(value, "return");\n }\n static fromArray(array) {\n let hooks = [];\n let promises = [];\n let resultArray = [];\n for (let payload of array) {\n payload.ensureDeepCopied();\n for (let hook of payload.hooks) hooks.push(hook);\n for (let promise of payload.promises) {\n if (promise.parent === payload) promise = {\n parent: resultArray,\n property: resultArray.length,\n promise: promise.promise\n };\n promises.push(promise);\n }\n resultArray.push(payload.value);\n }\n return new RpcPayload2(resultArray, "owned", hooks, promises);\n }\n static forEvaluate(hooks, promises) {\n return new RpcPayload2(null, "owned", hooks, promises);\n }\n static deepCopyFrom(value, oldParent, owner) {\n let result = new RpcPayload2(null, "owned", [], []);\n result.value = result.deepCopy(value, oldParent, "value", result, true, owner);\n return result;\n }\n constructor(value, source, hooks, promises) {\n this.value = value;\n this.source = source;\n this.hooks = hooks;\n this.promises = promises;\n }\n rpcTargets;\n getHookForRpcTarget(target, parent, dupStubs = true) {\n if (this.source === "params") {\n if (dupStubs) {\n let dupable = target;\n if (typeof dupable.dup === "function") target = dupable.dup();\n }\n return TargetStubHook.create(target, parent);\n } else if (this.source === "return") {\n let hook = this.rpcTargets?.get(target);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(target);\n return hook;\n }\n else {\n hook = TargetStubHook.create(target, parent);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(target, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw RpcTargets");\n }\n getHookForWritableStream(stream, parent, dupStubs = true) {\n if (this.source === "params") return streamImpl.createWritableStreamHook(stream);\n else if (this.source === "return") {\n let hook = this.rpcTargets?.get(stream);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(stream);\n return hook;\n }\n else {\n hook = streamImpl.createWritableStreamHook(stream);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(stream, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw WritableStreams");\n }\n getHookForReadableStream(stream, parent, dupStubs = true) {\n if (this.source === "params") return streamImpl.createReadableStreamHook(stream);\n else if (this.source === "return") {\n let hook = this.rpcTargets?.get(stream);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(stream);\n return hook;\n }\n else {\n hook = streamImpl.createReadableStreamHook(stream);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(stream, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw ReadableStreams");\n }\n deepCopy(value, oldParent, property, parent, dupStubs, owner) {\n switch (typeForRpc(value)) {\n case "unsupported":\n return value;\n case "primitive":\n case "bigint":\n case "date":\n case "bytes":\n case "blob":\n case "url":\n case "error":\n case "undefined":\n return value;\n case "array": {\n let array = value;\n let len = array.length;\n let result = new Array(len);\n for (let i = 0; i < len; i++) result[i] = this.deepCopy(array[i], array, i, result, dupStubs, owner);\n return result;\n }\n case "object": {\n let result = {};\n let object = value;\n for (let i in object) result[i] = this.deepCopy(object[i], object, i, result, dupStubs, owner);\n return result;\n }\n case "stub":\n case "rpc-promise": {\n let stub = value;\n let hook;\n if (dupStubs) hook = unwrapStubAndDup(stub);\n else hook = unwrapStubTakingOwnership(stub);\n if (stub instanceof RpcPromise$1) {\n let promise = new RpcPromise$1(hook, []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n } else {\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n }\n case "function":\n case "rpc-target": {\n let target = value;\n let hook;\n if (owner) hook = owner.getHookForRpcTarget(target, oldParent, dupStubs);\n else hook = TargetStubHook.create(target, oldParent);\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n case "rpc-thenable": {\n let target = value;\n let promise;\n if (owner) promise = new RpcPromise$1(owner.getHookForRpcTarget(target, oldParent, dupStubs), []);\n else promise = new RpcPromise$1(TargetStubHook.create(target, oldParent), []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n }\n case "writable": {\n let stream = value;\n let hook;\n if (owner) hook = owner.getHookForWritableStream(stream, oldParent, dupStubs);\n else hook = streamImpl.createWritableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n case "readable": {\n let stream = value;\n let hook;\n if (owner) hook = owner.getHookForReadableStream(stream, oldParent, dupStubs);\n else hook = streamImpl.createReadableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n case "headers":\n return new Headers(value);\n case "request": {\n let req = value;\n if (req.body) this.deepCopy(req.body, req, "body", req, dupStubs, owner);\n return new Request(req);\n }\n case "response": {\n let resp = value;\n if (resp.body) this.deepCopy(resp.body, resp, "body", resp, dupStubs, owner);\n return new Response(resp.body, resp);\n }\n default:\n throw new Error("unreachable");\n }\n }\n ensureDeepCopied() {\n if (this.source !== "owned") {\n let dupStubs = this.source === "params";\n this.hooks = [];\n this.promises = [];\n try {\n this.value = this.deepCopy(this.value, void 0, "value", this, dupStubs, this);\n } catch (err) {\n this.hooks = void 0;\n this.promises = void 0;\n throw err;\n }\n this.source = "owned";\n if (this.rpcTargets && this.rpcTargets.size > 0) throw new Error("Not all rpcTargets were accounted for in deep-copy?");\n this.rpcTargets = void 0;\n }\n }\n deliverTo(parent, property, promises) {\n this.ensureDeepCopied();\n if (this.value instanceof RpcPromise$1) RpcPayload2.deliverRpcPromiseTo(this.value, parent, property, promises);\n else {\n parent[property] = this.value;\n for (let record of this.promises) RpcPayload2.deliverRpcPromiseTo(record.promise, record.parent, record.property, promises);\n }\n }\n static deliverRpcPromiseTo(promise, parent, property, promises) {\n let hook = unwrapStubNoProperties(promise);\n if (!hook) throw new Error("property promises should have been resolved earlier");\n let inner = hook.pull();\n if (inner instanceof RpcPayload2) inner.deliverTo(parent, property, promises);\n else promises.push(inner.then((payload) => {\n let subPromises = [];\n payload.deliverTo(parent, property, subPromises);\n if (subPromises.length > 0) return Promise.all(subPromises);\n }));\n }\n async deliverCall(func, thisArg) {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let result = Function.prototype.apply.call(func, thisArg, this.value);\n if (result instanceof RpcPromise$1) return RpcPayload2.fromAppReturn(result);\n else return RpcPayload2.fromAppReturn(await result);\n } finally {\n this.dispose();\n }\n }\n async deliverStreamWrite(writer) {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let chunk = this.value[0];\n if ((this.hooks.length > 0 || this.promises.length > 0) && chunk instanceof Object) {\n if (!(Symbol.dispose in chunk)) Object.defineProperty(chunk, Symbol.dispose, {\n value: () => this.dispose(),\n writable: true,\n enumerable: false,\n configurable: true\n });\n await writer.write(chunk);\n return RpcPayload2.fromAppReturn(void 0);\n }\n await writer.write(chunk);\n this.dispose();\n return RpcPayload2.fromAppReturn(void 0);\n } catch (err) {\n this.dispose();\n throw err;\n }\n }\n async deliverResolve() {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let result = this.value;\n if (result instanceof Object) {\n if (!(Symbol.dispose in result)) Object.defineProperty(result, Symbol.dispose, {\n value: () => this.dispose(),\n writable: true,\n enumerable: false,\n configurable: true\n });\n }\n return result;\n } catch (err) {\n this.dispose();\n throw err;\n }\n }\n dispose() {\n if (this.source === "owned") {\n this.hooks.forEach((hook) => hook.dispose());\n this.promises.forEach((promise) => promise.promise[Symbol.dispose]());\n } else if (this.source === "return") {\n this.disposeImpl(this.value, void 0);\n if (this.rpcTargets && this.rpcTargets.size > 0) throw new Error("Not all rpcTargets were accounted for in disposeImpl()?");\n }\n this.source = "owned";\n this.hooks = [];\n this.promises = [];\n }\n disposeImpl(value, parent) {\n switch (typeForRpc(value)) {\n case "unsupported":\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "url":\n case "error":\n case "undefined":\n return;\n case "array": {\n let array = value;\n let len = array.length;\n for (let i = 0; i < len; i++) this.disposeImpl(array[i], array);\n return;\n }\n case "object": {\n let object = value;\n for (let i in object) this.disposeImpl(object[i], object);\n return;\n }\n case "stub":\n case "rpc-promise": {\n let hook = unwrapStubNoProperties(value);\n if (hook) hook.dispose();\n return;\n }\n case "function":\n case "rpc-target": {\n let target = value;\n let hook = this.rpcTargets?.get(target);\n if (hook) {\n hook.dispose();\n this.rpcTargets.delete(target);\n } else disposeRpcTarget(target);\n return;\n }\n case "rpc-thenable":\n return;\n case "headers":\n return;\n case "request": {\n let req = value;\n if (req.body) this.disposeImpl(req.body, req);\n return;\n }\n case "response": {\n let resp = value;\n if (resp.body) this.disposeImpl(resp.body, resp);\n return;\n }\n case "writable": {\n let stream = value;\n let hook = this.rpcTargets?.get(stream);\n if (hook) this.rpcTargets.delete(stream);\n else hook = streamImpl.createWritableStreamHook(stream);\n hook.dispose();\n return;\n }\n case "readable": {\n let stream = value;\n let hook = this.rpcTargets?.get(stream);\n if (hook) this.rpcTargets.delete(stream);\n else hook = streamImpl.createReadableStreamHook(stream);\n hook.dispose();\n return;\n }\n default:\n return;\n }\n }\n ignoreUnhandledRejections() {\n if (this.hooks) {\n this.hooks.forEach((hook) => {\n hook.ignoreUnhandledRejections();\n });\n this.promises.forEach((promise) => unwrapStubOrParent(promise.promise).ignoreUnhandledRejections());\n } else this.ignoreUnhandledRejectionsImpl(this.value);\n }\n ignoreUnhandledRejectionsImpl(value) {\n switch (typeForRpc(value)) {\n case "unsupported":\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "error":\n case "undefined":\n case "function":\n case "rpc-target":\n case "writable":\n case "readable":\n case "url":\n case "headers":\n case "request":\n case "response":\n return;\n case "array": {\n let array = value;\n let len = array.length;\n for (let i = 0; i < len; i++) this.ignoreUnhandledRejectionsImpl(array[i]);\n return;\n }\n case "object": {\n let object = value;\n for (let i in object) this.ignoreUnhandledRejectionsImpl(object[i]);\n return;\n }\n case "stub":\n case "rpc-promise":\n unwrapStubOrParent(value).ignoreUnhandledRejections();\n return;\n case "rpc-thenable":\n value.then((_) => {\n }, (_) => {\n });\n return;\n default:\n return;\n }\n }\n};\nfunction followPath(value, parent, path, owner) {\n for (let i = 0; i < path.length; i++) {\n parent = value;\n let part = path[i];\n if (part in Object.prototype) {\n value = void 0;\n continue;\n }\n switch (typeForRpc(value)) {\n case "object":\n case "function":\n if (Object.hasOwn(value, part)) value = value[part];\n else value = void 0;\n break;\n case "array":\n if (Number.isInteger(part) && part >= 0) value = value[part];\n else value = void 0;\n break;\n case "rpc-target":\n case "rpc-thenable":\n if (Object.hasOwn(value, part)) throw new TypeError(`Attempted to access property \'${part}\', which is an instance property of the RpcTarget. To avoid leaking private internals, instance properties cannot be accessed over RPC. If you want to make this property available over RPC, define it as a method or getter on the class, instead of an instance property.`);\n else value = value[part];\n owner = null;\n break;\n case "stub":\n case "rpc-promise": {\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n return {\n hook,\n remainingPath: pathIfPromise ? pathIfPromise.concat(path.slice(i)) : path.slice(i)\n };\n }\n case "writable":\n value = void 0;\n break;\n case "readable":\n value = void 0;\n break;\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "error":\n case "url":\n case "headers":\n case "request":\n case "response":\n value = void 0;\n break;\n case "undefined":\n value = value[part];\n break;\n case "unsupported":\n if (i === 0) throw new TypeError(`RPC stub points at a non-serializable type.`);\n else {\n let prefix = path.slice(0, i).join(".");\n let remainder = path.slice(0, i).join(".");\n throw new TypeError(`\'${prefix}\' is not a serializable type, so property ${remainder} cannot be accessed.`);\n }\n default:\n throw new TypeError("unreachable");\n }\n }\n if (value instanceof RpcPromise$1) {\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n return {\n hook,\n remainingPath: pathIfPromise || []\n };\n }\n return {\n value,\n parent,\n owner\n };\n}\nvar ValueStubHook = class extends StubHook {\n call(path, args) {\n let followResult;\n try {\n let { value, owner } = this.getValue();\n followResult = followPath(value, void 0, path, owner);\n } catch (err) {\n args.dispose();\n return new ErrorStubHook(err);\n }\n if (followResult.hook) return followResult.hook.call(followResult.remainingPath, args);\n if (typeof followResult.value != "function") {\n args.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new TypeError(`\'${path.join(".")}\' is not a function.`));\n }\n return new PromiseStubHook(args.deliverCall(followResult.value, followResult.parent).then((payload) => {\n return new PayloadStubHook(payload);\n }));\n }\n map(path, captures, instructions) {\n try {\n let followResult;\n try {\n let { value, owner } = this.getValue();\n followResult = followPath(value, void 0, path, owner);\n } catch (err) {\n for (let cap of captures) cap.dispose();\n throw err;\n }\n if (followResult.hook) return followResult.hook.map(followResult.remainingPath, captures, instructions);\n return mapImpl.applyMap(followResult.value, followResult.parent, followResult.owner, captures, instructions);\n } catch (err) {\n return new ErrorStubHook(err);\n }\n }\n get(path) {\n try {\n let { value, owner } = this.getValue();\n if (path.length === 0 && owner === null) {\n if (value instanceof Object && "then" in value) return this.dup();\n throw new Error("Can\'t dup an RpcTarget stub as a promise.");\n }\n let followResult = followPath(value, void 0, path, owner);\n if (followResult.hook) return followResult.hook.get(followResult.remainingPath);\n return new PayloadStubHook(RpcPayload.deepCopyFrom(followResult.value, followResult.parent, followResult.owner));\n } catch (err) {\n return new ErrorStubHook(err);\n }\n }\n};\nvar PayloadStubHook = class PayloadStubHook2 extends ValueStubHook {\n constructor(payload) {\n super();\n this.payload = payload;\n }\n payload;\n getPayload() {\n if (this.payload) return this.payload;\n else throw new Error("Attempted to use an RPC StubHook after it was disposed.");\n }\n getValue() {\n let payload = this.getPayload();\n return {\n value: payload.value,\n owner: payload\n };\n }\n dup() {\n let thisPayload = this.getPayload();\n return new PayloadStubHook2(RpcPayload.deepCopyFrom(thisPayload.value, void 0, thisPayload));\n }\n pull() {\n return this.getPayload();\n }\n ignoreUnhandledRejections() {\n if (this.payload) this.payload.ignoreUnhandledRejections();\n }\n dispose() {\n if (this.payload) {\n this.payload.dispose();\n this.payload = void 0;\n }\n }\n onBroken(callback) {\n if (this.payload) {\n if (this.payload.value instanceof RpcStub$1) this.payload.value.onRpcBroken(callback);\n }\n }\n};\nfunction disposeRpcTarget(target) {\n if (Symbol.dispose in target) try {\n target[Symbol.dispose]();\n } catch (err) {\n Promise.reject(err);\n }\n}\nvar TargetStubHook = class TargetStubHook2 extends ValueStubHook {\n static create(value, parent) {\n if (typeof value !== "function") parent = void 0;\n return new TargetStubHook2(value, parent);\n }\n constructor(target, parent, dupFrom) {\n super();\n this.target = target;\n this.parent = parent;\n if (dupFrom) {\n if (dupFrom.refcount) {\n this.refcount = dupFrom.refcount;\n ++this.refcount.count;\n }\n } else if (Symbol.dispose in target) this.refcount = { count: 1 };\n }\n target;\n parent;\n refcount;\n getTarget() {\n if (this.target) return this.target;\n else throw new Error("Attempted to use an RPC StubHook after it was disposed.");\n }\n getValue() {\n return {\n value: this.getTarget(),\n owner: null\n };\n }\n dup() {\n return new TargetStubHook2(this.getTarget(), this.parent, this);\n }\n pull() {\n let target = this.getTarget();\n if ("then" in target) return Promise.resolve(target).then((resolution) => {\n return RpcPayload.fromAppReturn(resolution);\n });\n else return Promise.reject(/* @__PURE__ */ new Error("Tried to resolve a non-promise stub."));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n if (this.target) {\n if (this.refcount) {\n if (--this.refcount.count == 0) disposeRpcTarget(this.target);\n }\n this.target = void 0;\n }\n }\n onBroken(callback) {\n let target = this.target;\n if (target && "then" in target) Promise.resolve(target).then(() => {\n }, callback);\n }\n};\nvar PromiseStubHook = class PromiseStubHook2 extends StubHook {\n promise;\n resolution;\n constructor(promise) {\n super();\n this.promise = promise.then((res) => {\n this.resolution = res;\n return res;\n });\n }\n call(path, args) {\n args.ensureDeepCopied();\n return new PromiseStubHook2(this.promise.then((hook) => hook.call(path, args), (err) => {\n args.dispose();\n throw err;\n }));\n }\n stream(path, args) {\n args.ensureDeepCopied();\n return { promise: this.promise.then((hook) => hook.stream(path, args).promise, (err) => {\n args.dispose();\n throw err;\n }) };\n }\n map(path, captures, instructions) {\n return new PromiseStubHook2(this.promise.then((hook) => hook.map(path, captures, instructions), (err) => {\n for (let cap of captures) cap.dispose();\n throw err;\n }));\n }\n get(path) {\n return new PromiseStubHook2(this.promise.then((hook) => hook.get(path)));\n }\n dup() {\n if (this.resolution) return this.resolution.dup();\n else return new PromiseStubHook2(this.promise.then((hook) => hook.dup()));\n }\n pull() {\n if (this.resolution) return this.resolution.pull();\n else return this.promise.then((hook) => hook.pull());\n }\n ignoreUnhandledRejections() {\n if (this.resolution) this.resolution.ignoreUnhandledRejections();\n else this.promise.then((res) => {\n res.ignoreUnhandledRejections();\n }, (err) => {\n });\n }\n dispose() {\n this.promise.then((hook) => hook.dispose(), () => {\n });\n }\n onBroken(callback) {\n if (this.resolution) this.resolution.onBroken(callback);\n else this.promise.then((hook) => {\n hook.onBroken(callback);\n }, callback);\n }\n};\nvar DEFAULT_LIMITS = {\n maxBigIntDigits: 16384,\n maxDepth: 256,\n maxMessageSize: 32 * 1024 * 1024\n};\nvar NATIVE_LITTLE_ENDIAN = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\nvar BYTE_CONTAINER_TYPE_NAMES = [\n "ArrayBuffer",\n "DataView",\n "Int8Array",\n "Uint8Array",\n "Uint8ClampedArray",\n "Int16Array",\n "Uint16Array",\n "Int32Array",\n "Uint32Array",\n "BigInt64Array",\n "BigUint64Array",\n "Float32Array",\n "Float64Array"\n];\nfunction isValidByteContainerName(value) {\n return BYTE_CONTAINER_TYPE_NAMES.includes(value);\n}\nvar TYPED_ARRAY_ELEMENT_SIZE = {\n ArrayBuffer: void 0,\n DataView: void 0,\n Int8Array: void 0,\n Uint8Array: void 0,\n Uint8ClampedArray: void 0,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n BigInt64Array: 8,\n BigUint64Array: 8,\n Float32Array: 4,\n Float64Array: 8\n};\nvar BYTE_CONTAINER_PROTOTYPES = {\n ArrayBuffer: ArrayBuffer.prototype,\n DataView: DataView.prototype,\n Int8Array: Int8Array.prototype,\n Uint8ClampedArray: Uint8ClampedArray.prototype,\n Int16Array: Int16Array.prototype,\n Uint16Array: Uint16Array.prototype,\n Int32Array: Int32Array.prototype,\n Uint32Array: Uint32Array.prototype,\n BigInt64Array: BigInt64Array.prototype,\n BigUint64Array: BigUint64Array.prototype,\n Float32Array: Float32Array.prototype,\n Float64Array: Float64Array.prototype\n};\nvar BYTE_CONTAINER_TYPE_BY_PROTOTYPE = /* @__PURE__ */ new Map();\nfor (let type of Object.keys(BYTE_CONTAINER_PROTOTYPES)) BYTE_CONTAINER_TYPE_BY_PROTOTYPE.set(BYTE_CONTAINER_PROTOTYPES[type], type);\nfunction swapByteOrder(bytes, elementSize) {\n if (elementSize !== 2 && elementSize !== 4 && elementSize !== 8) throw new RangeError(`Unsupported element size: ${elementSize}`);\n let view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let offset = 0; offset < bytes.byteLength; offset += elementSize) switch (elementSize) {\n case 2:\n view.setUint16(offset, view.getUint16(offset, false), true);\n break;\n case 4:\n view.setUint32(offset, view.getUint32(offset, false), true);\n break;\n case 8:\n view.setBigUint64(offset, view.getBigUint64(offset, false), true);\n break;\n }\n}\nvar NullExporter = class {\n exportStub(stub) {\n throw new Error("Cannot serialize RPC stubs without an RPC session.");\n }\n exportPromise(stub) {\n throw new Error("Cannot serialize RPC stubs without an RPC session.");\n }\n getImport(hook) {\n }\n unexport(ids) {\n }\n createPipe(readable) {\n throw new Error("Cannot create pipes without an RPC session.");\n }\n onSendError(error) {\n }\n};\nvar NULL_EXPORTER = new NullExporter();\nasync function streamToBlob(stream, type) {\n let b = await new Response(stream).blob();\n return b.type === type ? b : b.slice(0, b.size, type);\n}\nvar ERROR_TYPES = {\n __proto__: null,\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n AggregateError\n};\nvar Devaluator = class Devaluator2 {\n exporter;\n source;\n encodingLevel;\n constructor(exporter, source, encodingLevel) {\n this.exporter = exporter;\n this.source = source;\n this.encodingLevel = encodingLevel;\n }\n static devaluate(value, parent, exporter = NULL_EXPORTER, source, encodingLevel = "string") {\n let devaluator = new Devaluator2(exporter, source, encodingLevel);\n try {\n return devaluator.devaluateImpl(value, parent, 0);\n } catch (err) {\n if (devaluator.exports) try {\n exporter.unexport(devaluator.exports);\n } catch (err2) {\n }\n throw err;\n }\n }\n exports;\n devaluateImpl(value, parent, depth) {\n if (depth >= 256) throw new Error("Serialization exceeded maximum allowed depth. (Does the message contain cycles?)");\n switch (typeForRpc(value)) {\n case "unsupported": {\n let msg;\n try {\n msg = `Cannot serialize value: ${value}`;\n } catch (err) {\n msg = "Cannot serialize value: (couldn\'t stringify value)";\n }\n throw new TypeError(msg);\n }\n case "primitive":\n if (typeof value === "number" && !isFinite(value)) {\n if (this.encodingLevel === "structuredClonable") return value;\n if (value === Infinity) return ["inf"];\n else if (value === -Infinity) return ["-inf"];\n else return ["nan"];\n } else return value;\n case "object": {\n let object = value;\n let result = {};\n for (let key in object) result[key] = this.devaluateImpl(object[key], object, depth + 1);\n return result;\n }\n case "array": {\n let array = value;\n let len = array.length;\n let result = new Array(len);\n for (let i = 0; i < len; i++) result[i] = this.devaluateImpl(array[i], array, depth + 1);\n return [result];\n }\n case "bigint":\n if (this.encodingLevel === "structuredClonable") return value;\n return ["bigint", value.toString()];\n case "date": {\n if (this.encodingLevel === "structuredClonable") return value;\n const time = value.getTime();\n return ["date", Number.isNaN(time) ? null : time];\n }\n case "bytes": {\n let alternateTypeName = BYTE_CONTAINER_TYPE_BY_PROTOTYPE.get(Object.getPrototypeOf(value));\n let bytes;\n if (alternateTypeName === "ArrayBuffer") bytes = new Uint8Array(value);\n else if (alternateTypeName === void 0) bytes = value;\n else {\n let view = value;\n bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n let elementSize = TYPED_ARRAY_ELEMENT_SIZE[alternateTypeName];\n if (!NATIVE_LITTLE_ENDIAN && elementSize) {\n bytes = bytes.slice();\n swapByteOrder(bytes, elementSize);\n }\n }\n if (this.encodingLevel === "structuredClonable" || this.encodingLevel === "jsonCompatibleWithBytes") return alternateTypeName === void 0 ? ["bytes", bytes] : [\n "bytes",\n bytes,\n alternateTypeName\n ];\n let b64;\n if (bytes.toBase64) b64 = bytes.toBase64({ omitPadding: true });\n else if (typeof Buffer !== "undefined") b64 = (bytes instanceof Buffer ? bytes : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength)).toString("base64");\n else {\n let binary = "";\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);\n b64 = btoa(binary);\n }\n b64 = b64.replace(/=+$/, "");\n return alternateTypeName === void 0 ? ["bytes", b64] : [\n "bytes",\n b64,\n alternateTypeName\n ];\n }\n case "url":\n return ["url", value.href];\n case "headers":\n return ["headers", [...value]];\n case "request": {\n let req = value;\n let init = {};\n if (req.method !== "GET") init.method = req.method;\n let headers = [...req.headers];\n if (headers.length > 0) init.headers = headers;\n if (req.body) {\n init.body = this.devaluateImpl(req.body, req, depth + 1);\n init.duplex = req.duplex || "half";\n } else if (req.body === void 0 && ![\n "GET",\n "HEAD",\n "OPTIONS",\n "TRACE",\n "DELETE"\n ].includes(req.method)) {\n let bodyPromise = req.arrayBuffer();\n let readable = new ReadableStream({ async start(controller) {\n try {\n controller.enqueue(new Uint8Array(await bodyPromise));\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n } });\n let hook = streamImpl.createReadableStreamHook(readable);\n init.body = ["readable", this.exporter.createPipe(readable, hook)];\n init.duplex = req.duplex || "half";\n }\n if (req.cache && req.cache !== "default") init.cache = req.cache;\n if (req.redirect !== "follow") init.redirect = req.redirect;\n if (req.integrity) init.integrity = req.integrity;\n if (req.mode && req.mode !== "cors") init.mode = req.mode;\n if (req.credentials && req.credentials !== "same-origin") init.credentials = req.credentials;\n if (req.referrer && req.referrer !== "about:client") init.referrer = req.referrer;\n if (req.referrerPolicy) init.referrerPolicy = req.referrerPolicy;\n if (req.keepalive) init.keepalive = req.keepalive;\n let cfReq = req;\n if (cfReq.cf) init.cf = cfReq.cf;\n if (cfReq.encodeResponseBody && cfReq.encodeResponseBody !== "automatic") init.encodeResponseBody = cfReq.encodeResponseBody;\n return [\n "request",\n req.url,\n init\n ];\n }\n case "response": {\n let resp = value;\n let body = this.devaluateImpl(resp.body, resp, depth + 1);\n let init = {};\n if (resp.status !== 200) init.status = resp.status;\n if (resp.statusText) init.statusText = resp.statusText;\n let headers = [...resp.headers];\n if (headers.length > 0) init.headers = headers;\n let cfResp = resp;\n if (cfResp.cf) init.cf = cfResp.cf;\n if (cfResp.encodeBody && cfResp.encodeBody !== "automatic") init.encodeBody = cfResp.encodeBody;\n if (cfResp.webSocket) throw new TypeError("Can\'t serialize a Response containing a webSocket.");\n return [\n "response",\n body,\n init\n ];\n }\n case "blob": {\n let blob = value;\n let readable = blob.stream();\n let hook = streamImpl.createReadableStreamHook(readable);\n let importId = this.exporter.createPipe(readable, hook);\n return [\n "blob",\n blob.type,\n ["readable", importId]\n ];\n }\n case "error": {\n let e = value;\n let rewritten = this.exporter.onSendError(e);\n if (rewritten) e = rewritten;\n let anyE = e;\n let props;\n let captureProp = (key, val) => {\n let exportsBefore = this.exports?.length ?? 0;\n try {\n let encoded = this.devaluateImpl(val, e, depth + 1);\n if (!props) props = {};\n props[key] = encoded;\n } catch (err) {\n if (this.exports && this.exports.length > exportsBefore) {\n let tail = this.exports.splice(exportsBefore);\n try {\n this.exporter.unexport(tail);\n } catch (err2) {\n }\n }\n }\n };\n for (let key of Object.keys(e)) {\n if (key === "name" || key === "message" || key === "stack") continue;\n captureProp(key, anyE[key]);\n }\n if ("cause" in e) captureProp("cause", anyE.cause);\n if (e instanceof AggregateError) captureProp("errors", e.errors);\n let result = [\n "error",\n e.name,\n e.message\n ];\n if (props) {\n result.push(rewritten && rewritten.stack ? rewritten.stack : null);\n result.push(props);\n } else if (rewritten && rewritten.stack) result.push(rewritten.stack);\n return result;\n }\n case "undefined":\n if (this.encodingLevel === "structuredClonable") return;\n return ["undefined"];\n case "stub":\n case "rpc-promise": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n let importId = this.exporter.getImport(hook);\n if (importId !== void 0) if (pathIfPromise) if (pathIfPromise.length > 0) return [\n "pipeline",\n importId,\n pathIfPromise\n ];\n else return ["pipeline", importId];\n else return ["import", importId];\n if (pathIfPromise) hook = hook.get(pathIfPromise);\n else hook = hook.dup();\n return this.devaluateHook(pathIfPromise ? "promise" : "export", hook);\n }\n case "function":\n case "rpc-target": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let hook = this.source.getHookForRpcTarget(value, parent);\n return this.devaluateHook("export", hook);\n }\n case "rpc-thenable": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let hook = this.source.getHookForRpcTarget(value, parent);\n return this.devaluateHook("promise", hook);\n }\n case "writable": {\n if (!this.source) throw new Error("Can\'t serialize WritableStream in this context.");\n let hook = this.source.getHookForWritableStream(value, parent);\n return this.devaluateHook("writable", hook);\n }\n case "readable": {\n if (!this.source) throw new Error("Can\'t serialize ReadableStream in this context.");\n let ws = value;\n let hook = this.source.getHookForReadableStream(ws, parent);\n return ["readable", this.exporter.createPipe(ws, hook)];\n }\n default:\n throw new Error("unreachable");\n }\n }\n devaluateHook(type, hook) {\n if (!this.exports) this.exports = [];\n let exportId = type === "promise" ? this.exporter.exportPromise(hook) : this.exporter.exportStub(hook);\n this.exports.push(exportId);\n return [type, exportId];\n }\n};\nvar NullImporter = class {\n importStub(idx) {\n throw new Error("Cannot deserialize RPC stubs without an RPC session.");\n }\n importPromise(idx) {\n throw new Error("Cannot deserialize RPC stubs without an RPC session.");\n }\n getExport(idx) {\n }\n getPipeReadable(exportId) {\n throw new Error("Cannot retrieve pipe readable without an RPC session.");\n }\n getLimits() {\n return DEFAULT_LIMITS;\n }\n};\nvar NULL_IMPORTER = new NullImporter();\nfunction fixBrokenRequestBody(request, body) {\n return new RpcPromise$1(new PromiseStubHook(new Response(body).arrayBuffer().then((arrayBuffer) => {\n let bytes = new Uint8Array(arrayBuffer);\n let result = new Request(request, { body: bytes });\n return new PayloadStubHook(RpcPayload.fromAppReturn(result));\n })), []);\n}\nfunction streamToBlobPromise(stream, type) {\n return new RpcPromise$1(new PromiseStubHook(streamToBlob(stream, type).then((blob) => {\n return new PayloadStubHook(RpcPayload.fromAppReturn(blob));\n })), []);\n}\nvar Evaluator = class Evaluator2 {\n importer;\n encodingLevel;\n limits;\n constructor(importer, encodingLevel = "string") {\n this.importer = importer;\n this.encodingLevel = encodingLevel;\n this.limits = importer.getLimits();\n }\n hooks = [];\n promises = [];\n evaluate(value) {\n return this.evaluateWithDepth(value, 0);\n }\n evaluateWithDepth(value, depth) {\n let payload = RpcPayload.forEvaluate(this.hooks, this.promises);\n try {\n payload.value = this.evaluateImpl(value, payload, "value", depth);\n return payload;\n } catch (err) {\n payload.dispose();\n throw err;\n }\n }\n evaluateCopy(value) {\n return this.evaluate(structuredClone(value));\n }\n evaluateImpl(value, parent, property, depth) {\n let maxDepth = this.limits.maxDepth;\n if (depth >= maxDepth) throw new TypeError(`Deserialization exceeded maximum allowed message depth of ${maxDepth}.`);\n if (this.encodingLevel === "structuredClonable") {\n if (value instanceof Date || typeof value === "bigint") return value;\n }\n if (value instanceof Array) {\n if (value.length == 1 && value[0] instanceof Array) {\n let result = value[0];\n for (let i = 0; i < result.length; i++) result[i] = this.evaluateImpl(result[i], result, i, depth + 1);\n return result;\n } else switch (value[0]) {\n case "bigint":\n if (typeof value[1] == "string") {\n let digits = value[1];\n let maxBigIntDigits = this.limits.maxBigIntDigits;\n if (digits.length > maxBigIntDigits) throw new TypeError(`Deserialized bigint exceeds maximum length of ${maxBigIntDigits} digits.`);\n return BigInt(digits);\n }\n break;\n case "date":\n if (value[1] === null) return /* @__PURE__ */ new Date(NaN);\n if (typeof value[1] == "number") return new Date(value[1]);\n break;\n case "bytes": {\n let bytes;\n if (value[1] instanceof Uint8Array) bytes = value[1];\n else if (typeof value[1] == "string") if (typeof Buffer !== "undefined") bytes = Buffer.from(value[1], "base64");\n else if (Uint8Array.fromBase64) bytes = Uint8Array.fromBase64(value[1]);\n else {\n let bs = atob(value[1]);\n let len = bs.length;\n bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) bytes[i] = bs.charCodeAt(i);\n }\n else break;\n if (value.length === 2) return bytes;\n if (typeof value[2] !== "string") throw new TypeError(`Unknown bytes type marker type: ${typeof value[2]}`);\n if (!isValidByteContainerName(value[2])) {\n let marker2 = value[2].slice(0, 64);\n throw new TypeError(`Unknown bytes type marker: ${marker2}`);\n }\n let marker = value[2];\n let elementSize = TYPED_ARRAY_ELEMENT_SIZE[marker];\n if (elementSize !== void 0 && bytes.byteLength % elementSize !== 0) throw new TypeError(`Invalid byte length ${bytes.byteLength} for ${marker}; expected a multiple of ${elementSize}`);\n let buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\n if (!NATIVE_LITTLE_ENDIAN && elementSize !== void 0) swapByteOrder(new Uint8Array(buffer), elementSize);\n switch (marker) {\n case "ArrayBuffer":\n return buffer;\n case "DataView":\n return new DataView(buffer);\n case "Int8Array":\n return new Int8Array(buffer);\n case "Uint8Array":\n return new Uint8Array(buffer);\n case "Uint8ClampedArray":\n return new Uint8ClampedArray(buffer);\n case "Int16Array":\n return new Int16Array(buffer);\n case "Uint16Array":\n return new Uint16Array(buffer);\n case "Int32Array":\n return new Int32Array(buffer);\n case "Uint32Array":\n return new Uint32Array(buffer);\n case "BigInt64Array":\n return new BigInt64Array(buffer);\n case "BigUint64Array":\n return new BigUint64Array(buffer);\n case "Float32Array":\n return new Float32Array(buffer);\n case "Float64Array":\n return new Float64Array(buffer);\n default:\n }\n }\n case "error":\n if (value.length >= 3 && typeof value[1] === "string" && typeof value[2] === "string") {\n let cls = ERROR_TYPES[value[1]] || Error;\n let result = cls === AggregateError ? new cls([], value[2]) : new cls(value[2]);\n if (typeof value[3] === "string") result.stack = value[3];\n if (value.length >= 5) {\n let props = value[4];\n if (!props || typeof props !== "object" || Array.isArray(props)) break;\n let anyResult = result;\n let propsObj = props;\n for (let key of Object.keys(propsObj)) {\n if (key === "name" || key === "message" || key === "stack") continue;\n if (key in Object.prototype || key === "toJSON") {\n this.evaluateImpl(propsObj[key], result, key, depth + 1);\n continue;\n }\n anyResult[key] = this.evaluateImpl(propsObj[key], result, key, depth + 1);\n }\n }\n return result;\n }\n break;\n case "undefined":\n if (value.length === 1) return;\n break;\n case "inf":\n return Infinity;\n case "-inf":\n return -Infinity;\n case "nan":\n return NaN;\n case "url":\n if (value.length === 2 && typeof value[1] === "string") return new URL(value[1]);\n break;\n case "headers":\n if (value.length === 2 && value[1] instanceof Array) return new Headers(value[1]);\n break;\n case "request": {\n if (value.length !== 3 || typeof value[1] !== "string") break;\n let url = value[1];\n let init = value[2];\n if (typeof init !== "object" || init === null) break;\n if (init.body) {\n init.body = this.evaluateImpl(init.body, init, "body", depth + 1);\n if (init.body === null || typeof init.body === "string" || init.body instanceof Uint8Array || init.body instanceof ReadableStream) {\n } else throw new TypeError("Request body must be of type ReadableStream.");\n }\n if (init.signal) {\n init.signal = this.evaluateImpl(init.signal, init, "signal", depth + 1);\n if (!(init.signal instanceof AbortSignal)) throw new TypeError("Request siganl must be of type AbortSignal.");\n }\n if (init.headers && !(init.headers instanceof Array)) throw new TypeError("Request headers must be serialized as an array of pairs.");\n let result = new Request(url, init);\n if (init.body instanceof ReadableStream && result.body === void 0) {\n let promise = fixBrokenRequestBody(result, init.body);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n } else return result;\n }\n case "response": {\n if (value.length !== 3) break;\n let body = this.evaluateImpl(value[1], parent, property, depth + 1);\n if (body === null || typeof body === "string" || body instanceof Uint8Array || body instanceof ReadableStream) {\n } else throw new TypeError("Response body must be of type ReadableStream.");\n let init = value[2];\n if (typeof init !== "object" || init === null) break;\n if (init.webSocket) throw new TypeError("Can\'t deserialize a Response containing a webSocket.");\n if (init.headers && !(init.headers instanceof Array)) throw new TypeError("Request headers must be serialized as an array of pairs.");\n return new Response(body, init);\n }\n case "blob": {\n if (value.length !== 3 || typeof value[1] !== "string") break;\n let contentType = value[1];\n let content = this.evaluateImpl(value[2], parent, property, depth + 1);\n if (!(content instanceof ReadableStream)) throw new TypeError("Blob content must be serialized as a ReadableStream.");\n let promise = streamToBlobPromise(content, contentType);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n }\n case "import":\n case "pipeline": {\n if (value.length < 2 || value.length > 4) break;\n if (typeof value[1] != "number") break;\n let hook = this.importer.getExport(value[1]);\n if (!hook) throw new Error(`no such entry on exports table: ${value[1]}`);\n let isPromise = value[0] == "pipeline";\n let addStub = (hook2) => {\n if (isPromise) {\n let promise = new RpcPromise$1(hook2, []);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n } else {\n this.hooks.push(hook2);\n return new RpcPromise$1(hook2, []);\n }\n };\n if (value.length == 2) if (isPromise) return addStub(hook.get([]));\n else return addStub(hook.dup());\n let path = value[2];\n if (!(path instanceof Array)) break;\n if (!path.every((part) => {\n return typeof part == "string" || typeof part == "number";\n })) break;\n if (value.length == 3) return addStub(hook.get(path));\n let args = value[3];\n if (!(args instanceof Array)) break;\n args = new Evaluator2(this.importer).evaluateWithDepth([args], depth);\n return addStub(hook.call(path, args));\n }\n case "remap": {\n if (value.length !== 5 || typeof value[1] !== "number" || !(value[2] instanceof Array) || !(value[3] instanceof Array) || !(value[4] instanceof Array)) break;\n let hook = this.importer.getExport(value[1]);\n if (!hook) throw new Error(`no such entry on exports table: ${value[1]}`);\n let path = value[2];\n if (!path.every((part) => {\n return typeof part == "string" || typeof part == "number";\n })) break;\n let captures = value[3].map((cap) => {\n if (!(cap instanceof Array) || cap.length !== 2 || cap[0] !== "import" && cap[0] !== "export" || typeof cap[1] !== "number") throw new TypeError(`unknown map capture: ${JSON.stringify(cap)}`);\n if (cap[0] === "export") return this.importer.importStub(cap[1]);\n else {\n let exp = this.importer.getExport(cap[1]);\n if (!exp) throw new Error(`no such entry on exports table: ${cap[1]}`);\n return exp.dup();\n }\n });\n let instructions = value[4];\n let promise = new RpcPromise$1(hook.map(path, captures, instructions), []);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n }\n case "export":\n case "promise":\n if (typeof value[1] == "number") if (value[0] == "promise") {\n let promise = new RpcPromise$1(this.importer.importPromise(value[1]), []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n } else {\n let hook = this.importer.importStub(value[1]);\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n break;\n case "writable":\n if (typeof value[1] == "number") {\n let hook = this.importer.importStub(value[1]);\n let stream = streamImpl.createWritableStreamFromHook(hook);\n this.hooks.push(hook);\n return stream;\n }\n break;\n case "readable":\n if (typeof value[1] == "number") {\n let stream = this.importer.getPipeReadable(value[1]);\n let hook = streamImpl.createReadableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n break;\n }\n throw new TypeError(`unknown special value: ${JSON.stringify(value)}`);\n } else if (value instanceof Object) {\n let result = value;\n for (let key in result) if (key in Object.prototype || key === "toJSON") {\n this.evaluateImpl(result[key], result, key, depth + 1);\n delete result[key];\n } else result[key] = this.evaluateImpl(result[key], result, key, depth + 1);\n return result;\n } else return value;\n }\n};\nvar ESTIMATED_OBJECT_OVERHEAD = 16;\nvar ESTIMATED_ENTRY_OVERHEAD = 8;\nvar ESTIMATED_BINARY_OVERHEAD = 16;\nvar MAX_ESTIMATE_DEPTH = 64;\nfunction estimateStringSize(value) {\n return 2 + value.length * 3;\n}\nfunction estimateEncodedSize(value, seen, depth = 0) {\n if (depth >= MAX_ESTIMATE_DEPTH) return ESTIMATED_ENTRY_OVERHEAD;\n switch (typeof value) {\n case "string":\n return estimateStringSize(value);\n case "number":\n return 16;\n case "bigint":\n return 16;\n case "boolean":\n return 8;\n case "undefined":\n return 16;\n case "object": {\n if (value === null) return 8;\n if (ArrayBuffer.isView(value)) return ESTIMATED_BINARY_OVERHEAD + value.byteLength;\n if (value instanceof ArrayBuffer) return ESTIMATED_BINARY_OVERHEAD + value.byteLength;\n if (typeof Blob !== "undefined" && value instanceof Blob) return ESTIMATED_BINARY_OVERHEAD + value.size;\n if (value instanceof Date) return 16;\n seen ??= /* @__PURE__ */ new WeakSet();\n if (seen.has(value)) return ESTIMATED_ENTRY_OVERHEAD;\n seen.add(value);\n if (value instanceof Array) {\n let size2 = ESTIMATED_OBJECT_OVERHEAD;\n for (let item of value) size2 += ESTIMATED_ENTRY_OVERHEAD + estimateEncodedSize(item, seen, depth + 1);\n return size2;\n }\n if (value instanceof Error) {\n let size2 = ESTIMATED_OBJECT_OVERHEAD + estimateStringSize(value.name) + estimateStringSize(value.message) + estimateStringSize(value.stack ?? "");\n for (let key of Object.keys(value)) size2 += ESTIMATED_ENTRY_OVERHEAD + estimateStringSize(key) + estimateEncodedSize(value[key], seen, depth + 1);\n return size2;\n }\n let size = ESTIMATED_OBJECT_OVERHEAD;\n for (let key of Object.keys(value)) size += ESTIMATED_ENTRY_OVERHEAD + estimateStringSize(key) + estimateEncodedSize(value[key], seen, depth + 1);\n return size;\n }\n default:\n return 16;\n }\n}\nvar ImportTableEntry = class {\n session;\n importId;\n constructor(session, importId, pulling) {\n this.session = session;\n this.importId = importId;\n if (pulling) this.activePull = Promise.withResolvers();\n }\n localRefcount = 0;\n remoteRefcount = 1;\n activePull;\n resolution;\n onBrokenRegistrations;\n resolve(resolution) {\n if (this.localRefcount == 0) {\n resolution.dispose();\n return;\n }\n this.resolution = resolution;\n this.sendRelease();\n if (this.onBrokenRegistrations) {\n for (let i of this.onBrokenRegistrations) {\n let callback = this.session.onBrokenCallbacks[i];\n let endIndex = this.session.onBrokenCallbacks.length;\n resolution.onBroken(callback);\n if (this.session.onBrokenCallbacks[endIndex] === callback) delete this.session.onBrokenCallbacks[endIndex];\n else delete this.session.onBrokenCallbacks[i];\n }\n this.onBrokenRegistrations = void 0;\n }\n if (this.activePull) {\n this.activePull.resolve();\n this.activePull = void 0;\n }\n }\n async awaitResolution() {\n if (!this.activePull) {\n this.session.sendPull(this.importId);\n this.activePull = Promise.withResolvers();\n }\n await this.activePull.promise;\n return this.resolution.pull();\n }\n dispose() {\n if (this.resolution) this.resolution.dispose();\n else {\n this.abort(/* @__PURE__ */ new Error("RPC was canceled because the RpcPromise was disposed."));\n this.sendRelease();\n }\n }\n abort(error) {\n if (!this.resolution) {\n this.resolution = new ErrorStubHook(error);\n if (this.activePull) {\n this.activePull.reject(error);\n this.activePull = void 0;\n }\n this.onBrokenRegistrations = void 0;\n }\n }\n onBroken(callback) {\n if (this.resolution) this.resolution.onBroken(callback);\n else {\n let index = this.session.onBrokenCallbacks.length;\n this.session.onBrokenCallbacks.push(callback);\n if (!this.onBrokenRegistrations) this.onBrokenRegistrations = [];\n this.onBrokenRegistrations.push(index);\n }\n }\n sendRelease() {\n if (this.remoteRefcount > 0) {\n this.session.sendRelease(this.importId, this.remoteRefcount);\n this.remoteRefcount = 0;\n }\n }\n};\nvar RpcImportHook = class RpcImportHook2 extends StubHook {\n isPromise;\n entry;\n constructor(isPromise, entry) {\n super();\n this.isPromise = isPromise;\n ++entry.localRefcount;\n this.entry = entry;\n }\n collectPath(path) {\n return this;\n }\n getEntry() {\n if (this.entry) return this.entry;\n else throw new Error("This RpcImportHook was already disposed.");\n }\n getEntryTakingOwnership(disposeOwned) {\n try {\n return this.getEntry();\n } catch (err) {\n disposeOwned();\n throw err;\n }\n }\n call(path, args) {\n let entry = this.getEntryTakingOwnership(() => args.dispose());\n if (entry.resolution) return entry.resolution.call(path, args);\n else return entry.session.sendCall(entry.importId, path, args);\n }\n stream(path, args) {\n let entry = this.getEntryTakingOwnership(() => args.dispose());\n if (entry.resolution) return entry.resolution.stream(path, args);\n else return entry.session.sendStream(entry.importId, path, args);\n }\n map(path, captures, instructions) {\n let entry = this.getEntryTakingOwnership(() => {\n for (let cap of captures) cap.dispose();\n });\n if (entry.resolution) return entry.resolution.map(path, captures, instructions);\n else return entry.session.sendMap(entry.importId, path, captures, instructions);\n }\n get(path) {\n let entry = this.getEntry();\n if (entry.resolution) return entry.resolution.get(path);\n else return entry.session.sendCall(entry.importId, path);\n }\n dup() {\n return new RpcImportHook2(false, this.getEntry());\n }\n pull() {\n let entry = this.getEntry();\n if (!this.isPromise) throw new Error("Can\'t pull this hook because it\'s not a promise hook.");\n if (entry.resolution) return entry.resolution.pull();\n return entry.awaitResolution();\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let entry = this.entry;\n this.entry = void 0;\n if (entry) {\n if (--entry.localRefcount === 0) entry.dispose();\n }\n }\n onBroken(callback) {\n if (this.entry) this.entry.onBroken(callback);\n }\n};\nvar RpcMainHook = class extends RpcImportHook {\n session;\n constructor(entry) {\n super(false, entry);\n this.session = entry.session;\n }\n dispose() {\n if (this.session) {\n let session = this.session;\n this.session = void 0;\n session.shutdown();\n }\n }\n};\nvar RpcSessionImpl = class {\n transport;\n options;\n exports = [];\n reverseExports = /* @__PURE__ */ new Map();\n imports = [];\n abortReason;\n cancelReadLoop;\n nextExportId = -1;\n onBatchDone;\n pullCount = 0;\n onBrokenCallbacks = [];\n encodingLevel;\n limits;\n constructor(transport, mainHook, options) {\n this.transport = transport;\n this.options = options;\n let level = "string";\n if ("encodingLevel" in transport) {\n let raw = transport.encodingLevel;\n if (raw !== void 0) {\n if (raw !== "string" && raw !== "jsonCompatible" && raw !== "jsonCompatibleWithBytes" && raw !== "structuredClonable") throw new TypeError(`Unknown transport encodingLevel: ${String(raw)}`);\n level = raw;\n }\n }\n this.encodingLevel = level;\n this.limits = {\n ...DEFAULT_LIMITS,\n ...options.limits\n };\n this.exports.push({\n hook: mainHook,\n refcount: 1\n });\n this.imports.push(new ImportTableEntry(this, 0, false));\n this.readLoop().catch((err) => this.abort(err));\n }\n getMainImport() {\n return new RpcMainHook(this.imports[0]);\n }\n shutdown() {\n this.abort(/* @__PURE__ */ new Error("RPC session was shut down by disposing the main stub"), false);\n }\n exportStub(hook) {\n if (this.abortReason) throw this.abortReason;\n let existingExportId = this.reverseExports.get(hook);\n if (existingExportId !== void 0) {\n ++this.exports[existingExportId].refcount;\n return existingExportId;\n } else {\n let exportId = this.nextExportId--;\n this.exports[exportId] = {\n hook,\n refcount: 1\n };\n this.reverseExports.set(hook, exportId);\n return exportId;\n }\n }\n exportPromise(hook) {\n if (this.abortReason) throw this.abortReason;\n let exportId = this.nextExportId--;\n this.exports[exportId] = {\n hook,\n refcount: 1\n };\n this.reverseExports.set(hook, exportId);\n this.ensureResolvingExport(exportId);\n return exportId;\n }\n unexport(ids) {\n for (let id of ids) this.releaseExport(id, 1);\n }\n releaseExport(exportId, refcount) {\n let entry = this.exports[exportId];\n if (!entry) throw new Error(`no such export ID: ${exportId}`);\n if (entry.refcount < refcount) throw new Error(`refcount would go negative: ${entry.refcount} < ${refcount}`);\n entry.refcount -= refcount;\n if (entry.refcount === 0) {\n delete this.exports[exportId];\n this.reverseExports.delete(entry.hook);\n entry.hook.dispose();\n }\n }\n onSendError(error) {\n if (this.options.onSendError) return this.options.onSendError(error);\n }\n ensureResolvingExport(exportId) {\n let exp = this.exports[exportId];\n if (!exp) throw new Error(`no such export ID: ${exportId}`);\n if (!exp.pull) {\n let resolve = async () => {\n let hook = exp.hook;\n for (; ; ) {\n let payload = await hook.pull();\n if (payload.value instanceof RpcStub$1) {\n let { hook: inner, pathIfPromise } = unwrapStubAndPath(payload.value);\n if (pathIfPromise && pathIfPromise.length == 0) {\n if (this.getImport(hook) === void 0) {\n hook = inner;\n continue;\n }\n }\n }\n return payload;\n }\n };\n let autoRelease = exp.autoRelease;\n ++this.pullCount;\n exp.pull = resolve().then((payload) => {\n let value = Devaluator.devaluate(payload.value, void 0, this, payload, this.encodingLevel);\n this.send([\n "resolve",\n exportId,\n value\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n }, (error) => {\n this.send([\n "reject",\n exportId,\n Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n }).catch((error) => {\n try {\n this.send([\n "reject",\n exportId,\n Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n } catch (error2) {\n this.abort(error2);\n }\n }).finally(() => {\n if (--this.pullCount === 0) {\n if (this.onBatchDone) this.onBatchDone.resolve();\n }\n });\n }\n }\n getImport(hook) {\n if (hook instanceof RpcImportHook && hook.entry && hook.entry.session === this) return hook.entry.importId;\n else return;\n }\n importStub(idx) {\n if (this.abortReason) throw this.abortReason;\n let entry = this.imports[idx];\n if (!entry) {\n entry = new ImportTableEntry(this, idx, false);\n this.imports[idx] = entry;\n }\n return new RpcImportHook(false, entry);\n }\n importPromise(idx) {\n if (this.abortReason) throw this.abortReason;\n if (this.imports[idx]) return new ErrorStubHook(/* @__PURE__ */ new Error("Bug in RPC system: The peer sent a promise reusing an existing export ID."));\n let entry = new ImportTableEntry(this, idx, true);\n this.imports[idx] = entry;\n return new RpcImportHook(true, entry);\n }\n getExport(idx) {\n return this.exports[idx]?.hook;\n }\n getPipeReadable(exportId) {\n let entry = this.exports[exportId];\n if (!entry || !entry.pipeReadable) throw new Error(`Export ${exportId} is not a pipe or its readable end was already consumed.`);\n let readable = entry.pipeReadable;\n entry.pipeReadable = void 0;\n return readable;\n }\n getLimits() {\n return this.limits;\n }\n createPipe(readable, readableHook) {\n if (this.abortReason) throw this.abortReason;\n this.send(["pipe"]);\n let importId = this.imports.length;\n let entry = new ImportTableEntry(this, importId, false);\n this.imports.push(entry);\n let hook = new RpcImportHook(false, entry);\n let writable = streamImpl.createWritableStreamFromHook(hook);\n readable.pipeTo(writable).catch(() => {\n }).finally(() => readableHook.dispose());\n return importId;\n }\n send(msg) {\n if (this.abortReason !== void 0) return 0;\n if (this.encodingLevel === "string") {\n let msgText;\n try {\n msgText = JSON.stringify(msg);\n } catch (err) {\n try {\n this.abort(err);\n } catch (err2) {\n }\n throw err;\n }\n try {\n let sent = this.transport.send(msgText);\n if (sent !== void 0 && typeof sent.catch === "function") sent.catch((err) => this.abort(err, false));\n } catch (err) {\n queueMicrotask(() => this.abort(err, false));\n }\n return msgText.length;\n } else try {\n let size = this.transport.send(msg);\n if (typeof size === "number") return size;\n let thenable = size;\n if (thenable && typeof thenable.then === "function") Promise.resolve(thenable).catch((err) => this.abort(err, false));\n return;\n } catch (err) {\n queueMicrotask(() => this.abort(err, false));\n return;\n }\n }\n sendCall(id, path, args) {\n if (this.abortReason) {\n args?.dispose();\n throw this.abortReason;\n }\n let value = [\n "pipeline",\n id,\n path\n ];\n if (args) {\n let devalue;\n try {\n devalue = Devaluator.devaluate(args.value, void 0, this, args, this.encodingLevel);\n } catch (err) {\n args.dispose();\n throw err;\n }\n value.push(devalue[0]);\n }\n this.send(["push", value]);\n let entry = new ImportTableEntry(this, this.imports.length, false);\n this.imports.push(entry);\n return new RpcImportHook(true, entry);\n }\n sendStream(id, path, args) {\n if (this.abortReason) {\n args.dispose();\n throw this.abortReason;\n }\n let value = [\n "pipeline",\n id,\n path\n ];\n let devalue;\n try {\n devalue = Devaluator.devaluate(args.value, void 0, this, args, this.encodingLevel);\n } catch (err) {\n args.dispose();\n throw err;\n }\n value.push(devalue[0]);\n let msg = ["stream", value];\n let size = this.send(msg);\n if (size === void 0) size = estimateEncodedSize(msg);\n let importId = this.imports.length;\n let entry = new ImportTableEntry(this, importId, true);\n entry.remoteRefcount = 0;\n entry.localRefcount = 1;\n this.imports.push(entry);\n return {\n promise: entry.awaitResolution().then((p) => {\n p.dispose();\n delete this.imports[importId];\n }, (err) => {\n delete this.imports[importId];\n throw err;\n }),\n size\n };\n }\n sendMap(id, path, captures, instructions) {\n if (this.abortReason) {\n for (let cap of captures) cap.dispose();\n throw this.abortReason;\n }\n let value = [\n "remap",\n id,\n path,\n captures.map((hook) => {\n let importId = this.getImport(hook);\n if (importId !== void 0) return ["import", importId];\n else return ["export", this.exportStub(hook)];\n }),\n instructions\n ];\n this.send(["push", value]);\n let entry = new ImportTableEntry(this, this.imports.length, false);\n this.imports.push(entry);\n return new RpcImportHook(true, entry);\n }\n sendPull(id) {\n if (this.abortReason) throw this.abortReason;\n this.send(["pull", id]);\n }\n sendRelease(id, remoteRefcount) {\n if (this.abortReason) return;\n this.send([\n "release",\n id,\n remoteRefcount\n ]);\n delete this.imports[id];\n }\n abort(error, trySendAbortMessage = true) {\n if (this.abortReason !== void 0) return;\n this.cancelReadLoop?.(error);\n this.cancelReadLoop = void 0;\n if (trySendAbortMessage) try {\n let abortMsg = ["abort", Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)];\n if (this.encodingLevel === "string") {\n let sent = this.transport.send(JSON.stringify(abortMsg));\n if (sent !== void 0 && typeof sent.catch === "function") sent.catch((err) => {\n });\n } else {\n let result = this.transport.send(abortMsg);\n if (result && typeof result.then === "function") Promise.resolve(result).catch((err) => {\n });\n }\n } catch (err) {\n }\n if (error === void 0) error = "undefined";\n this.abortReason = error;\n if (this.onBatchDone) this.onBatchDone.reject(error);\n if (this.transport.abort) try {\n this.transport.abort(error);\n } catch (err) {\n Promise.resolve(err);\n }\n for (let i in this.onBrokenCallbacks) try {\n this.onBrokenCallbacks[i](error);\n } catch (err) {\n Promise.resolve(err);\n }\n for (let i in this.imports) this.imports[i].abort(error);\n for (let i in this.exports) this.exports[i].hook.dispose();\n }\n async readLoop() {\n while (!this.abortReason) {\n let readCanceled = Promise.withResolvers();\n this.cancelReadLoop = readCanceled.reject;\n let raw;\n try {\n raw = await Promise.race([this.transport.receive(), readCanceled.promise]);\n } finally {\n if (this.cancelReadLoop === readCanceled.reject) this.cancelReadLoop = void 0;\n }\n if (this.encodingLevel === "string" && raw.length > this.limits.maxMessageSize) throw new TypeError(`Incoming message exceeds maximum size of ${this.limits.maxMessageSize} UTF-16 code units.`);\n if (this.abortReason) break;\n let msg = this.encodingLevel === "string" ? JSON.parse(raw) : raw;\n if (msg instanceof Array) switch (msg[0]) {\n case "push":\n if (msg.length > 1) {\n let hook = new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[1]));\n hook.ignoreUnhandledRejections();\n this.exports.push({\n hook,\n refcount: 1\n });\n continue;\n }\n break;\n case "stream":\n if (msg.length > 1) {\n let hook = new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[1]));\n hook.ignoreUnhandledRejections();\n let exportId = this.exports.length;\n this.exports.push({\n hook,\n refcount: 1,\n autoRelease: true\n });\n this.ensureResolvingExport(exportId);\n continue;\n }\n break;\n case "pipe": {\n let { readable, writable } = new TransformStream();\n let hook = streamImpl.createWritableStreamHook(writable);\n this.exports.push({\n hook,\n refcount: 1,\n pipeReadable: readable\n });\n continue;\n }\n case "pull": {\n let exportId = msg[1];\n if (typeof exportId == "number") {\n this.ensureResolvingExport(exportId);\n continue;\n }\n break;\n }\n case "resolve":\n case "reject": {\n let importId = msg[1];\n if (typeof importId == "number" && msg.length > 2) {\n let imp = this.imports[importId];\n if (imp) if (msg[0] == "resolve") imp.resolve(new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[2])));\n else {\n let payload = new Evaluator(this, this.encodingLevel).evaluate(msg[2]);\n payload.dispose();\n imp.resolve(new ErrorStubHook(payload.value));\n }\n else if (msg[0] == "resolve") new Evaluator(this, this.encodingLevel).evaluate(msg[2]).dispose();\n continue;\n }\n break;\n }\n case "release": {\n let exportId = msg[1];\n let refcount = msg[2];\n if (typeof exportId == "number" && typeof refcount == "number") {\n this.releaseExport(exportId, refcount);\n continue;\n }\n break;\n }\n case "abort": {\n let payload = new Evaluator(this, this.encodingLevel).evaluate(msg[1]);\n payload.dispose();\n this.abort(payload.value, false);\n break;\n }\n }\n throw new Error(`bad RPC message: ${JSON.stringify(msg)}`);\n }\n }\n async drain() {\n if (this.abortReason) throw this.abortReason;\n if (this.pullCount > 0) {\n let { promise, resolve, reject } = Promise.withResolvers();\n this.onBatchDone = {\n resolve,\n reject\n };\n await promise;\n }\n }\n getStats() {\n let result = {\n imports: 0,\n exports: 0\n };\n for (let i in this.imports) ++result.imports;\n for (let i in this.exports) ++result.exports;\n return result;\n }\n};\nvar RpcSession$1 = class {\n #session;\n #mainStub;\n constructor(transport, localMain, options = {}) {\n let mainHook;\n if (localMain) mainHook = new PayloadStubHook(RpcPayload.fromAppReturn(localMain));\n else mainHook = new ErrorStubHook(/* @__PURE__ */ new Error("This connection has no main object."));\n this.#session = new RpcSessionImpl(transport, mainHook, options);\n this.#mainStub = new RpcStub$1(this.#session.getMainImport());\n }\n getRemoteMain() {\n return this.#mainStub;\n }\n getStats() {\n return this.#session.getStats();\n }\n drain() {\n return this.#session.drain();\n }\n};\nfunction newWebSocketRpcSession$1(webSocket, localMain, options) {\n if (typeof webSocket === "string") webSocket = new WebSocket(webSocket);\n return new RpcSession$1(new WebSocketTransport(webSocket), localMain, options).getRemoteMain();\n}\nfunction newWorkersWebSocketRpcResponse(request, localMain, options) {\n if (request.headers.get("Upgrade")?.toLowerCase() !== "websocket") return new Response("This endpoint only accepts WebSocket requests.", { status: 400 });\n let pair = new WebSocketPair();\n let server = pair[0];\n server.accept();\n newWebSocketRpcSession$1(server, localMain, options);\n return new Response(null, {\n status: 101,\n webSocket: pair[1]\n });\n}\nvar WebSocketTransport = class {\n constructor(webSocket) {\n this.#webSocket = webSocket;\n webSocket.binaryType = "arraybuffer";\n if (webSocket.readyState === WebSocket.CONNECTING) {\n this.#sendQueue = [];\n webSocket.addEventListener("open", (event) => {\n try {\n for (let message of this.#sendQueue) webSocket.send(message);\n } catch (err) {\n this.#receivedError(err);\n }\n this.#sendQueue = void 0;\n });\n }\n webSocket.addEventListener("message", (event) => {\n if (this.#error) {\n } else if (typeof event.data === "string" || event.data instanceof ArrayBuffer) if (this.#receiveResolver) {\n this.#receiveResolver(event.data);\n this.#receiveResolver = void 0;\n this.#receiveRejecter = void 0;\n } else this.#receiveQueue.push(event.data);\n else this.#receivedError(/* @__PURE__ */ new TypeError("Received unexpected message type from WebSocket."));\n });\n webSocket.addEventListener("close", (event) => {\n this.#receivedError(/* @__PURE__ */ new Error(`Peer closed WebSocket: ${event.code} ${event.reason}`));\n });\n webSocket.addEventListener("error", (event) => {\n this.#receivedError(/* @__PURE__ */ new Error(`WebSocket connection failed.`));\n });\n }\n #webSocket;\n #sendQueue;\n #receiveResolver;\n #receiveRejecter;\n #receiveQueue = [];\n #error;\n send(message) {\n if (this.#sendQueue === void 0) this.#webSocket.send(message);\n else this.#sendQueue.push(message);\n }\n receive() {\n if (this.#receiveQueue.length > 0) return Promise.resolve(this.#receiveQueue.shift());\n else if (this.#error) return Promise.reject(this.#error);\n else return new Promise((resolve, reject) => {\n this.#receiveResolver = resolve;\n this.#receiveRejecter = reject;\n });\n }\n abort(reason) {\n let message;\n if (reason instanceof Error) message = reason.message;\n else message = `${reason}`;\n let reasonBytes = new TextEncoder().encode(message);\n if (reasonBytes.length > 123) message = new TextDecoder().decode(reasonBytes.subarray(0, 123), { stream: true });\n this.#webSocket.close(3e3, message);\n if (!this.#error) this.#error = reason;\n }\n #receivedError(reason) {\n if (!this.#error) {\n this.#error = reason;\n if (this.#receiveRejecter) {\n this.#receiveRejecter(reason);\n this.#receiveResolver = void 0;\n this.#receiveRejecter = void 0;\n }\n }\n }\n};\nvar BatchServerTransport = class {\n constructor(batch) {\n this.#batchToReceive = batch;\n }\n #batchToSend = [];\n #batchToReceive;\n #allReceived = Promise.withResolvers();\n send(message) {\n this.#batchToSend.push(message);\n }\n async receive() {\n let msg = this.#batchToReceive.shift();\n if (msg !== void 0) return msg;\n else {\n this.#allReceived.resolve();\n return new Promise((r) => {\n });\n }\n }\n abort(reason) {\n this.#allReceived.reject(reason);\n }\n whenAllReceived() {\n return this.#allReceived.promise;\n }\n getResponseBody() {\n return this.#batchToSend.join("\\n");\n }\n};\nasync function newHttpBatchRpcResponse(request, localMain, options) {\n if (request.method !== "POST") return new Response("This endpoint only accepts POST requests.", { status: 405 });\n let body = await request.text();\n let transport = new BatchServerTransport(body === "" ? [] : body.split("\\n"));\n let rpc = new RpcSession$1(transport, localMain, options);\n await transport.whenAllReceived();\n await rpc.drain();\n return new Response(transport.getResponseBody());\n}\nvar currentMapBuilder;\nvar MapBuilder = class {\n context;\n captureMap = /* @__PURE__ */ new Map();\n instructions = [];\n constructor(subject, path) {\n if (currentMapBuilder) this.context = {\n parent: currentMapBuilder,\n captures: [],\n subject: currentMapBuilder.capture(subject),\n path\n };\n else this.context = {\n parent: void 0,\n captures: [],\n subject,\n path\n };\n currentMapBuilder = this;\n }\n unregister() {\n currentMapBuilder = this.context.parent;\n }\n makeInput() {\n return new MapVariableHook(this, 0);\n }\n makeOutput(result) {\n let devalued;\n try {\n devalued = Devaluator.devaluate(result.value, void 0, this, result);\n } finally {\n result.dispose();\n }\n this.instructions.push(devalued);\n if (this.context.parent) {\n this.context.parent.instructions.push([\n "remap",\n this.context.subject,\n this.context.path,\n this.context.captures.map((cap) => ["import", cap]),\n this.instructions\n ]);\n return new MapVariableHook(this.context.parent, this.context.parent.instructions.length);\n } else return this.context.subject.map(this.context.path, this.context.captures, this.instructions);\n }\n pushCall(hook, path, params) {\n let devalued = Devaluator.devaluate(params.value, void 0, this, params);\n devalued = devalued[0];\n let subject = this.capture(hook.dup());\n this.instructions.push([\n "pipeline",\n subject,\n path,\n devalued\n ]);\n return new MapVariableHook(this, this.instructions.length);\n }\n pushGet(hook, path) {\n let subject = this.capture(hook.dup());\n this.instructions.push([\n "pipeline",\n subject,\n path\n ]);\n return new MapVariableHook(this, this.instructions.length);\n }\n capture(hook) {\n if (hook instanceof MapVariableHook && hook.mapper === this) return hook.idx;\n let result = this.captureMap.get(hook);\n if (result === void 0) {\n if (this.context.parent) {\n let parentIdx = this.context.parent.capture(hook);\n this.context.captures.push(parentIdx);\n } else this.context.captures.push(hook);\n result = -this.context.captures.length;\n this.captureMap.set(hook, result);\n }\n return result;\n }\n exportStub(hook) {\n throw new Error("Can\'t construct an RpcTarget or RPC callback inside a mapper function. Try creating a new RpcStub outside the callback first, then using it inside the callback.");\n }\n exportPromise(hook) {\n return this.exportStub(hook);\n }\n getImport(hook) {\n return this.capture(hook);\n }\n unexport(ids) {\n }\n createPipe(readable) {\n throw new Error("Cannot send ReadableStream inside a mapper function.");\n }\n onSendError(error) {\n }\n};\nmapImpl.sendMap = (hook, path, func) => {\n let builder = new MapBuilder(hook, path);\n let result;\n try {\n result = RpcPayload.fromAppReturn(withCallInterceptor(builder.pushCall.bind(builder), () => {\n return func(new RpcPromise$1(builder.makeInput(), []));\n }));\n } finally {\n builder.unregister();\n }\n if (result instanceof Promise) {\n result.catch((err) => {\n });\n throw new Error("RPC map() callbacks cannot be async.");\n }\n return new RpcPromise$1(builder.makeOutput(result), []);\n};\nfunction throwMapperBuilderUseError() {\n throw new Error("Attempted to use an abstract placeholder from a mapper function. Please make sure your map function has no side effects.");\n}\nvar MapVariableHook = class extends StubHook {\n mapper;\n idx;\n constructor(mapper, idx) {\n super();\n this.mapper = mapper;\n this.idx = idx;\n }\n dup() {\n return this;\n }\n dispose() {\n }\n get(path) {\n if (path.length == 0) return this;\n else if (currentMapBuilder) return currentMapBuilder.pushGet(this, path);\n else throwMapperBuilderUseError();\n }\n call(path, args) {\n args.dispose();\n throwMapperBuilderUseError();\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n throwMapperBuilderUseError();\n }\n pull() {\n throwMapperBuilderUseError();\n }\n ignoreUnhandledRejections() {\n }\n onBroken(callback) {\n throwMapperBuilderUseError();\n }\n};\nvar MapApplicator = class {\n captures;\n variables;\n constructor(captures, input) {\n this.captures = captures;\n this.variables = [input];\n }\n dispose() {\n for (let variable of this.variables) variable.dispose();\n }\n apply(instructions) {\n try {\n if (instructions.length < 1) throw new Error("Invalid empty mapper function.");\n for (let instruction of instructions.slice(0, -1)) {\n let payload = new Evaluator(this).evaluateCopy(instruction);\n if (payload.value instanceof RpcStub$1) {\n let hook = unwrapStubNoProperties(payload.value);\n if (hook) {\n this.variables.push(hook);\n continue;\n }\n }\n this.variables.push(new PayloadStubHook(payload));\n }\n return new Evaluator(this).evaluateCopy(instructions[instructions.length - 1]);\n } finally {\n for (let variable of this.variables) variable.dispose();\n }\n }\n importStub(idx) {\n throw new Error("A mapper function cannot refer to exports.");\n }\n importPromise(idx) {\n return this.importStub(idx);\n }\n getExport(idx) {\n if (idx < 0) return this.captures[-idx - 1];\n else return this.variables[idx];\n }\n getPipeReadable(exportId) {\n throw new Error("A mapper function cannot use pipe readables.");\n }\n getLimits() {\n return DEFAULT_LIMITS;\n }\n};\nfunction applyMapToElement(input, parent, owner, captures, instructions) {\n let mapper = new MapApplicator(captures, new PayloadStubHook(RpcPayload.deepCopyFrom(input, parent, owner)));\n try {\n return mapper.apply(instructions);\n } finally {\n mapper.dispose();\n }\n}\nmapImpl.applyMap = (input, parent, owner, captures, instructions) => {\n try {\n let result;\n if (input instanceof RpcPromise$1) throw new Error("applyMap() can\'t be called on RpcPromise");\n else if (input instanceof Array) {\n let payloads = [];\n try {\n for (let elem of input) payloads.push(applyMapToElement(elem, input, owner, captures, instructions));\n } catch (err) {\n for (let payload of payloads) payload.dispose();\n throw err;\n }\n result = RpcPayload.fromArray(payloads);\n } else if (input === null || input === void 0) result = RpcPayload.fromAppReturn(input);\n else result = applyMapToElement(input, parent, owner, captures, instructions);\n return new PayloadStubHook(result);\n } finally {\n for (let cap of captures) cap.dispose();\n }\n};\nvar WritableStreamStubHook = class WritableStreamStubHook2 extends StubHook {\n state;\n static create(stream) {\n return new WritableStreamStubHook2({\n refcount: 1,\n writer: stream.getWriter(),\n closed: false\n });\n }\n constructor(state, dupFrom) {\n super();\n this.state = state;\n if (dupFrom) ++state.refcount;\n }\n getState() {\n if (this.state) return this.state;\n else throw new Error("Attempted to use a WritableStreamStubHook after it was disposed.");\n }\n call(path, args) {\n try {\n let state = this.getState();\n if (path.length !== 1 || typeof path[0] !== "string") throw new Error("WritableStream stub only supports direct method calls");\n const method = path[0];\n if (method !== "write" && method !== "close" && method !== "abort") throw new Error(`Unknown WritableStream method: ${method}`);\n if (method === "close" || method === "abort") state.closed = true;\n return new PromiseStubHook((method === "write" ? args.deliverStreamWrite(state.writer) : args.deliverCall(state.writer[method], state.writer)).then((payload) => new PayloadStubHook(payload)));\n } catch (err) {\n args.dispose();\n return new ErrorStubHook(err);\n }\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot use map() on a WritableStream"));\n }\n get(path) {\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot access properties on a WritableStream stub"));\n }\n dup() {\n return new WritableStreamStubHook2(this.getState(), this);\n }\n pull() {\n return Promise.reject(/* @__PURE__ */ new Error("Cannot pull a WritableStream stub"));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let state = this.state;\n this.state = void 0;\n if (state) {\n if (--state.refcount === 0) {\n if (!state.closed) state.writer.abort(/* @__PURE__ */ new Error("WritableStream RPC stub was disposed without calling close()")).catch(() => {\n });\n state.writer.releaseLock();\n }\n }\n }\n onBroken(callback) {\n }\n};\nvar INITIAL_WINDOW = 256 * 1024;\nvar MAX_WINDOW = 1024 * 1024 * 1024;\nvar MIN_WINDOW = 64 * 1024;\nvar STARTUP_GROWTH_FACTOR = 2;\nvar STEADY_GROWTH_FACTOR = 1.25;\nvar DECAY_FACTOR = 0.9;\nvar STARTUP_EXIT_ROUNDS = 3;\nvar FlowController = class {\n now;\n window = INITIAL_WINDOW;\n bytesInFlight = 0;\n inStartupPhase = true;\n delivered = 0;\n deliveredTime = 0;\n firstAckTime = 0;\n firstAckDelivered = 0;\n minRtt = Infinity;\n roundsWithoutIncrease = 0;\n lastRoundWindow = 0;\n roundStartTime = 0;\n constructor(now) {\n this.now = now;\n }\n onSend(size) {\n this.bytesInFlight += size;\n let token = {\n sentTime: this.now(),\n size,\n deliveredAtSend: this.delivered,\n deliveredTimeAtSend: this.deliveredTime,\n windowAtSend: this.window,\n windowFullAtSend: this.bytesInFlight >= this.window\n };\n return {\n token,\n shouldBlock: token.windowFullAtSend\n };\n }\n onError(token) {\n this.bytesInFlight -= token.size;\n }\n onAck(token) {\n let ackTime = this.now();\n this.delivered += token.size;\n this.deliveredTime = ackTime;\n this.bytesInFlight -= token.size;\n let rtt = ackTime - token.sentTime;\n this.minRtt = Math.min(this.minRtt, rtt);\n if (this.firstAckTime === 0) {\n this.firstAckTime = ackTime;\n this.firstAckDelivered = this.delivered;\n } else {\n let baseTime;\n let baseDelivered;\n if (token.deliveredTimeAtSend === 0) {\n baseTime = this.firstAckTime;\n baseDelivered = this.firstAckDelivered;\n } else {\n baseTime = token.deliveredTimeAtSend;\n baseDelivered = token.deliveredAtSend;\n }\n let interval = ackTime - baseTime;\n let bandwidth = (this.delivered - baseDelivered) / interval;\n let growthFactor = this.inStartupPhase ? STARTUP_GROWTH_FACTOR : STEADY_GROWTH_FACTOR;\n let newWindow = bandwidth * this.minRtt * growthFactor;\n newWindow = Math.min(newWindow, token.windowAtSend * growthFactor);\n if (token.windowFullAtSend) newWindow = Math.max(newWindow, token.windowAtSend * DECAY_FACTOR);\n else newWindow = Math.max(newWindow, this.window);\n this.window = Math.max(Math.min(newWindow, MAX_WINDOW), MIN_WINDOW);\n if (this.inStartupPhase && token.sentTime >= this.roundStartTime) {\n if (this.window > this.lastRoundWindow * STEADY_GROWTH_FACTOR) this.roundsWithoutIncrease = 0;\n else if (++this.roundsWithoutIncrease >= STARTUP_EXIT_ROUNDS) this.inStartupPhase = false;\n this.roundStartTime = ackTime;\n this.lastRoundWindow = this.window;\n }\n }\n return this.bytesInFlight < this.window;\n }\n};\nfunction createWritableStreamFromHook(hook) {\n let pendingError = void 0;\n let hookDisposed = false;\n let fc = new FlowController(() => performance.now());\n let windowResolve;\n let windowReject;\n const disposeHook = () => {\n if (!hookDisposed) {\n hookDisposed = true;\n hook.dispose();\n }\n };\n return new WritableStream({\n write(chunk, controller) {\n if (pendingError !== void 0) throw pendingError;\n const payload = RpcPayload.fromAppParams([chunk]);\n const { promise, size } = hook.stream(["write"], payload);\n if (size === void 0) return promise.catch((err) => {\n if (pendingError === void 0) pendingError = err;\n throw err;\n });\n else {\n let { token, shouldBlock } = fc.onSend(size);\n promise.then(() => {\n if (fc.onAck(token) && windowResolve) {\n windowResolve();\n windowResolve = void 0;\n windowReject = void 0;\n }\n }, (err) => {\n fc.onError(token);\n if (pendingError === void 0) {\n pendingError = err;\n controller.error(err);\n disposeHook();\n }\n if (windowReject) {\n windowReject(err);\n windowResolve = void 0;\n windowReject = void 0;\n }\n });\n if (shouldBlock) return new Promise((resolve, reject) => {\n windowResolve = resolve;\n windowReject = reject;\n });\n }\n },\n async close() {\n if (pendingError !== void 0) {\n disposeHook();\n throw pendingError;\n }\n const { promise } = hook.stream(["close"], RpcPayload.fromAppParams([]));\n try {\n await promise;\n } catch (err) {\n throw pendingError ?? err;\n } finally {\n disposeHook();\n }\n },\n abort(reason) {\n if (pendingError !== void 0) return;\n pendingError = reason ?? /* @__PURE__ */ new Error("WritableStream was aborted");\n if (windowReject) {\n windowReject(pendingError);\n windowResolve = void 0;\n windowReject = void 0;\n }\n const { promise } = hook.stream(["abort"], RpcPayload.fromAppParams([reason]));\n promise.then(() => disposeHook(), () => disposeHook());\n }\n });\n}\nvar ReadableStreamStubHook = class ReadableStreamStubHook2 extends StubHook {\n state;\n static create(stream) {\n return new ReadableStreamStubHook2({\n refcount: 1,\n stream,\n canceled: false\n });\n }\n constructor(state, dupFrom) {\n super();\n this.state = state;\n if (dupFrom) ++state.refcount;\n }\n call(path, args) {\n args.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot call methods on a ReadableStream stub"));\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot use map() on a ReadableStream"));\n }\n get(path) {\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot access properties on a ReadableStream stub"));\n }\n dup() {\n let state = this.state;\n if (!state) throw new Error("Attempted to dup a ReadableStreamStubHook after it was disposed.");\n return new ReadableStreamStubHook2(state, this);\n }\n pull() {\n return Promise.reject(/* @__PURE__ */ new Error("Cannot pull a ReadableStream stub"));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let state = this.state;\n this.state = void 0;\n if (state) {\n if (--state.refcount === 0) {\n if (!state.canceled) {\n state.canceled = true;\n if (!state.stream.locked) state.stream.cancel(/* @__PURE__ */ new Error("ReadableStream RPC stub was disposed without being consumed")).catch(() => {\n });\n }\n }\n }\n }\n onBroken(callback) {\n }\n};\nstreamImpl.createWritableStreamHook = WritableStreamStubHook.create;\nstreamImpl.createWritableStreamFromHook = createWritableStreamFromHook;\nstreamImpl.createReadableStreamHook = ReadableStreamStubHook.create;\nasync function newWorkersRpcResponse(request, localMain, options) {\n if (request.method === "POST") {\n let response = await newHttpBatchRpcResponse(request, localMain, options);\n response.headers.set("Access-Control-Allow-Origin", "*");\n return response;\n } else if (request.headers.get("Upgrade")?.toLowerCase() === "websocket") return newWorkersWebSocketRpcResponse(request, localMain, options);\n else return new Response("This endpoint only accepts POST or WebSocket requests.", { status: 400 });\n}\n\n// templates/remoteBindings/ProxyServerWorker.ts\nimport { EmailMessage } from "cloudflare:email";\nvar BindingNotFoundError = class extends Error {\n constructor(name) {\n super(`Binding ${name ? `"${name}"` : ""} not found`);\n }\n};\nfunction getExposedJSRPCBinding(request, env) {\n const url = new URL(request.url);\n const bindingName = url.searchParams.get("MF-Binding");\n if (!bindingName) {\n throw new BindingNotFoundError();\n }\n const targetBinding = env[bindingName];\n if (!targetBinding) {\n throw new BindingNotFoundError(bindingName);\n }\n if (targetBinding.constructor.name === "Hyperdrive") {\n const hyperdrive = targetBinding;\n return {\n getConnectionString() {\n return hyperdrive.connectionString;\n },\n connect() {\n const socket = hyperdrive.connect();\n return { readable: socket.readable, writable: socket.writable };\n }\n };\n }\n if (targetBinding.constructor.name === "SendEmail") {\n return {\n async send(e) {\n if ("EmailMessage::raw" in e) {\n const message = new EmailMessage(\n e.from,\n e.to,\n e["EmailMessage::raw"]\n );\n return targetBinding.send(message);\n } else {\n return targetBinding.send(e);\n }\n }\n };\n }\n const dispatchNamespaceOptions = url.searchParams.get(\n "MF-Dispatch-Namespace-Options"\n );\n if (dispatchNamespaceOptions) {\n const { name, args, options } = JSON.parse(dispatchNamespaceOptions);\n return targetBinding.get(name, args, options);\n }\n return targetBinding;\n}\nfunction getExposedFetcher(request, env) {\n const bindingName = request.headers.get("MF-Binding");\n if (!bindingName) {\n throw new BindingNotFoundError();\n }\n const targetBinding = env[bindingName];\n if (!targetBinding) {\n throw new BindingNotFoundError(bindingName);\n }\n const dispatchNamespaceOptions = request.headers.get(\n "MF-Dispatch-Namespace-Options"\n );\n if (dispatchNamespaceOptions) {\n const { name, args, options } = JSON.parse(dispatchNamespaceOptions);\n return targetBinding.get(name, args, options);\n }\n return targetBinding;\n}\nfunction isJSRPCBinding(request) {\n const url = new URL(request.url);\n return request.headers.has("Upgrade") && url.searchParams.has("MF-Binding");\n}\nfunction isConnectBinding(request) {\n return request.headers.get("Upgrade") === "websocket" && request.headers.has("MF-Connect-Address");\n}\nfunction handleConnect(request, env) {\n const address = request.headers.get("MF-Connect-Address");\n if (address === null) {\n return new Response("Missing MF-Connect-Address header", { status: 400 });\n }\n const fetcher = getExposedFetcher(request, env);\n const { 0: client, 1: server } = new WebSocketPair();\n server.accept();\n const socket = fetcher.connect(address);\n pipeSocketOverWebSocket(socket, server).catch(() => {\n });\n return new Response(null, { status: 101, webSocket: client });\n}\nfunction truncateCloseReason(reason) {\n const bytes = new TextEncoder().encode(reason);\n if (bytes.length <= 123) {\n return reason;\n }\n let end = 123;\n while (end > 0 && ((bytes[end] ?? 0) & 192) === 128) {\n end--;\n }\n return new TextDecoder().decode(bytes.subarray(0, end));\n}\nasync function pipeSocketOverWebSocket(socket, ws) {\n const writer = socket.writable.getWriter();\n const reader = socket.readable.getReader();\n let wsClosed = false;\n function closeWebSocket(code, reason) {\n if (wsClosed) {\n return;\n }\n wsClosed = true;\n try {\n ws.close(\n code,\n reason === void 0 ? void 0 : truncateCloseReason(reason)\n );\n } catch {\n }\n }\n let writeChain = Promise.resolve();\n let writerClosed = false;\n function closeWriter() {\n if (writerClosed) {\n return Promise.resolve();\n }\n writerClosed = true;\n return writeChain.then(() => writer.close());\n }\n let resolveFromWs;\n let rejectFromWs;\n const fromWebSocket = new Promise((resolve, reject) => {\n resolveFromWs = resolve;\n rejectFromWs = reject;\n });\n ws.addEventListener("message", (event) => {\n const chunk = typeof event.data === "string" ? new TextEncoder().encode(event.data) : new Uint8Array(event.data);\n writeChain = writeChain.then(() => writer.write(chunk)).catch((error) => {\n closeWebSocket(\n 1011,\n error?.message ?? "socket write failed"\n );\n reader.cancel().catch(() => {\n });\n rejectFromWs(error);\n });\n });\n ws.addEventListener("close", (event) => {\n wsClosed = true;\n reader.cancel().catch(() => {\n });\n if (event.code === 1011) {\n rejectFromWs(\n new Error(event.reason || "Remote tunnel closed with an error")\n );\n return;\n }\n closeWriter().then(resolveFromWs, rejectFromWs);\n });\n ws.addEventListener("error", () => {\n wsClosed = true;\n reader.cancel().catch(() => {\n });\n rejectFromWs(new Error("Tunnel WebSocket errored"));\n });\n const toWebSocket = (async () => {\n try {\n for (; ; ) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (wsClosed) {\n break;\n }\n ws.send(\n value.buffer.slice(\n value.byteOffset,\n value.byteOffset + value.byteLength\n )\n );\n }\n closeWebSocket(1e3);\n } catch (error) {\n closeWebSocket(1011, error?.message ?? "socket read failed");\n throw error;\n } finally {\n reader.releaseLock();\n closeWriter().then(resolveFromWs, rejectFromWs);\n }\n })();\n await Promise.all([toWebSocket, fromWebSocket]);\n}\nvar ProxyServerWorker_default = {\n async fetch(request, env) {\n try {\n if (isConnectBinding(request)) {\n return handleConnect(request, env);\n } else if (isJSRPCBinding(request)) {\n return await newWorkersRpcResponse(\n request,\n getExposedJSRPCBinding(request, env)\n );\n } else {\n const fetcher = getExposedFetcher(request, env);\n const originalHeaders = new Headers();\n for (const [name, value] of request.headers) {\n if (name.startsWith("mf-header-")) {\n originalHeaders.set(name.slice("mf-header-".length), value);\n } else if (name === "upgrade") {\n originalHeaders.set(name, value);\n }\n }\n return await fetcher.fetch(\n request.headers.get("MF-URL") ?? "http://example.com",\n new Request(request, {\n redirect: "manual",\n headers: originalHeaders\n })\n );\n }\n } catch (e) {\n if (e instanceof BindingNotFoundError) {\n return new Response(e.message, { status: 400 });\n }\n return new Response(e.message, { status: 500 });\n }\n }\n};\nexport {\n ProxyServerWorker_default as default\n};\n';
186969
+ ProxyServerWorker_default = '// ../../node_modules/.pnpm/capnweb@0.12.0/node_modules/capnweb/dist/index-workers.js\nimport * as cfw from "cloudflare:workers";\nvar WORKERS_MODULE_SYMBOL = /* @__PURE__ */ Symbol("workers-module");\nglobalThis[WORKERS_MODULE_SYMBOL] = cfw;\nif (!Symbol.dispose) Symbol.dispose = /* @__PURE__ */ Symbol.for("dispose");\nif (!Symbol.asyncDispose) Symbol.asyncDispose = /* @__PURE__ */ Symbol.for("asyncDispose");\nif (!Promise.withResolvers) Promise.withResolvers = function() {\n let resolve;\n let reject;\n return {\n promise: new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n }),\n resolve,\n reject\n };\n};\nvar workersModule = globalThis[WORKERS_MODULE_SYMBOL];\nvar RpcTarget$1 = workersModule ? workersModule.RpcTarget : class {\n};\nvar AsyncFunction = (async function() {\n}).constructor;\nvar BUFFER_PROTOTYPE = typeof Buffer !== "undefined" ? Buffer.prototype : void 0;\nfunction typeForRpc(value) {\n switch (typeof value) {\n case "boolean":\n case "number":\n case "string":\n return "primitive";\n case "undefined":\n return "undefined";\n case "object":\n case "function":\n break;\n case "bigint":\n return "bigint";\n default:\n return "unsupported";\n }\n if (value === null) return "primitive";\n let prototype = Object.getPrototypeOf(value);\n switch (prototype) {\n case Object.prototype:\n return "object";\n case Function.prototype:\n case AsyncFunction.prototype:\n return "function";\n case Array.prototype:\n return "array";\n case Date.prototype:\n return "date";\n case Uint8Array.prototype:\n case BUFFER_PROTOTYPE:\n case ArrayBuffer.prototype:\n case DataView.prototype:\n case Int8Array.prototype:\n case Uint8ClampedArray.prototype:\n case Int16Array.prototype:\n case Uint16Array.prototype:\n case Int32Array.prototype:\n case Uint32Array.prototype:\n case BigInt64Array.prototype:\n case BigUint64Array.prototype:\n case Float32Array.prototype:\n case Float64Array.prototype:\n return "bytes";\n case WritableStream.prototype:\n return "writable";\n case ReadableStream.prototype:\n return "readable";\n case URL.prototype:\n return "url";\n case Headers.prototype:\n return "headers";\n case Request.prototype:\n return "request";\n case Response.prototype:\n return "response";\n case Blob.prototype:\n return "blob";\n case RpcStub$1.prototype:\n return "stub";\n case RpcPromise$1.prototype:\n return "rpc-promise";\n default:\n if (workersModule) {\n if (prototype == workersModule.RpcStub.prototype || value instanceof workersModule.ServiceStub) return "rpc-target";\n else if (prototype == workersModule.RpcPromise.prototype || prototype == workersModule.RpcProperty.prototype) return "rpc-thenable";\n }\n if (value instanceof RpcTarget$1) return "rpc-target";\n if (value instanceof Error) return "error";\n return "unsupported";\n }\n}\nfunction mapNotLoaded() {\n throw new Error("RPC map() implementation was not loaded.");\n}\nvar mapImpl = {\n applyMap: mapNotLoaded,\n sendMap: mapNotLoaded\n};\nfunction streamNotLoaded() {\n throw new Error("Stream implementation was not loaded.");\n}\nvar streamImpl = {\n createWritableStreamHook: streamNotLoaded,\n createWritableStreamFromHook: streamNotLoaded,\n createReadableStreamHook: streamNotLoaded\n};\nvar StubHook = class {\n stream(path, args) {\n let hook = this.call(path, args);\n let pulled;\n try {\n pulled = hook.pull();\n } catch (err) {\n hook.dispose();\n throw err;\n }\n let promise;\n if (pulled instanceof Promise) promise = pulled.then((p) => {\n p.dispose();\n });\n else {\n pulled.dispose();\n promise = Promise.resolve();\n }\n return { promise };\n }\n};\nvar ErrorStubHook = class extends StubHook {\n error;\n constructor(error) {\n super();\n this.error = error;\n }\n call(path, args) {\n args.dispose();\n return this;\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return this;\n }\n get(path) {\n return this;\n }\n dup() {\n return this;\n }\n pull() {\n return Promise.reject(this.error);\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n }\n onBroken(callback) {\n try {\n callback(this.error);\n } catch (err) {\n Promise.resolve(err);\n }\n }\n};\nvar DISPOSED_HOOK = new ErrorStubHook(/* @__PURE__ */ new Error("Attempted to use RPC stub after it has been disposed."));\nvar doCall = (hook, path, params) => {\n return hook.call(path, params);\n};\nfunction withCallInterceptor(interceptor, callback) {\n let oldValue = doCall;\n doCall = interceptor;\n try {\n return callback();\n } finally {\n doCall = oldValue;\n }\n}\nvar RAW_STUB = /* @__PURE__ */ Symbol("realStub");\nvar PROXY_HANDLERS = {\n apply(target, thisArg, argumentsList) {\n let stub = target.raw;\n return new RpcPromise$1(doCall(stub.hook, stub.pathIfPromise || [], RpcPayload.fromAppParams(argumentsList)), []);\n },\n get(target, prop, receiver) {\n let stub = target.raw;\n if (prop === RAW_STUB) return stub;\n else if (prop in RpcPromise$1.prototype) return stub[prop];\n else if (typeof prop === "string") return new RpcPromise$1(stub.hook, stub.pathIfPromise ? [...stub.pathIfPromise, prop] : [prop]);\n else if (prop === Symbol.dispose && (!stub.pathIfPromise || stub.pathIfPromise.length == 0)) return () => {\n stub.hook.dispose();\n stub.hook = DISPOSED_HOOK;\n };\n else return;\n },\n has(target, prop) {\n let stub = target.raw;\n if (prop === RAW_STUB) return true;\n else if (prop in RpcPromise$1.prototype) return prop in stub;\n else if (typeof prop === "string") return true;\n else if (prop === Symbol.dispose && (!stub.pathIfPromise || stub.pathIfPromise.length == 0)) return true;\n else return false;\n },\n construct(target, args) {\n throw new Error("An RPC stub cannot be used as a constructor.");\n },\n defineProperty(target, property, attributes) {\n throw new Error("Can\'t define properties on RPC stubs.");\n },\n deleteProperty(target, p) {\n throw new Error("Can\'t delete properties on RPC stubs.");\n },\n getOwnPropertyDescriptor(target, p) {\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target.raw);\n },\n isExtensible(target) {\n return false;\n },\n ownKeys(target) {\n return [];\n },\n preventExtensions(target) {\n return true;\n },\n set(target, p, newValue, receiver) {\n throw new Error("Can\'t assign properties on RPC stubs.");\n },\n setPrototypeOf(target, v) {\n throw new Error("Can\'t override prototype of RPC stubs.");\n }\n};\nvar RpcStub$1 = class RpcStub$12 extends RpcTarget$1 {\n constructor(hook, pathIfPromise) {\n super();\n if (!(hook instanceof StubHook)) {\n let value = hook;\n if (value instanceof RpcTarget$1 || value instanceof Function) hook = TargetStubHook.create(value, void 0);\n else hook = new PayloadStubHook(RpcPayload.fromAppReturn(value));\n if (pathIfPromise) throw new TypeError("RpcStub constructor expected one argument, received two.");\n }\n this.hook = hook;\n this.pathIfPromise = pathIfPromise;\n let func = () => {\n };\n func.raw = this;\n return new Proxy(func, PROXY_HANDLERS);\n }\n hook;\n pathIfPromise;\n dup() {\n let target = this[RAW_STUB];\n if (target.pathIfPromise) return new RpcStub$12(target.hook.get(target.pathIfPromise));\n else return new RpcStub$12(target.hook.dup());\n }\n onRpcBroken(callback) {\n this[RAW_STUB].hook.onBroken(callback);\n }\n map(func) {\n let { hook, pathIfPromise } = this[RAW_STUB];\n return mapImpl.sendMap(hook, pathIfPromise || [], func);\n }\n toString() {\n return "[object RpcStub]";\n }\n};\nvar RpcPromise$1 = class extends RpcStub$1 {\n constructor(hook, pathIfPromise) {\n if (hook instanceof StubHook) super(hook, pathIfPromise ?? []);\n else {\n if (pathIfPromise !== void 0) throw new TypeError("RpcPromise constructor expected one argument, received two.");\n let kind = typeForRpc(hook);\n if (kind === "rpc-promise") {\n let raw = unwrapStubAndPath(hook);\n if (raw.pathIfPromise.length > 0) super(raw.hook, raw.pathIfPromise);\n else {\n let adopted = raw.hook;\n raw.hook = DISPOSED_HOOK;\n super(adopted, []);\n }\n } else if (kind === "rpc-thenable") super(TargetStubHook.create(hook, void 0), []);\n else {\n let promiseHook = new PromiseStubHook(Promise.resolve(hook).then((value) => new PayloadStubHook(RpcPayload.fromAppReturn(value))));\n promiseHook.ignoreUnhandledRejections();\n super(promiseHook, []);\n }\n }\n }\n then(onfulfilled, onrejected) {\n return pullPromise(this).then(...arguments);\n }\n catch(onrejected) {\n return pullPromise(this).catch(...arguments);\n }\n finally(onfinally) {\n return pullPromise(this).finally(...arguments);\n }\n toString() {\n return "[object RpcPromise]";\n }\n};\nfunction unwrapStubTakingOwnership(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise && pathIfPromise.length > 0) return hook.get(pathIfPromise);\n else return hook;\n}\nfunction unwrapStubAndDup(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise) return hook.get(pathIfPromise);\n else return hook.dup();\n}\nfunction unwrapStubNoProperties(stub) {\n let { hook, pathIfPromise } = stub[RAW_STUB];\n if (pathIfPromise && pathIfPromise.length > 0) return;\n return hook;\n}\nfunction unwrapStubOrParent(stub) {\n return stub[RAW_STUB].hook;\n}\nfunction unwrapStubAndPath(stub) {\n return stub[RAW_STUB];\n}\nasync function pullPromise(promise) {\n let { hook, pathIfPromise } = promise[RAW_STUB];\n if (pathIfPromise.length > 0) hook = hook.get(pathIfPromise);\n return (await hook.pull()).deliverResolve();\n}\nvar RpcPayload = class RpcPayload2 {\n value;\n source;\n hooks;\n promises;\n static fromAppParams(value) {\n return new RpcPayload2(value, "params");\n }\n static fromAppReturn(value) {\n return new RpcPayload2(value, "return");\n }\n static fromArray(array) {\n let hooks = [];\n let promises = [];\n let resultArray = [];\n for (let payload of array) {\n payload.ensureDeepCopied();\n for (let hook of payload.hooks) hooks.push(hook);\n for (let promise of payload.promises) {\n if (promise.parent === payload) promise = {\n parent: resultArray,\n property: resultArray.length,\n promise: promise.promise\n };\n promises.push(promise);\n }\n resultArray.push(payload.value);\n }\n return new RpcPayload2(resultArray, "owned", hooks, promises);\n }\n static forEvaluate(hooks, promises) {\n return new RpcPayload2(null, "owned", hooks, promises);\n }\n static deepCopyFrom(value, oldParent, owner) {\n let result = new RpcPayload2(null, "owned", [], []);\n result.value = result.deepCopy(value, oldParent, "value", result, true, owner);\n return result;\n }\n constructor(value, source, hooks, promises) {\n this.value = value;\n this.source = source;\n this.hooks = hooks;\n this.promises = promises;\n }\n rpcTargets;\n getHookForRpcTarget(target, parent, dupStubs = true) {\n if (this.source === "params") {\n if (dupStubs) {\n let dupable = target;\n if (typeof dupable.dup === "function") target = dupable.dup();\n }\n return TargetStubHook.create(target, parent);\n } else if (this.source === "return") {\n let hook = this.rpcTargets?.get(target);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(target);\n return hook;\n }\n else {\n hook = TargetStubHook.create(target, parent);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(target, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw RpcTargets");\n }\n getHookForWritableStream(stream, parent, dupStubs = true) {\n if (this.source === "params") return streamImpl.createWritableStreamHook(stream);\n else if (this.source === "return") {\n let hook = this.rpcTargets?.get(stream);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(stream);\n return hook;\n }\n else {\n hook = streamImpl.createWritableStreamHook(stream);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(stream, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw WritableStreams");\n }\n getHookForReadableStream(stream, parent, dupStubs = true) {\n if (this.source === "params") return streamImpl.createReadableStreamHook(stream);\n else if (this.source === "return") {\n let hook = this.rpcTargets?.get(stream);\n if (hook) if (dupStubs) return hook.dup();\n else {\n this.rpcTargets?.delete(stream);\n return hook;\n }\n else {\n hook = streamImpl.createReadableStreamHook(stream);\n if (dupStubs) {\n if (!this.rpcTargets) this.rpcTargets = /* @__PURE__ */ new Map();\n this.rpcTargets.set(stream, hook);\n return hook.dup();\n } else return hook;\n }\n } else throw new Error("owned payload shouldn\'t contain raw ReadableStreams");\n }\n deepCopy(value, oldParent, property, parent, dupStubs, owner) {\n switch (typeForRpc(value)) {\n case "unsupported":\n return value;\n case "primitive":\n case "bigint":\n case "date":\n case "bytes":\n case "blob":\n case "url":\n case "error":\n case "undefined":\n return value;\n case "array": {\n let array = value;\n let len = array.length;\n let result = new Array(len);\n for (let i = 0; i < len; i++) result[i] = this.deepCopy(array[i], array, i, result, dupStubs, owner);\n return result;\n }\n case "object": {\n let result = {};\n let object = value;\n for (let i in object) result[i] = this.deepCopy(object[i], object, i, result, dupStubs, owner);\n return result;\n }\n case "stub":\n case "rpc-promise": {\n let stub = value;\n let hook;\n if (dupStubs) hook = unwrapStubAndDup(stub);\n else hook = unwrapStubTakingOwnership(stub);\n if (stub instanceof RpcPromise$1) {\n let promise = new RpcPromise$1(hook, []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n } else {\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n }\n case "function":\n case "rpc-target": {\n let target = value;\n let hook;\n if (owner) hook = owner.getHookForRpcTarget(target, oldParent, dupStubs);\n else hook = TargetStubHook.create(target, oldParent);\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n case "rpc-thenable": {\n let target = value;\n let promise;\n if (owner) promise = new RpcPromise$1(owner.getHookForRpcTarget(target, oldParent, dupStubs), []);\n else promise = new RpcPromise$1(TargetStubHook.create(target, oldParent), []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n }\n case "writable": {\n let stream = value;\n let hook;\n if (owner) hook = owner.getHookForWritableStream(stream, oldParent, dupStubs);\n else hook = streamImpl.createWritableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n case "readable": {\n let stream = value;\n let hook;\n if (owner) hook = owner.getHookForReadableStream(stream, oldParent, dupStubs);\n else hook = streamImpl.createReadableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n case "headers":\n return new Headers(value);\n case "request": {\n let req = value;\n if (req.body) this.deepCopy(req.body, req, "body", req, dupStubs, owner);\n return new Request(req);\n }\n case "response": {\n let resp = value;\n if (resp.body) this.deepCopy(resp.body, resp, "body", resp, dupStubs, owner);\n return new Response(resp.body, resp);\n }\n default:\n throw new Error("unreachable");\n }\n }\n ensureDeepCopied() {\n if (this.source !== "owned") {\n let dupStubs = this.source === "params";\n this.hooks = [];\n this.promises = [];\n try {\n this.value = this.deepCopy(this.value, void 0, "value", this, dupStubs, this);\n } catch (err) {\n this.hooks = void 0;\n this.promises = void 0;\n throw err;\n }\n this.source = "owned";\n if (this.rpcTargets && this.rpcTargets.size > 0) throw new Error("Not all rpcTargets were accounted for in deep-copy?");\n this.rpcTargets = void 0;\n }\n }\n deliverTo(parent, property, promises) {\n this.ensureDeepCopied();\n if (this.value instanceof RpcPromise$1) RpcPayload2.deliverRpcPromiseTo(this.value, parent, property, promises);\n else {\n parent[property] = this.value;\n for (let record of this.promises) RpcPayload2.deliverRpcPromiseTo(record.promise, record.parent, record.property, promises);\n }\n }\n static deliverRpcPromiseTo(promise, parent, property, promises) {\n let hook = unwrapStubNoProperties(promise);\n if (!hook) throw new Error("property promises should have been resolved earlier");\n let inner = hook.pull();\n if (inner instanceof RpcPayload2) inner.deliverTo(parent, property, promises);\n else promises.push(inner.then((payload) => {\n let subPromises = [];\n payload.deliverTo(parent, property, subPromises);\n if (subPromises.length > 0) return Promise.all(subPromises);\n }));\n }\n async deliverCall(func, thisArg) {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let result = Function.prototype.apply.call(func, thisArg, this.value);\n if (result instanceof RpcPromise$1) return RpcPayload2.fromAppReturn(result);\n else return RpcPayload2.fromAppReturn(await result);\n } finally {\n this.dispose();\n }\n }\n async deliverStreamWrite(writer) {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let chunk = this.value[0];\n if ((this.hooks.length > 0 || this.promises.length > 0) && chunk instanceof Object) {\n if (!(Symbol.dispose in chunk)) Object.defineProperty(chunk, Symbol.dispose, {\n value: () => this.dispose(),\n writable: true,\n enumerable: false,\n configurable: true\n });\n await writer.write(chunk);\n return RpcPayload2.fromAppReturn(void 0);\n }\n await writer.write(chunk);\n this.dispose();\n return RpcPayload2.fromAppReturn(void 0);\n } catch (err) {\n this.dispose();\n throw err;\n }\n }\n async deliverResolve() {\n try {\n let promises = [];\n this.deliverTo(this, "value", promises);\n if (promises.length > 0) await Promise.all(promises);\n let result = this.value;\n if (result instanceof Object) {\n if (!(Symbol.dispose in result)) Object.defineProperty(result, Symbol.dispose, {\n value: () => this.dispose(),\n writable: true,\n enumerable: false,\n configurable: true\n });\n }\n return result;\n } catch (err) {\n this.dispose();\n throw err;\n }\n }\n dispose() {\n if (this.source === "owned") {\n this.hooks.forEach((hook) => hook.dispose());\n this.promises.forEach((promise) => promise.promise[Symbol.dispose]());\n } else if (this.source === "return") {\n this.disposeImpl(this.value, void 0);\n if (this.rpcTargets && this.rpcTargets.size > 0) throw new Error("Not all rpcTargets were accounted for in disposeImpl()?");\n }\n this.source = "owned";\n this.hooks = [];\n this.promises = [];\n }\n disposeImpl(value, parent) {\n switch (typeForRpc(value)) {\n case "unsupported":\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "url":\n case "error":\n case "undefined":\n return;\n case "array": {\n let array = value;\n let len = array.length;\n for (let i = 0; i < len; i++) this.disposeImpl(array[i], array);\n return;\n }\n case "object": {\n let object = value;\n for (let i in object) this.disposeImpl(object[i], object);\n return;\n }\n case "stub":\n case "rpc-promise": {\n let hook = unwrapStubNoProperties(value);\n if (hook) hook.dispose();\n return;\n }\n case "function":\n case "rpc-target": {\n let target = value;\n let hook = this.rpcTargets?.get(target);\n if (hook) {\n hook.dispose();\n this.rpcTargets.delete(target);\n } else disposeRpcTarget(target);\n return;\n }\n case "rpc-thenable":\n return;\n case "headers":\n return;\n case "request": {\n let req = value;\n if (req.body) this.disposeImpl(req.body, req);\n return;\n }\n case "response": {\n let resp = value;\n if (resp.body) this.disposeImpl(resp.body, resp);\n return;\n }\n case "writable": {\n let stream = value;\n let hook = this.rpcTargets?.get(stream);\n if (hook) this.rpcTargets.delete(stream);\n else hook = streamImpl.createWritableStreamHook(stream);\n hook.dispose();\n return;\n }\n case "readable": {\n let stream = value;\n let hook = this.rpcTargets?.get(stream);\n if (hook) this.rpcTargets.delete(stream);\n else hook = streamImpl.createReadableStreamHook(stream);\n hook.dispose();\n return;\n }\n default:\n return;\n }\n }\n ignoreUnhandledRejections() {\n if (this.hooks) {\n this.hooks.forEach((hook) => {\n hook.ignoreUnhandledRejections();\n });\n this.promises.forEach((promise) => unwrapStubOrParent(promise.promise).ignoreUnhandledRejections());\n } else this.ignoreUnhandledRejectionsImpl(this.value);\n }\n ignoreUnhandledRejectionsImpl(value) {\n switch (typeForRpc(value)) {\n case "unsupported":\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "error":\n case "undefined":\n case "function":\n case "rpc-target":\n case "writable":\n case "readable":\n case "url":\n case "headers":\n case "request":\n case "response":\n return;\n case "array": {\n let array = value;\n let len = array.length;\n for (let i = 0; i < len; i++) this.ignoreUnhandledRejectionsImpl(array[i]);\n return;\n }\n case "object": {\n let object = value;\n for (let i in object) this.ignoreUnhandledRejectionsImpl(object[i]);\n return;\n }\n case "stub":\n case "rpc-promise":\n unwrapStubOrParent(value).ignoreUnhandledRejections();\n return;\n case "rpc-thenable":\n value.then((_) => {\n }, (_) => {\n });\n return;\n default:\n return;\n }\n }\n};\nfunction followPath(value, parent, path, owner) {\n for (let i = 0; i < path.length; i++) {\n parent = value;\n let part = path[i];\n if (part in Object.prototype) {\n value = void 0;\n continue;\n }\n switch (typeForRpc(value)) {\n case "object":\n case "function":\n if (Object.hasOwn(value, part)) value = value[part];\n else value = void 0;\n break;\n case "array":\n if (Number.isInteger(part) && part >= 0) value = value[part];\n else value = void 0;\n break;\n case "rpc-target":\n case "rpc-thenable":\n if (Object.hasOwn(value, part)) throw new TypeError(`Attempted to access property \'${part}\', which is an instance property of the RpcTarget. To avoid leaking private internals, instance properties cannot be accessed over RPC. If you want to make this property available over RPC, define it as a method or getter on the class, instead of an instance property.`);\n else value = value[part];\n owner = null;\n break;\n case "stub":\n case "rpc-promise": {\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n return {\n hook,\n remainingPath: pathIfPromise ? pathIfPromise.concat(path.slice(i)) : path.slice(i)\n };\n }\n case "writable":\n value = void 0;\n break;\n case "readable":\n value = void 0;\n break;\n case "primitive":\n case "bigint":\n case "bytes":\n case "blob":\n case "date":\n case "error":\n case "url":\n case "headers":\n case "request":\n case "response":\n value = void 0;\n break;\n case "undefined":\n value = value[part];\n break;\n case "unsupported":\n if (i === 0) throw new TypeError(`RPC stub points at a non-serializable type.`);\n else {\n let prefix = path.slice(0, i).join(".");\n let remainder = path.slice(0, i).join(".");\n throw new TypeError(`\'${prefix}\' is not a serializable type, so property ${remainder} cannot be accessed.`);\n }\n default:\n throw new TypeError("unreachable");\n }\n }\n if (value instanceof RpcPromise$1) {\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n return {\n hook,\n remainingPath: pathIfPromise || []\n };\n }\n return {\n value,\n parent,\n owner\n };\n}\nvar ValueStubHook = class extends StubHook {\n call(path, args) {\n let followResult;\n try {\n let { value, owner } = this.getValue();\n followResult = followPath(value, void 0, path, owner);\n } catch (err) {\n args.dispose();\n return new ErrorStubHook(err);\n }\n if (followResult.hook) return followResult.hook.call(followResult.remainingPath, args);\n if (typeof followResult.value != "function") {\n args.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new TypeError(`\'${path.join(".")}\' is not a function.`));\n }\n return new PromiseStubHook(args.deliverCall(followResult.value, followResult.parent).then((payload) => {\n return new PayloadStubHook(payload);\n }));\n }\n map(path, captures, instructions) {\n try {\n let followResult;\n try {\n let { value, owner } = this.getValue();\n followResult = followPath(value, void 0, path, owner);\n } catch (err) {\n for (let cap of captures) cap.dispose();\n throw err;\n }\n if (followResult.hook) return followResult.hook.map(followResult.remainingPath, captures, instructions);\n return mapImpl.applyMap(followResult.value, followResult.parent, followResult.owner, captures, instructions);\n } catch (err) {\n return new ErrorStubHook(err);\n }\n }\n get(path) {\n try {\n let { value, owner } = this.getValue();\n if (path.length === 0 && owner === null) {\n if (value instanceof Object && "then" in value) return this.dup();\n throw new Error("Can\'t dup an RpcTarget stub as a promise.");\n }\n let followResult = followPath(value, void 0, path, owner);\n if (followResult.hook) return followResult.hook.get(followResult.remainingPath);\n return new PayloadStubHook(RpcPayload.deepCopyFrom(followResult.value, followResult.parent, followResult.owner));\n } catch (err) {\n return new ErrorStubHook(err);\n }\n }\n};\nvar PayloadStubHook = class PayloadStubHook2 extends ValueStubHook {\n constructor(payload) {\n super();\n this.payload = payload;\n }\n payload;\n getPayload() {\n if (this.payload) return this.payload;\n else throw new Error("Attempted to use an RPC StubHook after it was disposed.");\n }\n getValue() {\n let payload = this.getPayload();\n return {\n value: payload.value,\n owner: payload\n };\n }\n dup() {\n let thisPayload = this.getPayload();\n return new PayloadStubHook2(RpcPayload.deepCopyFrom(thisPayload.value, void 0, thisPayload));\n }\n pull() {\n return this.getPayload();\n }\n ignoreUnhandledRejections() {\n if (this.payload) this.payload.ignoreUnhandledRejections();\n }\n dispose() {\n if (this.payload) {\n this.payload.dispose();\n this.payload = void 0;\n }\n }\n onBroken(callback) {\n if (this.payload) {\n if (this.payload.value instanceof RpcStub$1) this.payload.value.onRpcBroken(callback);\n }\n }\n};\nfunction disposeRpcTarget(target) {\n if (Symbol.dispose in target) try {\n target[Symbol.dispose]();\n } catch (err) {\n Promise.reject(err);\n }\n}\nvar TargetStubHook = class TargetStubHook2 extends ValueStubHook {\n static create(value, parent) {\n if (typeof value !== "function") parent = void 0;\n return new TargetStubHook2(value, parent);\n }\n constructor(target, parent, dupFrom) {\n super();\n this.target = target;\n this.parent = parent;\n if (dupFrom) {\n if (dupFrom.refcount) {\n this.refcount = dupFrom.refcount;\n ++this.refcount.count;\n }\n } else if (Symbol.dispose in target) this.refcount = { count: 1 };\n }\n target;\n parent;\n refcount;\n getTarget() {\n if (this.target) return this.target;\n else throw new Error("Attempted to use an RPC StubHook after it was disposed.");\n }\n getValue() {\n return {\n value: this.getTarget(),\n owner: null\n };\n }\n dup() {\n return new TargetStubHook2(this.getTarget(), this.parent, this);\n }\n pull() {\n let target = this.getTarget();\n if ("then" in target) return Promise.resolve(target).then((resolution) => {\n return RpcPayload.fromAppReturn(resolution);\n });\n else return Promise.reject(/* @__PURE__ */ new Error("Tried to resolve a non-promise stub."));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n if (this.target) {\n if (this.refcount) {\n if (--this.refcount.count == 0) disposeRpcTarget(this.target);\n }\n this.target = void 0;\n }\n }\n onBroken(callback) {\n let target = this.target;\n if (target && "then" in target) Promise.resolve(target).then(() => {\n }, callback);\n }\n};\nvar PromiseStubHook = class PromiseStubHook2 extends StubHook {\n promise;\n resolution;\n constructor(promise) {\n super();\n this.promise = promise.then((res) => {\n this.resolution = res;\n return res;\n });\n }\n call(path, args) {\n args.ensureDeepCopied();\n return new PromiseStubHook2(this.promise.then((hook) => hook.call(path, args), (err) => {\n args.dispose();\n throw err;\n }));\n }\n stream(path, args) {\n args.ensureDeepCopied();\n return { promise: this.promise.then((hook) => hook.stream(path, args).promise, (err) => {\n args.dispose();\n throw err;\n }) };\n }\n map(path, captures, instructions) {\n return new PromiseStubHook2(this.promise.then((hook) => hook.map(path, captures, instructions), (err) => {\n for (let cap of captures) cap.dispose();\n throw err;\n }));\n }\n get(path) {\n return new PromiseStubHook2(this.promise.then((hook) => hook.get(path)));\n }\n dup() {\n if (this.resolution) return this.resolution.dup();\n else return new PromiseStubHook2(this.promise.then((hook) => hook.dup()));\n }\n pull() {\n if (this.resolution) return this.resolution.pull();\n else return this.promise.then((hook) => hook.pull());\n }\n ignoreUnhandledRejections() {\n if (this.resolution) this.resolution.ignoreUnhandledRejections();\n else this.promise.then((res) => {\n res.ignoreUnhandledRejections();\n }, (err) => {\n });\n }\n dispose() {\n this.promise.then((hook) => hook.dispose(), () => {\n });\n }\n onBroken(callback) {\n if (this.resolution) this.resolution.onBroken(callback);\n else this.promise.then((hook) => {\n hook.onBroken(callback);\n }, callback);\n }\n};\nvar DEFAULT_LIMITS = {\n maxBigIntDigits: 16384,\n maxDepth: 256,\n maxMessageSize: 32 * 1024 * 1024\n};\nvar NATIVE_LITTLE_ENDIAN = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\nvar BYTE_CONTAINER_TYPE_NAMES = [\n "ArrayBuffer",\n "DataView",\n "Int8Array",\n "Uint8Array",\n "Uint8ClampedArray",\n "Int16Array",\n "Uint16Array",\n "Int32Array",\n "Uint32Array",\n "BigInt64Array",\n "BigUint64Array",\n "Float32Array",\n "Float64Array"\n];\nfunction isValidByteContainerName(value) {\n return BYTE_CONTAINER_TYPE_NAMES.includes(value);\n}\nvar TYPED_ARRAY_ELEMENT_SIZE = {\n ArrayBuffer: void 0,\n DataView: void 0,\n Int8Array: void 0,\n Uint8Array: void 0,\n Uint8ClampedArray: void 0,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n BigInt64Array: 8,\n BigUint64Array: 8,\n Float32Array: 4,\n Float64Array: 8\n};\nvar BYTE_CONTAINER_PROTOTYPES = {\n ArrayBuffer: ArrayBuffer.prototype,\n DataView: DataView.prototype,\n Int8Array: Int8Array.prototype,\n Uint8ClampedArray: Uint8ClampedArray.prototype,\n Int16Array: Int16Array.prototype,\n Uint16Array: Uint16Array.prototype,\n Int32Array: Int32Array.prototype,\n Uint32Array: Uint32Array.prototype,\n BigInt64Array: BigInt64Array.prototype,\n BigUint64Array: BigUint64Array.prototype,\n Float32Array: Float32Array.prototype,\n Float64Array: Float64Array.prototype\n};\nvar BYTE_CONTAINER_TYPE_BY_PROTOTYPE = /* @__PURE__ */ new Map();\nfor (let type of Object.keys(BYTE_CONTAINER_PROTOTYPES)) BYTE_CONTAINER_TYPE_BY_PROTOTYPE.set(BYTE_CONTAINER_PROTOTYPES[type], type);\nfunction swapByteOrder(bytes, elementSize) {\n if (elementSize !== 2 && elementSize !== 4 && elementSize !== 8) throw new RangeError(`Unsupported element size: ${elementSize}`);\n let view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let offset = 0; offset < bytes.byteLength; offset += elementSize) switch (elementSize) {\n case 2:\n view.setUint16(offset, view.getUint16(offset, false), true);\n break;\n case 4:\n view.setUint32(offset, view.getUint32(offset, false), true);\n break;\n case 8:\n view.setBigUint64(offset, view.getBigUint64(offset, false), true);\n break;\n }\n}\nvar NullExporter = class {\n exportStub(stub) {\n throw new Error("Cannot serialize RPC stubs without an RPC session.");\n }\n exportPromise(stub) {\n throw new Error("Cannot serialize RPC stubs without an RPC session.");\n }\n getImport(hook) {\n }\n unexport(ids) {\n }\n createPipe(readable) {\n throw new Error("Cannot create pipes without an RPC session.");\n }\n onSendError(error) {\n }\n};\nvar NULL_EXPORTER = new NullExporter();\nasync function streamToBlob(stream, type) {\n let b = await new Response(stream).blob();\n return b.type === type ? b : b.slice(0, b.size, type);\n}\nvar ERROR_TYPES = {\n __proto__: null,\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n AggregateError\n};\nvar Devaluator = class Devaluator2 {\n exporter;\n source;\n encodingLevel;\n constructor(exporter, source, encodingLevel) {\n this.exporter = exporter;\n this.source = source;\n this.encodingLevel = encodingLevel;\n }\n static devaluate(value, parent, exporter = NULL_EXPORTER, source, encodingLevel = "string") {\n let devaluator = new Devaluator2(exporter, source, encodingLevel);\n try {\n return devaluator.devaluateImpl(value, parent, 0);\n } catch (err) {\n if (devaluator.exports) try {\n exporter.unexport(devaluator.exports);\n } catch (err2) {\n }\n throw err;\n }\n }\n exports;\n devaluateImpl(value, parent, depth) {\n if (depth >= 256) throw new Error("Serialization exceeded maximum allowed depth. (Does the message contain cycles?)");\n switch (typeForRpc(value)) {\n case "unsupported": {\n let msg;\n try {\n msg = `Cannot serialize value: ${value}`;\n } catch (err) {\n msg = "Cannot serialize value: (couldn\'t stringify value)";\n }\n throw new TypeError(msg);\n }\n case "primitive":\n if (typeof value === "number" && !isFinite(value)) {\n if (this.encodingLevel === "structuredClonable") return value;\n if (value === Infinity) return ["inf"];\n else if (value === -Infinity) return ["-inf"];\n else return ["nan"];\n } else return value;\n case "object": {\n let object = value;\n let result = {};\n for (let key in object) result[key] = this.devaluateImpl(object[key], object, depth + 1);\n return result;\n }\n case "array": {\n let array = value;\n let len = array.length;\n let result = new Array(len);\n for (let i = 0; i < len; i++) result[i] = this.devaluateImpl(array[i], array, depth + 1);\n return [result];\n }\n case "bigint":\n if (this.encodingLevel === "structuredClonable") return value;\n return ["bigint", value.toString()];\n case "date": {\n if (this.encodingLevel === "structuredClonable") return value;\n const time = value.getTime();\n return ["date", Number.isNaN(time) ? null : time];\n }\n case "bytes": {\n let alternateTypeName = BYTE_CONTAINER_TYPE_BY_PROTOTYPE.get(Object.getPrototypeOf(value));\n let bytes;\n if (alternateTypeName === "ArrayBuffer") bytes = new Uint8Array(value);\n else if (alternateTypeName === void 0) bytes = value;\n else {\n let view = value;\n bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n let elementSize = TYPED_ARRAY_ELEMENT_SIZE[alternateTypeName];\n if (!NATIVE_LITTLE_ENDIAN && elementSize) {\n bytes = bytes.slice();\n swapByteOrder(bytes, elementSize);\n }\n }\n if (this.encodingLevel === "structuredClonable" || this.encodingLevel === "jsonCompatibleWithBytes") return alternateTypeName === void 0 ? ["bytes", bytes] : [\n "bytes",\n bytes,\n alternateTypeName\n ];\n let b64;\n if (bytes.toBase64) b64 = bytes.toBase64({ omitPadding: true });\n else if (typeof Buffer !== "undefined") b64 = (bytes instanceof Buffer ? bytes : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength)).toString("base64");\n else {\n let binary = "";\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);\n b64 = btoa(binary);\n }\n b64 = b64.replace(/=+$/, "");\n return alternateTypeName === void 0 ? ["bytes", b64] : [\n "bytes",\n b64,\n alternateTypeName\n ];\n }\n case "url":\n return ["url", value.href];\n case "headers":\n return ["headers", [...value]];\n case "request": {\n let req = value;\n let init = {};\n if (req.method !== "GET") init.method = req.method;\n let headers = [...req.headers];\n if (headers.length > 0) init.headers = headers;\n if (req.body) {\n init.body = this.devaluateImpl(req.body, req, depth + 1);\n init.duplex = req.duplex || "half";\n } else if (req.body === void 0 && ![\n "GET",\n "HEAD",\n "OPTIONS",\n "TRACE",\n "DELETE"\n ].includes(req.method)) {\n let bodyPromise = req.arrayBuffer();\n let readable = new ReadableStream({ async start(controller) {\n try {\n controller.enqueue(new Uint8Array(await bodyPromise));\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n } });\n let hook = streamImpl.createReadableStreamHook(readable);\n init.body = ["readable", this.exporter.createPipe(readable, hook)];\n init.duplex = req.duplex || "half";\n }\n if (req.cache && req.cache !== "default") init.cache = req.cache;\n if (req.redirect !== "follow") init.redirect = req.redirect;\n if (req.integrity) init.integrity = req.integrity;\n if (req.mode && req.mode !== "cors") init.mode = req.mode;\n if (req.credentials && req.credentials !== "same-origin") init.credentials = req.credentials;\n if (req.referrer && req.referrer !== "about:client") init.referrer = req.referrer;\n if (req.referrerPolicy) init.referrerPolicy = req.referrerPolicy;\n if (req.keepalive) init.keepalive = req.keepalive;\n let cfReq = req;\n if (cfReq.cf) init.cf = cfReq.cf;\n if (cfReq.encodeResponseBody && cfReq.encodeResponseBody !== "automatic") init.encodeResponseBody = cfReq.encodeResponseBody;\n return [\n "request",\n req.url,\n init\n ];\n }\n case "response": {\n let resp = value;\n let body = this.devaluateImpl(resp.body, resp, depth + 1);\n let init = {};\n if (resp.status !== 200) init.status = resp.status;\n if (resp.statusText) init.statusText = resp.statusText;\n let headers = [...resp.headers];\n if (headers.length > 0) init.headers = headers;\n let cfResp = resp;\n if (cfResp.cf) init.cf = cfResp.cf;\n if (cfResp.encodeBody && cfResp.encodeBody !== "automatic") init.encodeBody = cfResp.encodeBody;\n if (cfResp.webSocket) throw new TypeError("Can\'t serialize a Response containing a webSocket.");\n return [\n "response",\n body,\n init\n ];\n }\n case "blob": {\n let blob = value;\n let readable = blob.stream();\n let hook = streamImpl.createReadableStreamHook(readable);\n let importId = this.exporter.createPipe(readable, hook);\n return [\n "blob",\n blob.type,\n ["readable", importId]\n ];\n }\n case "error": {\n let e = value;\n let rewritten = this.exporter.onSendError(e);\n if (rewritten) e = rewritten;\n let anyE = e;\n let props;\n let captureProp = (key, val) => {\n let exportsBefore = this.exports?.length ?? 0;\n try {\n let encoded = this.devaluateImpl(val, e, depth + 1);\n if (!props) props = {};\n props[key] = encoded;\n } catch (err) {\n if (this.exports && this.exports.length > exportsBefore) {\n let tail = this.exports.splice(exportsBefore);\n try {\n this.exporter.unexport(tail);\n } catch (err2) {\n }\n }\n }\n };\n for (let key of Object.keys(e)) {\n if (key === "name" || key === "message" || key === "stack") continue;\n captureProp(key, anyE[key]);\n }\n if ("cause" in e) captureProp("cause", anyE.cause);\n if (e instanceof AggregateError) captureProp("errors", e.errors);\n let result = [\n "error",\n e.name,\n e.message\n ];\n if (props) {\n result.push(rewritten && rewritten.stack ? rewritten.stack : null);\n result.push(props);\n } else if (rewritten && rewritten.stack) result.push(rewritten.stack);\n return result;\n }\n case "undefined":\n if (this.encodingLevel === "structuredClonable") return;\n return ["undefined"];\n case "stub":\n case "rpc-promise": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let { hook, pathIfPromise } = unwrapStubAndPath(value);\n let importId = this.exporter.getImport(hook);\n if (importId !== void 0) if (pathIfPromise) if (pathIfPromise.length > 0) return [\n "pipeline",\n importId,\n pathIfPromise\n ];\n else return ["pipeline", importId];\n else return ["import", importId];\n if (pathIfPromise) hook = hook.get(pathIfPromise);\n else hook = hook.dup();\n return this.devaluateHook(pathIfPromise ? "promise" : "export", hook);\n }\n case "function":\n case "rpc-target": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let hook = this.source.getHookForRpcTarget(value, parent);\n return this.devaluateHook("export", hook);\n }\n case "rpc-thenable": {\n if (!this.source) throw new Error("Can\'t serialize RPC stubs in this context.");\n let hook = this.source.getHookForRpcTarget(value, parent);\n return this.devaluateHook("promise", hook);\n }\n case "writable": {\n if (!this.source) throw new Error("Can\'t serialize WritableStream in this context.");\n let hook = this.source.getHookForWritableStream(value, parent);\n return this.devaluateHook("writable", hook);\n }\n case "readable": {\n if (!this.source) throw new Error("Can\'t serialize ReadableStream in this context.");\n let ws = value;\n let hook = this.source.getHookForReadableStream(ws, parent);\n return ["readable", this.exporter.createPipe(ws, hook)];\n }\n default:\n throw new Error("unreachable");\n }\n }\n devaluateHook(type, hook) {\n if (!this.exports) this.exports = [];\n let exportId = type === "promise" ? this.exporter.exportPromise(hook) : this.exporter.exportStub(hook);\n this.exports.push(exportId);\n return [type, exportId];\n }\n};\nvar NullImporter = class {\n importStub(idx) {\n throw new Error("Cannot deserialize RPC stubs without an RPC session.");\n }\n importPromise(idx) {\n throw new Error("Cannot deserialize RPC stubs without an RPC session.");\n }\n getExport(idx) {\n }\n getPipeReadable(exportId) {\n throw new Error("Cannot retrieve pipe readable without an RPC session.");\n }\n getLimits() {\n return DEFAULT_LIMITS;\n }\n};\nvar NULL_IMPORTER = new NullImporter();\nfunction fixBrokenRequestBody(request, body) {\n return new RpcPromise$1(new PromiseStubHook(new Response(body).arrayBuffer().then((arrayBuffer) => {\n let bytes = new Uint8Array(arrayBuffer);\n let result = new Request(request, { body: bytes });\n return new PayloadStubHook(RpcPayload.fromAppReturn(result));\n })), []);\n}\nfunction streamToBlobPromise(stream, type) {\n return new RpcPromise$1(new PromiseStubHook(streamToBlob(stream, type).then((blob) => {\n return new PayloadStubHook(RpcPayload.fromAppReturn(blob));\n })), []);\n}\nvar Evaluator = class Evaluator2 {\n importer;\n encodingLevel;\n limits;\n constructor(importer, encodingLevel = "string") {\n this.importer = importer;\n this.encodingLevel = encodingLevel;\n this.limits = importer.getLimits();\n }\n hooks = [];\n promises = [];\n evaluate(value) {\n return this.evaluateWithDepth(value, 0);\n }\n evaluateWithDepth(value, depth) {\n let payload = RpcPayload.forEvaluate(this.hooks, this.promises);\n try {\n payload.value = this.evaluateImpl(value, payload, "value", depth);\n return payload;\n } catch (err) {\n payload.dispose();\n throw err;\n }\n }\n evaluateCopy(value) {\n return this.evaluate(structuredClone(value));\n }\n evaluateImpl(value, parent, property, depth) {\n let maxDepth = this.limits.maxDepth;\n if (depth >= maxDepth) throw new TypeError(`Deserialization exceeded maximum allowed message depth of ${maxDepth}.`);\n if (this.encodingLevel === "structuredClonable") {\n if (value instanceof Date || typeof value === "bigint") return value;\n }\n if (value instanceof Array) {\n if (value.length == 1 && value[0] instanceof Array) {\n let result = value[0];\n for (let i = 0; i < result.length; i++) result[i] = this.evaluateImpl(result[i], result, i, depth + 1);\n return result;\n } else switch (value[0]) {\n case "bigint":\n if (typeof value[1] == "string") {\n let digits = value[1];\n let maxBigIntDigits = this.limits.maxBigIntDigits;\n if (digits.length > maxBigIntDigits) throw new TypeError(`Deserialized bigint exceeds maximum length of ${maxBigIntDigits} digits.`);\n return BigInt(digits);\n }\n break;\n case "date":\n if (value[1] === null) return /* @__PURE__ */ new Date(NaN);\n if (typeof value[1] == "number") return new Date(value[1]);\n break;\n case "bytes": {\n let bytes;\n if (value[1] instanceof Uint8Array) bytes = value[1];\n else if (typeof value[1] == "string") if (typeof Buffer !== "undefined") bytes = Buffer.from(value[1], "base64");\n else if (Uint8Array.fromBase64) bytes = Uint8Array.fromBase64(value[1]);\n else {\n let bs = atob(value[1]);\n let len = bs.length;\n bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) bytes[i] = bs.charCodeAt(i);\n }\n else break;\n if (value.length === 2) return bytes;\n if (typeof value[2] !== "string") throw new TypeError(`Unknown bytes type marker type: ${typeof value[2]}`);\n if (!isValidByteContainerName(value[2])) {\n let marker2 = value[2].slice(0, 64);\n throw new TypeError(`Unknown bytes type marker: ${marker2}`);\n }\n let marker = value[2];\n let elementSize = TYPED_ARRAY_ELEMENT_SIZE[marker];\n if (elementSize !== void 0 && bytes.byteLength % elementSize !== 0) throw new TypeError(`Invalid byte length ${bytes.byteLength} for ${marker}; expected a multiple of ${elementSize}`);\n let buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\n if (!NATIVE_LITTLE_ENDIAN && elementSize !== void 0) swapByteOrder(new Uint8Array(buffer), elementSize);\n switch (marker) {\n case "ArrayBuffer":\n return buffer;\n case "DataView":\n return new DataView(buffer);\n case "Int8Array":\n return new Int8Array(buffer);\n case "Uint8Array":\n return new Uint8Array(buffer);\n case "Uint8ClampedArray":\n return new Uint8ClampedArray(buffer);\n case "Int16Array":\n return new Int16Array(buffer);\n case "Uint16Array":\n return new Uint16Array(buffer);\n case "Int32Array":\n return new Int32Array(buffer);\n case "Uint32Array":\n return new Uint32Array(buffer);\n case "BigInt64Array":\n return new BigInt64Array(buffer);\n case "BigUint64Array":\n return new BigUint64Array(buffer);\n case "Float32Array":\n return new Float32Array(buffer);\n case "Float64Array":\n return new Float64Array(buffer);\n default:\n }\n }\n case "error":\n if (value.length >= 3 && typeof value[1] === "string" && typeof value[2] === "string") {\n let cls = ERROR_TYPES[value[1]] || Error;\n let result = cls === AggregateError ? new cls([], value[2]) : new cls(value[2]);\n if (typeof value[3] === "string") result.stack = value[3];\n if (value.length >= 5) {\n let props = value[4];\n if (!props || typeof props !== "object" || Array.isArray(props)) break;\n let anyResult = result;\n let propsObj = props;\n for (let key of Object.keys(propsObj)) {\n if (key === "name" || key === "message" || key === "stack") continue;\n if (key in Object.prototype || key === "toJSON") {\n this.evaluateImpl(propsObj[key], result, key, depth + 1);\n continue;\n }\n anyResult[key] = this.evaluateImpl(propsObj[key], result, key, depth + 1);\n }\n }\n return result;\n }\n break;\n case "undefined":\n if (value.length === 1) return;\n break;\n case "inf":\n return Infinity;\n case "-inf":\n return -Infinity;\n case "nan":\n return NaN;\n case "url":\n if (value.length === 2 && typeof value[1] === "string") return new URL(value[1]);\n break;\n case "headers":\n if (value.length === 2 && value[1] instanceof Array) return new Headers(value[1]);\n break;\n case "request": {\n if (value.length !== 3 || typeof value[1] !== "string") break;\n let url = value[1];\n let init = value[2];\n if (typeof init !== "object" || init === null) break;\n if (init.body) {\n init.body = this.evaluateImpl(init.body, init, "body", depth + 1);\n if (init.body === null || typeof init.body === "string" || init.body instanceof Uint8Array || init.body instanceof ReadableStream) {\n } else throw new TypeError("Request body must be of type ReadableStream.");\n }\n if (init.signal) {\n init.signal = this.evaluateImpl(init.signal, init, "signal", depth + 1);\n if (!(init.signal instanceof AbortSignal)) throw new TypeError("Request siganl must be of type AbortSignal.");\n }\n if (init.headers && !(init.headers instanceof Array)) throw new TypeError("Request headers must be serialized as an array of pairs.");\n let result = new Request(url, init);\n if (init.body instanceof ReadableStream && result.body === void 0) {\n let promise = fixBrokenRequestBody(result, init.body);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n } else return result;\n }\n case "response": {\n if (value.length !== 3) break;\n let body = this.evaluateImpl(value[1], parent, property, depth + 1);\n if (body === null || typeof body === "string" || body instanceof Uint8Array || body instanceof ReadableStream) {\n } else throw new TypeError("Response body must be of type ReadableStream.");\n let init = value[2];\n if (typeof init !== "object" || init === null) break;\n if (init.webSocket) throw new TypeError("Can\'t deserialize a Response containing a webSocket.");\n if (init.headers && !(init.headers instanceof Array)) throw new TypeError("Request headers must be serialized as an array of pairs.");\n return new Response(body, init);\n }\n case "blob": {\n if (value.length !== 3 || typeof value[1] !== "string") break;\n let contentType = value[1];\n let content = this.evaluateImpl(value[2], parent, property, depth + 1);\n if (!(content instanceof ReadableStream)) throw new TypeError("Blob content must be serialized as a ReadableStream.");\n let promise = streamToBlobPromise(content, contentType);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n }\n case "import":\n case "pipeline": {\n if (value.length < 2 || value.length > 4) break;\n if (typeof value[1] != "number") break;\n let hook = this.importer.getExport(value[1]);\n if (!hook) throw new Error(`no such entry on exports table: ${value[1]}`);\n let isPromise = value[0] == "pipeline";\n let addStub = (hook2) => {\n if (isPromise) {\n let promise = new RpcPromise$1(hook2, []);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n } else {\n this.hooks.push(hook2);\n return new RpcPromise$1(hook2, []);\n }\n };\n if (value.length == 2) if (isPromise) return addStub(hook.get([]));\n else return addStub(hook.dup());\n let path = value[2];\n if (!(path instanceof Array)) break;\n if (!path.every((part) => {\n return typeof part == "string" || typeof part == "number";\n })) break;\n if (value.length == 3) return addStub(hook.get(path));\n let args = value[3];\n if (!(args instanceof Array)) break;\n args = new Evaluator2(this.importer).evaluateWithDepth([args], depth);\n return addStub(hook.call(path, args));\n }\n case "remap": {\n if (value.length !== 5 || typeof value[1] !== "number" || !(value[2] instanceof Array) || !(value[3] instanceof Array) || !(value[4] instanceof Array)) break;\n let hook = this.importer.getExport(value[1]);\n if (!hook) throw new Error(`no such entry on exports table: ${value[1]}`);\n let path = value[2];\n if (!path.every((part) => {\n return typeof part == "string" || typeof part == "number";\n })) break;\n let captures = value[3].map((cap) => {\n if (!(cap instanceof Array) || cap.length !== 2 || cap[0] !== "import" && cap[0] !== "export" || typeof cap[1] !== "number") throw new TypeError(`unknown map capture: ${JSON.stringify(cap)}`);\n if (cap[0] === "export") return this.importer.importStub(cap[1]);\n else {\n let exp = this.importer.getExport(cap[1]);\n if (!exp) throw new Error(`no such entry on exports table: ${cap[1]}`);\n return exp.dup();\n }\n });\n let instructions = value[4];\n let promise = new RpcPromise$1(hook.map(path, captures, instructions), []);\n this.promises.push({\n promise,\n parent,\n property\n });\n return promise;\n }\n case "export":\n case "promise":\n if (typeof value[1] == "number") if (value[0] == "promise") {\n let promise = new RpcPromise$1(this.importer.importPromise(value[1]), []);\n this.promises.push({\n parent,\n property,\n promise\n });\n return promise;\n } else {\n let hook = this.importer.importStub(value[1]);\n this.hooks.push(hook);\n return new RpcStub$1(hook);\n }\n break;\n case "writable":\n if (typeof value[1] == "number") {\n let hook = this.importer.importStub(value[1]);\n let stream = streamImpl.createWritableStreamFromHook(hook);\n this.hooks.push(hook);\n return stream;\n }\n break;\n case "readable":\n if (typeof value[1] == "number") {\n let stream = this.importer.getPipeReadable(value[1]);\n let hook = streamImpl.createReadableStreamHook(stream);\n this.hooks.push(hook);\n return stream;\n }\n break;\n }\n throw new TypeError(`unknown special value: ${JSON.stringify(value)}`);\n } else if (value instanceof Object) {\n let result = value;\n for (let key in result) if (key in Object.prototype || key === "toJSON") {\n this.evaluateImpl(result[key], result, key, depth + 1);\n delete result[key];\n } else result[key] = this.evaluateImpl(result[key], result, key, depth + 1);\n return result;\n } else return value;\n }\n};\nvar ESTIMATED_OBJECT_OVERHEAD = 16;\nvar ESTIMATED_ENTRY_OVERHEAD = 8;\nvar ESTIMATED_BINARY_OVERHEAD = 16;\nvar MAX_ESTIMATE_DEPTH = 64;\nfunction estimateStringSize(value) {\n return 2 + value.length * 3;\n}\nfunction estimateEncodedSize(value, seen, depth = 0) {\n if (depth >= MAX_ESTIMATE_DEPTH) return ESTIMATED_ENTRY_OVERHEAD;\n switch (typeof value) {\n case "string":\n return estimateStringSize(value);\n case "number":\n return 16;\n case "bigint":\n return 16;\n case "boolean":\n return 8;\n case "undefined":\n return 16;\n case "object": {\n if (value === null) return 8;\n if (ArrayBuffer.isView(value)) return ESTIMATED_BINARY_OVERHEAD + value.byteLength;\n if (value instanceof ArrayBuffer) return ESTIMATED_BINARY_OVERHEAD + value.byteLength;\n if (typeof Blob !== "undefined" && value instanceof Blob) return ESTIMATED_BINARY_OVERHEAD + value.size;\n if (value instanceof Date) return 16;\n seen ??= /* @__PURE__ */ new WeakSet();\n if (seen.has(value)) return ESTIMATED_ENTRY_OVERHEAD;\n seen.add(value);\n if (value instanceof Array) {\n let size2 = ESTIMATED_OBJECT_OVERHEAD;\n for (let item of value) size2 += ESTIMATED_ENTRY_OVERHEAD + estimateEncodedSize(item, seen, depth + 1);\n return size2;\n }\n if (value instanceof Error) {\n let size2 = ESTIMATED_OBJECT_OVERHEAD + estimateStringSize(value.name) + estimateStringSize(value.message) + estimateStringSize(value.stack ?? "");\n for (let key of Object.keys(value)) size2 += ESTIMATED_ENTRY_OVERHEAD + estimateStringSize(key) + estimateEncodedSize(value[key], seen, depth + 1);\n return size2;\n }\n let size = ESTIMATED_OBJECT_OVERHEAD;\n for (let key of Object.keys(value)) size += ESTIMATED_ENTRY_OVERHEAD + estimateStringSize(key) + estimateEncodedSize(value[key], seen, depth + 1);\n return size;\n }\n default:\n return 16;\n }\n}\nvar ImportTableEntry = class {\n session;\n importId;\n constructor(session, importId, pulling) {\n this.session = session;\n this.importId = importId;\n if (pulling) this.activePull = Promise.withResolvers();\n }\n localRefcount = 0;\n remoteRefcount = 1;\n activePull;\n resolution;\n onBrokenRegistrations;\n resolve(resolution) {\n if (this.localRefcount == 0) {\n resolution.dispose();\n return;\n }\n this.resolution = resolution;\n this.sendRelease();\n if (this.onBrokenRegistrations) {\n for (let i of this.onBrokenRegistrations) {\n let callback = this.session.onBrokenCallbacks[i];\n let endIndex = this.session.onBrokenCallbacks.length;\n resolution.onBroken(callback);\n if (this.session.onBrokenCallbacks[endIndex] === callback) delete this.session.onBrokenCallbacks[endIndex];\n else delete this.session.onBrokenCallbacks[i];\n }\n this.onBrokenRegistrations = void 0;\n }\n if (this.activePull) {\n this.activePull.resolve();\n this.activePull = void 0;\n }\n }\n async awaitResolution() {\n if (!this.activePull) {\n this.session.sendPull(this.importId);\n this.activePull = Promise.withResolvers();\n }\n await this.activePull.promise;\n return this.resolution.pull();\n }\n dispose() {\n if (this.resolution) this.resolution.dispose();\n else {\n this.abort(/* @__PURE__ */ new Error("RPC was canceled because the RpcPromise was disposed."));\n this.sendRelease();\n }\n }\n abort(error) {\n if (!this.resolution) {\n this.resolution = new ErrorStubHook(error);\n if (this.activePull) {\n this.activePull.reject(error);\n this.activePull = void 0;\n }\n this.onBrokenRegistrations = void 0;\n }\n }\n onBroken(callback) {\n if (this.resolution) this.resolution.onBroken(callback);\n else {\n let index = this.session.onBrokenCallbacks.length;\n this.session.onBrokenCallbacks.push(callback);\n if (!this.onBrokenRegistrations) this.onBrokenRegistrations = [];\n this.onBrokenRegistrations.push(index);\n }\n }\n sendRelease() {\n if (this.remoteRefcount > 0) {\n this.session.sendRelease(this.importId, this.remoteRefcount);\n this.remoteRefcount = 0;\n }\n }\n};\nvar RpcImportHook = class RpcImportHook2 extends StubHook {\n isPromise;\n entry;\n constructor(isPromise, entry) {\n super();\n this.isPromise = isPromise;\n ++entry.localRefcount;\n this.entry = entry;\n }\n collectPath(path) {\n return this;\n }\n getEntry() {\n if (this.entry) return this.entry;\n else throw new Error("This RpcImportHook was already disposed.");\n }\n getEntryTakingOwnership(disposeOwned) {\n try {\n return this.getEntry();\n } catch (err) {\n disposeOwned();\n throw err;\n }\n }\n call(path, args) {\n let entry = this.getEntryTakingOwnership(() => args.dispose());\n if (entry.resolution) return entry.resolution.call(path, args);\n else return entry.session.sendCall(entry.importId, path, args);\n }\n stream(path, args) {\n let entry = this.getEntryTakingOwnership(() => args.dispose());\n if (entry.resolution) return entry.resolution.stream(path, args);\n else return entry.session.sendStream(entry.importId, path, args);\n }\n map(path, captures, instructions) {\n let entry = this.getEntryTakingOwnership(() => {\n for (let cap of captures) cap.dispose();\n });\n if (entry.resolution) return entry.resolution.map(path, captures, instructions);\n else return entry.session.sendMap(entry.importId, path, captures, instructions);\n }\n get(path) {\n let entry = this.getEntry();\n if (entry.resolution) return entry.resolution.get(path);\n else return entry.session.sendCall(entry.importId, path);\n }\n dup() {\n return new RpcImportHook2(false, this.getEntry());\n }\n pull() {\n let entry = this.getEntry();\n if (!this.isPromise) throw new Error("Can\'t pull this hook because it\'s not a promise hook.");\n if (entry.resolution) return entry.resolution.pull();\n return entry.awaitResolution();\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let entry = this.entry;\n this.entry = void 0;\n if (entry) {\n if (--entry.localRefcount === 0) entry.dispose();\n }\n }\n onBroken(callback) {\n if (this.entry) this.entry.onBroken(callback);\n }\n};\nvar RpcMainHook = class extends RpcImportHook {\n session;\n constructor(entry) {\n super(false, entry);\n this.session = entry.session;\n }\n dispose() {\n if (this.session) {\n let session = this.session;\n this.session = void 0;\n session.shutdown();\n }\n }\n};\nvar RpcSessionImpl = class {\n transport;\n options;\n exports = [];\n reverseExports = /* @__PURE__ */ new Map();\n imports = [];\n abortReason;\n cancelReadLoop;\n nextExportId = -1;\n onBatchDone;\n pullCount = 0;\n onBrokenCallbacks = [];\n encodingLevel;\n limits;\n constructor(transport, mainHook, options) {\n this.transport = transport;\n this.options = options;\n let level = "string";\n if ("encodingLevel" in transport) {\n let raw = transport.encodingLevel;\n if (raw !== void 0) {\n if (raw !== "string" && raw !== "jsonCompatible" && raw !== "jsonCompatibleWithBytes" && raw !== "structuredClonable") throw new TypeError(`Unknown transport encodingLevel: ${String(raw)}`);\n level = raw;\n }\n }\n this.encodingLevel = level;\n this.limits = {\n ...DEFAULT_LIMITS,\n ...options.limits\n };\n this.exports.push({\n hook: mainHook,\n refcount: 1\n });\n this.imports.push(new ImportTableEntry(this, 0, false));\n this.readLoop().catch((err) => this.abort(err));\n }\n getMainImport() {\n return new RpcMainHook(this.imports[0]);\n }\n shutdown() {\n this.abort(/* @__PURE__ */ new Error("RPC session was shut down by disposing the main stub"), false);\n }\n exportStub(hook) {\n if (this.abortReason) throw this.abortReason;\n let existingExportId = this.reverseExports.get(hook);\n if (existingExportId !== void 0) {\n ++this.exports[existingExportId].refcount;\n return existingExportId;\n } else {\n let exportId = this.nextExportId--;\n this.exports[exportId] = {\n hook,\n refcount: 1\n };\n this.reverseExports.set(hook, exportId);\n return exportId;\n }\n }\n exportPromise(hook) {\n if (this.abortReason) throw this.abortReason;\n let exportId = this.nextExportId--;\n this.exports[exportId] = {\n hook,\n refcount: 1\n };\n this.reverseExports.set(hook, exportId);\n this.ensureResolvingExport(exportId);\n return exportId;\n }\n unexport(ids) {\n for (let id of ids) this.releaseExport(id, 1);\n }\n releaseExport(exportId, refcount) {\n let entry = this.exports[exportId];\n if (!entry) throw new Error(`no such export ID: ${exportId}`);\n if (entry.refcount < refcount) throw new Error(`refcount would go negative: ${entry.refcount} < ${refcount}`);\n entry.refcount -= refcount;\n if (entry.refcount === 0) {\n delete this.exports[exportId];\n this.reverseExports.delete(entry.hook);\n entry.hook.dispose();\n }\n }\n onSendError(error) {\n if (this.options.onSendError) return this.options.onSendError(error);\n }\n ensureResolvingExport(exportId) {\n let exp = this.exports[exportId];\n if (!exp) throw new Error(`no such export ID: ${exportId}`);\n if (!exp.pull) {\n let resolve = async () => {\n let hook = exp.hook;\n for (; ; ) {\n let payload = await hook.pull();\n if (payload.value instanceof RpcStub$1) {\n let { hook: inner, pathIfPromise } = unwrapStubAndPath(payload.value);\n if (pathIfPromise && pathIfPromise.length == 0) {\n if (this.getImport(hook) === void 0) {\n hook = inner;\n continue;\n }\n }\n }\n return payload;\n }\n };\n let autoRelease = exp.autoRelease;\n ++this.pullCount;\n exp.pull = resolve().then((payload) => {\n let value = Devaluator.devaluate(payload.value, void 0, this, payload, this.encodingLevel);\n this.send([\n "resolve",\n exportId,\n value\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n }, (error) => {\n this.send([\n "reject",\n exportId,\n Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n }).catch((error) => {\n try {\n this.send([\n "reject",\n exportId,\n Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)\n ]);\n if (autoRelease) this.releaseExport(exportId, 1);\n } catch (error2) {\n this.abort(error2);\n }\n }).finally(() => {\n if (--this.pullCount === 0) {\n if (this.onBatchDone) this.onBatchDone.resolve();\n }\n });\n }\n }\n getImport(hook) {\n if (hook instanceof RpcImportHook && hook.entry && hook.entry.session === this) return hook.entry.importId;\n else return;\n }\n importStub(idx) {\n if (this.abortReason) throw this.abortReason;\n let entry = this.imports[idx];\n if (!entry) {\n entry = new ImportTableEntry(this, idx, false);\n this.imports[idx] = entry;\n }\n return new RpcImportHook(false, entry);\n }\n importPromise(idx) {\n if (this.abortReason) throw this.abortReason;\n if (this.imports[idx]) return new ErrorStubHook(/* @__PURE__ */ new Error("Bug in RPC system: The peer sent a promise reusing an existing export ID."));\n let entry = new ImportTableEntry(this, idx, true);\n this.imports[idx] = entry;\n return new RpcImportHook(true, entry);\n }\n getExport(idx) {\n return this.exports[idx]?.hook;\n }\n getPipeReadable(exportId) {\n let entry = this.exports[exportId];\n if (!entry || !entry.pipeReadable) throw new Error(`Export ${exportId} is not a pipe or its readable end was already consumed.`);\n let readable = entry.pipeReadable;\n entry.pipeReadable = void 0;\n return readable;\n }\n getLimits() {\n return this.limits;\n }\n createPipe(readable, readableHook) {\n if (this.abortReason) throw this.abortReason;\n this.send(["pipe"]);\n let importId = this.imports.length;\n let entry = new ImportTableEntry(this, importId, false);\n this.imports.push(entry);\n let hook = new RpcImportHook(false, entry);\n let writable = streamImpl.createWritableStreamFromHook(hook);\n readable.pipeTo(writable).catch(() => {\n }).finally(() => readableHook.dispose());\n return importId;\n }\n send(msg) {\n if (this.abortReason !== void 0) return 0;\n if (this.encodingLevel === "string") {\n let msgText;\n try {\n msgText = JSON.stringify(msg);\n } catch (err) {\n try {\n this.abort(err);\n } catch (err2) {\n }\n throw err;\n }\n try {\n let sent = this.transport.send(msgText);\n if (sent !== void 0 && typeof sent.catch === "function") sent.catch((err) => this.abort(err, false));\n } catch (err) {\n queueMicrotask(() => this.abort(err, false));\n }\n return msgText.length;\n } else try {\n let size = this.transport.send(msg);\n if (typeof size === "number") return size;\n let thenable = size;\n if (thenable && typeof thenable.then === "function") Promise.resolve(thenable).catch((err) => this.abort(err, false));\n return;\n } catch (err) {\n queueMicrotask(() => this.abort(err, false));\n return;\n }\n }\n sendCall(id, path, args) {\n if (this.abortReason) {\n args?.dispose();\n throw this.abortReason;\n }\n let value = [\n "pipeline",\n id,\n path\n ];\n if (args) {\n let devalue;\n try {\n devalue = Devaluator.devaluate(args.value, void 0, this, args, this.encodingLevel);\n } catch (err) {\n args.dispose();\n throw err;\n }\n value.push(devalue[0]);\n }\n this.send(["push", value]);\n let entry = new ImportTableEntry(this, this.imports.length, false);\n this.imports.push(entry);\n return new RpcImportHook(true, entry);\n }\n sendStream(id, path, args) {\n if (this.abortReason) {\n args.dispose();\n throw this.abortReason;\n }\n let value = [\n "pipeline",\n id,\n path\n ];\n let devalue;\n try {\n devalue = Devaluator.devaluate(args.value, void 0, this, args, this.encodingLevel);\n } catch (err) {\n args.dispose();\n throw err;\n }\n value.push(devalue[0]);\n let msg = ["stream", value];\n let size = this.send(msg);\n if (size === void 0) size = estimateEncodedSize(msg);\n let importId = this.imports.length;\n let entry = new ImportTableEntry(this, importId, true);\n entry.remoteRefcount = 0;\n entry.localRefcount = 1;\n this.imports.push(entry);\n return {\n promise: entry.awaitResolution().then((p) => {\n p.dispose();\n delete this.imports[importId];\n }, (err) => {\n delete this.imports[importId];\n throw err;\n }),\n size\n };\n }\n sendMap(id, path, captures, instructions) {\n if (this.abortReason) {\n for (let cap of captures) cap.dispose();\n throw this.abortReason;\n }\n let value = [\n "remap",\n id,\n path,\n captures.map((hook) => {\n let importId = this.getImport(hook);\n if (importId !== void 0) return ["import", importId];\n else return ["export", this.exportStub(hook)];\n }),\n instructions\n ];\n this.send(["push", value]);\n let entry = new ImportTableEntry(this, this.imports.length, false);\n this.imports.push(entry);\n return new RpcImportHook(true, entry);\n }\n sendPull(id) {\n if (this.abortReason) throw this.abortReason;\n this.send(["pull", id]);\n }\n sendRelease(id, remoteRefcount) {\n if (this.abortReason) return;\n this.send([\n "release",\n id,\n remoteRefcount\n ]);\n delete this.imports[id];\n }\n abort(error, trySendAbortMessage = true) {\n if (this.abortReason !== void 0) return;\n this.cancelReadLoop?.(error);\n this.cancelReadLoop = void 0;\n if (trySendAbortMessage) try {\n let abortMsg = ["abort", Devaluator.devaluate(error, void 0, this, void 0, this.encodingLevel)];\n if (this.encodingLevel === "string") {\n let sent = this.transport.send(JSON.stringify(abortMsg));\n if (sent !== void 0 && typeof sent.catch === "function") sent.catch((err) => {\n });\n } else {\n let result = this.transport.send(abortMsg);\n if (result && typeof result.then === "function") Promise.resolve(result).catch((err) => {\n });\n }\n } catch (err) {\n }\n if (error === void 0) error = "undefined";\n this.abortReason = error;\n if (this.onBatchDone) this.onBatchDone.reject(error);\n if (this.transport.abort) try {\n this.transport.abort(error);\n } catch (err) {\n Promise.resolve(err);\n }\n for (let i in this.onBrokenCallbacks) try {\n this.onBrokenCallbacks[i](error);\n } catch (err) {\n Promise.resolve(err);\n }\n for (let i in this.imports) this.imports[i].abort(error);\n for (let i in this.exports) this.exports[i].hook.dispose();\n }\n async readLoop() {\n while (!this.abortReason) {\n let readCanceled = Promise.withResolvers();\n this.cancelReadLoop = readCanceled.reject;\n let raw;\n try {\n raw = await Promise.race([this.transport.receive(), readCanceled.promise]);\n } finally {\n if (this.cancelReadLoop === readCanceled.reject) this.cancelReadLoop = void 0;\n }\n if (this.encodingLevel === "string" && raw.length > this.limits.maxMessageSize) throw new TypeError(`Incoming message exceeds maximum size of ${this.limits.maxMessageSize} UTF-16 code units.`);\n if (this.abortReason) break;\n let msg = this.encodingLevel === "string" ? JSON.parse(raw) : raw;\n if (msg instanceof Array) switch (msg[0]) {\n case "push":\n if (msg.length > 1) {\n let hook = new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[1]));\n hook.ignoreUnhandledRejections();\n this.exports.push({\n hook,\n refcount: 1\n });\n continue;\n }\n break;\n case "stream":\n if (msg.length > 1) {\n let hook = new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[1]));\n hook.ignoreUnhandledRejections();\n let exportId = this.exports.length;\n this.exports.push({\n hook,\n refcount: 1,\n autoRelease: true\n });\n this.ensureResolvingExport(exportId);\n continue;\n }\n break;\n case "pipe": {\n let { readable, writable } = new TransformStream();\n let hook = streamImpl.createWritableStreamHook(writable);\n this.exports.push({\n hook,\n refcount: 1,\n pipeReadable: readable\n });\n continue;\n }\n case "pull": {\n let exportId = msg[1];\n if (typeof exportId == "number") {\n this.ensureResolvingExport(exportId);\n continue;\n }\n break;\n }\n case "resolve":\n case "reject": {\n let importId = msg[1];\n if (typeof importId == "number" && msg.length > 2) {\n let imp = this.imports[importId];\n if (imp) if (msg[0] == "resolve") imp.resolve(new PayloadStubHook(new Evaluator(this, this.encodingLevel).evaluate(msg[2])));\n else {\n let payload = new Evaluator(this, this.encodingLevel).evaluate(msg[2]);\n payload.dispose();\n imp.resolve(new ErrorStubHook(payload.value));\n }\n else if (msg[0] == "resolve") new Evaluator(this, this.encodingLevel).evaluate(msg[2]).dispose();\n continue;\n }\n break;\n }\n case "release": {\n let exportId = msg[1];\n let refcount = msg[2];\n if (typeof exportId == "number" && typeof refcount == "number") {\n this.releaseExport(exportId, refcount);\n continue;\n }\n break;\n }\n case "abort": {\n let payload = new Evaluator(this, this.encodingLevel).evaluate(msg[1]);\n payload.dispose();\n this.abort(payload.value, false);\n break;\n }\n }\n throw new Error(`bad RPC message: ${JSON.stringify(msg)}`);\n }\n }\n async drain() {\n if (this.abortReason) throw this.abortReason;\n if (this.pullCount > 0) {\n let { promise, resolve, reject } = Promise.withResolvers();\n this.onBatchDone = {\n resolve,\n reject\n };\n await promise;\n }\n }\n getStats() {\n let result = {\n imports: 0,\n exports: 0\n };\n for (let i in this.imports) ++result.imports;\n for (let i in this.exports) ++result.exports;\n return result;\n }\n};\nvar RpcSession$1 = class {\n #session;\n #mainStub;\n constructor(transport, localMain, options = {}) {\n let mainHook;\n if (localMain) mainHook = new PayloadStubHook(RpcPayload.fromAppReturn(localMain));\n else mainHook = new ErrorStubHook(/* @__PURE__ */ new Error("This connection has no main object."));\n this.#session = new RpcSessionImpl(transport, mainHook, options);\n this.#mainStub = new RpcStub$1(this.#session.getMainImport());\n }\n getRemoteMain() {\n return this.#mainStub;\n }\n getStats() {\n return this.#session.getStats();\n }\n drain() {\n return this.#session.drain();\n }\n};\nfunction newWebSocketRpcSession$1(webSocket, localMain, options) {\n if (typeof webSocket === "string") webSocket = new WebSocket(webSocket);\n return new RpcSession$1(new WebSocketTransport(webSocket), localMain, options).getRemoteMain();\n}\nfunction newWorkersWebSocketRpcResponse(request, localMain, options) {\n if (request.headers.get("Upgrade")?.toLowerCase() !== "websocket") return new Response("This endpoint only accepts WebSocket requests.", { status: 400 });\n let pair = new WebSocketPair();\n let server = pair[0];\n server.accept();\n newWebSocketRpcSession$1(server, localMain, options);\n return new Response(null, {\n status: 101,\n webSocket: pair[1]\n });\n}\nvar WebSocketTransport = class {\n constructor(webSocket) {\n this.#webSocket = webSocket;\n webSocket.binaryType = "arraybuffer";\n if (webSocket.readyState === WebSocket.CONNECTING) {\n this.#sendQueue = [];\n webSocket.addEventListener("open", (event) => {\n try {\n for (let message of this.#sendQueue) webSocket.send(message);\n } catch (err) {\n this.#receivedError(err);\n }\n this.#sendQueue = void 0;\n });\n }\n webSocket.addEventListener("message", (event) => {\n if (this.#error) {\n } else if (typeof event.data === "string" || event.data instanceof ArrayBuffer) if (this.#receiveResolver) {\n this.#receiveResolver(event.data);\n this.#receiveResolver = void 0;\n this.#receiveRejecter = void 0;\n } else this.#receiveQueue.push(event.data);\n else this.#receivedError(/* @__PURE__ */ new TypeError("Received unexpected message type from WebSocket."));\n });\n webSocket.addEventListener("close", (event) => {\n this.#receivedError(/* @__PURE__ */ new Error(`Peer closed WebSocket: ${event.code} ${event.reason}`));\n });\n webSocket.addEventListener("error", (event) => {\n this.#receivedError(/* @__PURE__ */ new Error(`WebSocket connection failed.`));\n });\n }\n #webSocket;\n #sendQueue;\n #receiveResolver;\n #receiveRejecter;\n #receiveQueue = [];\n #error;\n send(message) {\n if (this.#sendQueue === void 0) this.#webSocket.send(message);\n else this.#sendQueue.push(message);\n }\n receive() {\n if (this.#receiveQueue.length > 0) return Promise.resolve(this.#receiveQueue.shift());\n else if (this.#error) return Promise.reject(this.#error);\n else return new Promise((resolve, reject) => {\n this.#receiveResolver = resolve;\n this.#receiveRejecter = reject;\n });\n }\n abort(reason) {\n let message;\n if (reason instanceof Error) message = reason.message;\n else message = `${reason}`;\n let reasonBytes = new TextEncoder().encode(message);\n if (reasonBytes.length > 123) message = new TextDecoder().decode(reasonBytes.subarray(0, 123), { stream: true });\n this.#webSocket.close(3e3, message);\n if (!this.#error) this.#error = reason;\n }\n #receivedError(reason) {\n if (!this.#error) {\n this.#error = reason;\n if (this.#receiveRejecter) {\n this.#receiveRejecter(reason);\n this.#receiveResolver = void 0;\n this.#receiveRejecter = void 0;\n }\n }\n }\n};\nvar BatchServerTransport = class {\n constructor(batch) {\n this.#batchToReceive = batch;\n }\n #batchToSend = [];\n #batchToReceive;\n #allReceived = Promise.withResolvers();\n send(message) {\n this.#batchToSend.push(message);\n }\n async receive() {\n let msg = this.#batchToReceive.shift();\n if (msg !== void 0) return msg;\n else {\n this.#allReceived.resolve();\n return new Promise((r) => {\n });\n }\n }\n abort(reason) {\n this.#allReceived.reject(reason);\n }\n whenAllReceived() {\n return this.#allReceived.promise;\n }\n getResponseBody() {\n return this.#batchToSend.join("\\n");\n }\n};\nasync function newHttpBatchRpcResponse(request, localMain, options) {\n if (request.method !== "POST") return new Response("This endpoint only accepts POST requests.", { status: 405 });\n let body = await request.text();\n let transport = new BatchServerTransport(body === "" ? [] : body.split("\\n"));\n let rpc = new RpcSession$1(transport, localMain, options);\n await transport.whenAllReceived();\n await rpc.drain();\n return new Response(transport.getResponseBody());\n}\nvar currentMapBuilder;\nvar MapBuilder = class {\n context;\n captureMap = /* @__PURE__ */ new Map();\n instructions = [];\n constructor(subject, path) {\n if (currentMapBuilder) this.context = {\n parent: currentMapBuilder,\n captures: [],\n subject: currentMapBuilder.capture(subject),\n path\n };\n else this.context = {\n parent: void 0,\n captures: [],\n subject,\n path\n };\n currentMapBuilder = this;\n }\n unregister() {\n currentMapBuilder = this.context.parent;\n }\n makeInput() {\n return new MapVariableHook(this, 0);\n }\n makeOutput(result) {\n let devalued;\n try {\n devalued = Devaluator.devaluate(result.value, void 0, this, result);\n } finally {\n result.dispose();\n }\n this.instructions.push(devalued);\n if (this.context.parent) {\n this.context.parent.instructions.push([\n "remap",\n this.context.subject,\n this.context.path,\n this.context.captures.map((cap) => ["import", cap]),\n this.instructions\n ]);\n return new MapVariableHook(this.context.parent, this.context.parent.instructions.length);\n } else return this.context.subject.map(this.context.path, this.context.captures, this.instructions);\n }\n pushCall(hook, path, params) {\n let devalued = Devaluator.devaluate(params.value, void 0, this, params);\n devalued = devalued[0];\n let subject = this.capture(hook.dup());\n this.instructions.push([\n "pipeline",\n subject,\n path,\n devalued\n ]);\n return new MapVariableHook(this, this.instructions.length);\n }\n pushGet(hook, path) {\n let subject = this.capture(hook.dup());\n this.instructions.push([\n "pipeline",\n subject,\n path\n ]);\n return new MapVariableHook(this, this.instructions.length);\n }\n capture(hook) {\n if (hook instanceof MapVariableHook && hook.mapper === this) return hook.idx;\n let result = this.captureMap.get(hook);\n if (result === void 0) {\n if (this.context.parent) {\n let parentIdx = this.context.parent.capture(hook);\n this.context.captures.push(parentIdx);\n } else this.context.captures.push(hook);\n result = -this.context.captures.length;\n this.captureMap.set(hook, result);\n }\n return result;\n }\n exportStub(hook) {\n throw new Error("Can\'t construct an RpcTarget or RPC callback inside a mapper function. Try creating a new RpcStub outside the callback first, then using it inside the callback.");\n }\n exportPromise(hook) {\n return this.exportStub(hook);\n }\n getImport(hook) {\n return this.capture(hook);\n }\n unexport(ids) {\n }\n createPipe(readable) {\n throw new Error("Cannot send ReadableStream inside a mapper function.");\n }\n onSendError(error) {\n }\n};\nmapImpl.sendMap = (hook, path, func) => {\n let builder = new MapBuilder(hook, path);\n let result;\n try {\n result = RpcPayload.fromAppReturn(withCallInterceptor(builder.pushCall.bind(builder), () => {\n return func(new RpcPromise$1(builder.makeInput(), []));\n }));\n } finally {\n builder.unregister();\n }\n if (result instanceof Promise) {\n result.catch((err) => {\n });\n throw new Error("RPC map() callbacks cannot be async.");\n }\n return new RpcPromise$1(builder.makeOutput(result), []);\n};\nfunction throwMapperBuilderUseError() {\n throw new Error("Attempted to use an abstract placeholder from a mapper function. Please make sure your map function has no side effects.");\n}\nvar MapVariableHook = class extends StubHook {\n mapper;\n idx;\n constructor(mapper, idx) {\n super();\n this.mapper = mapper;\n this.idx = idx;\n }\n dup() {\n return this;\n }\n dispose() {\n }\n get(path) {\n if (path.length == 0) return this;\n else if (currentMapBuilder) return currentMapBuilder.pushGet(this, path);\n else throwMapperBuilderUseError();\n }\n call(path, args) {\n args.dispose();\n throwMapperBuilderUseError();\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n throwMapperBuilderUseError();\n }\n pull() {\n throwMapperBuilderUseError();\n }\n ignoreUnhandledRejections() {\n }\n onBroken(callback) {\n throwMapperBuilderUseError();\n }\n};\nvar MapApplicator = class {\n captures;\n variables;\n constructor(captures, input) {\n this.captures = captures;\n this.variables = [input];\n }\n dispose() {\n for (let variable of this.variables) variable.dispose();\n }\n apply(instructions) {\n try {\n if (instructions.length < 1) throw new Error("Invalid empty mapper function.");\n for (let instruction of instructions.slice(0, -1)) {\n let payload = new Evaluator(this).evaluateCopy(instruction);\n if (payload.value instanceof RpcStub$1) {\n let hook = unwrapStubNoProperties(payload.value);\n if (hook) {\n this.variables.push(hook);\n continue;\n }\n }\n this.variables.push(new PayloadStubHook(payload));\n }\n return new Evaluator(this).evaluateCopy(instructions[instructions.length - 1]);\n } finally {\n for (let variable of this.variables) variable.dispose();\n }\n }\n importStub(idx) {\n throw new Error("A mapper function cannot refer to exports.");\n }\n importPromise(idx) {\n return this.importStub(idx);\n }\n getExport(idx) {\n if (idx < 0) return this.captures[-idx - 1];\n else return this.variables[idx];\n }\n getPipeReadable(exportId) {\n throw new Error("A mapper function cannot use pipe readables.");\n }\n getLimits() {\n return DEFAULT_LIMITS;\n }\n};\nfunction applyMapToElement(input, parent, owner, captures, instructions) {\n let mapper = new MapApplicator(captures, new PayloadStubHook(RpcPayload.deepCopyFrom(input, parent, owner)));\n try {\n return mapper.apply(instructions);\n } finally {\n mapper.dispose();\n }\n}\nmapImpl.applyMap = (input, parent, owner, captures, instructions) => {\n try {\n let result;\n if (input instanceof RpcPromise$1) throw new Error("applyMap() can\'t be called on RpcPromise");\n else if (input instanceof Array) {\n let payloads = [];\n try {\n for (let elem of input) payloads.push(applyMapToElement(elem, input, owner, captures, instructions));\n } catch (err) {\n for (let payload of payloads) payload.dispose();\n throw err;\n }\n result = RpcPayload.fromArray(payloads);\n } else if (input === null || input === void 0) result = RpcPayload.fromAppReturn(input);\n else result = applyMapToElement(input, parent, owner, captures, instructions);\n return new PayloadStubHook(result);\n } finally {\n for (let cap of captures) cap.dispose();\n }\n};\nvar WritableStreamStubHook = class WritableStreamStubHook2 extends StubHook {\n state;\n static create(stream) {\n return new WritableStreamStubHook2({\n refcount: 1,\n writer: stream.getWriter(),\n closed: false\n });\n }\n constructor(state, dupFrom) {\n super();\n this.state = state;\n if (dupFrom) ++state.refcount;\n }\n getState() {\n if (this.state) return this.state;\n else throw new Error("Attempted to use a WritableStreamStubHook after it was disposed.");\n }\n call(path, args) {\n try {\n let state = this.getState();\n if (path.length !== 1 || typeof path[0] !== "string") throw new Error("WritableStream stub only supports direct method calls");\n const method = path[0];\n if (method !== "write" && method !== "close" && method !== "abort") throw new Error(`Unknown WritableStream method: ${method}`);\n if (method === "close" || method === "abort") state.closed = true;\n return new PromiseStubHook((method === "write" ? args.deliverStreamWrite(state.writer) : args.deliverCall(state.writer[method], state.writer)).then((payload) => new PayloadStubHook(payload)));\n } catch (err) {\n args.dispose();\n return new ErrorStubHook(err);\n }\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot use map() on a WritableStream"));\n }\n get(path) {\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot access properties on a WritableStream stub"));\n }\n dup() {\n return new WritableStreamStubHook2(this.getState(), this);\n }\n pull() {\n return Promise.reject(/* @__PURE__ */ new Error("Cannot pull a WritableStream stub"));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let state = this.state;\n this.state = void 0;\n if (state) {\n if (--state.refcount === 0) {\n if (!state.closed) state.writer.abort(/* @__PURE__ */ new Error("WritableStream RPC stub was disposed without calling close()")).catch(() => {\n });\n state.writer.releaseLock();\n }\n }\n }\n onBroken(callback) {\n }\n};\nvar INITIAL_WINDOW = 256 * 1024;\nvar MAX_WINDOW = 1024 * 1024 * 1024;\nvar MIN_WINDOW = 64 * 1024;\nvar STARTUP_GROWTH_FACTOR = 2;\nvar STEADY_GROWTH_FACTOR = 1.25;\nvar DECAY_FACTOR = 0.9;\nvar STARTUP_EXIT_ROUNDS = 3;\nvar FlowController = class {\n now;\n window = INITIAL_WINDOW;\n bytesInFlight = 0;\n inStartupPhase = true;\n delivered = 0;\n deliveredTime = 0;\n firstAckTime = 0;\n firstAckDelivered = 0;\n minRtt = Infinity;\n roundsWithoutIncrease = 0;\n lastRoundWindow = 0;\n roundStartTime = 0;\n constructor(now) {\n this.now = now;\n }\n onSend(size) {\n this.bytesInFlight += size;\n let token = {\n sentTime: this.now(),\n size,\n deliveredAtSend: this.delivered,\n deliveredTimeAtSend: this.deliveredTime,\n windowAtSend: this.window,\n windowFullAtSend: this.bytesInFlight >= this.window\n };\n return {\n token,\n shouldBlock: token.windowFullAtSend\n };\n }\n onError(token) {\n this.bytesInFlight -= token.size;\n }\n onAck(token) {\n let ackTime = this.now();\n this.delivered += token.size;\n this.deliveredTime = ackTime;\n this.bytesInFlight -= token.size;\n let rtt = ackTime - token.sentTime;\n this.minRtt = Math.min(this.minRtt, rtt);\n if (this.firstAckTime === 0) {\n this.firstAckTime = ackTime;\n this.firstAckDelivered = this.delivered;\n } else {\n let baseTime;\n let baseDelivered;\n if (token.deliveredTimeAtSend === 0) {\n baseTime = this.firstAckTime;\n baseDelivered = this.firstAckDelivered;\n } else {\n baseTime = token.deliveredTimeAtSend;\n baseDelivered = token.deliveredAtSend;\n }\n let interval = ackTime - baseTime;\n let bandwidth = (this.delivered - baseDelivered) / interval;\n let growthFactor = this.inStartupPhase ? STARTUP_GROWTH_FACTOR : STEADY_GROWTH_FACTOR;\n let newWindow = bandwidth * this.minRtt * growthFactor;\n newWindow = Math.min(newWindow, token.windowAtSend * growthFactor);\n if (token.windowFullAtSend) newWindow = Math.max(newWindow, token.windowAtSend * DECAY_FACTOR);\n else newWindow = Math.max(newWindow, this.window);\n this.window = Math.max(Math.min(newWindow, MAX_WINDOW), MIN_WINDOW);\n if (this.inStartupPhase && token.sentTime >= this.roundStartTime) {\n if (this.window > this.lastRoundWindow * STEADY_GROWTH_FACTOR) this.roundsWithoutIncrease = 0;\n else if (++this.roundsWithoutIncrease >= STARTUP_EXIT_ROUNDS) this.inStartupPhase = false;\n this.roundStartTime = ackTime;\n this.lastRoundWindow = this.window;\n }\n }\n return this.bytesInFlight < this.window;\n }\n};\nfunction createWritableStreamFromHook(hook) {\n let pendingError = void 0;\n let hookDisposed = false;\n let fc = new FlowController(() => performance.now());\n let windowResolve;\n let windowReject;\n const disposeHook = () => {\n if (!hookDisposed) {\n hookDisposed = true;\n hook.dispose();\n }\n };\n return new WritableStream({\n write(chunk, controller) {\n if (pendingError !== void 0) throw pendingError;\n const payload = RpcPayload.fromAppParams([chunk]);\n const { promise, size } = hook.stream(["write"], payload);\n if (size === void 0) return promise.catch((err) => {\n if (pendingError === void 0) pendingError = err;\n throw err;\n });\n else {\n let { token, shouldBlock } = fc.onSend(size);\n promise.then(() => {\n if (fc.onAck(token) && windowResolve) {\n windowResolve();\n windowResolve = void 0;\n windowReject = void 0;\n }\n }, (err) => {\n fc.onError(token);\n if (pendingError === void 0) {\n pendingError = err;\n controller.error(err);\n disposeHook();\n }\n if (windowReject) {\n windowReject(err);\n windowResolve = void 0;\n windowReject = void 0;\n }\n });\n if (shouldBlock) return new Promise((resolve, reject) => {\n windowResolve = resolve;\n windowReject = reject;\n });\n }\n },\n async close() {\n if (pendingError !== void 0) {\n disposeHook();\n throw pendingError;\n }\n const { promise } = hook.stream(["close"], RpcPayload.fromAppParams([]));\n try {\n await promise;\n } catch (err) {\n throw pendingError ?? err;\n } finally {\n disposeHook();\n }\n },\n abort(reason) {\n if (pendingError !== void 0) return;\n pendingError = reason ?? /* @__PURE__ */ new Error("WritableStream was aborted");\n if (windowReject) {\n windowReject(pendingError);\n windowResolve = void 0;\n windowReject = void 0;\n }\n const { promise } = hook.stream(["abort"], RpcPayload.fromAppParams([reason]));\n promise.then(() => disposeHook(), () => disposeHook());\n }\n });\n}\nvar ReadableStreamStubHook = class ReadableStreamStubHook2 extends StubHook {\n state;\n static create(stream) {\n return new ReadableStreamStubHook2({\n refcount: 1,\n stream,\n canceled: false\n });\n }\n constructor(state, dupFrom) {\n super();\n this.state = state;\n if (dupFrom) ++state.refcount;\n }\n call(path, args) {\n args.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot call methods on a ReadableStream stub"));\n }\n map(path, captures, instructions) {\n for (let cap of captures) cap.dispose();\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot use map() on a ReadableStream"));\n }\n get(path) {\n return new ErrorStubHook(/* @__PURE__ */ new Error("Cannot access properties on a ReadableStream stub"));\n }\n dup() {\n let state = this.state;\n if (!state) throw new Error("Attempted to dup a ReadableStreamStubHook after it was disposed.");\n return new ReadableStreamStubHook2(state, this);\n }\n pull() {\n return Promise.reject(/* @__PURE__ */ new Error("Cannot pull a ReadableStream stub"));\n }\n ignoreUnhandledRejections() {\n }\n dispose() {\n let state = this.state;\n this.state = void 0;\n if (state) {\n if (--state.refcount === 0) {\n if (!state.canceled) {\n state.canceled = true;\n if (!state.stream.locked) state.stream.cancel(/* @__PURE__ */ new Error("ReadableStream RPC stub was disposed without being consumed")).catch(() => {\n });\n }\n }\n }\n }\n onBroken(callback) {\n }\n};\nstreamImpl.createWritableStreamHook = WritableStreamStubHook.create;\nstreamImpl.createWritableStreamFromHook = createWritableStreamFromHook;\nstreamImpl.createReadableStreamHook = ReadableStreamStubHook.create;\nasync function newWorkersRpcResponse(request, localMain, options) {\n if (request.method === "POST") {\n let response = await newHttpBatchRpcResponse(request, localMain, options);\n response.headers.set("Access-Control-Allow-Origin", "*");\n return response;\n } else if (request.headers.get("Upgrade")?.toLowerCase() === "websocket") return newWorkersWebSocketRpcResponse(request, localMain, options);\n else return new Response("This endpoint only accepts POST or WebSocket requests.", { status: 400 });\n}\n\n// templates/remoteBindings/ProxyServerWorker.ts\nimport { EmailMessage } from "cloudflare:email";\nvar BindingNotFoundError = class extends Error {\n constructor(name) {\n super(`Binding ${name ? `"${name}"` : ""} not found`);\n }\n};\nfunction getExposedJSRPCBinding(request, env) {\n const url = new URL(request.url);\n const bindingName = url.searchParams.get("MF-Binding");\n if (!bindingName) {\n throw new BindingNotFoundError();\n }\n const targetBinding = env[bindingName];\n if (!targetBinding) {\n throw new BindingNotFoundError(bindingName);\n }\n if (targetBinding.constructor.name === "Hyperdrive") {\n const hyperdrive = targetBinding;\n return {\n getConnectionString() {\n return hyperdrive.connectionString;\n },\n connect() {\n const socket = hyperdrive.connect();\n return { readable: socket.readable, writable: socket.writable };\n }\n };\n }\n if (targetBinding.constructor.name === "AnalyticsEngine") {\n const dataset = targetBinding;\n return {\n writeDataPoint(event) {\n dataset.writeDataPoint(event);\n }\n };\n }\n if (targetBinding.constructor.name === "SendEmail") {\n return {\n async send(e) {\n if ("EmailMessage::raw" in e) {\n const message = new EmailMessage(\n e.from,\n e.to,\n e["EmailMessage::raw"]\n );\n return targetBinding.send(message);\n } else {\n return targetBinding.send(e);\n }\n }\n };\n }\n const dispatchNamespaceOptions = url.searchParams.get(\n "MF-Dispatch-Namespace-Options"\n );\n if (dispatchNamespaceOptions) {\n const { name, args, options } = JSON.parse(dispatchNamespaceOptions);\n return targetBinding.get(name, args, options);\n }\n return targetBinding;\n}\nfunction getExposedFetcher(request, env) {\n const bindingName = request.headers.get("MF-Binding");\n if (!bindingName) {\n throw new BindingNotFoundError();\n }\n const targetBinding = env[bindingName];\n if (!targetBinding) {\n throw new BindingNotFoundError(bindingName);\n }\n const dispatchNamespaceOptions = request.headers.get(\n "MF-Dispatch-Namespace-Options"\n );\n if (dispatchNamespaceOptions) {\n const { name, args, options } = JSON.parse(dispatchNamespaceOptions);\n return targetBinding.get(name, args, options);\n }\n return targetBinding;\n}\nfunction isJSRPCBinding(request) {\n const url = new URL(request.url);\n return request.headers.has("Upgrade") && url.searchParams.has("MF-Binding");\n}\nfunction isConnectBinding(request) {\n return request.headers.get("Upgrade") === "websocket" && request.headers.has("MF-Connect-Address");\n}\nfunction handleConnect(request, env) {\n const address = request.headers.get("MF-Connect-Address");\n if (address === null) {\n return new Response("Missing MF-Connect-Address header", { status: 400 });\n }\n const fetcher = getExposedFetcher(request, env);\n const { 0: client, 1: server } = new WebSocketPair();\n server.accept();\n const socket = fetcher.connect(address);\n pipeSocketOverWebSocket(socket, server).catch(() => {\n });\n return new Response(null, { status: 101, webSocket: client });\n}\nfunction truncateCloseReason(reason) {\n const bytes = new TextEncoder().encode(reason);\n if (bytes.length <= 123) {\n return reason;\n }\n let end = 123;\n while (end > 0 && ((bytes[end] ?? 0) & 192) === 128) {\n end--;\n }\n return new TextDecoder().decode(bytes.subarray(0, end));\n}\nasync function pipeSocketOverWebSocket(socket, ws) {\n const writer = socket.writable.getWriter();\n const reader = socket.readable.getReader();\n let wsClosed = false;\n function closeWebSocket(code, reason) {\n if (wsClosed) {\n return;\n }\n wsClosed = true;\n try {\n ws.close(\n code,\n reason === void 0 ? void 0 : truncateCloseReason(reason)\n );\n } catch {\n }\n }\n let writeChain = Promise.resolve();\n let writerClosed = false;\n function closeWriter() {\n if (writerClosed) {\n return Promise.resolve();\n }\n writerClosed = true;\n return writeChain.then(() => writer.close());\n }\n let resolveFromWs;\n let rejectFromWs;\n const fromWebSocket = new Promise((resolve, reject) => {\n resolveFromWs = resolve;\n rejectFromWs = reject;\n });\n ws.addEventListener("message", (event) => {\n const chunk = typeof event.data === "string" ? new TextEncoder().encode(event.data) : new Uint8Array(event.data);\n writeChain = writeChain.then(() => writer.write(chunk)).catch((error) => {\n closeWebSocket(\n 1011,\n error?.message ?? "socket write failed"\n );\n reader.cancel().catch(() => {\n });\n rejectFromWs(error);\n });\n });\n ws.addEventListener("close", (event) => {\n wsClosed = true;\n reader.cancel().catch(() => {\n });\n if (event.code === 1011) {\n rejectFromWs(\n new Error(event.reason || "Remote tunnel closed with an error")\n );\n return;\n }\n closeWriter().then(resolveFromWs, rejectFromWs);\n });\n ws.addEventListener("error", () => {\n wsClosed = true;\n reader.cancel().catch(() => {\n });\n rejectFromWs(new Error("Tunnel WebSocket errored"));\n });\n const toWebSocket = (async () => {\n try {\n for (; ; ) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (wsClosed) {\n break;\n }\n ws.send(\n value.buffer.slice(\n value.byteOffset,\n value.byteOffset + value.byteLength\n )\n );\n }\n closeWebSocket(1e3);\n } catch (error) {\n closeWebSocket(1011, error?.message ?? "socket read failed");\n throw error;\n } finally {\n reader.releaseLock();\n closeWriter().then(resolveFromWs, rejectFromWs);\n }\n })();\n await Promise.all([toWebSocket, fromWebSocket]);\n}\nvar ProxyServerWorker_default = {\n async fetch(request, env) {\n try {\n if (isConnectBinding(request)) {\n return handleConnect(request, env);\n } else if (isJSRPCBinding(request)) {\n return await newWorkersRpcResponse(\n request,\n getExposedJSRPCBinding(request, env)\n );\n } else {\n const fetcher = getExposedFetcher(request, env);\n const originalHeaders = new Headers();\n for (const [name, value] of request.headers) {\n if (name.startsWith("mf-header-")) {\n originalHeaders.set(name.slice("mf-header-".length), value);\n } else if (name === "upgrade") {\n originalHeaders.set(name, value);\n }\n }\n return await fetcher.fetch(\n request.headers.get("MF-URL") ?? "http://example.com",\n new Request(request, {\n redirect: "manual",\n headers: originalHeaders\n })\n );\n }\n } catch (e) {\n if (e instanceof BindingNotFoundError) {\n return new Response(e.message, { status: 400 });\n }\n return new Response(e.message, { status: 500 });\n }\n }\n};\nexport {\n ProxyServerWorker_default as default\n};\n';
186887
186970
  __name(initLogger, "initLogger");
186888
186971
  ProxyWorker_default = '// src/startDevWorker/utils.ts\nimport assert from "node:assert";\nvar PREVIEW_TOKEN_REFRESH_INTERVAL = 50 * 60 * 1e3;\nvar PREVIEW_TOKEN_REFRESH_RETRY_INTERVAL = 60 * 1e3;\nfunction createDeferred(previousDeferred) {\n let resolve, reject;\n const newPromise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n assert(resolve);\n assert(reject);\n previousDeferred?.resolve(newPromise);\n return {\n promise: newPromise,\n resolve,\n reject\n };\n}\nfunction urlFromParts(parts, base = "http://localhost") {\n const url = new URL(base);\n Object.assign(url, parts);\n return url;\n}\nfunction rewriteUrlInHeaderValue(value, from, to) {\n return value.replace(\n /(https?:\\/\\/[^/?#\\s,;"\']+)([^\\s,;"\']*)/gi,\n (match, origin, rest) => {\n let url;\n try {\n url = new URL(origin);\n } catch {\n return match;\n }\n if (url.host !== from.host) {\n return match;\n }\n return to.origin + rest;\n }\n );\n}\n\n// templates/startDevWorker/ProxyWorker.ts\nvar ProxyWorker_default = {\n fetch(req, env) {\n const singleton = env.DURABLE_OBJECT.idFromName("");\n const inspectorProxy = env.DURABLE_OBJECT.get(singleton);\n return inspectorProxy.fetch(req);\n }\n};\nvar ProxyWorker = class {\n constructor(_state, env) {\n this.env = env;\n }\n env;\n proxyData;\n requestQueue = /* @__PURE__ */ new Map();\n requestRetryQueue = /* @__PURE__ */ new Map();\n fetch(request) {\n if (isRequestFromProxyController(request, this.env)) {\n return this.processProxyControllerRequest(request);\n }\n const deferred = createDeferred();\n this.requestQueue.set(request, deferred);\n this.processQueue();\n return deferred.promise;\n }\n processProxyControllerRequest(request) {\n const event = request.cf?.hostMetadata;\n switch (event?.type) {\n case "pause":\n this.proxyData = void 0;\n break;\n case "play":\n this.proxyData = event.proxyData;\n this.processQueue();\n break;\n }\n return new Response(null, { status: 204 });\n }\n /**\n * Process requests that are being retried first, then process newer requests.\n * Requests that are being retried are, by definition, older than requests which haven\'t been processed yet.\n * We don\'t need to be more accurate than this re ordering, since the requests are being fired off synchronously.\n */\n *getOrderedQueue() {\n yield* this.requestRetryQueue;\n yield* this.requestQueue;\n }\n processQueue() {\n const { proxyData } = this;\n if (proxyData === void 0) {\n return;\n }\n for (const [request, deferredResponse] of this.getOrderedQueue()) {\n this.requestRetryQueue.delete(request);\n this.requestQueue.delete(request);\n const outerUrl = new URL(request.url);\n const headers = new Headers(request.headers);\n const userWorkerUrl = new URL(request.url);\n Object.assign(userWorkerUrl, proxyData.userWorkerUrl);\n const innerUrl = urlFromParts(\n proxyData.userWorkerInnerUrlOverrides ?? {},\n request.url\n );\n const encoding = request.cf?.clientAcceptEncoding;\n if (encoding !== void 0) {\n headers.set("Accept-Encoding", encoding);\n }\n rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);\n headers.set("MF-Original-URL", innerUrl.href);\n for (const [key, value] of Object.entries(proxyData.headers ?? {})) {\n if (value === void 0) {\n continue;\n }\n if (key.toLowerCase() === "cookie") {\n const existing = request.headers.get("cookie") ?? "";\n headers.set("cookie", `${existing};${value}`);\n } else {\n headers.set(key, value);\n }\n }\n void fetch(userWorkerUrl, new Request(request, { headers })).then(async (res) => {\n res = new Response(res.body, res);\n rewriteUrlRelatedHeaders(res.headers, innerUrl, outerUrl);\n await checkForPreviewTokenError(res, this.env, proxyData);\n deferredResponse.resolve(res);\n }).catch((error) => {\n const newUserWorkerUrl = this.proxyData && urlFromParts(this.proxyData.userWorkerUrl);\n if (userWorkerUrl.href === newUserWorkerUrl?.href) {\n void sendMessageToProxyController(this.env, {\n type: "error",\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause: error.cause\n }\n });\n deferredResponse.reject(error);\n } else if (request.method === "GET" || request.method === "HEAD") {\n this.requestRetryQueue.set(request, deferredResponse);\n } else {\n deferredResponse.resolve(\n new Response(\n "Your worker restarted mid-request. Please try sending the request again. Only GET or HEAD requests are retried automatically.",\n {\n status: 503,\n headers: { "Retry-After": "0" }\n }\n )\n );\n }\n });\n }\n }\n};\nfunction isRequestFromProxyController(req, env) {\n return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;\n}\nfunction sendMessageToProxyController(env, message) {\n return env.PROXY_CONTROLLER.fetch("http://dummy", {\n method: "POST",\n body: JSON.stringify(message)\n });\n}\nasync function checkForPreviewTokenError(response, env, proxyData) {\n if (response.status !== 400) {\n return;\n }\n const clone = response.clone();\n const text = await clone.text();\n if (text.includes("Invalid Workers Preview configuration") || text.includes("error code: 1031")) {\n void sendMessageToProxyController(env, {\n type: "previewTokenExpired",\n proxyData\n });\n }\n}\nfunction rewriteUrlRelatedHeaders(headers, from, to) {\n const setCookie = headers.getAll("Set-Cookie");\n headers.delete("Set-Cookie");\n headers.forEach((value, key) => {\n if (typeof value === "string" && value.includes(from.host)) {\n headers.set(key, rewriteUrlInHeaderValue(value, from, to));\n }\n });\n for (const cookie of setCookie) {\n headers.append(\n "Set-Cookie",\n cookie.replace(\n new RegExp(`Domain=${from.hostname}($|;|,)`),\n `Domain=${to.hostname}$1`\n )\n );\n }\n}\nexport {\n ProxyWorker,\n ProxyWorker_default as default\n};\n';
186889
186972
  __name(castLogLevel2, "castLogLevel");
@@ -201079,7 +201162,7 @@ var require_cst = __commonJS({
201079
201162
  var cstScalar = require_cst_scalar();
201080
201163
  var cstStringify = require_cst_stringify();
201081
201164
  var cstVisit = require_cst_visit();
201082
- var BOM = "\uFEFF";
201165
+ var BOM2 = "\uFEFF";
201083
201166
  var DOCUMENT = "";
201084
201167
  var FLOW_END = "";
201085
201168
  var SCALAR = "";
@@ -201087,7 +201170,7 @@ var require_cst = __commonJS({
201087
201170
  var isScalar = /* @__PURE__ */ __name((token) => !!token && (token.type === "scalar" || token.type === "single-quoted-scalar" || token.type === "double-quoted-scalar" || token.type === "block-scalar"), "isScalar");
201088
201171
  function prettyToken(token) {
201089
201172
  switch (token) {
201090
- case BOM:
201173
+ case BOM2:
201091
201174
  return "<BOM>";
201092
201175
  case DOCUMENT:
201093
201176
  return "<DOC>";
@@ -201102,7 +201185,7 @@ var require_cst = __commonJS({
201102
201185
  __name(prettyToken, "prettyToken");
201103
201186
  function tokenType(source) {
201104
201187
  switch (source) {
201105
- case BOM:
201188
+ case BOM2:
201106
201189
  return "byte-order-mark";
201107
201190
  case DOCUMENT:
201108
201191
  return "doc-mode";
@@ -201165,7 +201248,7 @@ var require_cst = __commonJS({
201165
201248
  exports2.setScalarValue = cstScalar.setScalarValue;
201166
201249
  exports2.stringify = cstStringify.stringify;
201167
201250
  exports2.visit = cstVisit.visit;
201168
- exports2.BOM = BOM;
201251
+ exports2.BOM = BOM2;
201169
201252
  exports2.DOCUMENT = DOCUMENT;
201170
201253
  exports2.FLOW_END = FLOW_END;
201171
201254
  exports2.SCALAR = SCALAR;
@@ -205313,7 +205396,7 @@ var init_config7 = __esm({
205313
205396
  const maybeBoundDO = config2.durable_objects.bindings.find(
205314
205397
  (durableObject) => durableObject.class_name === className
205315
205398
  );
205316
- if (maybeBoundDO && maybeBoundDO.script_name !== void 0) {
205399
+ if (maybeBoundDO?.script_name !== void 0 && maybeBoundDO.script_name !== config2.name) {
205317
205400
  throw new UserError(
205318
205401
  `The container ${container.name} is referencing the durable object ${className}, which appears to be defined on the ${maybeBoundDO.script_name} Worker instead (via the 'script_name' field). You cannot configure a container on a Durable Object that is defined in another Worker.`,
205319
205402
  {
@@ -221477,7 +221560,7 @@ async function mergeDeployConfigArgs(args, config2) {
221477
221560
  }));
221478
221561
  const routes = args.routes ? applyZoneArgsToRoutes(args.routes, args) : config2.routes ?? (config2.route ? [config2.route] : []);
221479
221562
  const normalizedContainerConfig = await getNormalizedContainerOptions(
221480
- config2,
221563
+ { ...config2, name: shared.name },
221481
221564
  {
221482
221565
  containersRollout: args.containersRollout,
221483
221566
  dryRun: shared.dryRun
@@ -239869,11 +239952,45 @@ function getDurationDates(durationString) {
239869
239952
  }
239870
239953
  return [startDate.toISOString(), endDate.toISOString()];
239871
239954
  }
239955
+ function toD1InsightsUserError(error64, accountId) {
239956
+ switch (error64.reason) {
239957
+ case "rate-limited":
239958
+ return new UserError(
239959
+ esm_default`
239960
+ Could not get D1 insights: the GraphQL Analytics API rate limited the request (${error64.apiMessage}).
239961
+
239962
+ ${error64.retryAfterMs === void 0 ? "The rate limit resets within 5 minutes: wait" : `Wait ${Math.ceil(error64.retryAfterMs / 1e3)} seconds`} before running \`wrangler d1 insights\` again. To use less of the rate limit budget, pass a database name, a shorter --time-period, or a smaller --limit.
239963
+ See https://developers.cloudflare.com/analytics/graphql-api/limits/
239964
+ `,
239965
+ { telemetryMessage: "d1 insights graphql rate limited", cause: error64 }
239966
+ );
239967
+ case "unauthorized":
239968
+ return new UserError(
239969
+ esm_default`
239970
+ Could not get D1 insights: not allowed to read analytics for account ${accountId} (${error64.apiMessage}).
239971
+
239972
+ \`wrangler d1 insights\` needs the "Account Analytics: Read" permission on this account. If you use CLOUDFLARE_API_TOKEN, add that permission to the token at https://dash.cloudflare.com/profile/api-tokens. Otherwise run \`wrangler login\` again, and check that CLOUDFLARE_ACCOUNT_ID or \`account_id\` points at an account you are a member of.
239973
+ `,
239974
+ { telemetryMessage: "d1 insights graphql unauthorized", cause: error64 }
239975
+ );
239976
+ case "other":
239977
+ return new UserError(
239978
+ esm_default`
239979
+ Could not get D1 insights: the GraphQL Analytics API returned an error (${error64.apiMessage}).
239980
+
239981
+ Check the --time-period, --limit and sort options, then run \`wrangler d1 insights\` again.
239982
+ See https://developers.cloudflare.com/analytics/graphql-api/errors/
239983
+ `,
239984
+ { telemetryMessage: "d1 insights graphql error", cause: error64 }
239985
+ );
239986
+ }
239987
+ }
239872
239988
  var cliOptionToGraphQLOption, d1InsightsCommand;
239873
239989
  var init_insights3 = __esm({
239874
239990
  "src/d1/insights.ts"() {
239875
239991
  init_import_meta_url();
239876
239992
  init_src();
239993
+ init_esm();
239877
239994
  init_cfetch2();
239878
239995
  init_create_command();
239879
239996
  init_logger2();
@@ -239886,9 +240003,10 @@ var init_insights3 = __esm({
239886
240003
  count: "count"
239887
240004
  };
239888
240005
  __name(getDurationDates, "getDurationDates");
240006
+ __name(toD1InsightsUserError, "toD1InsightsUserError");
239889
240007
  d1InsightsCommand = createCommand({
239890
240008
  metadata: {
239891
- description: "Get information about the queries run on a D1 database",
240009
+ description: "Get information about the queries run on a D1 database, or on all D1 databases in the account",
239892
240010
  epilogue: "This command acts on remote D1 Databases.",
239893
240011
  status: "experimental",
239894
240012
  owner: "Product: D1"
@@ -239900,8 +240018,7 @@ var init_insights3 = __esm({
239900
240018
  args: {
239901
240019
  name: {
239902
240020
  type: "string",
239903
- demandOption: true,
239904
- description: "The name of the DB"
240021
+ description: "The name or binding of the DB. Omit to get insights for every D1 database in the account"
239905
240022
  },
239906
240023
  "time-period": {
239907
240024
  type: "string",
@@ -239947,12 +240064,12 @@ var init_insights3 = __esm({
239947
240064
  positionalArgs: ["name"],
239948
240065
  async handler({ name: name2, json: json2, limit: limit2, timePeriod, sortType, sortBy, sortDirection }, { config: config2 }) {
239949
240066
  const accountId = await requireAuth(config2);
239950
- const db = await getDatabaseByNameOrBinding(config2, accountId, name2);
240067
+ const db = name2 === void 0 ? void 0 : await getDatabaseByNameOrBinding(config2, accountId, name2);
239951
240068
  const output2 = [];
239952
240069
  const [startDate, endDate] = getDurationDates(timePeriod);
239953
240070
  const parsedSortBy = cliOptionToGraphQLOption[sortBy];
239954
240071
  const orderByClause = parsedSortBy === "count" ? `${parsedSortBy}_${sortDirection}` : `${sortType}_${parsedSortBy}_${sortDirection}`;
239955
- const graphqlQueriesResult = await fetchGraphqlResult(config2, {
240072
+ const graphqlQueriesResult = await fetchGraphqlResultOrThrow(config2, {
239956
240073
  method: "POST",
239957
240074
  body: JSON.stringify({
239958
240075
  query: `query getD1QueriesOverviewQuery($accountTag: string, $filter: ZoneWorkersRequestsFilter_InputObject) {
@@ -239974,6 +240091,7 @@ var init_insights3 = __esm({
239974
240091
  count
239975
240092
  dimensions {
239976
240093
  query
240094
+ databaseId
239977
240095
  }
239978
240096
  }
239979
240097
  }
@@ -239987,7 +240105,7 @@ var init_insights3 = __esm({
239987
240105
  {
239988
240106
  datetimeHour_geq: startDate,
239989
240107
  datetimeHour_leq: endDate,
239990
- databaseId: db.uuid
240108
+ ...db ? { databaseId: db.uuid } : {}
239991
240109
  }
239992
240110
  ]
239993
240111
  }
@@ -239996,6 +240114,11 @@ var init_insights3 = __esm({
239996
240114
  headers: {
239997
240115
  "Content-Type": "application/json"
239998
240116
  }
240117
+ }).catch((err) => {
240118
+ if (err instanceof GraphQLAnalyticsError) {
240119
+ throw toD1InsightsUserError(err, accountId);
240120
+ }
240121
+ throw err;
239999
240122
  });
240000
240123
  graphqlQueriesResult?.data?.viewer?.accounts[0]?.d1QueriesAdaptiveGroups?.forEach(
240001
240124
  (row) => {
@@ -240011,7 +240134,8 @@ var init_insights3 = __esm({
240011
240134
  avgDurationMs: row?.avg?.queryDurationMs ?? 0,
240012
240135
  totalDurationMs: row?.sum?.queryDurationMs ?? 0,
240013
240136
  numberOfTimesRun: row?.count ?? 0,
240014
- queryEfficiency: row?.avg?.rowsReturned && row?.avg?.rowsRead ? row?.avg?.rowsReturned / row?.avg?.rowsRead : 0
240137
+ queryEfficiency: row?.avg?.rowsReturned && row?.avg?.rowsRead ? row?.avg?.rowsReturned / row?.avg?.rowsRead : 0,
240138
+ ...db ? {} : { databaseId: row.dimensions.databaseId ?? null }
240015
240139
  });
240016
240140
  }
240017
240141
  );
@@ -246123,7 +246247,7 @@ var require_util10 = __commonJS({
246123
246247
  }
246124
246248
  __name(normalize6, "normalize");
246125
246249
  exports2.normalize = normalize6;
246126
- function join48(aRoot, aPath) {
246250
+ function join49(aRoot, aPath) {
246127
246251
  if (aRoot === "") {
246128
246252
  aRoot = ".";
246129
246253
  }
@@ -246155,8 +246279,8 @@ var require_util10 = __commonJS({
246155
246279
  }
246156
246280
  return joined;
246157
246281
  }
246158
- __name(join48, "join");
246159
- exports2.join = join48;
246282
+ __name(join49, "join");
246283
+ exports2.join = join49;
246160
246284
  exports2.isAbsolute = function(aPath) {
246161
246285
  return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
246162
246286
  };
@@ -246339,7 +246463,7 @@ var require_util10 = __commonJS({
246339
246463
  parsed.path = parsed.path.substring(0, index + 1);
246340
246464
  }
246341
246465
  }
246342
- sourceURL = join48(urlGenerate(parsed), sourceURL);
246466
+ sourceURL = join49(urlGenerate(parsed), sourceURL);
246343
246467
  }
246344
246468
  return normalize6(sourceURL);
246345
246469
  }
@@ -287046,7 +287170,7 @@ var require_cst2 = __commonJS({
287046
287170
  var cstScalar = require_cst_scalar2();
287047
287171
  var cstStringify = require_cst_stringify2();
287048
287172
  var cstVisit = require_cst_visit2();
287049
- var BOM = "\uFEFF";
287173
+ var BOM2 = "\uFEFF";
287050
287174
  var DOCUMENT = "";
287051
287175
  var FLOW_END = "";
287052
287176
  var SCALAR = "";
@@ -287054,7 +287178,7 @@ var require_cst2 = __commonJS({
287054
287178
  var isScalar = /* @__PURE__ */ __name((token) => !!token && (token.type === "scalar" || token.type === "single-quoted-scalar" || token.type === "double-quoted-scalar" || token.type === "block-scalar"), "isScalar");
287055
287179
  function prettyToken(token) {
287056
287180
  switch (token) {
287057
- case BOM:
287181
+ case BOM2:
287058
287182
  return "<BOM>";
287059
287183
  case DOCUMENT:
287060
287184
  return "<DOC>";
@@ -287069,7 +287193,7 @@ var require_cst2 = __commonJS({
287069
287193
  __name(prettyToken, "prettyToken");
287070
287194
  function tokenType(source) {
287071
287195
  switch (source) {
287072
- case BOM:
287196
+ case BOM2:
287073
287197
  return "byte-order-mark";
287074
287198
  case DOCUMENT:
287075
287199
  return "doc-mode";
@@ -287132,7 +287256,7 @@ var require_cst2 = __commonJS({
287132
287256
  exports2.setScalarValue = cstScalar.setScalarValue;
287133
287257
  exports2.stringify = cstStringify.stringify;
287134
287258
  exports2.visit = cstVisit.visit;
287135
- exports2.BOM = BOM;
287259
+ exports2.BOM = BOM2;
287136
287260
  exports2.DOCUMENT = DOCUMENT;
287137
287261
  exports2.FLOW_END = FLOW_END;
287138
287262
  exports2.SCALAR = SCALAR;
@@ -294108,9 +294232,9 @@ var require_bugsnag = __commonJS({
294108
294232
  }, true);
294109
294233
  }, "load")
294110
294234
  };
294111
- var ___require_29 = __require("path"), join48 = ___require_29.join, resolve37 = ___require_29.resolve;
294235
+ var ___require_29 = __require("path"), join49 = ___require_29.join, resolve37 = ___require_29.resolve;
294112
294236
  var _$pathNormalizer_29 = /* @__PURE__ */ __name(function(p8) {
294113
- return join48(resolve37(p8), "/");
294237
+ return join49(resolve37(p8), "/");
294114
294238
  }, "_$pathNormalizer_29");
294115
294239
  var _$inProject_44 = {
294116
294240
  load: /* @__PURE__ */ __name(function(client) {
@@ -296142,6 +296266,19 @@ async function getDetailsForAutoConfig({
296142
296266
  configured
296143
296267
  });
296144
296268
  }
296269
+ if (framework.id === staticFramework.id && (context2.isNonInteractiveOrCI?.() ?? false) && path29.resolve(projectPath, outputDir) === path29.resolve(projectPath) && (await getPathStats(path29.join(projectPath, "functions")))?.isDirectory()) {
296270
+ const configFile = target === "cf" ? `a \`${CLOUDFLARE_CONFIG_FILE}\` file` : "a Wrangler configuration file";
296271
+ throw new AutoConfigDetectionError(
296272
+ `This project has a \`functions\` directory and static files in its root, which looks like a Cloudflare Pages project using Pages Functions. Automatic configuration cannot migrate Pages Functions to Workers yet, and deploying the project root as static assets would leave the Functions undeployed.
296273
+ If \`functions\` contains Pages Functions, move the static files into a subdirectory (for example \`public/\`) and deploy with \`wrangler pages deploy public --project-name <name>\`, or migrate the Functions to a Worker: https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/
296274
+ If \`functions\` is not Pages Functions, move the static files into a subdirectory or add ${configFile} for the Worker.`,
296275
+ {
296276
+ telemetryMessage: "autoconfig details pages functions with root assets",
296277
+ frameworkId: framework.id,
296278
+ configured
296279
+ }
296280
+ );
296281
+ }
296145
296282
  return {
296146
296283
  ...baseDetails,
296147
296284
  outputDir,
@@ -296271,7 +296408,7 @@ var init_details2 = __esm({
296271
296408
  __name(confirmAutoConfigDetails, "confirmAutoConfigDetails");
296272
296409
  }
296273
296410
  });
296274
- function maybeAppendWranglerToGitIgnoreLikeFile(filePath) {
296411
+ function maybeAppendWranglerToGitIgnoreLikeFile(filePath, { additionalEntries = [], requireEnvWildcard = false } = {}) {
296275
296412
  const filePreExisted = fs14.existsSync(filePath);
296276
296413
  if (!filePreExisted) fs14.writeFileSync(filePath, "");
296277
296414
  const existingGitIgnoreContent = readFileSync(filePath);
@@ -296280,8 +296417,10 @@ function maybeAppendWranglerToGitIgnoreLikeFile(filePath) {
296280
296417
  if (!hasDotWrangler) wranglerGitIgnoreFilesToAdd.push(".wrangler");
296281
296418
  if (!existingGitIgnoreContent.match(/^\/?\.dev\.vars\*(\s|$)/m)) wranglerGitIgnoreFilesToAdd.push(".dev.vars*");
296282
296419
  if (!existingGitIgnoreContent.match(/^!\/?\.dev\.vars\.example(\s|$)/m)) wranglerGitIgnoreFilesToAdd.push("!.dev.vars.example");
296283
- if (!existingGitIgnoreContent.match(/^\/?\.env\*?(\..*?)?(\s|$)/m)) wranglerGitIgnoreFilesToAdd.push(".env*");
296420
+ if (!existingGitIgnoreContent.match(requireEnvWildcard ? /^\.env\*(\s|$)/m : /^\/?\.env\*?(\..*?)?(\s|$)/m)) wranglerGitIgnoreFilesToAdd.push(".env*");
296284
296421
  if (!existingGitIgnoreContent.match(/^!\/?\.env\.example(\s|$)/m)) wranglerGitIgnoreFilesToAdd.push("!.env.example");
296422
+ const existingLines = new Set(existingGitIgnoreContent.split(/\r?\n/).map((line) => line.trim()));
296423
+ for (const entry of additionalEntries) if (!existingLines.has(entry) && !wranglerGitIgnoreFilesToAdd.includes(entry)) wranglerGitIgnoreFilesToAdd.push(entry);
296285
296424
  if (wranglerGitIgnoreFilesToAdd.length === 0) return;
296286
296425
  const s8 = spinner();
296287
296426
  s8.start(`Adding Wrangler files to the ${path29.basename(filePath)} file`);
@@ -296308,17 +296447,113 @@ function directoryExists(path$1) {
296308
296447
  throw new Error(error64);
296309
296448
  }
296310
296449
  }
296450
+ var PROJECT_ROOT_ASSETS_IGNORE_ENTRIES;
296311
296451
  var init_gitignore = __esm({
296312
296452
  "../cli/dist/gitignore.mjs"() {
296313
296453
  init_import_meta_url();
296314
296454
  init_colors();
296315
296455
  init_interactive();
296316
296456
  init_src();
296457
+ PROJECT_ROOT_ASSETS_IGNORE_ENTRIES = [
296458
+ "/_worker.js",
296459
+ "/_routes.json",
296460
+ "/functions",
296461
+ "node_modules",
296462
+ ".git",
296463
+ ".DS_Store",
296464
+ ".npmrc"
296465
+ ];
296317
296466
  __name(maybeAppendWranglerToGitIgnoreLikeFile, "maybeAppendWranglerToGitIgnoreLikeFile");
296318
296467
  __name(maybeAppendWranglerToGitIgnore, "maybeAppendWranglerToGitIgnore");
296319
296468
  __name(directoryExists, "directoryExists");
296320
296469
  }
296321
296470
  });
296471
+ function getManualUpdateMessage(tsconfig) {
296472
+ const entry = JSON.stringify(CLOUDFLARE_TYPES_INCLUDE);
296473
+ const reason = "so that TypeScript can find the types that `cf workers types` generates";
296474
+ switch (tsconfig) {
296475
+ case "include":
296476
+ return `Add ${entry} to the \`include\` array in tsconfig.json ${reason}.`;
296477
+ case "no-include":
296478
+ return `Add an \`include\` array to tsconfig.json that keeps the files it includes today and adds ${entry}, for example ${JSON.stringify(["**/*", CLOUDFLARE_TYPES_INCLUDE])}, ${reason}.`;
296479
+ case "references":
296480
+ return `tsconfig.json uses project references, which TypeScript checks separately. Add this project's ${entry} folder to the \`include\` array of the referenced tsconfig that covers your Worker code, as a path relative to that tsconfig, ${reason}.`;
296481
+ }
296482
+ }
296483
+ function includesCloudflareTypes(entry) {
296484
+ if (typeof entry !== "string") {
296485
+ return false;
296486
+ }
296487
+ const path111 = entry.replace(/^\.\//, "").replace(/\/$/, "");
296488
+ return path111 === ".cloudflare" || path111 === CLOUDFLARE_TYPES_INCLUDE || path111 === `${CLOUDFLARE_TYPES_INCLUDE}/index.d.ts` || path111.startsWith(`${CLOUDFLARE_TYPES_INCLUDE}/*`) || path111.startsWith(".cloudflare/**");
296489
+ }
296490
+ function getCloudflareTypesTsconfigUpdate(projectPath) {
296491
+ const tsconfigPath = path29.join(projectPath, "tsconfig.json");
296492
+ if (!fs14.existsSync(tsconfigPath)) {
296493
+ return void 0;
296494
+ }
296495
+ let hasBom;
296496
+ let json2;
296497
+ let include;
296498
+ let references;
296499
+ try {
296500
+ const content = fs14.readFileSync(tsconfigPath, "utf8");
296501
+ hasBom = content.startsWith(BOM);
296502
+ json2 = hasBom ? content.slice(BOM.length) : content;
296503
+ ({ include, references } = parseJSONC(json2, tsconfigPath));
296504
+ } catch {
296505
+ return { type: "manual", message: getManualUpdateMessage("include") };
296506
+ }
296507
+ if (!Array.isArray(include)) {
296508
+ return {
296509
+ type: "manual",
296510
+ message: getManualUpdateMessage(
296511
+ Array.isArray(references) && references.length > 0 ? "references" : "no-include"
296512
+ )
296513
+ };
296514
+ }
296515
+ if (include.some(includesCloudflareTypes)) {
296516
+ return void 0;
296517
+ }
296518
+ const indentation = /^([ \t]+)"include"/m.exec(json2)?.[1] ?? " ";
296519
+ const edits = modify(json2, ["include", -1], CLOUDFLARE_TYPES_INCLUDE, {
296520
+ isArrayInsertion: true,
296521
+ formattingOptions: {
296522
+ insertSpaces: !indentation.startsWith(" "),
296523
+ tabSize: indentation.startsWith(" ") ? 1 : indentation.length
296524
+ }
296525
+ });
296526
+ return {
296527
+ type: "update",
296528
+ path: tsconfigPath,
296529
+ content: (hasBom ? BOM : "") + applyEdits(json2, edits)
296530
+ };
296531
+ }
296532
+ async function saveCloudflareTypesTsconfigUpdate(projectPath, context2) {
296533
+ const update = getCloudflareTypesTsconfigUpdate(projectPath);
296534
+ if (update?.type !== "update") {
296535
+ return;
296536
+ }
296537
+ try {
296538
+ await fs$1.writeFile(update.path, update.content);
296539
+ } catch {
296540
+ context2.logger.warn(getManualUpdateMessage("include"));
296541
+ }
296542
+ }
296543
+ var CLOUDFLARE_TYPES_INCLUDE, BOM;
296544
+ var init_tsconfig = __esm({
296545
+ "../autoconfig/src/tsconfig.ts"() {
296546
+ init_import_meta_url();
296547
+ init_src();
296548
+ init_main();
296549
+ CLOUDFLARE_TYPES_INCLUDE = ".cloudflare/types";
296550
+ BOM = "\uFEFF";
296551
+ __name(getManualUpdateMessage, "getManualUpdateMessage");
296552
+ __name(includesCloudflareTypes, "includesCloudflareTypes");
296553
+ __name(getCloudflareTypesTsconfigUpdate, "getCloudflareTypesTsconfigUpdate");
296554
+ __name(saveCloudflareTypesTsconfigUpdate, "saveCloudflareTypesTsconfigUpdate");
296555
+ }
296556
+ });
296322
296557
  async function runAutoConfig(autoConfigDetails, autoConfigOptions) {
296323
296558
  const { context: context2 } = autoConfigOptions;
296324
296559
  const target = autoConfigOptions.target ?? "cf";
@@ -296491,6 +296726,12 @@ ${JSON.stringify(autoConfigDetails, null, 2)}...`
296491
296726
  if (workerConfig !== null) {
296492
296727
  await saveCloudflareConfig(autoConfigDetails.projectPath, workerConfig);
296493
296728
  }
296729
+ if (workerConfig?.entrypoint) {
296730
+ await saveCloudflareTypesTsconfigUpdate(
296731
+ autoConfigDetails.projectPath,
296732
+ context2
296733
+ );
296734
+ }
296494
296735
  if (configurationResults.buildTool === "wrangler" && configurationResults.buildConfig) {
296495
296736
  await saveWranglerConfigTs(
296496
296737
  autoConfigDetails.projectPath,
@@ -296499,10 +296740,23 @@ ${JSON.stringify(autoConfigDetails, null, 2)}...`
296499
296740
  }
296500
296741
  }
296501
296742
  maybeAppendWranglerToGitIgnore(autoConfigDetails.projectPath);
296502
- if (autoConfigDetails.outputDir === autoConfigDetails.projectPath) {
296743
+ const assetsDirectory = configurationResults.buildConfig?.assetsDirectory;
296744
+ if (assetsDirectory !== void 0 && path29.resolve(autoConfigDetails.projectPath, assetsDirectory) === path29.resolve(autoConfigDetails.projectPath)) {
296503
296745
  maybeAppendWranglerToGitIgnoreLikeFile(
296504
- `${autoConfigDetails.projectPath}/.assetsignore`
296746
+ `${autoConfigDetails.projectPath}/.assetsignore`,
296747
+ {
296748
+ additionalEntries: PROJECT_ROOT_ASSETS_IGNORE_ENTRIES,
296749
+ requireEnvWildcard: true
296750
+ }
296751
+ );
296752
+ const pagesServerCode = workerConfig?.entrypoint ? [] : ["functions", "_worker.js"].filter(
296753
+ (name2) => fs14.existsSync(path29.resolve(autoConfigDetails.projectPath, name2))
296505
296754
  );
296755
+ if (pagesServerCode.length > 0) {
296756
+ context2.logger.warn(
296757
+ `${pagesServerCode.map((name2) => `\`${name2}\``).join(" and ")} in the project root will not be deployed: the project is configured as static assets, so Pages server code is excluded from the upload (via .assetsignore) and is not run. To keep it, migrate it to a Worker: https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/`
296758
+ );
296759
+ }
296506
296760
  }
296507
296761
  if (buildCommand3 && runBuild2) {
296508
296762
  await context2.runCommand(
@@ -296656,6 +296910,17 @@ async function buildOperationsSummary(autoConfigDetails, workerConfig, configura
296656
296910
  }
296657
296911
  logger7.log("");
296658
296912
  }
296913
+ const tsconfigUpdate = target === "cf" && workerConfig?.entrypoint ? getCloudflareTypesTsconfigUpdate(autoConfigDetails.projectPath) : void 0;
296914
+ if (tsconfigUpdate?.type === "update") {
296915
+ logger7.log("\u{1F4DD} Update tsconfig.json:");
296916
+ logger7.log(
296917
+ ` - Add ${JSON.stringify(CLOUDFLARE_TYPES_INCLUDE)} to "include"`
296918
+ );
296919
+ logger7.log("");
296920
+ } else if (tsconfigUpdate?.type === "manual") {
296921
+ logger7.warn(tsconfigUpdate.message);
296922
+ logger7.log("");
296923
+ }
296659
296924
  if (target === "cf" && workerConfig) {
296660
296925
  logger7.log("\u{1F4C4} Create cloudflare.config.ts:");
296661
296926
  logger7.log(indentFileContent(renderCloudflareConfig(workerConfig)));
@@ -296715,6 +296980,7 @@ var init_run = __esm({
296715
296980
  init_frameworks();
296716
296981
  init_all_frameworks();
296717
296982
  init_static();
296983
+ init_tsconfig();
296718
296984
  init_uses_typescript();
296719
296985
  __name(runAutoConfig, "runAutoConfig");
296720
296986
  __name(mergeWorkerConfig, "mergeWorkerConfig");
@@ -299592,7 +299858,9 @@ function toFlagInput(flag) {
299592
299858
  enabled: flag.enabled,
299593
299859
  default_variation: flag.default_variation,
299594
299860
  variations: flag.variations,
299595
- rules: flag.rules
299861
+ rules: flag.rules,
299862
+ // PUT clears metadata that is omitted, so carry it over.
299863
+ metadata: flag.metadata
299596
299864
  };
299597
299865
  }
299598
299866
  function pathSegment(value) {
@@ -310091,39 +310359,43 @@ function realishPrintLogs2(data) {
310091
310359
  const eventMessage2 = JSON.parse(data.toString());
310092
310360
  if (eventMessage2.logs.length > 0) {
310093
310361
  eventMessage2.logs.forEach(({ level, message }) => {
310094
- logger2.console(level, ...message);
310362
+ logger2.console(level, ...message.map(escapeTailValue));
310095
310363
  });
310096
310364
  }
310097
310365
  if (eventMessage2.exceptions.length > 0) {
310098
310366
  eventMessage2.exceptions.forEach(({ name: name2, message, stack }) => {
310099
- const errorLine = `${name2}: ${typeof message === "string" ? message : util.inspect(message)}`;
310367
+ const errorLine = escapeTailText(
310368
+ `${name2}: ${typeof message === "string" ? message : util.inspect(message)}`
310369
+ );
310100
310370
  logger2.error(`${errorLine}${stack ? `
310101
- ${stack}` : ""}`);
310371
+ ${escapeTailText(stack)}` : ""}`);
310102
310372
  });
310103
310373
  }
310104
310374
  }
310105
310375
  function prettyPrintLogs(data) {
310106
310376
  const eventMessage2 = JSON.parse(data.toString());
310107
310377
  if (isScheduledEvent(eventMessage2.event)) {
310108
- const cronPattern = eventMessage2.event.cron;
310378
+ const cronPattern = escapeTailText(eventMessage2.event.cron);
310109
310379
  const datetime3 = new Date(
310110
310380
  eventMessage2.event.scheduledTime
310111
310381
  ).toLocaleString();
310112
310382
  const outcome = prettifyOutcome(eventMessage2.outcome);
310113
310383
  logger2.log(`"${cronPattern}" @ ${datetime3} - ${outcome}`);
310114
310384
  } else if (isRequestEvent(eventMessage2.event)) {
310115
- const requestMethod = eventMessage2.event?.request.method.toUpperCase();
310385
+ const requestMethod = escapeTailText(
310386
+ eventMessage2.event.request.method.toUpperCase()
310387
+ );
310116
310388
  const url4 = eventMessage2.event?.request.url;
310117
310389
  const outcome = prettifyOutcome(eventMessage2.outcome);
310118
310390
  const datetime3 = new Date(eventMessage2.eventTimestamp).toLocaleString();
310119
310391
  logger2.log(
310120
- url4 ? `${requestMethod} ${url4} - ${outcome} @ ${datetime3}` : `[missing request] - ${outcome} @ ${datetime3}`
310392
+ url4 ? `${requestMethod} ${escapeTailText(url4)} - ${outcome} @ ${datetime3}` : `[missing request] - ${outcome} @ ${datetime3}`
310121
310393
  );
310122
310394
  } else if (isEmailEvent(eventMessage2.event)) {
310123
310395
  const outcome = prettifyOutcome(eventMessage2.outcome);
310124
310396
  const datetime3 = new Date(eventMessage2.eventTimestamp).toLocaleString();
310125
- const mailFrom = eventMessage2.event.mailFrom;
310126
- const rcptTo = eventMessage2.event.rcptTo;
310397
+ const mailFrom = escapeTailText(eventMessage2.event.mailFrom);
310398
+ const rcptTo = escapeTailText(eventMessage2.event.rcptTo);
310127
310399
  const rawSize = eventMessage2.event.rawSize;
310128
310400
  logger2.log(
310129
310401
  `Email from:${mailFrom} to:${rcptTo} size:${rawSize} @ ${datetime3} - ${outcome}`
@@ -310138,7 +310410,7 @@ function prettyPrintLogs(data) {
310138
310410
  const outcome = prettifyOutcome(eventMessage2.outcome);
310139
310411
  const datetime3 = new Date(eventMessage2.eventTimestamp).toLocaleString();
310140
310412
  const tailedScripts = new Set(
310141
- eventMessage2.event.consumedEvents.map((consumedEvent) => consumedEvent.scriptName).filter((scriptName) => !!scriptName)
310413
+ eventMessage2.event.consumedEvents.map((consumedEvent) => consumedEvent.scriptName).filter((scriptName) => !!scriptName).map(escapeTailText)
310142
310414
  );
310143
310415
  logger2.log(
310144
310416
  `Tailing ${Array.from(tailedScripts).join(
@@ -310147,14 +310419,18 @@ function prettyPrintLogs(data) {
310147
310419
  );
310148
310420
  } else if (isTailInfo(eventMessage2.event)) {
310149
310421
  if (eventMessage2.event.type === "overload") {
310150
- logger2.log(`${source_default.red.bold(eventMessage2.event.message)}`);
310422
+ logger2.log(
310423
+ `${source_default.red.bold(escapeTailText(eventMessage2.event.message))}`
310424
+ );
310151
310425
  } else if (eventMessage2.event.type === "overload-stop") {
310152
- logger2.log(`${source_default.yellow.bold(eventMessage2.event.message)}`);
310426
+ logger2.log(
310427
+ `${source_default.yellow.bold(escapeTailText(eventMessage2.event.message))}`
310428
+ );
310153
310429
  }
310154
310430
  } else if (isQueueEvent(eventMessage2.event)) {
310155
310431
  const outcome = prettifyOutcome(eventMessage2.outcome);
310156
310432
  const datetime3 = new Date(eventMessage2.eventTimestamp).toLocaleString();
310157
- const queueName = eventMessage2.event.queue;
310433
+ const queueName = escapeTailText(eventMessage2.event.queue);
310158
310434
  const batchSize = eventMessage2.event.batchSize;
310159
310435
  const batchSizeMsg = `${batchSize} message${batchSize !== 1 ? "s" : ""}`;
310160
310436
  logger2.log(
@@ -310164,7 +310440,7 @@ function prettyPrintLogs(data) {
310164
310440
  const outcome = prettifyOutcome(eventMessage2.outcome);
310165
310441
  const datetime3 = new Date(eventMessage2.eventTimestamp).toLocaleString();
310166
310442
  logger2.log(
310167
- `${eventMessage2.entrypoint}.${eventMessage2.event.rpcMethod} - ${outcome} @ ${datetime3}`
310443
+ `${escapeTailText(String(eventMessage2.entrypoint))}.${escapeTailText(eventMessage2.event.rpcMethod)} - ${outcome} @ ${datetime3}`
310168
310444
  );
310169
310445
  } else {
310170
310446
  const outcome = prettifyOutcome(eventMessage2.outcome);
@@ -310173,20 +310449,34 @@ function prettyPrintLogs(data) {
310173
310449
  }
310174
310450
  if (eventMessage2.logs.length > 0) {
310175
310451
  eventMessage2.logs.forEach(({ level, message }) => {
310176
- logger2.log(` (${level})`, ...message);
310452
+ logger2.log(` (${level})`, ...message.map(escapeTailValue));
310177
310453
  });
310178
310454
  }
310179
310455
  if (eventMessage2.exceptions.length > 0) {
310180
310456
  eventMessage2.exceptions.forEach((err) => {
310181
- const errorLine = `${err.name}: ${typeof err.message === "string" ? err.message : util.inspect(err.message)}`;
310182
- logger2.error(`${errorLine}${err.stack ? `
310183
- ${err.stack}` : ""}`);
310457
+ const errorLine = escapeTailText(
310458
+ `${err.name}: ${typeof err.message === "string" ? err.message : util.inspect(err.message)}`
310459
+ );
310460
+ logger2.error(
310461
+ `${errorLine}${err.stack ? `
310462
+ ${escapeTailText(err.stack)}` : ""}`
310463
+ );
310184
310464
  });
310185
310465
  }
310186
310466
  }
310187
310467
  function jsonPrintLogs(data) {
310188
310468
  logger2.json(JSON.parse(data.toString()));
310189
310469
  }
310470
+ function escapeTailText(value) {
310471
+ return value.replace(
310472
+ // eslint-disable-next-line no-control-regex -- Preserve tabs and line feeds, but render other terminal controls as text.
310473
+ /[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g,
310474
+ (character) => `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`
310475
+ );
310476
+ }
310477
+ function escapeTailValue(value) {
310478
+ return typeof value === "string" ? escapeTailText(value) : value;
310479
+ }
310190
310480
  function isRequestEvent(event) {
310191
310481
  return Boolean(event && "request" in event);
310192
310482
  }
@@ -310236,6 +310526,8 @@ var init_printing = __esm({
310236
310526
  __name(realishPrintLogs2, "realishPrintLogs");
310237
310527
  __name(prettyPrintLogs, "prettyPrintLogs");
310238
310528
  __name(jsonPrintLogs, "jsonPrintLogs");
310529
+ __name(escapeTailText, "escapeTailText");
310530
+ __name(escapeTailValue, "escapeTailValue");
310239
310531
  __name(isRequestEvent, "isRequestEvent");
310240
310532
  __name(isScheduledEvent, "isScheduledEvent");
310241
310533
  __name(isEmailEvent, "isEmailEvent");
@@ -336855,16 +337147,16 @@ var init_validateTokenKey = __esm({
336855
337147
  }, "validateTokenKey");
336856
337148
  }
336857
337149
  });
336858
- var writeFile18, writeSSOTokenToFile;
337150
+ var writeFile19, writeSSOTokenToFile;
336859
337151
  var init_writeSSOTokenToFile = __esm({
336860
337152
  "../../node_modules/.pnpm/@aws-sdk+token-providers@3.721.0_@aws-sdk+client-sso-oidc@3.721.0_@aws-sdk+client-sts@3.721.0_/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js"() {
336861
337153
  init_import_meta_url();
336862
337154
  init_dist_es38();
336863
- ({ writeFile: writeFile18 } = fs14.promises);
337155
+ ({ writeFile: writeFile19 } = fs14.promises);
336864
337156
  writeSSOTokenToFile = /* @__PURE__ */ __name((id, ssoToken) => {
336865
337157
  const tokenFilepath = getSSOTokenFilepath(id);
336866
337158
  const tokenString = JSON.stringify(ssoToken, null, 2);
336867
- return writeFile18(tokenFilepath, tokenString);
337159
+ return writeFile19(tokenFilepath, tokenString);
336868
337160
  }, "writeSSOTokenToFile");
336869
337161
  }
336870
337162
  });
@@ -374400,7 +374692,7 @@ var require_html_rewriter = __commonJS({
374400
374692
  imports["__wbindgen_placeholder__"] = module2.exports;
374401
374693
  var wasm;
374402
374694
  var { awaitPromise, setWasmExports, wrap: wrap4 } = __require(String.raw`./asyncify.js`);
374403
- var { TextDecoder: TextDecoder2, TextEncoder: TextEncoder4 } = __require(String.raw`util`);
374695
+ var { TextDecoder: TextDecoder3, TextEncoder: TextEncoder4 } = __require(String.raw`util`);
374404
374696
  var heap = new Array(32).fill(void 0);
374405
374697
  heap.push(void 0, null, true, false);
374406
374698
  function getObject(idx) {
@@ -374420,7 +374712,7 @@ var require_html_rewriter = __commonJS({
374420
374712
  return ret;
374421
374713
  }
374422
374714
  __name(takeObject, "takeObject");
374423
- var cachedTextDecoder = new TextDecoder2("utf-8", { ignoreBOM: true, fatal: true });
374715
+ var cachedTextDecoder = new TextDecoder3("utf-8", { ignoreBOM: true, fatal: true });
374424
374716
  cachedTextDecoder.decode();
374425
374717
  var cachegetUint8Memory0 = null;
374426
374718
  function getUint8Memory0() {