@drift-labs/common
Version:
Common functions for Drift
64 lines • 2.33 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MarketId = void 0;
const sdk_1 = require("@drift-labs/sdk");
const utils_1 = require("../utils");
class MarketId {
constructor(marketIndex, marketType) {
this.marketIndex = marketIndex;
this.marketType = marketType;
this._key = MarketId.key(marketIndex, marketType);
this._isSpot = utils_1.ENUM_UTILS.match(marketType, sdk_1.MarketType.SPOT);
this._isPerp = utils_1.ENUM_UTILS.match(marketType, sdk_1.MarketType.PERP);
this._marketTypeStr = utils_1.ENUM_UTILS.toStr(marketType);
}
static getOrCreate(marketIndex, marketType) {
const key = MarketId.key(marketIndex, marketType);
if (MarketId.cache.has(key)) {
return MarketId.cache.get(key);
}
const marketId = new MarketId(marketIndex, marketType);
MarketId.cache.set(key, marketId);
return marketId;
}
static createPerpMarket(marketIndex) {
return MarketId.getOrCreate(marketIndex, sdk_1.MarketType.PERP);
}
static createSpotMarket(marketIndex) {
return MarketId.getOrCreate(marketIndex, sdk_1.MarketType.SPOT);
}
static getMarketIdFromKey(key) {
if (MarketId.cache.has(key)) {
return MarketId.cache.get(key);
}
const [marketType, marketIndex] = key.split('_');
const marketId = new MarketId(parseInt(marketIndex), utils_1.ENUM_UTILS.toObj(marketType));
MarketId.cache.set(key, marketId);
return marketId;
}
get isSpot() {
return this._isSpot;
}
get isPerp() {
return this._isPerp;
}
get marketTypeStr() {
return this._marketTypeStr;
}
static key(marketIndex, marketType) {
return `${utils_1.ENUM_UTILS.toStr(marketType)}_${marketIndex}`;
}
/**
* Returns a unique string that can be used as a key in a map.
*/
get key() {
return this._key; // Micro-optimisation to avoid string concatenation every time the key is accessed
}
equals(other) {
return (utils_1.ENUM_UTILS.match(this.marketType, other.marketType) &&
this.marketIndex === other.marketIndex);
}
}
exports.MarketId = MarketId;
MarketId.cache = new Map();
//# sourceMappingURL=MarketId.js.map
;