UNPKG

@n1k1t/mock-server

Version:

The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations

83 lines 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContainersStorage = void 0; const utils_1 = require("./utils"); const model_1 = require("./model"); class ContainersStorage { constructor(configuration) { this.configuration = configuration; this.entities = new Map(); this.aliases = new Map(); } get size() { return this.entities.size; } entries() { return this.entities.entries(); } values() { return this.entities.values(); } /** Extends this storage with another */ extend(storage) { for (const container of storage.values()) { this.register(container); } return this; } register(predicate) { const container = predicate instanceof model_1.Container ? predicate : model_1.Container.build({ key: (0, utils_1.compileContainerKey)(predicate.key), group: this.configuration.group, payload: predicate.payload, timestamp: Date.now(), ttl: predicate?.ttl ?? 3600, }); container.configure({ hooks: { unbind: (key) => this.delete(key), bind: (key, target) => this.aliases.set(key, target), }, }); for (const alias of container.aliases.values()) { this.aliases.set(alias, container); } this.entities.set(container.key, container); return container; } /** Finds or creates the container by provided configuration */ provide(configuration) { return this.find(configuration.key) ?? this.register(configuration); } find(key) { const compiled = (0, utils_1.compileContainerKey)(key); const entity = this.entities.get(compiled); if (entity) { return entity; } return this.aliases.get(compiled); } delete(key) { const compiled = (0, utils_1.compileContainerKey)(key); const entity = this.entities.get(compiled); if (entity) { this.entities.delete(entity.key); entity.aliases.forEach((key) => this.aliases.delete(key)); return this; } this.aliases.delete(compiled); return this; } /** Returns a list of expired containers */ expired() { const timestamp = Date.now(); return [...this.entities.values()].filter((container) => container.checkIsExpired(timestamp)); } clear() { this.entities.clear(); this.aliases.clear(); return this; } } exports.ContainersStorage = ContainersStorage; //# sourceMappingURL=storage.js.map