All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.src.cache-client.js Maven / Gradle / Ivy

The newest version!
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleCacheClient = exports.CacheClient = void 0;
const cache_control_client_1 = require("./internal/cache-control-client");
const cache_data_client_1 = require("./internal/cache-data-client");
const _1 = require(".");
const utils_1 = require("@gomomento/sdk-core/dist/src/internal/utils");
const AbstractCacheClient_1 = require("@gomomento/sdk-core/dist/src/internal/clients/cache/AbstractCacheClient");
const sdk_core_1 = require("@gomomento/sdk-core");
const EAGER_CONNECTION_DEFAULT_TIMEOUT_SECONDS = 30;
/**
 * Momento Cache Client.
 *
 * Features include:
 * - Get, set, and delete data
 * - Create, delete, and list caches
 * - Create, revoke, and list signing keys
 */
class CacheClient extends AbstractCacheClient_1.AbstractCacheClient {
    /**
     * Creates an instance of CacheClient.
     * @param {CacheClientProps} props configuration and credentials for creating a CacheClient.
     */
    constructor(props) {
        var _a, _b;
        (0, utils_1.validateTtlSeconds)(props.defaultTtlSeconds);
        const configuration = (_a = props.configuration) !== null && _a !== void 0 ? _a : getDefaultCacheClientConfiguration();
        const credentialProvider = (_b = props.credentialProvider) !== null && _b !== void 0 ? _b : (0, sdk_core_1.getDefaultCredentialProvider)();
        const allProps = {
            ...props,
            configuration: configuration,
            credentialProvider: credentialProvider,
        };
        let semaphore = undefined;
        const numConcurrentRequests = configuration
            .getTransportStrategy()
            .getGrpcConfig()
            .getMaxConcurrentRequests();
        if (numConcurrentRequests !== null && numConcurrentRequests !== undefined) {
            (0, utils_1.validateMaxConcurrentRequests)(numConcurrentRequests);
            semaphore = new utils_1.Semaphore(numConcurrentRequests);
        }
        const controlClient = new cache_control_client_1.CacheControlClient({
            configuration: configuration,
            credentialProvider: credentialProvider,
        });
        const numClients = configuration
            .getTransportStrategy()
            .getGrpcConfig()
            .getNumClients();
        const dataClients = (0, utils_1.range)(numClients).map((_, id) => new cache_data_client_1.CacheDataClient(allProps, String(id), semaphore));
        super(controlClient, dataClients);
        this.dataRequestConcurrencySemaphore = undefined;
        this._configuration = configuration;
        this.notYetAbstractedControlClient = controlClient;
        this.dataRequestConcurrencySemaphore = semaphore;
        this.logger = configuration.getLoggerFactory().getLogger(this);
        this.logger.debug('Creating Momento CacheClient');
        // Initialize middlewares that have init methods. These currently start
        // background tasks for logging that will execute until they are explicitly
        // stopped. This is usually handled by the client's close method, but if
        // there is ever a chance that this client constructor may fail after these
        // methods are called, it is up to you to catch the exception and call close
        // on each of these manually.
        this._configuration.getMiddlewares().forEach(m => {
            if (m.init) {
                m.init();
            }
        });
    }
    close() {
        if (this.dataRequestConcurrencySemaphore !== undefined) {
            this.dataRequestConcurrencySemaphore.purge();
        }
        this.controlClient.close();
        this.dataClients.map(dc => dc.close());
        this._configuration.getMiddlewares().forEach(m => {
            if (m.close) {
                m.close();
            }
        });
    }
    /**
     * Creates a new instance of CacheClient. If eagerConnectTimeout is present in the given props, the client will
     * eagerly create its connection to Momento. It will wait until the connection is established, or until the timout
     * runs out. It the timeout runs out, the client will be valid to use, but it may still be connecting in the background.
     * @param {EagerCacheClientProps} props configuration and credentials for creating a CacheClient.
     */
    static async create(props) {
        const client = new CacheClient(props);
        try {
            const timeout = props.eagerConnectTimeout !== undefined
                ? props.eagerConnectTimeout
                : EAGER_CONNECTION_DEFAULT_TIMEOUT_SECONDS;
            // eslint-disable-next-line @typescript-eslint/no-unsafe-call
            (0, utils_1.validateTimeout)(timeout);
            // client need to explicitly set the value as 0 to disable eager connection.
            if (props.eagerConnectTimeout !== 0) {
                await Promise.all(client.dataClients.map(dc => dc.connect(timeout)));
            }
            return client;
        }
        catch (e) {
            client.close();
            throw e;
        }
    }
    /**
     * Returns the configuration used to create the CacheClient.
     *
     * @readonly
     * @type {Configuration} - The configuration used to create the CacheClient.
     * @memberof CacheClient
     */
    get configuration() {
        return this._configuration;
    }
    /**
     * Flushes / clears all the items of the given cache
     *
     * @param {string} cacheName - The cache to be flushed.
     * @returns {Promise} -
     * {@link CacheFlush.Success} on success.
     * {@link CacheFlush.Error} on failure.
     */
    async flushCache(cacheName) {
        return await this.notYetAbstractedControlClient.flushCache(cacheName);
    }
}
exports.CacheClient = CacheClient;
function getDefaultCacheClientConfiguration() {
    const config = _1.Configurations.Laptop.latest();
    const logger = config.getLoggerFactory().getLogger('CacheClient');
    logger.info('No configuration provided to CacheClient. Using default "Laptop" configuration, suitable for development. For production use, consider specifying an explicit configuration.');
    return config;
}
/**
 * @deprecated use {CacheClient} instead
 */
