UNPKG

slavery-js

Version:

A simple clustering app that allows you to scale an application on multiple thread, containers or machines

1 lines 3.88 kB
{"version":3,"sources":["../../src/service/Stash.ts"],"sourcesContent":["type StashItem = any;\n\nclass Stash {\n private store: Map<string, StashItem> = new Map();\n private queue: Promise<void> = Promise.resolve();\n\n /**\n * Internal method to serialize and validate JSON-serializable object\n */\n private validateSerializable(value: StashItem): void {\n // since we are using socket.io, there is no need\n try {\n JSON.stringify(value);\n } catch (err) {\n throw new Error(\"Value must be JSON-serializable.\");\n }\n }\n\n /**\n * Internal lock function to queue up tasks\n */\n private async withLock<T>(fn: () => Promise<T>): Promise<T> {\n let release: () => void;\n const next = new Promise<void>(resolve => (release = resolve));\n\n const prev = this.queue;\n this.queue = next;\n\n await prev;\n try {\n return await fn();\n } finally {\n release!();\n }\n }\n\n async set(key: string, value: StashItem): Promise<void> {\n // if now key is pass assume a defualt key\n if(value === undefined || value === null) {\n value = key;\n key = '_default';\n }\n //this.validateSerializable(value);\n return this.withLock(async () => {\n this.store.set(key, value);\n });\n }\n\n async get<T = StashItem>(key: string): Promise<T | undefined> {\n if(key === undefined || key === null || key === '')\n key = '_default';\n return this.withLock(async () => {\n return this.store.get(key);\n });\n }\n\n async delete(key: string): Promise<void> {\n if(key === undefined || key === null || key === '')\n key = '_default';\n return this.withLock(async () => {\n this.store.delete(key);\n });\n }\n\n async clear(): Promise<void> {\n return this.withLock(async () => {\n this.store.clear();\n });\n }\n\n async has(key: string): Promise<boolean> {\n if(key === undefined || key === null || key === '')\n key = '_default';\n return this.withLock(async () => {\n return this.store.has(key);\n });\n }\n\n async keys(): Promise<string[]> {\n return this.withLock(async () => {\n return Array.from(this.store.keys());\n });\n }\n}\n\nexport default Stash;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,MAAM,MAAM;AAAA,EAAZ;AACI,wBAAQ,SAAgC,oBAAI,IAAI;AAChD,wBAAQ,SAAuB,QAAQ,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvC,qBAAqB,OAAwB;AAEjD,QAAI;AACA,WAAK,UAAU,KAAK;AAAA,IACxB,SAAS,KAAK;AACV,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACtD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,SAAY,IAAkC;AACxD,QAAI;AACJ,UAAM,OAAO,IAAI,QAAc,aAAY,UAAU,OAAQ;AAE7D,UAAM,OAAO,KAAK;AAClB,SAAK,QAAQ;AAEb,UAAM;AACN,QAAI;AACA,aAAO,MAAM,GAAG;AAAA,IACpB,UAAE;AACE,cAAS;AAAA,IACb;AAAA,EACJ;AAAA,EAEA,MAAM,IAAI,KAAa,OAAiC;AAEpD,QAAG,UAAU,UAAa,UAAU,MAAM;AACtC,cAAQ;AACR,YAAM;AAAA,IACV;AAEA,WAAO,KAAK,SAAS,YAAY;AAC7B,WAAK,MAAM,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,IAAmB,KAAqC;AAC1D,QAAG,QAAQ,UAAa,QAAQ,QAAQ,QAAQ;AAC5C,YAAM;AACV,WAAO,KAAK,SAAS,YAAY;AAC7B,aAAO,KAAK,MAAM,IAAI,GAAG;AAAA,IAC7B,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,OAAO,KAA4B;AACrC,QAAG,QAAQ,UAAa,QAAQ,QAAQ,QAAQ;AAC5C,YAAM;AACV,WAAO,KAAK,SAAS,YAAY;AAC7B,WAAK,MAAM,OAAO,GAAG;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,QAAuB;AACzB,WAAO,KAAK,SAAS,YAAY;AAC7B,WAAK,MAAM,MAAM;AAAA,IACrB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,IAAI,KAA+B;AACrC,QAAG,QAAQ,UAAa,QAAQ,QAAQ,QAAQ;AAC5C,YAAM;AACV,WAAO,KAAK,SAAS,YAAY;AAC7B,aAAO,KAAK,MAAM,IAAI,GAAG;AAAA,IAC7B,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,OAA0B;AAC5B,WAAO,KAAK,SAAS,YAAY;AAC7B,aAAO,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IACvC,CAAC;AAAA,EACL;AACJ;AAEA,IAAO,gBAAQ;","names":[]}