UNPKG

cf-workers-query

Version:

Automatically cache and revalidate data in Cloudflare Workers. Using the Cache API and Execution Context

56 lines (54 loc) 2 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); 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/lib/durable-object-deduper.ts var durable_object_deduper_exports = {}; __export(durable_object_deduper_exports, { QueryDeduper: () => QueryDeduper }); module.exports = __toCommonJS(durable_object_deduper_exports); var import_cloudflare_workers = require("cloudflare:workers"); var QueryDeduper = class extends import_cloudflare_workers.DurableObject { static { __name(this, "QueryDeduper"); } inflight = /* @__PURE__ */ new Map(); async dedupe(request) { const key = new URL(request.url).searchParams.get("key"); if (!key) { return new Response('Missing "key" query parameter', { status: 400 }); } const existing = this.inflight.get(key); if (existing) return existing; const promise = this.executeQuery(request).finally(() => { this.inflight.delete(key); }); this.inflight.set(key, promise); return promise; } async executeQuery(request) { const body = await request.json(); return fetch(body.url, body.init); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { QueryDeduper });