/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/ts-repository@0.0.2/js/src/repos.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var error_1=require("./error");const ID_RADIX=36;class Id{constructor(r){this._value=r}toString(){return this._value}}exports.Id=Id;class RadixIdFactory{constructor(r){this._seedProvider=r}createId(){let r=this._seedProvider.next();return new Id(r.toString(36))}radix(){return 36}}exports.RadixIdFactory=RadixIdFactory;class IdError extends error_1.AbstractError{constructor(r,e){super(`Entity with id ${r.toString()} does not exist`)}}exports.IdError=IdError;class UpdateError extends IdError{constructor(r){super(r,"UpdateError")}}exports.UpdateError=UpdateError;class ReadError extends IdError{constructor(r){super(r,"ReadError")}}exports.ReadError=ReadError;class DeleteError extends IdError{constructor(r){super(r,"DeleteError")}}exports.DeleteError=DeleteError;class CreateError extends error_1.AbstractError{}exports.CreateError=CreateError;class CapacityExceeddedError extends CreateError{constructor(r){super(`Cannot create entity. Reached repository capacity of ${r}`)}}exports.CapacityExceeddedError=CapacityExceeddedError;class MemoryRepository{constructor(r,e){this._idFactory=r,this._capacity=e,this._cache={}}create(r){if(Object.keys(this._cache).length>=this._capacity)return Promise.reject(new CapacityExceeddedError(this._capacity));let e=this._idFactory.createId();return this._cache[e.toString()]=r,Promise.resolve(e)}unknownId(r){return!(r.toString()in this._cache)}read(r){return this.unknownId(r)?Promise.reject(new ReadError(r)):Promise.resolve(this._cache[r.toString()])}update(r,e){return this.unknownId(r)?Promise.reject(new UpdateError(r)):(this._cache[r.toString()]=e,Promise.resolve(null))}delete(r){return this.unknownId(r)?Promise.reject(new DeleteError(r)):(delete this._cache[r.toString()],Promise.resolve(null))}count(){return Promise.resolve(Object.keys(this._cache).length)}all(){return Promise.resolve(this._cache)}}exports.MemoryRepository=MemoryRepository;
//# sourceMappingURL=/sm/b204a470b9c7655c922d56bda1d6df7e98afae498740622204ed5403e2f15332.map