UNPKG

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
"use strict"; 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 });