simple-in-memory-cache 0.3.3 → 0.4.2

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/dist/cache.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import type { PickOne } from 'type-fns';
1
+ import { type IsoDuration } from 'iso-time';
2
2
  export interface SimpleInMemoryCache<T> {
3
3
  get: (key: string) => T | undefined;
4
- set: (key: string, value: T, options?: Partial<PickOne<{
5
- secondsUntilExpiration?: number;
6
- seconds?: number;
7
- }>>) => void;
4
+ set: (key: string, value: T, options?: {
5
+ expiration?: IsoDuration | null;
6
+ }) => void;
8
7
  keys: () => string[];
9
8
  }
10
9
  export interface SimpleInMemoryCacheState<T> {
@@ -13,16 +12,6 @@ export interface SimpleInMemoryCacheState<T> {
13
12
  expiresAtMse: number;
14
13
  };
15
14
  }
16
- export declare const createCache: <T>({ seconds, defaultSecondsUntilExpiration: defaultSecondsUntilExpirationInput, }?: Partial<PickOne<{
17
- /**
18
- * the number of seconds items in the cache expire after
19
- */
20
- defaultSecondsUntilExpiration?: number;
21
- /**
22
- * a shorthand alias for `defaultSecondsUntilExpiration`
23
- *
24
- * note
25
- * - if both options are set, `defaultSecondsUntilExpirationInput` takes precedence
26
- */
27
- seconds?: number;
28
- }>>) => SimpleInMemoryCache<T>;
15
+ export declare const createCache: <T>({ expiration: defaultExpiration }?: {
16
+ expiration?: IsoDuration | null;
17
+ }) => SimpleInMemoryCache<T>;
package/dist/cache.js CHANGED
@@ -1,22 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createCache = void 0;
4
+ const iso_time_1 = require("iso-time");
4
5
  const getMseNow = () => new Date().getTime();
