Cache returns deep copies to prevent deletion mid-use
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
| 	"name": "@ztimson/utils", | 	"name": "@ztimson/utils", | ||||||
| 	"version": "0.23.12", | 	"version": "0.23.13", | ||||||
| 	"description": "Utility library", | 	"description": "Utility library", | ||||||
| 	"author": "Zak Timson", | 	"author": "Zak Timson", | ||||||
| 	"license": "MIT", | 	"license": "MIT", | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								src/cache.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/cache.ts
									
									
									
									
									
								
							| @@ -1,3 +1,5 @@ | |||||||
|  | import {deepCopy} from './objects.ts'; | ||||||
|  |  | ||||||
| export type CacheOptions = { | export type CacheOptions = { | ||||||
| 	/** Delete keys automatically after x amount of seconds */ | 	/** Delete keys automatically after x amount of seconds */ | ||||||
| 	ttl?: number; | 	ttl?: number; | ||||||
| @@ -37,11 +39,11 @@ export class Cache<K extends string | number | symbol, T> { | |||||||
| 		return new Proxy(this, { | 		return new Proxy(this, { | ||||||
| 			get: (target: this, prop: string | symbol) => { | 			get: (target: this, prop: string | symbol) => { | ||||||
| 				if(prop in target) return (target as any)[prop]; | 				if(prop in target) return (target as any)[prop]; | ||||||
| 				return target.store[prop as K]; | 				return deepCopy(target.store[prop as K]); | ||||||
| 			}, | 			}, | ||||||
| 			set: (target: this, prop: string | symbol, value: any) => { | 			set: (target: this, prop: string | symbol, value: any) => { | ||||||
| 				if(prop in target) (target as any)[prop] = value; | 				if(prop in target) (target as any)[prop] = value; | ||||||
| 				else target.store[prop as K] = value; | 				else this.set(prop as K, value); | ||||||
| 				return true; | 				return true; | ||||||
| 			} | 			} | ||||||
| 		}); | 		}); | ||||||
| @@ -58,7 +60,7 @@ export class Cache<K extends string | number | symbol, T> { | |||||||
| 	 * @return {T[]} Array of items | 	 * @return {T[]} Array of items | ||||||
| 	 */ | 	 */ | ||||||
| 	all(): T[] { | 	all(): T[] { | ||||||
| 		return Object.values(this.store); | 		return deepCopy(Object.values(this.store)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -119,7 +121,7 @@ export class Cache<K extends string | number | symbol, T> { | |||||||
| 	 * @return {T} Cached item | 	 * @return {T} Cached item | ||||||
| 	 */ | 	 */ | ||||||
| 	get(key: K): T { | 	get(key: K): T { | ||||||
| 		return this.store[key]; | 		return deepCopy(this.store[key]); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -137,7 +139,7 @@ export class Cache<K extends string | number | symbol, T> { | |||||||
| 	 * @return {Record<K, T>} | 	 * @return {Record<K, T>} | ||||||
| 	 */ | 	 */ | ||||||
| 	map(): Record<K, T> { | 	map(): Record<K, T> { | ||||||
| 		return structuredClone(this.store); | 		return deepCopy(this.store); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user