UNPKG

@datastax/astra-db-ts

Version:
102 lines (101 loc) 3.22 kB
"use strict"; // Copyright Datastax, Inc // SPDX-License-Identifier: Apache-2.0 Object.defineProperty(exports, "__esModule", { value: true }); exports.HeadersResolver = void 0; const index_js_1 = require("../../../lib/index.js"); class HeadersResolver { constructor(target, additionalHeaders, baseHeaders) { Object.defineProperty(this, "_resolveStrategy", { enumerable: true, configurable: true, writable: true, value: void 0 }); const queue = this._mkResolveQueue(target, additionalHeaders); if (queue.length <= 1 && !(queue[0] instanceof index_js_1.HeadersProvider)) { this._resolveStrategy = new StaticHeadersResolveStrategy({ ...baseHeaders, ...queue[0] }); } else { this._resolveStrategy = new DynamicHeadersResolveStrategy(target, baseHeaders, queue); } } resolve() { return this._resolveStrategy.resolve(); } _mkResolveQueue(target, headerProviders) { const ctx = { for: target }; const ret = []; let acc = {}; for (const provider of headerProviders.providers) { // noinspection SuspiciousTypeOfGuard -- the lsp is wrong here if (provider instanceof index_js_1.PureHeadersProvider) { assignNonUndefined(acc, provider.getHeaders(ctx)); } else { ret.push(acc); acc = {}; ret.push(provider); } } if (Object.keys(acc).length > 0) { ret.push(acc); } return ret; } } exports.HeadersResolver = HeadersResolver; class StaticHeadersResolveStrategy { constructor(_headers) { Object.defineProperty(this, "_headers", { enumerable: true, configurable: true, writable: true, value: _headers }); } resolve() { return this._headers; } } class DynamicHeadersResolveStrategy { constructor(_target, _baseHeaders, _resolveQueue) { Object.defineProperty(this, "_target", { enumerable: true, configurable: true, writable: true, value: _target }); Object.defineProperty(this, "_baseHeaders", { enumerable: true, configurable: true, writable: true, value: _baseHeaders }); Object.defineProperty(this, "_resolveQueue", { enumerable: true, configurable: true, writable: true, value: _resolveQueue }); } async resolve() { const headers = { ...this._baseHeaders }; for (const item of this._resolveQueue) { if (item instanceof index_js_1.HeadersProvider) { assignNonUndefined(headers, await item.getHeaders({ for: this._target })); } else { assignNonUndefined(headers, item); } } return headers; } } function assignNonUndefined(target, source) { for (const key in source) { if (source[key] !== undefined) { target[key] = source[key]; } } }