class SimpleCacheClient extends CacheClient {
}
exports.SimpleCacheClient = SimpleCacheClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwRUFBbUU7QUFDbkUsb0VBQTZEO0FBQzdELHdCQUEyRTtBQUUzRSx1RUFNcUQ7QUFFckQsaUhBQTRHO0FBRTVHLGtEQUFpRTtBQUVqRSxNQUFNLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQztBQUVwRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxXQUFZLFNBQVEseUNBQW1CO0lBTWxEOzs7T0FHRztJQUNILFlBQVksS0FBdUI7O1FBQ2pDLElBQUEsMEJBQWtCLEVBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMsTUFBTSxhQUFhLEdBQ2pCLE1BQUEsS0FBSyxDQUFDLGFBQWEsbUNBQUksa0NBQWtDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLGtCQUFrQixHQUN0QixNQUFBLEtBQUssQ0FBQyxrQkFBa0IsbUNBQUksSUFBQSx1Q0FBNEIsR0FBRSxDQUFDO1FBRTdELE1BQU0sUUFBUSxHQUF3QjtZQUNwQyxHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUUsYUFBYTtZQUM1QixrQkFBa0IsRUFBRSxrQkFBa0I7U0FDdkMsQ0FBQztRQUVGLElBQUksU0FBUyxHQUEwQixTQUFTLENBQUM7UUFDakQsTUFBTSxxQkFBcUIsR0FBRyxhQUFhO2FBQ3hDLG9CQUFvQixFQUFFO2FBQ3RCLGFBQWEsRUFBRTthQUNmLHdCQUF3QixFQUFFLENBQUM7UUFDOUIsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFO1lBQ3pFLElBQUEscUNBQTZCLEVBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyRCxTQUFTLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLHlDQUFrQixDQUFDO1lBQzNDLGFBQWEs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LENBQUM7U0FDVDtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ2EsS0FBSyxDQUFDLFVBQVUsQ0FDOUIsU0FBaUI7UUFFakIsT0FBTyxNQUFNLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEUsQ0FBQztDQUNGO0FBbklELGtDQW1JQztBQUVELFNBQVMsa0NBQWtDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLGlCQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRSxNQUFNLENBQUMsSUFBSSxDQUNULDhLQUE4SyxDQUMvSyxDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxXQUFXO0NBQUc7QUFBckQsOENBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDYWNoZUNvbnRyb2xDbGllbnR9IGZyb20gJy4vaW50ZXJuYWwvY2FjaGUtY29udHJvbC1jbGllbnQnO1xuaW1wb3J0IHtDYWNoZURhdGFDbGllbnR9IGZyb20gJy4vaW50ZXJuYWwvY2FjaGUtZGF0YS1jbGllbnQnO1xuaW1wb3J0IHtDYWNoZUZsdXNoLCBNb21lbnRvTG9nZ2VyLCBDb25maWd1cmF0aW9uLCBDb25maWd1cmF0aW9uc30gZnJvbSAnLic7XG5pbXBvcnQge0NhY2hlQ2xpZW50UHJvcHMsIEVhZ2VyQ2FjaGVDbGllbnRQcm9wc30gZnJvbSAnLi9jYWNoZS1jbGllbnQtcHJvcHMnO1xuaW1wb3J0IHtcbiAgcmFuZ2UsXG4gIFNlbWFwaG9yZSxcbiAgdmFsaWRhdGVNYXhDb25jdXJyZW50UmVxdWVzdHMsXG4gIHZhbGlkYXRlVGltZW91dCxcbiAgdmFsaWRhdGVUdGxTZWNvbmRzLFxufSBmcm9tICdAZ29tb21lbnRvL3Nkay1jb3JlL2Rpc3Qvc3JjL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7SUNhY2hlQ2xpZW50fSBmcm9tICdAZ29tb21lbnRvL3Nkay1jb3JlL2Rpc3Qvc3JjL2NsaWVudHMvSUNhY2hlQ2xpZW50JztcbmltcG9ydCB7QWJzdHJhY3RDYWNoZUNsaWVudH0gZnJvbSAnQGdvbW9tZW50by9zZGstY29yZS9kaXN0L3NyYy9pbnRlcm5hbC9jbGllbnRzL2NhY2hlL0Fic3RyYWN0Q2FjaGVDbGllbnQnO1xuaW1wb3J0IHtDYWNoZUNsaWVudEFsbFByb3BzfSBmcm9tICcuL2ludGVybmFsL2NhY2hlLWNsaWVudC1hbGwtcHJvcHMnO1xuaW1wb3J0IHtnZXREZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyfSBmcm9tICdAZ29tb21lbnRvL3Nkay1jb3JlJztcblxuY29uc3QgRUFHRVJfQ09OTkVDVElPTl9ERUZBVUxUX1RJTUVPVVRfU0VDT05EUyA9IDMwO1xuXG4vKipcbiAqIE1vbWVudG8gQ2FjaGUgQ2xpZW50LlxuICpcbiAqIEZlYXR1cmVzIGluY2x1ZGU6XG4gKiAtIEdldCwgc2V0LCBhbmQgZGVsZXRlIGRhdGFcbiAqIC0gQ3JlYXRlLCBkZWxldGUsIGFuZCBsaXN0IGNhY2hlc1xuICogLSBDcmVhdGUsIHJldm9rZSwgYW5kIGxpc3Qgc2lnbmluZyBrZXlzXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWNoZUNsaWVudCBleHRlbmRzIEFic3RyYWN0Q2FjaGVDbGllbnQgaW1wbGVtZW50cyBJQ2FjaGVDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTW9tZW50b0xvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBub3RZZXRBYnN0cmFjdGVkQ29udHJvbENsaWVudDogQ2FjaGVDb250cm9sQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIGRhdGFSZXF1ZXN0Q29uY3VycmVuY3lTZW1hcGhvcmU6IFNlbWFwaG9yZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDYWNoZUNsaWVudC5cbiAgICogQHBhcmFtIHtDYWNoZUNsaWVudFByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIGFuZCBjcmVkZW50aWFscyBmb3IgY3JlYXRpbmcgYSBDYWNoZUNsaWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDYWNoZUNsaWVudFByb3BzKSB7XG4gICAgdmFsaWRhdGVUdGxTZWNvbmRzKHByb3BzLmRlZmF1bHRUdGxTZWNvbmRzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID1cbiAgICAgIHByb3BzLmNvbmZpZ3VyYXRpb24gPz8gZ2V0RGVmYXVsdENhY2hlQ2xpZW50Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxQcm92aWRlciA9XG4gICAgICBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXIgPz8gZ2V0RGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcigpO1xuXG4gICAgY29uc3QgYWxsUHJvcHM6IENhY2hlQ2xpZW50QWxsUHJvcHMgPSB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXI6IGNyZWRlbnRpYWxQcm92aWRlcixcbiAgICB9O1xuXG4gICAgbGV0IHNlbWFwaG9yZTogU2VtYXBob3JlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG51bUNvbmN1cnJlbnRSZXF1ZXN0cyA9IGNvbmZpZ3VyYXRpb25cbiAgICAgIC5nZXRUcmFuc3BvcnRTdHJhdGVneSgpXG4gICAgICAuZ2V0R3JwY0NvbmZpZygpXG4gICAgICAuZ2V0TWF4Q29uY3VycmVudFJlcXVlc3RzKCk7XG4gICAgaWYgKG51bUNvbmN1cnJlbnRSZXF1ZXN0cyAhPT0gbnVsbCAmJiBudW1Db25jdXJyZW50UmVxdWVzdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdGVNYXhDb25jdXJyZW50UmVxdWVzdHMobnVtQ29uY3VycmVudFJlcXVlc3RzKTtcbiAgICAgIHNlbWFwaG9yZSA9IG5ldyBTZW1hcGhvcmUobnVtQ29uY3VycmVudFJlcXVlc3RzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sQ2xpZW50ID0gbmV3IENhY2hlQ29udHJvbENsaWVudCh7XG4gICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyOiBjcmVkZW50aWFsUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBudW1DbGllbnRzID0gY29uZmlndXJhdGlvblxuICAgICAgLmdldFRyYW5zcG9ydFN0cmF0ZWd5KClcbiAgICAgIC5nZXRHcnBjQ29uZmlnKClcbiAgICAgIC5nZXROdW1DbGllbnRzKCk7XG4gICAgY29uc3QgZGF0YUNsaWVudHMgPSByYW5nZShudW1DbGllbnRzKS5tYXAoXG4gICAgICAoXywgaWQpID0+IG5ldyBDYWNoZURhdGFDbGllbnQoYWxsUHJvcHMsIFN0cmluZyhpZCksIHNlbWFwaG9yZSlcbiAgICApO1xuICAgIHN1cGVyKGNvbnRyb2xDbGllbnQsIGRhdGFDbGllbnRzKTtcbiAgICB0aGlzLl9jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICB0aGlzLm5vdFlldEFic3RyYWN0ZWRDb250cm9sQ2xpZW50ID0gY29udHJvbENsaWVudDtcbiAgICB0aGlzLmRhdGFSZXF1ZXN0Q29uY3VycmVuY3lTZW1hcGhvcmUgPSBzZW1hcGhvcmU7XG5cbiAgICB0aGlzLmxvZ2dlciA9IGNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyRmFjdG9yeSgpLmdldExvZ2dlcih0aGlzKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgTW9tZW50byBDYWNoZUNsaWVudCcpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtaWRkbGV3YXJlcyB0aGF0IGhhdmUgaW5pdCBtZXRob2RzLiBUaGVzZSBjdXJyZW50bHkgc3RhcnRcbiAgICAvLyBiYWNrZ3JvdW5kIHRhc2tzIGZvciBsb2dnaW5nIHRoYXQgd2lsbCBleGVjdXRlIHVudGlsIHRoZXkgYXJlIGV4cGxpY2l0bHlcbiAgICAvLyBzdG9wcGVkLiBUaGlzIGlzIHVzdWFsbHkgaGFuZGxlZCBieSB0aGUgY2xpZW50J3MgY2xvc2UgbWV0aG9kLCBidXQgaWZcbiAgICAvLyB0aGVyZSBpcyBldmVyIGEgY2hhbmNlIHRoYXQgdGhpcyBjbGllbnQgY29uc3RydWN0b3IgbWF5IGZhaWwgYWZ0ZXIgdGhlc2VcbiAgICAvLyBtZXRob2RzIGFyZSBjYWxsZWQsIGl0IGlzIHVwIHRvIHlvdSB0byBjYXRjaCB0aGUgZXhjZXB0aW9uIGFuZCBjYWxsIGNsb3NlXG4gICAgLy8gb24gZWFjaCBvZiB0aGVzZSBtYW51YWxseS5cbiAgICB0aGlzLl9jb25maWd1cmF0aW9uLmdldE1pZGRsZXdhcmVzKCkuZm9yRWFjaChtID0+IHtcbiAgICAgIGlmIChtLmluaXQpIHtcbiAgICAgICAgbS5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVJlcXVlc3RDb25jdXJyZW5jeVNlbWFwaG9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGFSZXF1ZXN0Q29uY3VycmVuY3lTZW1hcGhvcmUucHVyZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sQ2xpZW50LmNsb3NlKCk7XG4gICAgdGhpcy5kYXRhQ2xpZW50cy5tYXAoZGMgPT4gZGMuY2xvc2UoKSk7XG4gICAgdGhpcy5fY29uZmlndXJhdGlvbi5nZXRNaWRkbGV3YXJlcygpLmZvckVhY2gobSA9PiB7XG4gICAgICBpZiAobS5jbG9zZSkge1xuICAgICAgICBtLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBDYWNoZUNsaWVudC4gSWYgZWFnZXJDb25uZWN0VGltZW91dCBpcyBwcmVzZW50IGluIHRoZSBnaXZlbiBwcm9wcywgdGhlIGNsaWVudCB3aWxsXG4gICAqIGVhZ2VybHkgY3JlYXRlIGl0cyBjb25uZWN0aW9uIHRvIE1vbWVudG8uIEl0IHdpbGwgd2FpdCB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgb3IgdW50aWwgdGhlIHRpbW91dFxuICAgKiBydW5zIG91dC4gSXQgdGhlIHRpbWVvdXQgcnVucyBvdXQsIHRoZSBjbGllbnQgd2lsbCBiZSB2YWxpZCB0byB1c2UsIGJ1dCBpdCBtYXkgc3RpbGwgYmUgY29ubmVjdGluZyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICogQHBhcmFtIHtFYWdlckNhY2hlQ2xpZW50UHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gYW5kIGNyZWRlbnRpYWxzIGZvciBjcmVhdGluZyBhIENhY2hlQ2xpZW50LlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShwcm9wczogRWFnZXJDYWNoZUNsaWVudFByb3BzKTogUHJvbWlzZTxDYWNoZUNsaWVudD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDYWNoZUNsaWVudChwcm9wcyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPVxuICAgICAgICBwcm9wcy5lYWdlckNvbm5lY3RUaW1lb3V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmVhZ2VyQ29ubmVjdFRpbWVvdXRcbiAgICAgICAgICA6IEVBR0VSX0NPTk5FQ1RJT05fREVGQVVMVF9USU1FT1VUX1NFQ09ORFM7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICB2YWxpZGF0ZVRpbWVvdXQodGltZW91dCk7XG4gICAgICAvLyBjbGllbnQgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgdmFsdWUgYXMgMCB0byBkaXNhYmxlIGVhZ2VyIGNvbm5lY3Rpb24uXG4gICAgICBpZiAocHJvcHMuZWFnZXJDb25uZWN0VGltZW91dCAhPT0gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBjbGllbnQuZGF0YUNsaWVudHMubWFwKGRjID0+IChkYyBhcyBDYWNoZURhdGFDbGllbnQpLmNvbm5lY3QodGltZW91dCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgQ2FjaGVDbGllbnQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Q29uZmlndXJhdGlvbn0gLSBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgQ2FjaGVDbGllbnQuXG4gICAqIEBtZW1iZXJvZiBDYWNoZUNsaWVudFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maWd1cmF0aW9uKCk6IENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoZXMgLyBjbGVhcnMgYWxsIHRoZSBpdGVtcyBvZiB0aGUgZ2l2ZW4gY2FjaGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBiZSBmbHVzaGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUZsdXNoLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVGbHVzaC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVGbHVzaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBmbHVzaENhY2hlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVGbHVzaC5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm5vdFlldEFic3RyYWN0ZWRDb250cm9sQ2xpZW50LmZsdXNoQ2FjaGUoY2FjaGVOYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0Q2FjaGVDbGllbnRDb25maWd1cmF0aW9uKCk6IENvbmZpZ3VyYXRpb24ge1xuICBjb25zdCBjb25maWcgPSBDb25maWd1cmF0aW9ucy5MYXB0b3AubGF0ZXN0KCk7XG4gIGNvbnN0IGxvZ2dlciA9IGNvbmZpZy5nZXRMb2dnZXJGYWN0b3J5KCkuZ2V0TG9nZ2VyKCdDYWNoZUNsaWVudCcpO1xuICBsb2dnZXIuaW5mbyhcbiAgICAnTm8gY29uZmlndXJhdGlvbiBwcm92aWRlZCB0byBDYWNoZUNsaWVudC4gVXNpbmcgZGVmYXVsdCBcIkxhcHRvcFwiIGNvbmZpZ3VyYXRpb24sIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudC4gRm9yIHByb2R1Y3Rpb24gdXNlLCBjb25zaWRlciBzcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uJ1xuICApO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7Q2FjaGVDbGllbnR9IGluc3RlYWRcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbXBsZUNhY2hlQ2xpZW50IGV4dGVuZHMgQ2FjaGVDbGllbnQge31cbiJdfQ==




© 2015 - 2024 Weber Informatics LLC | Privacy Policy