@clickup/ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
43 lines • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Registry = void 0;
const misc_1 = require("./misc");
/**
* Represents a container of TObj's that can be created in the container from
* the TInit data. If the object corresponding to a particular init data already
* exists, it's returned instead of being created.
*/
class Registry {
constructor(options) {
this.options = options;
this.map = new Map();
}
/**
* Computes the key for the init data and returns the object corresponding to
* that key if it already exists in the registry. Otherwise, creates a new
* object, adds it to the registry and returns it.
*/
getOrCreate(init) {
const key = this.options.key(init);
let obj = this.map.get(key)?.obj;
if (!obj) {
obj = this.options.create(init);
this.map.set(key, { obj, key, init });
}
return [obj, key];
}
/**
* Deletes all objects from the registry except those whose keys are in the
* keepKeys set. For each object, calls an optional end() handler.
*/
async deleteExcept(keepKeys) {
await (0, misc_1.mapJoin)([...this.map], async ([key, { obj, init }]) => {
if (!keepKeys.has(key)) {
this.map.delete(key);
await this.options.end?.(obj, key, init);
}
});
}
}
exports.Registry = Registry;
//# sourceMappingURL=Registry.js.map