@extra-memoize/extra-disk-cache 0.8.4 → 0.9.1

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.
package/lib/disk-cache.js CHANGED
@@ -1,25 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DiskCache = void 0;
4
- const extra_memoize_1 = require("extra-memoize");
5
- const prelude_1 = require("@blackglory/prelude");
6
- class DiskCache {
1
+ import { State } from 'extra-memoize';
2
+ import { isUndefined } from '@blackglory/prelude';
3
+ export class DiskCache {
7
4
  constructor(view, timeToLive) {
8
5
  this.view = view;
9
6
  this.timeToLive = timeToLive;
10
7
  }
11
8
  get(key) {
12
9
  const item = this.view.getWithMetadata(key);
13
- if ((0, prelude_1.isUndefined)(item)) {
14
- return [extra_memoize_1.State.Miss];
10
+ if (isUndefined(item)) {
11
+ return [State.Miss];
15
12
  }
16
13
  else {
17
- return [extra_memoize_1.State.Hit, item.value];
14
+ return [State.Hit, item.value];
18
15
  }
19
16
  }
20
17
  set(key, value) {
21
18
  this.view.set(key, value, this.timeToLive);
22
19
  }
23
20
  }
24
- exports.DiskCache = DiskCache;
25
21
  //# sourceMappingURL=disk-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"disk-cache.js","sourceRoot":"","sources":["../src/disk-cache.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAE7C,iDAAiD;AAEjD,MAAa,SAAS;IACpB,YACU,IAA8B,EAC9B,UAAmB;QADnB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAS;IAC1B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YACL,OAAO,CAAC,qBAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;SAC/B;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5C,CAAC;CACF;AApBD,8BAoBC"}
1
+ {"version":3,"file":"disk-cache.js","sourceRoot":"","sources":["../src/disk-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,OAAO,SAAS;IACpB,YACU,IAA8B,EAC9B,UAAmB;QADnB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAS;IAC1B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5C,CAAC;CACF"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from './disk-cache';
2
- export * from './stale-while-revalidate-async-disk-cache';
3
- export * from './stale-if-error-async-disk-cache';
4
- export * from './stale-while-revalidate-and-stale-if-error-async-disk-cache';
1
+ export * from './disk-cache.js';
2
+ export * from './stale-while-revalidate-async-disk-cache.js';
3
+ export * from './stale-if-error-async-disk-cache.js';
4
+ export * from './stale-while-revalidate-and-stale-if-error-async-disk-cache.js';
package/lib/index.js CHANGED
@@ -1,21 +1,5 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./disk-cache"), exports);
18
- __exportStar(require("./stale-while-revalidate-async-disk-cache"), exports);
19
- __exportStar(require("./stale-if-error-async-disk-cache"), exports);
20
- __exportStar(require("./stale-while-revalidate-and-stale-if-error-async-disk-cache"), exports);
1
+ export * from './disk-cache.js';
2
+ export * from './stale-while-revalidate-async-disk-cache.js';
3
+ export * from './stale-if-error-async-disk-cache.js';
4
+ export * from './stale-while-revalidate-and-stale-if-error-async-disk-cache.js';
21
5
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,4EAAyD;AACzD,oEAAiD;AACjD,+FAA4E"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8CAA8C,CAAA;AAC5D,cAAc,sCAAsC,CAAA;AACpD,cAAc,iEAAiE,CAAA"}
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StaleIfErrorDiskCache = void 0;
4
- const extra_memoize_1 = require("extra-memoize");
5
- const prelude_1 = require("@blackglory/prelude");
6
- class StaleIfErrorDiskCache {
1
+ import { State } from 'extra-memoize';
2
+ import { isUndefined } from '@blackglory/prelude';
3
+ export class StaleIfErrorDiskCache {
7
4
  constructor(view, timeToLive, staleIfError) {
8
5
  this.view = view;
9
6
  this.timeToLive = timeToLive;
@@ -11,19 +8,25 @@ class StaleIfErrorDiskCache {
11
8
  }
12
9
  get(key) {
13
10
  const item = this.view.getWithMetadata(key);
14
- if ((0, prelude_1.isUndefined)(item)) {
15
- return [extra_memoize_1.State.Miss];
11
+ if (isUndefined(item)) {
12
+ return [State.Miss];
16
13
  }
17
14
  else {
18
15
  const timestamp = Date.now();
19
- if (item.updatedAt + this.timeToLive > timestamp) {
20
- return [extra_memoize_1.State.Hit, item.value];
16
+ if (item.updatedAt
17
+ + this.timeToLive
18
+ > timestamp) {
19
+ return [State.Hit, item.value];
21
20
  }
22
- else if (item.updatedAt + this.timeToLive + this.staleIfError > timestamp) {
23
- return [extra_memoize_1.State.StaleIfError, item.value];
21
+ else if (item.updatedAt
22
+ + this.timeToLive
23
+ + this.staleIfError
24
+ > timestamp) {
25
+ return [State.StaleIfError, item.value];
24
26
  }
25
27
  else {
26
- return [extra_memoize_1.State.Miss];
28
+ // just in case
29
+ return [State.Miss];
27
30
  }
28
31
  }
29
32
  }
@@ -31,5 +34,4 @@ class StaleIfErrorDiskCache {
31
34
  this.view.set(key, value, this.timeToLive + this.staleIfError);
32
35
  }
33
36
  }
34
- exports.StaleIfErrorDiskCache = StaleIfErrorDiskCache;
35
37
  //# sourceMappingURL=stale-if-error-async-disk-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stale-if-error-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-if-error-async-disk-cache.ts"],"names":[],"mappings":";;;AAAA,iDAAyD;AAEzD,iDAAiD;AAEjD,MAAa,qBAAqB;IAChC,YACU,IAA8B,EAC9B,UAAkB,EAClB,YAAoB;QAFpB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE;gBAChD,OAAO,CAAC,qBAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aAC/B;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,EAAE;gBAC3E,OAAO,CAAC,qBAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aACxC;iBAAM;gBAEL,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;aACpB;SACF;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CACpC,CAAA;IACH,CAAC;CACF;AAjCD,sDAiCC"}
1
+ {"version":3,"file":"stale-if-error-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-if-error-async-disk-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,OAAO,qBAAqB;IAChC,YACU,IAA8B,EAC9B,UAAkB,EAClB,YAAoB;QAFpB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IACE,IAAI,CAAC,SAAS;kBACd,IAAI,CAAC,UAAU;kBACf,SAAS,EACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;iBAAM,IACL,IAAI,CAAC,SAAS;kBACd,IAAI,CAAC,UAAU;kBACf,IAAI,CAAC,YAAY;kBACjB,SAAS,EACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACN,eAAe;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CACpC,CAAA;IACH,CAAC;CACF"}
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StaleWhileRevalidateAndStaleIfErrorDiskCache = void 0;
4
- const extra_memoize_1 = require("extra-memoize");
5
- const prelude_1 = require("@blackglory/prelude");
6
- class StaleWhileRevalidateAndStaleIfErrorDiskCache {
1
+ import { State } from 'extra-memoize';
2
+ import { isUndefined } from '@blackglory/prelude';
3
+ export class StaleWhileRevalidateAndStaleIfErrorDiskCache {
7
4
  constructor(view, timeToLive, staleWhileRevalidate, staleIfError) {
8
5
  this.view = view;
9
6
  this.timeToLive = timeToLive;
@@ -12,22 +9,32 @@ class StaleWhileRevalidateAndStaleIfErrorDiskCache {
12
9
  }
13
10
  get(key) {
14
11
  const item = this.view.getWithMetadata(key);
15
- if ((0, prelude_1.isUndefined)(item)) {
16
- return [extra_memoize_1.State.Miss];
12
+ if (isUndefined(item)) {
13
+ return [State.Miss];
17
14
  }
18
15
  else {
19
16
  const timestamp = Date.now();
20
- if (item.updatedAt + this.timeToLive > timestamp) {
21
- return [extra_memoize_1.State.Hit, item.value];
17
+ if (item.updatedAt
18
+ + this.timeToLive
19
+ > timestamp) {
20
+ return [State.Hit, item.value];
22
21
  }
23
- else if (item.updatedAt + this.timeToLive + this.staleWhileRevalidate > timestamp) {
24
- return [extra_memoize_1.State.StaleWhileRevalidate, item.value];
22
+ else if (item.updatedAt
23
+ + this.timeToLive
24
+ + this.staleWhileRevalidate
25
+ > timestamp) {
26
+ return [State.StaleWhileRevalidate, item.value];
25
27
  }
26
- else if (item.updatedAt + this.timeToLive + this.staleWhileRevalidate + this.staleIfError > timestamp) {
27
- return [extra_memoize_1.State.StaleIfError, item.value];
28
+ else if (item.updatedAt
29
+ + this.timeToLive
30
+ + this.staleWhileRevalidate
31
+ + this.staleIfError
32
+ > timestamp) {
33
+ return [State.StaleIfError, item.value];
28
34
  }
29
35
  else {
30
- return [extra_memoize_1.State.Miss];
36
+ // just in case
37
+ return [State.Miss];
31
38
  }
32
39
  }
33
40
  }
@@ -35,5 +42,4 @@ class StaleWhileRevalidateAndStaleIfErrorDiskCache {
35
42
  this.view.set(key, value, this.timeToLive + this.staleWhileRevalidate + this.staleIfError);
36
43
  }
37
44
  }
38
- exports.StaleWhileRevalidateAndStaleIfErrorDiskCache = StaleWhileRevalidateAndStaleIfErrorDiskCache;
39
45
  //# sourceMappingURL=stale-while-revalidate-and-stale-if-error-async-disk-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stale-while-revalidate-and-stale-if-error-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-while-revalidate-and-stale-if-error-async-disk-cache.ts"],"names":[],"mappings":";;;AAAA,iDAAgF;AAEhF,iDAAiD;AAEjD,MAAa,4CAA4C;IACvD,YACU,IAA8B,EAC9B,UAAkB,EAClB,oBAA4B,EAC5B,YAAoB;QAHpB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,yBAAoB,GAApB,oBAAoB,CAAQ;QAC5B,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE;gBAChD,OAAO,CAAC,qBAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aAC/B;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,SAAS,EAAE;gBACnF,OAAO,CAAC,qBAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aAChD;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,EAAE;gBACtG,OAAO,CAAC,qBAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aACxC;iBAAM;gBAEL,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;aACpB;SACF;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAChE,CAAA;IACH,CAAC;CACF;AApCD,oGAoCC"}
1
+ {"version":3,"file":"stale-while-revalidate-and-stale-if-error-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-while-revalidate-and-stale-if-error-async-disk-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,EAAE,MAAM,eAAe,CAAA;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,OAAO,4CAA4C;IACvD,YACU,IAA8B,EAC9B,UAAkB,EAClB,oBAA4B,EAC5B,YAAoB;QAHpB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,yBAAoB,GAApB,oBAAoB,CAAQ;QAC5B,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IACE,IAAI,CAAC,SAAS;kBACd,IAAI,CAAC,UAAU;kBACf,SAAS,EACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;iBAAM,IACL,IAAI,CAAC,SAAS;kBACd,IAAI,CAAC,UAAU;kBACf,IAAI,CAAC,oBAAoB;kBACzB,SAAS,EACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACjD,CAAC;iBAAM,IACL,IAAI,CAAC,SAAS;kBACd,IAAI,CAAC,UAAU;kBACf,IAAI,CAAC,oBAAoB;kBACzB,IAAI,CAAC,YAAY;kBACjB,SAAS,EACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACN,eAAe;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAChE,CAAA;IACH,CAAC;CACF"}
@@ -7,5 +7,4 @@ export declare class StaleWhileRevalidateDiskCache<T> implements IStaleWhileReva
7
7
  constructor(view: DiskCacheView<string, T>, timeToLive: number, staleWhileRevalidate: number);
8
8
  get(key: string): [State.Miss] | [State.Hit | State.StaleWhileRevalidate, T];
9
9
  set(key: string, value: T): void;
10
- private isStaleWhileRevalidate;
11
10
  }
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StaleWhileRevalidateDiskCache = void 0;
4
- const extra_memoize_1 = require("extra-memoize");
5
- const prelude_1 = require("@blackglory/prelude");
6
- class StaleWhileRevalidateDiskCache {
1
+ import { State } from 'extra-memoize';
2
+ import { isUndefined } from '@blackglory/prelude';
3
+ export class StaleWhileRevalidateDiskCache {
7
4
  constructor(view, timeToLive, staleWhileRevalidate) {
8
5
  this.view = view;
9
6
  this.timeToLive = timeToLive;
@@ -11,26 +8,24 @@ class StaleWhileRevalidateDiskCache {
11
8
  }
12
9
  get(key) {
13
10
  const item = this.view.getWithMetadata(key);
14
- if ((0, prelude_1.isUndefined)(item)) {
15
- return [extra_memoize_1.State.Miss];
11
+ if (isUndefined(item)) {
12
+ return [State.Miss];
16
13
  }
17
14
  else {
18
- if (this.isStaleWhileRevalidate(item.updatedAt)) {
19
- return [extra_memoize_1.State.StaleWhileRevalidate, item.value];
15
+ const timestamp = Date.now();
16
+ if (item.updatedAt + this.timeToLive > timestamp) {
17
+ return [State.Hit, item.value];
18
+ }
19
+ else if (item.updatedAt + this.timeToLive + this.staleWhileRevalidate) {
20
+ return [State.StaleWhileRevalidate, item.value];
20
21
  }
21
22
  else {
22
- return [extra_memoize_1.State.Hit, item.value];
23
+ return [State.Miss];
23
24
  }
24
25
  }
25
26
  }
26
27
  set(key, value) {
27
28
  this.view.set(key, value, this.timeToLive + this.staleWhileRevalidate);
28
29
  }
29
- isStaleWhileRevalidate(updatedAt) {
30
- const timestamp = Date.now();
31
- return updatedAt + this.timeToLive <= timestamp
32
- && updatedAt + this.timeToLive + this.staleWhileRevalidate > timestamp;
33
- }
34
30
  }
35
- exports.StaleWhileRevalidateDiskCache = StaleWhileRevalidateDiskCache;
36
31
  //# sourceMappingURL=stale-while-revalidate-async-disk-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stale-while-revalidate-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-while-revalidate-async-disk-cache.ts"],"names":[],"mappings":";;;AAAA,iDAAiE;AAEjE,iDAAiD;AAEjD,MAAa,6BAA6B;IACxC,YACU,IAA8B,EAC9B,UAAkB,EAClB,oBAA4B;QAF5B,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,yBAAoB,GAApB,oBAAoB,CAAQ;IACnC,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,qBAAK,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YACL,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC/C,OAAO,CAAC,qBAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aAChD;iBAAM;gBACL,OAAO,CAAC,qBAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;aAC/B;SACF;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAC5C,CAAA;IACH,CAAC;IAEO,sBAAsB,CAAC,SAAiB;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,OAAO,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS;eACxC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;IAC5E,CAAC;CACF;AAnCD,sEAmCC"}
1
+ {"version":3,"file":"stale-while-revalidate-async-disk-cache.js","sourceRoot":"","sources":["../src/stale-while-revalidate-async-disk-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,OAAO,6BAA6B;IACxC,YACU,IAA8B,EAC9B,UAAkB,EAClB,oBAA4B;QAF5B,SAAI,GAAJ,IAAI,CAA0B;QAC9B,eAAU,GAAV,UAAU,CAAQ;QAClB,yBAAoB,GAApB,oBAAoB,CAAQ;IACnC,CAAC;IAEJ,GAAG,CAAC,GAAW;QAGb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxE,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,KAAK,EACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAC5C,CAAA;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,60 +1,61 @@
1
1
  {
2
2
  "name": "@extra-memoize/extra-disk-cache",
3
- "version": "0.8.4",
3
+ "version": "0.9.1",
4
4
  "description": "",
5
5
  "files": [
6
- "lib"
6
+ "lib",
7
+ "src"
7
8
  ],
8
9
  "main": "lib/index.js",
9
10
  "types": "lib/index.d.ts",
10
- "sideEffects": false,
11
11
  "repository": "git@github.com:extra-memoize/extra-disk-cache.git",
12
12
  "author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
13
13
  "license": "MIT",
14
+ "type": "module",
15
+ "sideEffects": false,
16
+ "engines": {
17
+ "node": ">=22"
18
+ },
14
19
  "scripts": {
15
- "lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src",
16
- "test": "jest --runInBand --config jest.config.js",
17
- "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
18
- "test:coverage": "jest --coverage --config jest.config.js",
19
- "prepublishOnly": "run-s clean build",
20
- "clean": "run-p clean:*",
21
- "clean:build": "rimraf lib",
22
- "build": "run-s build:*",
23
- "build:compile": "tsc --project tsconfig.build.json --module commonjs --target es2018 --outDir lib",
24
- "build:patch": "tscpaths -p tsconfig.build.json -s ./src -o ./lib",
20
+ "prepare": "ts-patch install -s",
21
+ "lint": "eslint --quiet src",
22
+ "test": "vitest run --passWithNoTests",
23
+ "prepublishOnly": "run-s prepare clean build",
24
+ "clean": "rimraf lib",
25
+ "build": "tsc --project tsconfig.build.json --outDir lib",
25
26
  "release": "standard-version"
26
27
  },
27
28
  "husky": {
28
29
  "hooks": {
29
- "pre-commit": "run-s lint build",
30
+ "pre-commit": "run-s prepare clean lint build test",
30
31
  "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
31
32
  }
32
33
  },
33
34
  "devDependencies": {
34
- "@commitlint/cli": "^17.3.0",
35
- "@commitlint/config-conventional": "^17.3.0",
36
- "@types/jest": "^29.2.4",
37
- "@typescript-eslint/eslint-plugin": "^5.47.0",
38
- "@typescript-eslint/parser": "^5.47.0",
39
- "eslint": "^8.30.0",
40
- "extra-disk-cache": "^0.11.1",
41
- "extra-memoize": "^0.9.1",
35
+ "@commitlint/cli": "^19.8.1",
36
+ "@commitlint/config-conventional": "^19.8.1",
37
+ "@eslint/js": "^9.30.1",
38
+ "eslint": "^9.30.1",
39
+ "extra-disk-cache": "^0.12.2",
40
+ "extra-memoize": "^0.10.0",
42
41
  "husky": "^4.3.8",
43
- "jest": "^29.3.1",
44
42
  "npm-run-all": "^4.1.5",
45
- "return-style": "^1.0.0",
46
- "rimraf": "^3.0.2",
43
+ "rimraf": "^6.0.1",
47
44
  "standard-version": "^9.5.0",
48
- "ts-jest": "^29.0.3",
49
- "tscpaths": "^0.0.9",
50
- "tslib": "^2.4.1",
51
- "typescript": "4.8"
45
+ "ts-patch": "^3.3.0",
46
+ "tslib": "^2.8.1",
47
+ "typescript": "5.8",
48
+ "typescript-eslint": "^8.35.1",
49
+ "typescript-transform-paths": "^3.5.5",
50
+ "vite": "^7.0.2",
51
+ "vite-tsconfig-paths": "^5.1.4",
52
+ "vitest": "^3.2.4"
52
53
  },
53
54
  "dependencies": {
54
- "@blackglory/prelude": "^0.2.0"
55
+ "@blackglory/prelude": "^0.4.0"
55
56
  },
56
57
  "peerDependencies": {
57
58
  "extra-disk-cache": "^0.10.1 || ^0.11.1 || ^0.12.0",
58
- "extra-memoize": "^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0"
59
+ "extra-memoize": "^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0"
59
60
  }
60
61
  }
@@ -0,0 +1,25 @@
1
+ import { ICache, State } from 'extra-memoize'
2
+ import { DiskCacheView } from 'extra-disk-cache'
3
+ import { isUndefined } from '@blackglory/prelude'
4
+
5
+ export class DiskCache<T> implements ICache<T> {
6
+ constructor(
7
+ private view: DiskCacheView<string, T>
8
+ , private timeToLive?: number
9
+ ) {}
10
+
11
+ get(key: string):
12
+ | [State.Miss]
13
+ | [State.Hit, T] {
14
+ const item = this.view.getWithMetadata(key)
15
+ if (isUndefined(item)) {
16
+ return [State.Miss]
17
+ } else {
18
+ return [State.Hit, item.value]
19
+ }
20
+ }
21
+
22
+ set(key: string, value: T): void {
23
+ this.view.set(key, value, this.timeToLive)
24
+ }
25
+ }
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './disk-cache.js'
2
+ export * from './stale-while-revalidate-async-disk-cache.js'
3
+ export * from './stale-if-error-async-disk-cache.js'
4
+ export * from './stale-while-revalidate-and-stale-if-error-async-disk-cache.js'
@@ -0,0 +1,47 @@
1
+ import { IStaleIfErrorCache, State } from 'extra-memoize'
2
+ import { DiskCacheView } from 'extra-disk-cache'
3
+ import { isUndefined } from '@blackglory/prelude'
4
+
5
+ export class StaleIfErrorDiskCache<T> implements IStaleIfErrorCache<T> {
6
+ constructor(
7
+ private view: DiskCacheView<string, T>
8
+ , private timeToLive: number
9
+ , private staleIfError: number
10
+ ) {}
11
+
12
+ get(key: string):
13
+ | [State.Miss]
14
+ | [State.Hit | State.StaleIfError, T] {
15
+ const item = this.view.getWithMetadata(key)
16
+ if (isUndefined(item)) {
17
+ return [State.Miss]
18
+ } else {
19
+ const timestamp = Date.now()
20
+ if (
21
+ item.updatedAt
22
+ + this.timeToLive
23
+ > timestamp
24
+ ) {
25
+ return [State.Hit, item.value]
26
+ } else if (
27
+ item.updatedAt
28
+ + this.timeToLive
29
+ + this.staleIfError
30
+ > timestamp
31
+ ) {
32
+ return [State.StaleIfError, item.value]
33
+ } else {
34
+ // just in case
35
+ return [State.Miss]
36
+ }
37
+ }
38
+ }
39
+
40
+ set(key: string, value: T): void {
41
+ this.view.set(
42
+ key
43
+ , value
44
+ , this.timeToLive + this.staleIfError
45
+ )
46
+ }
47
+ }
@@ -0,0 +1,56 @@
1
+ import { IStaleWhileRevalidateAndStaleIfErrorCache, State } from 'extra-memoize'
2
+ import { DiskCacheView } from 'extra-disk-cache'
3
+ import { isUndefined } from '@blackglory/prelude'
4
+
5
+ export class StaleWhileRevalidateAndStaleIfErrorDiskCache<T> implements IStaleWhileRevalidateAndStaleIfErrorCache<T> {
6
+ constructor(
7
+ private view: DiskCacheView<string, T>
8
+ , private timeToLive: number
9
+ , private staleWhileRevalidate: number
10
+ , private staleIfError: number
11
+ ) {}
12
+
13
+ get(key: string):
14
+ | [State.Miss]
15
+ | [State.Hit | State.StaleWhileRevalidate | State.StaleIfError, T] {
16
+ const item = this.view.getWithMetadata(key)
17
+ if (isUndefined(item)) {
18
+ return [State.Miss]
19
+ } else {
20
+ const timestamp = Date.now()
21
+ if (
22
+ item.updatedAt
23
+ + this.timeToLive
24
+ > timestamp
25
+ ) {
26
+ return [State.Hit, item.value]
27
+ } else if (
28
+ item.updatedAt
29
+ + this.timeToLive
30
+ + this.staleWhileRevalidate
31
+ > timestamp
32
+ ) {
33
+ return [State.StaleWhileRevalidate, item.value]
34
+ } else if (
35
+ item.updatedAt
36
+ + this.timeToLive
37
+ + this.staleWhileRevalidate
38
+ + this.staleIfError
39
+ > timestamp
40
+ ) {
41
+ return [State.StaleIfError, item.value]
42
+ } else {
43
+ // just in case
44
+ return [State.Miss]
45
+ }
46
+ }
47
+ }
48
+
49
+ set(key: string, value: T): void {
50
+ this.view.set(
51
+ key
52
+ , value
53
+ , this.timeToLive + this.staleWhileRevalidate + this.staleIfError
54
+ )
55
+ }
56
+ }
@@ -0,0 +1,37 @@
1
+ import { IStaleWhileRevalidateCache, State } from 'extra-memoize'
2
+ import { DiskCacheView } from 'extra-disk-cache'
3
+ import { isUndefined } from '@blackglory/prelude'
4
+
5
+ export class StaleWhileRevalidateDiskCache<T> implements IStaleWhileRevalidateCache<T> {
6
+ constructor(
7
+ private view: DiskCacheView<string, T>
8
+ , private timeToLive: number
9
+ , private staleWhileRevalidate: number
10
+ ) {}
11
+
12
+ get(key: string):
13
+ | [State.Miss]
14
+ | [State.Hit | State.StaleWhileRevalidate, T] {
15
+ const item = this.view.getWithMetadata(key)
16
+ if (isUndefined(item)) {
17
+ return [State.Miss]
18
+ } else {
19
+ const timestamp = Date.now()
20
+ if (item.updatedAt + this.timeToLive > timestamp) {
21
+ return [State.Hit, item.value]
22
+ } else if (item.updatedAt + this.timeToLive + this.staleWhileRevalidate) {
23
+ return [State.StaleWhileRevalidate, item.value]
24
+ } else {
25
+ return [State.Miss]
26
+ }
27
+ }
28
+ }
29
+
30
+ set(key: string, value: T): void {
31
+ this.view.set(
32
+ key
33
+ , value
34
+ , this.timeToLive + this.staleWhileRevalidate
35
+ )
36
+ }
37
+ }