UNPKG

metaapi.cloud-sdk

Version:

SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)

85 lines (75 loc) 1.9 kB
'use strict'; /** * Util class to track usages of something */ export default class UsageCounter { private _usages: Record<string, Set<any>> = {}; /** * Acquires a usage. If already acquired by specified usage, the count won't be incremented * @param key key to count * @param usage usage */ acquire(key: string, usage: any) { this._usages[key] ||= new Set(); this._usages[key].add(usage); } /** * Releases a usage. If already not acquired by specified usage, the counte won't be decremented * @param key key to count * @param usage usage */ release(key: string, usage: any) { this._usages[key]?.delete(usage); if (!this._usages[key]?.size) { delete this._usages[key]; } } /** * Releases all usages of a key * @param key key to release */ releaseAll(key: string) { for (let usage of this.getUsages(key)) { this.release(key, usage); } } /** * Returns whether a key is currently in use * @param key key to check * @returns is in use */ isInUse(key: string): boolean { return !!this._usages[key]?.size; } /** * Returns key usage IDs * @param key key to count * @returns usages */ getUsages(key: any): Set<any> { return this._usages[key] || new Set(); } /** * Returns if key is acquired by usage * @param key key to check * @param usage usage * @returns is acquired */ isAcquiredBy(key: string, usage: any): boolean { return !!this._usages[key]?.has(usage); } /** * Returns keys which are acquired by specific usage * @param usage usage * @returns keys acquired by the specified usage */ getAcquiredBy(usage: string): string[] { let result: string[] = []; for (let [key, usages] of Object.entries(this._usages)) { if (usages.has(usage)) { result.push(key); } } return result; } }