UNPKG

@temporalio/common

Version:

Common library for code that's used across the Client, Worker, and/or Workflow

75 lines 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExternalStorage = exports.StorageDriverClaim = void 0; const errors_1 = require("../errors"); /** * Reference returned from {@link StorageDriver.store}. `claimData` is an * opaque key/value map the driver uses to retrieve the payload later. * * @internal * @experimental */ class StorageDriverClaim { claimData; constructor(claimData) { this.claimData = claimData; } } exports.StorageDriverClaim = StorageDriverClaim; // ============================================================================ // Configuration // ============================================================================ /** Default {@link ExternalStorage.payloadSizeThreshold}: 256 KiB. */ const DEFAULT_PAYLOAD_SIZE_THRESHOLD = 256 * 1024; /** * Configuration for external storage. Holds the registered drivers, an * optional selector, and the size threshold above which payloads are * eligible for offloading to external storage. A selector function is * required when more than one driver is registered. * * @internal * @experimental */ class ExternalStorage { drivers; /** * Selects the destination driver for each payload, or returns `null` to keep * the payload inline. */ driverSelector; payloadSizeThreshold; driversByName; constructor({ drivers, driverSelector, payloadSizeThreshold = DEFAULT_PAYLOAD_SIZE_THRESHOLD, }) { if (!Array.isArray(drivers) || drivers.length === 0) { throw new errors_1.ValueError('ExternalStorage requires at least one driver'); } if (typeof payloadSizeThreshold !== 'number' || !Number.isFinite(payloadSizeThreshold) || payloadSizeThreshold < 0) { throw new errors_1.ValueError(`ExternalStorage.payloadSizeThreshold must be a non-negative finite number, got ${String(payloadSizeThreshold)}`); } const driversByName = new Map(); for (const driver of drivers) { if (typeof driver?.name !== 'string' || driver.name.length === 0) { throw new errors_1.ValueError("Storage driver 'name' must be a non-empty string"); } if (driversByName.has(driver.name)) { throw new errors_1.ValueError(`Duplicate storage driver name: '${driver.name}'`); } driversByName.set(driver.name, driver); } if (driverSelector === undefined && driversByName.size > 1) { throw new errors_1.ValueError('ExternalStorage.driverSelector is required when more than one driver is registered'); } this.drivers = [...drivers]; this.driverSelector = driverSelector ?? (() => drivers[0]); this.payloadSizeThreshold = payloadSizeThreshold; this.driversByName = driversByName; } /** Look up a registered driver by name. Returns `null` if no driver with that name is registered. */ getDriver(name) { return this.driversByName.get(name) ?? null; } } exports.ExternalStorage = ExternalStorage; //# sourceMappingURL=extstore.js.map