durable-utils
Version:
Utilities for Cloudflare Durable Objects and Workers, including SQL migrations, sharding and retry utilities, and more.
99 lines (97 loc) • 3.86 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/experimental/region-placer.ts
var region_placer_exports = {};
__export(region_placer_exports, {
RegionPlaceableTarget: () => RegionPlaceableTarget,
RegionPlaceableWorkerEntrypoint: () => RegionPlaceableWorkerEntrypoint,
RegionPlacer: () => RegionPlacer,
RegionPlacerDO: () => RegionPlacerDO
});
module.exports = __toCommonJS(region_placer_exports);
var import_cloudflare_workers = require("cloudflare:workers");
var RegionPlacerDO = class extends import_cloudflare_workers.DurableObject {
async createExecutorStub(bindingName, locationHint) {
if (!this.env[bindingName]?.createRegionPlacedWorkerEntrypoint) {
throw new Error("RegionPlacerDO: invalid bindingName given");
}
return this.env[bindingName].createRegionPlacedWorkerEntrypoint(locationHint);
}
};
var RegionPlacer = class extends import_cloudflare_workers.WorkerEntrypoint {
async place(locationHint, bindingName) {
return await createDOStub(this.env, locationHint).createExecutorStub(bindingName, locationHint);
}
};
var RegionPlaceableWorkerEntrypoint = class extends import_cloudflare_workers.WorkerEntrypoint {
async createRegionPlacedWorkerEntrypoint(locationHint) {
return new RegionPlaceableTarget(this, locationHint);
}
async regionPlace(locationHint) {
const thisClassName = Object.getPrototypeOf(this)?.constructor?.name;
if (!thisClassName) {
throw new Error("could not infer the class name of the WorkerEntrypoint attempting to regionPlane()");
}
let bindingName = "";
Object.getOwnPropertyNames(this.env).forEach((value) => {
if (value.toLowerCase() === thisClassName.toLowerCase()) {
bindingName = value;
}
});
if (!bindingName) {
throw new Error(
`could not find the right Binding to invoke on this.env. Inferred binding name not found is '${thisClassName}'`
);
}
return createDOStub(this.env, locationHint).createExecutorStub(bindingName, locationHint);
}
};
var RegionPlaceableTarget = class extends import_cloudflare_workers.RpcTarget {
#locationHint;
constructor(we, locationHint) {
super();
this.#locationHint = locationHint;
const targetPrototype = Object.getPrototypeOf(we);
const thisPrototype = Object.getPrototypeOf(this);
Object.getOwnPropertyNames(targetPrototype).forEach((value) => {
if (value === "constructor" || value === "regionPlace" || typeof targetPrototype[value] !== "function") {
return;
}
thisPrototype[value] = targetPrototype[value];
});
}
async targetLocationHint() {
return this.#locationHint;
}
};
function createDOStub(env, locationHint) {
const shard = Math.ceil(Math.random() * 100);
const doId = env.RegionPlacerDO.idFromName(`region-placer-${locationHint}-${shard}`);
const doStub = env.RegionPlacerDO.get(doId, {
locationHint
});
return doStub;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
RegionPlaceableTarget,
RegionPlaceableWorkerEntrypoint,
RegionPlacer,
RegionPlacerDO
});