5
- const createCache = ({ seconds, defaultSecondsUntilExpiration: defaultSecondsUntilExpirationInput, } = {}) => {
6
- var _a;
7
- // resolve input alias
8
- const defaultSecondsUntilExpiration = (_a = defaultSecondsUntilExpirationInput !== null && defaultSecondsUntilExpirationInput !== void 0 ? defaultSecondsUntilExpirationInput : seconds) !== null && _a !== void 0 ? _a : 5 * 60;
6
+ const createCache = ({ expiration: defaultExpiration } = {
7
+ expiration: { minutes: 5 },
8
+ }) => {
9
9
  // initialize a fresh in-memory cache object
10
10
  const cache = {};
11
11
  // define how to set an item into the cache
12
- const set = (key, value, { secondsUntilExpiration = defaultSecondsUntilExpiration, } = {}) => {
12
+ const set = (key, value, { expiration = defaultExpiration, } = {}) => {
13
13
  // handle cache invalidation
14
14
  if (value === undefined) {
15
15
  delete cache[key];
16
16
  return;
17
17
  }
18
18
  // handle setting
19
- const expiresAtMse = getMseNow() + secondsUntilExpiration * 1000;
19
+ const expiresAtMse = getMseNow() + (expiration ? (0, iso_time_1.toMilliseconds)(expiration) : Infinity); // infinity if null
20
20
  cache[key] = { value, expiresAtMse };
21
21
  };
22
22
  // define how to get an item from the cache
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;;AAkBA,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAEtC,MAAM,WAAW,GAAG,CAAI,EAC7B,OAAO,EACP,6BAA6B,EAAE,kCAAkC,MAgB/D,EAAE,EAA0B,EAAE;;IAChC,sBAAsB;IACtB,MAAM,6BAA6B,GACjC,MAAA,kCAAkC,aAAlC,kCAAkC,cAAlC,kCAAkC,GAAI,OAAO,mCAAI,CAAC,GAAG,EAAE,CAAC;IAE1D,4CAA4C;IAC5C,MAAM,KAAK,GAAgC,EAAE,CAAC;IAE9C,2CAA2C;IAC3C,MAAM,GAAG,GAAG,CACV,GAAW,EACX,KAAoB,EACpB,EACE,sBAAsB,GAAG,6BAA6B,MACf,EAAE,EAC3C,EAAE;QACF,4BAA4B;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,MAAM,YAAY,GAAG,SAAS,EAAE,GAAG,sBAAsB,GAAG,IAAI,CAAC;QACjE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACvC,CAAC,CAAC;IAEF,2CAA2C;IAC3C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC,CAAC,kCAAkC;QACvE,IAAI,YAAY,CAAC,YAAY,IAAI,SAAS,EAAE;YAAE,OAAO,SAAS,CAAC,CAAC,qCAAqC;QACrG,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,mEAAmE;IAChG,CAAC,CAAC;IAEF,oCAAoC;IACpC,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEzB,iBAAiB;IACjB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AA7DW,QAAA,WAAW,eA6DtB"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;;AAAA,uCAA4D;AAgB5D,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAEtC,MAAM,WAAW,GAAG,CACzB,EAAE,UAAU,EAAE,iBAAiB,KAA0C;IACvE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;CAC3B,EACuB,EAAE;IAC1B,4CAA4C;IAC5C,MAAM,KAAK,GAAgC,EAAE,CAAC;IAE9C,2CAA2C;IAC3C,MAAM,GAAG,GAAG,CACV,GAAW,EACX,KAAoB,EACpB,EACE,UAAU,GAAG,iBAAiB,MACS,EAAE,EAC3C,EAAE;QACF,4BAA4B;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,MAAM,YAAY,GAChB,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,yBAAc,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB;QACzF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACvC,CAAC,CAAC;IAEF,2CAA2C;IAC3C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC,CAAC,kCAAkC;QACvE,IAAI,YAAY,CAAC,YAAY,IAAI,SAAS,EAAE;YAAE,OAAO,SAAS,CAAC,CAAC,qCAAqC;QACrG,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,mEAAmE;IAChG,CAAC,CAAC;IAEF,oCAAoC;IACpC,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEzB,iBAAiB;IACjB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AA5CW,QAAA,WAAW,eA4CtB"}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export { createCache, SimpleInMemoryCache } from './cache';
1
+ export type { SimpleInMemoryCache } from './cache';
2
+ export { createCache } from './cache';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAA2D;AAAlD,oGAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iCAAsC;AAA7B,oGAAA,WAAW,OAAA"}
package/license.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 ehmpathy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "simple-in-memory-cache",
3
3
  "author": "ehmpathy",
4
4
  "description": "A simple in-memory cache, for nodejs and the browser, with time based expiration policies.",
5
- "version": "0.3.3",
5
+ "version": "0.4.2",
6
6
  "repository": "ehmpathy/simple-in-memory-cache",
7
7
  "homepage": "https://github.com/ehmpathy/simple-in-memory-cache",
8
8
  "keywords": [
@@ -31,61 +31,85 @@
31
31
  "scripts": {
32
32
  "build:ts": "tsc -p ./tsconfig.build.json",
33
33
  "commit:with-cli": "npx cz",
34
- "fix:format:prettier": "prettier --write '**/*.ts' --config ./prettier.config.js",
35
- "fix:format": "npm run fix:format:prettier",
36
- "fix:lint": "eslint -c ./.eslintrc.js src/**/*.ts --fix",
37
- "build:clean": "rm dist/ -rf",
38
- "build:compile": "tsc -p ./tsconfig.build.json",
39
- "build": "npm run build:clean && npm run build:compile",
34
+ "fix:format:biome": "biome check --write",
35
+ "fix:format": "npm run fix:format:biome",
36
+ "fix:lint": "biome check --write",
37
+ "fix": "npm run fix:format && npm run fix:lint",
38
+ "build:clean:bun": "rm -f ./bin/*.bc",
39
+ "build:clean:tsc": "(chmod -R u+w dist 2>/dev/null || true) && rm -rf dist/",
40
+ "build:clean": "npm run build:clean:tsc && npm run build:clean:bun",
41
+ "build:compile:tsc": "tsc -p ./tsconfig.build.json && tsc-alias -p ./tsconfig.build.json",
42
+ "build:compile": "npm run build:compile:tsc && npm run build:compile:bun --if-present",
43
+ "build": "npm run build:clean && npm run build:compile && npm run build:complete --if-present",
44
+ "test:auth": "[ \"$ECHO\" = 'true' ] && echo 'source .agent/repo=.this/role=any/skills/use.apikeys.sh' || bash -c 'source .agent/repo=.this/role=any/skills/use.apikeys.sh'",
40
45
  "test:commits": "LAST_TAG=$(git describe --tags --abbrev=0 @^ 2> /dev/null || git rev-list --max-parents=0 HEAD) && npx commitlint --from $LAST_TAG --to HEAD --verbose",
41
- "test:types": "tsc -p ./tsconfig.build.json --noEmit",
42
- "test:format:prettier": "prettier --parser typescript --check 'src/**/*.ts' --config ./prettier.config.js",
43
- "test:format": "npm run test:format:prettier",
44
- "test:lint:deps": "npx depcheck -c ./depcheckrc.yml",
45
- "test:lint:eslint": "eslint -c ./.eslintrc.js src/**/*.ts",
46
- "test:lint": "npm run test:lint:eslint && npm run test:lint:deps",
47
- "test:unit": "jest -c ./jest.unit.config.ts --forceExit --verbose --passWithNoTests $([ -z $THOROUGH ] && echo '--changedSince=main')",
48
- "test:integration": "jest -c ./jest.integration.config.ts --forceExit --verbose --passWithNoTests $([ -z $THOROUGH ] && echo '--changedSince=main')",
49
- "test:acceptance:locally": "npm run build && LOCALLY=true jest -c ./jest.acceptance.config.ts --forceExit --verbose --runInBand --passWithNoTests",
50
- "test": "npm run test:commits && npm run test:types && npm run test:format && npm run test:lint && npm run test:unit && npm run test:integration && npm run test:acceptance:locally",
51
- "test:acceptance": "npm run build && jest -c ./jest.acceptance.config.ts --forceExit --verbose --runInBand --passWithNoTests",
46
+ "test:types": "tsc -p ./tsconfig.json --noEmit",
47
+ "test:format:biome": "biome format",
48
+ "test:format": "npm run test:format:biome",
49
+ "test:lint:deps": "npx depcheck -c ./.depcheckrc.yml",
50
+ "test:lint:biome": "biome check --diagnostic-level=error",
51
+ "test:lint:biome:all": "biome check",
52
+ "test:lint": "npm run test:lint:biome && npm run test:lint:cycles && npm run test:lint:deps",
53
+ "test:unit": "set -eu && jest -c ./jest.unit.config.ts --forceExit --verbose --passWithNoTests $([ -n \"${CI:-}\" ] && echo '--ci') $([ \"${THOROUGH:-}\" != \"true\" ] && echo '--changedSince=main') $([ \"${RESNAP:-}\" = \"true\" ] && echo '--updateSnapshot')",
54
+ "test:integration": "set -eu && jest -c ./jest.integration.config.ts --forceExit --verbose --passWithNoTests $([ -n \"${CI:-}\" ] && echo '--ci') $([ \"${THOROUGH:-}\" != \"true\" ] && echo '--changedSince=main') $([ \"${RESNAP:-}\" = \"true\" ] && echo '--updateSnapshot')",
55
+ "test:acceptance:locally": "set -eu && npm run build && LOCALLY=true jest -c ./jest.acceptance.config.ts --forceExit --verbose --runInBand --passWithNoTests $([ \"${RESNAP:-}\" = \"true\" ] && echo '--updateSnapshot')",
56
+ "test": "set -eu && npm run test:commits && npm run test:types && npm run test:format && npm run test:lint && npm run test:unit && npm run test:integration && npm run test:acceptance:locally",
57
+ "test:acceptance": "set -eu && npm run build && jest -c ./jest.acceptance.config.ts --forceExit --verbose --runInBand --passWithNoTests $([ -n \"${CI:-}\" ] && echo '--ci') $([ \"${RESNAP:-}\" = \"true\" ] && echo '--updateSnapshot')",
52
58
  "prepush": "npm run test && npm run build",
53
59
  "prepublish": "npm run build",
54
60
  "preversion": "npm run prepush",
55
61
  "postversion": "git push origin HEAD --tags --no-verify",
56
- "prepare:husky": "npx husky install && chmod ug+x .husky/*",
57
- "postinstall": "[ -d .git ] && npm run prepare:husky || exit 0"
62
+ "prepare:husky": "husky install && chmod ug+x .husky/*",
63
+ "prepare:rhachet": "rhachet init --hooks --roles mechanic behaver driver architect ergonomist reviewer dreamer dispatcher",
64
+ "prepare": "if [ -e .git ] && [ -z $CI ]; then npm run prepare:husky && npm run prepare:rhachet; fi",
65
+ "test:lint:cycles": "dpdm --no-warning --no-tree --exit-code circular:1 --exclude \"$(yq -r '.exclude | join(\"|\") // \"^$\"' .dpdmrc.yaml)\" 'src/**/*.ts'",
66
+ "upgrade:rhachet": "rhachet upgrade"
67
+ },
68
+ "dependencies": {
69
+ "domain-objects": "0.31.9",
70
+ "helpful-errors": "1.7.3",
71
+ "iso-time": "^1.11.7",
72
+ "type-fns": "1.21.2"
58
73
  },
59
74
  "devDependencies": {
60
- "@commitlint/cli": "19.3.0",
61
- "@commitlint/config-conventional": "13.1.0",
62
- "@trivago/prettier-plugin-sort-imports": "4.3.0",
63
- "@tsconfig/node-lts-strictest": "18.12.1",
64
- "@types/jest": "29.2.4",
65
- "@typescript-eslint/eslint-plugin": "7.8.0",
66
- "@typescript-eslint/parser": "7.8.0",
75
+ "@biomejs/biome": "2.3.8",
76
+ "@commitlint/cli": "19.5.0",
77
+ "@commitlint/config-conventional": "19.5.0",
78
+ "@jest/globals": "30.2.0",
79
+ "@swc/core": "1.15.3",
80
+ "@swc/jest": "0.2.39",
81
+ "@tsconfig/node20": "20.1.5",
82
+ "@tsconfig/strictest": "2.0.5",
83
+ "@types/jest": "30.0.0",
84
+ "@types/node": "22.15.21",
67
85
  "commitlint": "^17.6.7",
68
- "core-js": "3.26.1",
69
86
  "cz-conventional-changelog": "3.3.0",
70
- "declapract": "^0.11.5",
71
- "declapract-typescript-ehmpathy": "^0.35.5",
87
+ "declapract": "^0.13.21",
88
+ "declapract-typescript-ehmpathy": "^0.47.74",
89
+ "declastruct": "1.9.1",
90
+ "declastruct-github": "1.4.0",
72
91
  "depcheck": "1.4.3",
73
- "eslint": "8.56.0",
74
- "eslint-config-airbnb-typescript": "18.0.0",
75
- "eslint-config-prettier": "8.5.0",
76
- "eslint-plugin-import": "2.26.0",
77
- "eslint-plugin-prettier": "4.2.1",
92
+ "dpdm": "4.0.1",
93
+ "esbuild-register": "3.6.0",
78
94
  "husky": "8.0.3",
79
- "jest": "29.7.0",
80
- "prettier": "2.8.1",
81
- "ts-jest": "29.2.5",
82
- "ts-node": "10.9.2",
83
- "type-fns": "^1.19.0",
84
- "typescript": "5.4.5"
95
+ "jest": "30.2.0",
96
+ "rhachet": "1.41.17",
97
+ "rhachet-brains-anthropic": "0.4.1",
98
+ "rhachet-brains-xai": "0.3.3",
99
+ "rhachet-roles-bhrain": "0.28.0",
100
+ "rhachet-roles-bhuild": "0.21.14",
101
+ "rhachet-roles-ehmpathy": "1.35.12",
102
+ "rhachet-roles-rhachet": "^0.1.7",
103
+ "test-fns": "1.15.8",
104
+ "tsc-alias": "1.8.10",
105
+ "tsx": "4.20.6",
106
+ "typescript": "5.4.5",
107
+ "yalc": "1.0.0-pre.53"
85
108
  },
86
109
  "config": {
87
110
  "commitizen": {
88
111
  "path": "./node_modules/cz-conventional-changelog"
89
112
  }
90
- }
113
+ },
114
+ "packageManager": "pnpm@10.24.0"
91
115
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const cache_1 = require("./cache");
13
- jest.setTimeout(30 * 1000); // give up to 60 seconds, since we deal with timeouts that we want to test on the ~15 second range
14
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
15
- describe('cache', () => {
16
- it('should be able to add an item to the cache', () => {
17
- const { set } = (0, cache_1.createCache)();
18
- set('meaning of life', 42);
19
- });
20
- it('should be able to get an item from the cache', () => {
21
- const { set, get } = (0, cache_1.createCache)();
22
- set('how many licks does it take to get to the center of a tootsie pop?', 3);
23
- const licks = get('how many licks does it take to get to the center of a tootsie pop?');
24
- expect(licks).toEqual(3);
25
- });
26
- it('should respect the default expiration for the cache', () => __awaiter(void 0, void 0, void 0, function* () {
27
- const { set, get } = (0, cache_1.createCache)({ defaultSecondsUntilExpiration: 10 }); // we're gonna use this cache to keep track of the popcorn in the microwave - we should check more regularly since it changes quickly!
28
- set('how popped is the popcorn?', 'not popped');
29
- // prove that we recorded the value and its accessible immediately after setting
30
- const popcornStatus = get('how popped is the popcorn?');
31
- expect(popcornStatus).toEqual('not popped');
32
- // prove that the value is still accessible after 9 seconds, since default ttl is 10 seconds
33
- yield sleep(9 * 1000);
34
- const popcornStatusAfter9Sec = get('how popped is the popcorn?');
35
- expect(popcornStatusAfter9Sec).toEqual('not popped'); // still should say not popped
36
- // and prove that after a total of 9 seconds, the status is no longer in the cache
37
- yield sleep(1 * 1000); // sleep 1 more second
38
- const popcornStatusAfter10Sec = get('how popped is the popcorn?');
39
- expect(popcornStatusAfter10Sec).toEqual(undefined); // no longer defined, since the default seconds until expiration was 15
40
- }));
41
- it('should respect the default expiration for the cache set by shorthand alias', () => __awaiter(void 0, void 0, void 0, function* () {
42
- const { set, get } = (0, cache_1.createCache)({ seconds: 10 }); // we're gonna use this cache to keep track of the popcorn in the microwave - we should check more regularly since it changes quickly!
43
- set('how popped is the popcorn?', 'not popped');
44
- // prove that we recorded the value and its accessible immediately after setting
45
- const popcornStatus = get('how popped is the popcorn?');
46
- expect(popcornStatus).toEqual('not popped');
47
- // prove that the value is still accessible after 9 seconds, since default ttl is 10 seconds
48
- yield sleep(9 * 1000);
49
- const popcornStatusAfter9Sec = get('how popped is the popcorn?');
50
- expect(popcornStatusAfter9Sec).toEqual('not popped'); // still should say not popped
51
- // and prove that after a total of 9 seconds, the status is no longer in the cache
52
- yield sleep(1 * 1000); // sleep 1 more second
53
- const popcornStatusAfter10Sec = get('how popped is the popcorn?');
54
- expect(popcornStatusAfter10Sec).toEqual(undefined); // no longer defined, since the default seconds until expiration was 15
55
- }));
56
- it('should respect the item level expiration for the cache', () => __awaiter(void 0, void 0, void 0, function* () {
57
- const { set, get } = (0, cache_1.createCache)(); // remember, default expiration is greater than 1 min
58
- set('ice cream state', 'solid', { secondsUntilExpiration: 5 }); // ice cream changes quickly in the heat! lets keep a quick eye on this
59
- // prove that we recorded the value and its accessible immediately after setting
60
- const iceCreamState = get('ice cream state');
61
- expect(iceCreamState).toEqual('solid');
62
- // prove that the value is still accessible after 4 seconds, since default ttl is 5 seconds
63
- yield sleep(4 * 1000);
64
- const iceCreamStateAfter4Sec = get('ice cream state');
65
- expect(iceCreamStateAfter4Sec).toEqual('solid'); // still should say solid
66
- // and prove that after a total of 5 seconds, the state is no longer in the cache
67
- yield sleep(1 * 1000); // sleep 1 more second
68
- const iceCreamStateAfter5Sec = get('ice cream state');
69
- expect(iceCreamStateAfter5Sec).toEqual(undefined); // no longer defined, since the item level seconds until expiration was 5
70
- }));
71
- it('should consider secondsUntilExpiration of null or infinity as never expiring', () => __awaiter(void 0, void 0, void 0, function* () {
72
- const { set, get } = (0, cache_1.createCache)({
73
- defaultSecondsUntilExpiration: 0, // expire immediately
74
- });
75
- // prove that setting something to the cache with default state will have it expired immediately
76
- yield set('dory-memory', 'something'); // lets see if dory can remember something
77
- const doryMemory = yield get('dory-memory');
78
- expect(doryMemory).toEqual(undefined); // its already gone! dang default expiration
79
- // prove that if we record the memory with expires-at Infinity, it persists
80
- yield set('elephant-memory', 'something', {
81
- secondsUntilExpiration: Infinity,
82
- });
83
- const elephantMemory = yield get('elephant-memory');
84
- expect(elephantMemory).toEqual('something');
85
- }));
86
- it('should accurately get keys', () => {
87
- // create the cache
88
- const { set, keys } = (0, cache_1.createCache)();
89
- // check key is added when value is set
90
- set('meaning-of-life', '42');
91
- const keys1 = keys();
92
- expect(keys1.length).toEqual(1);
93
- expect(keys1[0]).toEqual('meaning-of-life');
94
- // check that there are no duplicates when key value is updated
95
- set('meaning-of-life', '42.0');
96
- const keys2 = keys();
97
- expect(keys2.length).toEqual(1);
98
- expect(keys2[0]).toEqual('meaning-of-life');
99
- // check that multiple keys can be set
100
- set('purpose-of-life', 'propagation');
101
- const keys3 = keys();
102
- expect(keys3.length).toEqual(2);
103
- expect(keys3[1]).toEqual('purpose-of-life');
104
- // check that invalidation removes the key
105
- set('meaning-of-life', undefined);
106
- const keys4 = keys();
107
- expect(keys4.length).toEqual(1);
108
- expect(keys4[0]).toEqual('purpose-of-life');
109
- });
110
- });
111
- //# sourceMappingURL=cache.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../src/cache.test.ts"],"names":[],"mappings":"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"}