UNPKG

@aws/pdk

Version:

All documentation is located at: https://aws.github.io/aws-pdk

41 lines 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Counter = void 0; /** * Counter class provides utils for adding/subtracting key based counts. * * For example, you can create a counter to track number of each CfnResourceType based on resource type key. * * @internal */ class Counter { constructor() { /** @internal */ this._counts = new Map(); } /** Gets record of keyed counts */ get counts() { return Object.fromEntries(this._counts); } /** Increment key count by 1 */ add(key) { const count = (this._counts.get(key) || 0) + 1; this._counts.set(key, count); return count; } /** Decrement key count by 1 */ subtract(key) { const count = (this._counts.get(key) || 0) - 1; if (count < 0) { throw new Error(`Attempt to subtract count from zero`); } this._counts.set(key, count); return count; } /** Gets the current count for given key */ getCount(key) { return this._counts.get(key) || 0; } } exports.Counter = Counter; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvdW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBY0E7Ozs7OztHQU1HO0FBQ0gsTUFBYSxPQUFPO0lBQXBCO1FBQ0UsZ0JBQWdCO1FBQ1IsWUFBTyxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBNEI5QyxDQUFDO0lBMUJDLGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsR0FBRyxDQUFDLEdBQU07UUFDUixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFFBQVEsQ0FBQyxHQUFNO1FBQ2IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsUUFBUSxDQUFDLEdBQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUE5QkQsMEJBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyohIENvcHlyaWdodCBbQW1hem9uLmNvbV0oaHR0cDovL2FtYXpvbi5jb20vKSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICovXG4vKipcbiAqIElDb3VudGVyUmVjb3JkIGlzIHJlY29yZCBvZiBrZXllZCBjb3VudHMgZnJvbSB7QGxpbmsgQ291bnRlcnN9LlxuICpcbiAqIFRoZSByZWNvcmQgaXMgYSBtYXBwaW5nIG9mIGBrZXkgPT4gY291bnRgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgSUNvdW50ZXJSZWNvcmQgPSB7XG4gIC8qKlxuICAgKiBDb3VudGVyIGtleSA9PiBjb3VudCB2YWx1ZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBba2V5OiBzdHJpbmddOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIENvdW50ZXIgY2xhc3MgcHJvdmlkZXMgdXRpbHMgZm9yIGFkZGluZy9zdWJ0cmFjdGluZyBrZXkgYmFzZWQgY291bnRzLlxuICpcbiAqIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGNvdW50ZXIgdG8gdHJhY2sgbnVtYmVyIG9mIGVhY2ggQ2ZuUmVzb3VyY2VUeXBlIGJhc2VkIG9uIHJlc291cmNlIHR5cGUga2V5LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQ291bnRlcjxUID0gc3RyaW5nPiB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBfY291bnRzOiBNYXA8VCwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICAvKiogR2V0cyByZWNvcmQgb2Yga2V5ZWQgY291bnRzICovXG4gIGdldCBjb3VudHMoKTogSUNvdW50ZXJSZWNvcmQge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5fY291bnRzKTtcbiAgfVxuXG4gIC8qKiBJbmNyZW1lbnQga2V5IGNvdW50IGJ5IDEgKi9cbiAgYWRkKGtleTogVCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnQgPSAodGhpcy5fY291bnRzLmdldChrZXkpIHx8IDApICsgMTtcbiAgICB0aGlzLl9jb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKiBEZWNyZW1lbnQga2V5IGNvdW50IGJ5IDEgKi9cbiAgc3VidHJhY3Qoa2V5OiBUKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb3VudCA9ICh0aGlzLl9jb3VudHMuZ2V0KGtleSkgfHwgMCkgLSAxO1xuICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzdWJ0cmFjdCBjb3VudCBmcm9tIHplcm9gKTtcbiAgICB9XG4gICAgdGhpcy5fY291bnRzLnNldChrZXksIGNvdW50KTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBjb3VudCBmb3IgZ2l2ZW4ga2V5ICovXG4gIGdldENvdW50KGtleTogVCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50cy5nZXQoa2V5KSB8fCAwO1xuICB9XG59XG4iXX0=