@peerbit/cache 2.0.6 → 2.1.0-55cebfe

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,9 @@
1
- export type CacheData<T> = {
1
+ export interface CacheData<T> {
2
2
  value?: T | null;
3
3
  time: number;
4
4
  size: number;
5
- };
5
+ }
6
+ type Key = string | bigint | number;
6
7
  export declare class Cache<T = undefined> {
7
8
  private _map;
8
9
  private deleted;
@@ -15,12 +16,14 @@ export declare class Cache<T = undefined> {
15
16
  max: number;
16
17
  ttl?: number;
17
18
  });
18
- has(key: string): boolean;
19
- get map(): Map<string, CacheData<T>>;
20
- get(key: string): T | null | undefined;
19
+ has(key: Key): boolean;
20
+ get map(): Map<Key, CacheData<T>>;
21
+ get(key: Key): T | null | undefined;
21
22
  trim(time?: number): void;
22
- del(key: string): CacheData<T> | undefined;
23
- add(key: string, value?: T, size?: number): void;
23
+ del(key: Key): CacheData<T>;
24
+ add(key: Key, value?: T, size?: number): void;
24
25
  clear(): void;
25
26
  get size(): number;
26
27
  }
28
+ export {};
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AACD,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACpC,qBAAa,KAAK,CAAC,CAAC,GAAG,SAAS;IAC/B,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,IAAI,CAAe;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;gBACD,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IASlD,GAAG,CAAC,GAAG,EAAE,GAAG;IAQZ,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAEhC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS;IAQnC,IAAI,CAAC,IAAI,SAAc;IAyBvB,GAAG,CAAC,GAAG,EAAE,GAAG;IAUZ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,SAAI;IAWjC,KAAK;IAOL,IAAI,IAAI,WAEP;CACD"}
@@ -36,9 +36,12 @@ export class Cache {
36
36
  trim(time = +new Date()) {
37
37
  for (;;) {
38
38
  const headKey = this.list.head;
39
- if (headKey?.value !== undefined) {
39
+ if (headKey?.value != null) {
40
40
  const cacheValue = this._map.get(headKey.value);
41
- const outOfDate = this.ttl !== undefined && cacheValue.time < time - this.ttl;
41
+ if (!cacheValue) {
42
+ throw new Error("Cache value not found");
43
+ }
44
+ const outOfDate = this.ttl != null && cacheValue.time < time - this.ttl;
42
45
  if (outOfDate || this.currentSize > this.max) {
43
46
  this.list.shift();
44
47
  this._map.delete(headKey.value);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,47 +1,73 @@
1
1
  {
2
- "name": "@peerbit/cache",
3
- "version": "2.0.6",
4
- "description": "Simple cache",
5
- "type": "module",
6
- "publishConfig": {
7
- "access": "public"
8
- },
9
- "files": [
10
- "lib",
11
- "src",
12
- "!src/**/__tests__",
13
- "!lib/**/__tests__",
14
- "LICENSE"
15
- ],
16
- "module": "lib/esm/index.js",
17
- "types": "lib/esm/index.d.ts",
18
- "exports": {
19
- "import": "./lib/esm/index.js",
20
- "require": "./lib/cjs/index.js"
21
- },
22
- "repository": {
23
- "type": "git",
24
- "url": "https://github.com/dao-xyz/peerbit"
25
- },
26
- "homepage": "https://github.com/dao-xyz/peerbit",
27
- "bugs": "https://github.com/dao-xyz/peerbit/issues",
28
- "scripts": {
29
- "clean": "shx rm -rf lib/*",
30
- "build": "yarn clean && tsc -p tsconfig.json",
31
- "test": "node ../../../node_modules/.bin/jest test -c ../../../jest.config.ts --runInBand --forceExit",
32
- "test:unit": "node ../../../node_modules/.bin/jest test -c ../../../jest.config.unit.ts --runInBand --forceExit",
33
- "test:integration": "node ../node_modules/.bin/jest test -c ../../../jest.config.integration.ts --runInBand --forceExit"
34
- },
35
- "license": "MIT",
36
- "devDependencies": {
37
- "@peerbit/time": "2.0.6",
38
- "@types/yallist": "^4.0.1"
39
- },
40
- "dependencies": {
41
- "yallist": "^4.0.0"
42
- },
43
- "localMaintainers": [
44
- "dao.xyz"
45
- ],
46
- "gitHead": "e50907578b203c2f16199e91545c5213cf8cdc3e"
2
+ "name": "@peerbit/cache",
3
+ "version": "2.1.0-55cebfe",
4
+ "description": "Simple cache",
5
+ "type": "module",
6
+ "types": "./dist/src/index.d.ts",
7
+ "typesVersions": {
8
+ "*": {
9
+ "*": [
10
+ "*",
11
+ "dist/*",
12
+ "dist/src/*",
13
+ "dist/src/*/index"
14
+ ],
15
+ "src/*": [
16
+ "*",
17
+ "dist/*",
18
+ "dist/src/*",
19
+ "dist/src/*/index"
20
+ ]
21
+ }
22
+ },
23
+ "files": [
24
+ "src",
25
+ "dist",
26
+ "!dist/test",
27
+ "!**/*.tsbuildinfo"
28
+ ],
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/src/index.d.ts",
32
+ "import": "./dist/src/index.js"
33
+ }
34
+ },
35
+ "eslintConfig": {
36
+ "extends": "peerbit",
37
+ "parserOptions": {
38
+ "project": true,
39
+ "sourceType": "module"
40
+ },
41
+ "ignorePatterns": [
42
+ "!.aegir.js",
43
+ "test/ts-use",
44
+ "*.d.ts"
45
+ ]
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/dao-xyz/peerbit"
53
+ },
54
+ "homepage": "https://github.com/dao-xyz/peerbit",
55
+ "bugs": "https://github.com/dao-xyz/peerbit/issues",
56
+ "scripts": {
57
+ "clean": "aegir clean",
58
+ "build": "aegir build --no-bundle",
59
+ "test": "aegir test",
60
+ "lint": "aegir lint"
61
+ },
62
+ "license": "MIT",
63
+ "devDependencies": {
64
+ "@peerbit/time": "2.0.7-55cebfe",
65
+ "@types/yallist": "^4.0.4"
66
+ },
67
+ "dependencies": {
68
+ "yallist": "^4.0.0"
69
+ },
70
+ "localMaintainers": [
71
+ "dao.xyz"
72
+ ]
47
73
  }
package/src/index.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  // Fifo
2
2
  import yallist from "yallist";
3
3
 
4
- export type CacheData<T> = { value?: T | null; time: number; size: number };
4
+ export interface CacheData<T> {
5
+ value?: T | null;
6
+ time: number;
7
+ size: number;
8
+ }
9
+ type Key = string | bigint | number;
5
10
  export class Cache<T = undefined> {
6
- private _map: Map<string, CacheData<T>>;
7
- private deleted: Set<string>;
8
- private list: yallist<string>;
11
+ private _map: Map<Key, CacheData<T>>;
12
+ private deleted: Set<Key>;
13
+ private list: yallist<Key>;
9
14
  currentSize: number;
10
15
  deletedSize: number;
11
16
 
@@ -19,7 +24,8 @@ export class Cache<T = undefined> {
19
24
  this.ttl = options.ttl;
20
25
  this.clear();
21
26
  }
22
- has(key: string) {
27
+
28
+ has(key: Key) {
23
29
  this.trim();
24
30
  if (this.deleted.has(key)) {
25
31
  return false;
@@ -27,11 +33,11 @@ export class Cache<T = undefined> {
27
33
  return this._map.has(key);
28
34
  }
29
35
 
30
- get map(): Map<string, CacheData<T>> {
36
+ get map(): Map<Key, CacheData<T>> {
31
37
  return this._map;
32
38
  }
33
39
 
34
- get(key: string): T | null | undefined {
40
+ get(key: Key): T | null | undefined {
35
41
  this.trim();
36
42
  if (this.deleted.has(key)) {
37
43
  return undefined;
@@ -42,10 +48,12 @@ export class Cache<T = undefined> {
42
48
  trim(time = +new Date()) {
43
49
  for (;;) {
44
50
  const headKey = this.list.head;
45
- if (headKey?.value !== undefined) {
46
- const cacheValue = this._map.get(headKey.value)!;
47
- const outOfDate =
48
- this.ttl !== undefined && cacheValue.time < time - this.ttl;
51
+ if (headKey?.value != null) {
52
+ const cacheValue = this._map.get(headKey.value);
53
+ if (!cacheValue) {
54
+ throw new Error("Cache value not found");
55
+ }
56
+ const outOfDate = this.ttl != null && cacheValue.time < time - this.ttl;
49
57
  if (outOfDate || this.currentSize > this.max) {
50
58
  this.list.shift();
51
59
  this._map.delete(headKey.value);
@@ -62,8 +70,8 @@ export class Cache<T = undefined> {
62
70
  }
63
71
  }
64
72
 
65
- del(key: string) {
66
- const cacheValue = this._map.get(key)!;
73
+ del(key: Key) {
74
+ const cacheValue = this._map.get(key);
67
75
  if (cacheValue && !this.deleted.has(key)) {
68
76
  this.deleted.add(key);
69
77
  this.currentSize -= cacheValue.size;
@@ -72,7 +80,7 @@ export class Cache<T = undefined> {
72
80
  return undefined;
73
81
  }
74
82
 
75
- add(key: string, value?: T, size = 1) {
83
+ add(key: Key, value?: T, size = 1) {
76
84
  this.deleted.delete(key);
77
85
  const time = +new Date();
78
86
  if (!this._map.has(key)) {
@@ -82,6 +90,7 @@ export class Cache<T = undefined> {
82
90
  this._map.set(key, { time, value: value ?? null, size });
83
91
  this.trim(time);
84
92
  }
93
+
85
94
  clear() {
86
95
  this.list = yallist.create();
87
96
  this._map = new Map();
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}