@atproto-labs/simple-store 0.1.2 → 0.2.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @atproto-labs/simple-store
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#3776](https://github.com/bluesky-social/atproto/pull/3776) [`0d77d1b55`](https://github.com/bluesky-social/atproto/commit/0d77d1b550a58117aee8f7f1e2be24d255ade9e4) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Remove `bind` method from `CachedGetter`
8
+
9
+ ### Patch Changes
10
+
11
+ - [#3776](https://github.com/bluesky-social/atproto/pull/3776) [`0d77d1b55`](https://github.com/bluesky-social/atproto/commit/0d77d1b550a58117aee8f7f1e2be24d255ade9e4) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add `context` getter option to `CachedGetter` class
12
+
3
13
  ## 0.1.2
4
14
 
5
15
  ### Patch Changes
package/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  Dual MIT/Apache-2.0 License
2
2
 
3
- Copyright (c) 2022-2024 Bluesky PBC, and Contributors
3
+ Copyright (c) 2022-2025 Bluesky PBC, and Contributors
4
4
 
5
5
  Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
6
6
 
@@ -1,5 +1,6 @@
1
- import { Awaitable, Key, SimpleStore, Value } from './simple-store.js';
2
- export type GetCachedOptions = {
1
+ import { Awaitable, GetOptions as GetStoredOptions, Key, SimpleStore, Value } from './simple-store.js';
2
+ export type { GetStoredOptions };
3
+ export type GetCachedOptions<C = void> = {
3
4
  signal?: AbortSignal;
4
5
  /**
5
6
  * Do not use the cache to get the value. Always get a new value from the
@@ -18,9 +19,13 @@ export type GetCachedOptions = {
18
19
  * @default false // If no isStale option was provided to the CachedGetter
19
20
  */
20
21
  allowStale?: boolean;
21
- };
22
- export type Getter<K, V> = (key: K, options: undefined | GetCachedOptions, storedValue: undefined | V) => Awaitable<V>;
23
- export type CachedGetterOptions<K, V> = {
22
+ } & (C extends void ? {
23
+ context?: C;
24
+ } : {
25
+ context: C;
26
+ });
27
+ export type Getter<K extends Key, V extends Value, C = void> = (key: K, options: GetCachedOptions<C>, storedValue: undefined | V) => Awaitable<V>;
28
+ export type CachedGetterOptions<K extends Key, V extends Value> = {
24
29
  isStale?: (key: K, value: V) => boolean | PromiseLike<boolean>;
25
30
  onStoreError?: (err: unknown, key: K, value: V) => void | PromiseLike<void>;
26
31
  deleteOnError?: (err: unknown, key: K, value: V) => boolean | PromiseLike<boolean>;
@@ -29,15 +34,15 @@ export type CachedGetterOptions<K, V> = {
29
34
  * Wrapper utility that uses a store to speed up the retrieval of values from an
30
35
  * (expensive) getter function.
31
36
  */
32
- export declare class CachedGetter<K extends Key = string, V extends Value = Value> {
33
- readonly getter: Getter<K, V>;
37
+ export declare class CachedGetter<K extends Key = string, V extends Value = Value, C = void> {
38
+ readonly getter: Getter<K, V, C>;
34
39
  readonly store: SimpleStore<K, V>;
35
- readonly options?: Readonly<CachedGetterOptions<K, V>> | undefined;
40
+ readonly options?: CachedGetterOptions<K, V> | undefined;
36
41
  private pending;
37
- constructor(getter: Getter<K, V>, store: SimpleStore<K, V>, options?: Readonly<CachedGetterOptions<K, V>> | undefined);
38
- get(key: K, options?: GetCachedOptions): Promise<V>;
39
- bind(key: K): (options?: GetCachedOptions) => Promise<V>;
40
- getStored(key: K, options?: GetCachedOptions): Promise<V | undefined>;
42
+ constructor(getter: Getter<K, V, C>, store: SimpleStore<K, V>, options?: CachedGetterOptions<K, V> | undefined);
43
+ get(key: C extends void ? K : never, options?: GetCachedOptions<C>): Promise<V>;
44
+ get(key: C extends void ? never : K, options: GetCachedOptions<C>): Promise<V>;
45
+ getStored(key: K, options?: GetStoredOptions): Promise<V | undefined>;
41
46
  setStored(key: K, value: V): Promise<void>;
42
47
  delStored(key: K, _cause?: unknown): Promise<void>;
43
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cached-getter.d.ts","sourceRoot":"","sources":["../src/cached-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CACzB,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,SAAS,GAAG,gBAAgB,EACrC,WAAW,EAAE,SAAS,GAAG,CAAC,KACvB,SAAS,CAAC,CAAC,CAAC,CAAA;AAEjB,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAC9D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC3E,aAAa,CAAC,EAAE,CACd,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,KACL,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;CACpC,CAAA;AAOD;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,GAAG,MAAM,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK;IAIrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IALxD,OAAO,CAAC,OAAO,CAA+B;gBAGnC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAA;IAGlD,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAqFzD,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC;IAIlD,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQrE,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1C,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
1
+ {"version":3,"file":"cached-getter.d.ts","sourceRoot":"","sources":["../src/cached-getter.ts"],"names":[],"mappings":"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"}
@@ -34,12 +34,12 @@ class CachedGetter {
34
34
  value: new Map()
35
35
  });
36
36
  }
37
- async get(key, options) {
38
- options?.signal?.throwIfAborted();
37
+ async get(key, options = {}) {
38
+ options.signal?.throwIfAborted();
39
39
  const isStale = this.options?.isStale;
40
- const allowStored = options?.noCache
40
+ const allowStored = options.noCache
41
41
  ? returnFalse // Never allow stored values to be returned
42
- : options?.allowStale || isStale == null
42
+ : options.allowStale || isStale == null
43
43
  ? returnTrue // Always allow stored values to be returned
44
44
  : async (value) => !(await isStale(key, value));
45
45
  // As long as concurrent requests are made for the same key, only one
@@ -61,7 +61,7 @@ class CachedGetter {
61
61
  // Ignore errors from previous execution flows (they will have been
62
62
  // propagated by that flow).
63
63
  }
64
- options?.signal?.throwIfAborted();
64
+ options.signal?.throwIfAborted();
65
65
  }
66
66
  const currentExecutionFlow = Promise.resolve()
67
67
  .then(async () => {
@@ -109,9 +109,6 @@ class CachedGetter {
109
109
  const { value } = await currentExecutionFlow;
110
110
  return value;
111
111
  }
112
- bind(key) {
113
- return async (options) => this.get(key, options);
114
- }
115
112
  async getStored(key, options) {
116
113
  try {
117
114
  return await this.store.get(key, options);
@@ -1 +1 @@
1
- {"version":3,"file":"cached-getter.js","sourceRoot":"","sources":["../src/cached-getter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cached-getter.js","sourceRoot":"","sources":["../src/cached-getter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto-labs/simple-store",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "description": "Simple store interfaces & utilities",
6
6
  "keywords": [
@@ -1,6 +1,13 @@
1
- import { Awaitable, Key, SimpleStore, Value } from './simple-store.js'
2
-
3
- export type GetCachedOptions = {
1
+ import {
2
+ Awaitable,
3
+ GetOptions as GetStoredOptions,
4
+ Key,
5
+ SimpleStore,
6
+ Value,
7
+ } from './simple-store.js'
8
+
9
+ export type { GetStoredOptions }
10
+ export type GetCachedOptions<C = void> = {
4
11
  signal?: AbortSignal
5
12
 
6
13
  /**
@@ -21,15 +28,15 @@ export type GetCachedOptions = {
21
28
  * @default false // If no isStale option was provided to the CachedGetter
22
29
  */
23
30
  allowStale?: boolean
24
- }
31
+ } & (C extends void ? { context?: C } : { context: C })
25
32
 
26
- export type Getter<K, V> = (
33
+ export type Getter<K extends Key, V extends Value, C = void> = (
27
34
  key: K,
28
- options: undefined | GetCachedOptions,
35
+ options: GetCachedOptions<C>,
29
36
  storedValue: undefined | V,
30
37
  ) => Awaitable<V>
31
38
 
32
- export type CachedGetterOptions<K, V> = {
39
+ export type CachedGetterOptions<K extends Key, V extends Value> = {
33
40
  isStale?: (key: K, value: V) => boolean | PromiseLike<boolean>
34
41
  onStoreError?: (err: unknown, key: K, value: V) => void | PromiseLike<void>
35
42
  deleteOnError?: (
@@ -48,23 +55,35 @@ const returnFalse = () => false
48
55
  * Wrapper utility that uses a store to speed up the retrieval of values from an
49
56
  * (expensive) getter function.
50
57
  */
51
- export class CachedGetter<K extends Key = string, V extends Value = Value> {
58
+ export class CachedGetter<
59
+ K extends Key = string,
60
+ V extends Value = Value,
61
+ C = void,
62
+ > {
52
63
  private pending = new Map<K, PendingItem<V>>()
53
64
 
54
65
  constructor(
55
- readonly getter: Getter<K, V>,
66
+ readonly getter: Getter<K, V, C>,
56
67
  readonly store: SimpleStore<K, V>,
57
- readonly options?: Readonly<CachedGetterOptions<K, V>>,
68
+ readonly options?: CachedGetterOptions<K, V>,
58
69
  ) {}
59
70
 
60
- async get(key: K, options?: GetCachedOptions): Promise<V> {
61
- options?.signal?.throwIfAborted()
71
+ async get(
72
+ key: C extends void ? K : never,
73
+ options?: GetCachedOptions<C>,
74
+ ): Promise<V>
75
+ async get(
76
+ key: C extends void ? never : K,
77
+ options: GetCachedOptions<C>,
78
+ ): Promise<V>
79
+ async get(key: K, options = {} as GetCachedOptions<C>): Promise<V> {
80
+ options.signal?.throwIfAborted()
62
81
 
63
82
  const isStale = this.options?.isStale
64
83
 
65
- const allowStored: (value: V) => Awaitable<boolean> = options?.noCache
84
+ const allowStored: (value: V) => Awaitable<boolean> = options.noCache
66
85
  ? returnFalse // Never allow stored values to be returned
67
- : options?.allowStale || isStale == null
86
+ : options.allowStale || isStale == null
68
87
  ? returnTrue // Always allow stored values to be returned
69
88
  : async (value: V) => !(await isStale(key, value))
70
89
 
@@ -86,7 +105,7 @@ export class CachedGetter<K extends Key = string, V extends Value = Value> {
86
105
  // propagated by that flow).
87
106
  }
88
107
 
89
- options?.signal?.throwIfAborted()
108
+ options.signal?.throwIfAborted()
90
109
  }
91
110
 
92
111
  const currentExecutionFlow: PendingItem<V> = Promise.resolve()
@@ -142,11 +161,7 @@ export class CachedGetter<K extends Key = string, V extends Value = Value> {
142
161
  return value
143
162
  }
144
163
 
145
- bind(key: K): (options?: GetCachedOptions) => Promise<V> {
146
- return async (options) => this.get(key, options)
147
- }
148
-
149
- async getStored(key: K, options?: GetCachedOptions): Promise<V | undefined> {
164
+ async getStored(key: K, options?: GetStoredOptions): Promise<V | undefined> {
150
165
  try {
151
166
  return await this.store.get(key, options)
152
167
  } catch (err) {
@@ -1 +1 @@
1
- {"root":["./src/cached-getter.ts","./src/index.ts","./src/simple-store.ts"],"version":"5.6.3"}
1
+ {"root":["./src/cached-getter.ts","./src/index.ts","./src/simple-store.ts"],"version":"5.8.2"}