@temporalio/common
Version:
Common library for code that's used across the Client, Worker, and/or Workflow
64 lines • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extstoreStoreOptions = extstoreStoreOptions;
exports.extstoreInboundOptions = extstoreInboundOptions;
const errors_1 = require("../errors");
const external_storage_runner_1 = require("./external-storage-runner");
const extstore_helpers_1 = require("./extstore-helpers");
/**
* @internal
* @experimental
*/
function extstoreStoreOptions(externalStorage, { initialTarget, deriveContext, limit, abortSignal } = {}) {
const runner = new external_storage_runner_1.ExternalStorageRunner(externalStorage);
return {
transformPayloads: (payloads, target, signal) => runner.store(payloads, { target, abortSignal: signal }),
transformPayload: (payload, target, signal) => runner.store([payload], { target, abortSignal: signal }).then((stored) => stored[0]),
deriveContext,
initialContext: initialTarget,
// Search attributes must keep their literal values so the server can index/search on them.
skipSearchAttributes: true,
limit,
abortSignal,
};
}
function extstoreRetrieveOptions(externalStorage, { limit, abortSignal } = {}) {
const runner = new external_storage_runner_1.ExternalStorageRunner(externalStorage);
return {
transformPayloads: (payloads, _context, signal) => runner.retrieve(payloads, { abortSignal: signal }),
transformPayload: (payload, _context, signal) => runner.retrieve([payload], { abortSignal: signal }).then((retrieved) => retrieved[0]),
skipSearchAttributes: true,
limit,
abortSignal,
};
}
/**
* Detection-only inbound walk used when no {@link ExternalStorage} is configured: leaves every
* payload untouched but throws {@link ExternalStorageNotConfiguredError} on the first reference
* payload.
*/
function extstoreDetectReferencesOptions() {
const assertNoReference = (payloads) => {
if (payloads.some(extstore_helpers_1.isReferencePayload)) {
throw new errors_1.ExternalStorageNotConfiguredError();
}
return payloads;
};
return {
transformPayloads: (payloads) => Promise.resolve(assertNoReference(payloads)),
transformPayload: (payload) => Promise.resolve(assertNoReference([payload])[0]),
skipSearchAttributes: true,
};
}
/**
* The inbound External Storage pass for a worker/client boundary: resolve reference payloads when
* {@link ExternalStorage} is configured, otherwise fail loudly (via {@link extstoreDetectReferencesOptions})
* because nothing can resolve them.
*
* @internal
* @experimental
*/
function extstoreInboundOptions(externalStorage) {
return externalStorage ? extstoreRetrieveOptions(externalStorage) : extstoreDetectReferencesOptions();
}
//# sourceMappingURL=external-storage-visitor.js.map