@blackglory/estore-js 0.7.0 → 0.7.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/README.md CHANGED
@@ -13,44 +13,57 @@ interface INamespaceStats {
13
13
  items: number
14
14
  }
15
15
 
16
- export interface IEStoreClientOptions {
16
+ interface IEStoreClientOptions {
17
17
  server: string
18
18
  timeout?: number
19
19
  retryIntervalForReconnection?: number
20
20
  }
21
21
 
22
- export class EStoreClient {
22
+ interface IEStoreClientRequestOptions {
23
+ signal?: AbortSignal
24
+ timeout?: number | false
25
+ }
26
+
27
+ class EStoreClient {
23
28
  static create(options: IEStoreClientOptions): Promise<EStoreClient>
24
29
 
25
30
  close(): Promise<void>
26
31
 
27
32
  getNamespaceStats(
28
33
  namespace: string
29
- , signal?: AbortSignal
34
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
30
35
  ): Promise<INamespaceStats>
31
36
 
32
- getAllNamespaces(signal?: AbortSignal): Promise<string[]>
37
+ getAllNamespaces(
38
+ signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
39
+ ): Promise<string[]>
33
40
 
34
- getAllItemIds(namespace: string, signal?: AbortSignal): Promise<string[]>
41
+ getAllItemIds(
42
+ namespace: string
43
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
44
+ ): Promise<string[]>
35
45
 
36
46
  getAllEvents(
37
47
  namespace: string
38
48
  , itemId: string
39
- , signal?: AbortSignal
49
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
40
50
  ): Promise<JSONValue[]>
41
51
 
42
- clearItemsByNamespace(namespace: string, signal?: AbortSignal): Promise<void>
52
+ clearItemsByNamespace(
53
+ namespace: string
54
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
55
+ ): Promise<void>
43
56
 
44
57
  removeItem(
45
58
  namespace: string
46
59
  , itemId: string
47
- , signal?: AbortSignal
60
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
48
61
  ): Promise<void>
49
62
 
50
63
  getItemSize(
51
64
  namespace: string
52
65
  , itemId: string
53
- , signal?: AbortSignal
66
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
54
67
  ): Promise<number>
55
68
 
56
69
  /**
@@ -62,7 +75,7 @@ export class EStoreClient {
62
75
  , itemId: string
63
76
  , event: JSONValue
64
77
  , nextEventIndex?: number
65
- , signal?: ABortSignal
78
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
66
79
  ): Promise<void>
67
80
 
68
81
  /**
@@ -73,14 +86,14 @@ export class EStoreClient {
73
86
  namespace: string
74
87
  , itemId: string
75
88
  , lastEventIndex?: number
76
- , signal?: AbortSignal
89
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
77
90
  ): Promise<void>
78
91
 
79
92
  getEvent(
80
93
  namespace: string
81
94
  , itemId: string
82
95
  , index: number
83
- , signal?: AbortSignal
96
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
84
97
  ): Promise<JSONValue | null>
85
98
  }
86
99
  ```
@@ -7,6 +7,10 @@ export interface IEStoreClientOptions {
7
7
  timeout?: number;
8
8
  retryIntervalForReconnection?: number;
9
9
  }
10
+ export interface IEStoreClientRequestOptions {
11
+ signal?: AbortSignal;
12
+ timeout?: number | false;
13
+ }
10
14
  export declare class EStoreClient {
11
15
  private client;
12
16
  private closeClients;
@@ -14,15 +18,15 @@ export declare class EStoreClient {
14
18
  static create(options: IEStoreClientOptions): Promise<EStoreClient>;
15
19
  private constructor();
16
20
  close(): Promise<void>;
17
- getNamespaceStats(namespace: string, signal?: AbortSignal): Promise<INamespaceStats>;
18
- getAllNamespaces(signal?: AbortSignal): Promise<string[]>;
19
- getAllItemIds(namespace: string, signal?: AbortSignal): Promise<string[]>;
20
- getAllEvents(namespace: string, itemId: string, signal?: AbortSignal): Promise<JSONValue[]>;
21
- clearItemsByNamespace(namespace: string, signal?: AbortSignal): Promise<void>;
22
- removeItem(namespace: string, itemId: string, signal?: AbortSignal): Promise<void>;
23
- getItemSize(namespace: string, itemId: string, signal?: AbortSignal): Promise<number>;
24
- appendEvent(namespace: string, itemId: string, event: JSONValue, nextEventIndex?: number, signal?: AbortSignal): Promise<void>;
25
- popEvent(namespace: string, itemId: string, lastEventIndex?: number, signal?: AbortSignal): Promise<void>;
26
- getEvent(namespace: string, itemId: string, index: number, signal?: AbortSignal): Promise<JSONValue | null>;
27
- private withTimeout;
21
+ getNamespaceStats(namespace: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<INamespaceStats>;
22
+ getAllNamespaces(signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<string[]>;
23
+ getAllItemIds(namespace: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<string[]>;
24
+ getAllEvents(namespace: string, itemId: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<JSONValue[]>;
25
+ clearItemsByNamespace(namespace: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<void>;
26
+ removeItem(namespace: string, itemId: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<void>;
27
+ getItemSize(namespace: string, itemId: string, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<number>;
28
+ appendEvent(namespace: string, itemId: string, event: JSONValue, nextEventIndex?: number, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<void>;
29
+ popEvent(namespace: string, itemId: string, lastEventIndex?: number, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<void>;
30
+ getEvent(namespace: string, itemId: string, index: number, signalOrOptions?: AbortSignal | IEStoreClientRequestOptions): Promise<JSONValue | null>;
31
+ private createSignal;
28
32
  }
@@ -1,6 +1,6 @@
1
1
  import { createRPCClient } from "./utils/rpc-client.js";
2
- import { raceAbortSignals, timeoutSignal } from 'extra-abort';
3
- import { isntUndefined, isUndefined } from '@blackglory/prelude';
2
+ import { isAbortSignal, raceAbortSignals, timeoutSignal } from 'extra-abort';
3
+ import { isUndefined } from '@blackglory/prelude';
4
4
  export { EventIndexConflict } from './contract.js';
5
5
  export class EStoreClient {
6
6
  static async create(options) {
@@ -15,50 +15,54 @@ export class EStoreClient {
15
15
  async close() {
16
16
  await this.closeClients();
17
17
  }
18
- async getNamespaceStats(namespace, signal) {
19
- return await this.client.getNamespaceStats(namespace, this.withTimeout(signal));
18
+ async getNamespaceStats(namespace, signalOrOptions) {
19
+ return await this.client.getNamespaceStats(namespace, this.createSignal(signalOrOptions));
20
20
  }
21
- async getAllNamespaces(signal) {
22
- return await this.client.getAllNamespaces(this.withTimeout(signal));
21
+ async getAllNamespaces(signalOrOptions) {
22
+ return await this.client.getAllNamespaces(this.createSignal(signalOrOptions));
23
23
  }
24
- async getAllItemIds(namespace, signal) {
25
- return await this.client.getAllItemIds(namespace, this.withTimeout(signal));
24
+ async getAllItemIds(namespace, signalOrOptions) {
25
+ return await this.client.getAllItemIds(namespace, this.createSignal(signalOrOptions));
26
26
  }
27
- async getAllEvents(namespace, itemId, signal) {
28
- return await this.client.getAllEvents(namespace, itemId, this.withTimeout(signal));
27
+ async getAllEvents(namespace, itemId, signalOrOptions) {
28
+ return await this.client.getAllEvents(namespace, itemId, this.createSignal(signalOrOptions));
29
29
  }
30
- async clearItemsByNamespace(namespace, signal) {
31
- await this.client.clearItemsByNamespace(namespace, this.withTimeout(signal));
30
+ async clearItemsByNamespace(namespace, signalOrOptions) {
31
+ await this.client.clearItemsByNamespace(namespace, this.createSignal(signalOrOptions));
32
32
  }
33
- async removeItem(namespace, itemId, signal) {
34
- await this.client.removeItem(namespace, itemId, this.withTimeout(signal));
33
+ async removeItem(namespace, itemId, signalOrOptions) {
34
+ await this.client.removeItem(namespace, itemId, this.createSignal(signalOrOptions));
35
35
  }
36
- async getItemSize(namespace, itemId, signal) {
37
- return await this.client.getItemSize(namespace, itemId, this.withTimeout(signal));
36
+ async getItemSize(namespace, itemId, signalOrOptions) {
37
+ return await this.client.getItemSize(namespace, itemId, this.createSignal(signalOrOptions));
38
38
  }
39
- async appendEvent(namespace, itemId, event, nextEventIndex, signal) {
39
+ async appendEvent(namespace, itemId, event, nextEventIndex, signalOrOptions) {
40
40
  if (isUndefined(nextEventIndex)) {
41
- await this.client.appendEvent(namespace, itemId, event, this.withTimeout(signal));
41
+ await this.client.appendEvent(namespace, itemId, event, this.createSignal(signalOrOptions));
42
42
  }
43
43
  else {
44
- await this.client.appendEvent(namespace, itemId, event, nextEventIndex, this.withTimeout(signal));
44
+ await this.client.appendEvent(namespace, itemId, event, nextEventIndex, this.createSignal(signalOrOptions));
45
45
  }
46
46
  }
47
- async popEvent(namespace, itemId, lastEventIndex, signal) {
47
+ async popEvent(namespace, itemId, lastEventIndex, signalOrOptions) {
48
48
  if (isUndefined(lastEventIndex)) {
49
- await this.client.popEvent(namespace, itemId, this.withTimeout(signal));
49
+ await this.client.popEvent(namespace, itemId, this.createSignal(signalOrOptions));
50
50
  }
51
51
  else {
52
- await this.client.popEvent(namespace, itemId, lastEventIndex, this.withTimeout(signal));
52
+ await this.client.popEvent(namespace, itemId, lastEventIndex, this.createSignal(signalOrOptions));
53
53
  }
54
54
  }
55
- async getEvent(namespace, itemId, index, signal) {
56
- return await this.client.getEvent(namespace, itemId, index, this.withTimeout(signal));
55
+ async getEvent(namespace, itemId, index, signalOrOptions) {
56
+ return await this.client.getEvent(namespace, itemId, index, this.createSignal(signalOrOptions));
57
57
  }
58
- withTimeout(signal) {
58
+ createSignal(signalOrOptions = {}) {
59
+ var _a;
60
+ const options = isAbortSignal(signalOrOptions)
61
+ ? { signal: signalOrOptions }
62
+ : signalOrOptions;
59
63
  return raceAbortSignals([
60
- isntUndefined(this.timeout) && timeoutSignal(this.timeout),
61
- signal
64
+ options.signal,
65
+ options.timeout !== false && ((_a = (options.timeout && timeoutSignal(options.timeout))) !== null && _a !== void 0 ? _a : (this.timeout && timeoutSignal(this.timeout)))
62
66
  ]);
63
67
  }
64
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"estore-client.js","sourceRoot":"","sources":["../src/estore-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"estore-client.js","sourceRoot":"","sources":["../src/estore-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blackglory/estore-js",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "files": [
@@ -67,10 +67,10 @@
67
67
  "@delight-rpc/extra-native-websocket": "^0.6.6",
68
68
  "@delight-rpc/extra-websocket": "^0.7.8",
69
69
  "delight-rpc": "^7.0.0",
70
- "extra-abort": "^0.4.1",
71
- "extra-native-websocket": "^0.5.1",
72
- "extra-websocket": "^0.5.1",
70
+ "extra-abort": "^0.5.1",
71
+ "extra-native-websocket": "^0.5.2",
72
+ "extra-websocket": "^0.5.3",
73
73
  "justypes": "^4.5.0",
74
- "ws": "^8.19.0"
74
+ "ws": "^8.21.0"
75
75
  }
76
76
  }
@@ -1,8 +1,8 @@
1
1
  import { createRPCClient } from '@utils/rpc-client.js'
2
2
  import { ClientProxy } from 'delight-rpc'
3
3
  import { IAPI, INamespaceStats } from './contract.js'
4
- import { raceAbortSignals, timeoutSignal } from 'extra-abort'
5
- import { isntUndefined, isUndefined, JSONValue } from '@blackglory/prelude'
4
+ import { isAbortSignal, raceAbortSignals, timeoutSignal } from 'extra-abort'
5
+ import { isUndefined, JSONValue } from '@blackglory/prelude'
6
6
  export { INamespaceStats } from './contract.js'
7
7
  export { EventIndexConflict } from './contract.js'
8
8
 
@@ -12,6 +12,11 @@ export interface IEStoreClientOptions {
12
12
  retryIntervalForReconnection?: number
13
13
  }
14
14
 
15
+ export interface IEStoreClientRequestOptions {
16
+ signal?: AbortSignal
17
+ timeout?: number | false
18
+ }
19
+
15
20
  export class EStoreClient {
16
21
  static async create(options: IEStoreClientOptions): Promise<EStoreClient> {
17
22
  const { client, close } = await createRPCClient(
@@ -34,61 +39,75 @@ export class EStoreClient {
34
39
 
35
40
  async getNamespaceStats(
36
41
  namespace: string
37
- , signal?: AbortSignal
42
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
38
43
  ): Promise<INamespaceStats> {
39
44
  return await this.client.getNamespaceStats(
40
45
  namespace
41
- , this.withTimeout(signal)
46
+ , this.createSignal(signalOrOptions)
42
47
  )
43
48
  }
44
49
 
45
- async getAllNamespaces(signal?: AbortSignal): Promise<string[]> {
46
- return await this.client.getAllNamespaces(this.withTimeout(signal))
50
+ async getAllNamespaces(
51
+ signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
52
+ ): Promise<string[]> {
53
+ return await this.client.getAllNamespaces(
54
+ this.createSignal(signalOrOptions)
55
+ )
47
56
  }
48
57
 
49
58
  async getAllItemIds(
50
59
  namespace: string
51
- , signal?: AbortSignal
60
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
52
61
  ): Promise<string[]> {
53
- return await this.client.getAllItemIds(namespace, this.withTimeout(signal))
62
+ return await this.client.getAllItemIds(
63
+ namespace
64
+ , this.createSignal(signalOrOptions)
65
+ )
54
66
  }
55
67
 
56
68
  async getAllEvents(
57
69
  namespace: string
58
70
  , itemId: string
59
- , signal?: AbortSignal
71
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
60
72
  ): Promise<JSONValue[]> {
61
73
  return await this.client.getAllEvents(
62
74
  namespace
63
75
  , itemId
64
- , this.withTimeout(signal)
76
+ , this.createSignal(signalOrOptions)
65
77
  )
66
78
  }
67
79
 
68
80
  async clearItemsByNamespace(
69
81
  namespace: string
70
- , signal?: AbortSignal
82
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
71
83
  ): Promise<void> {
72
- await this.client.clearItemsByNamespace(namespace, this.withTimeout(signal))
84
+ await this.client.clearItemsByNamespace(
85
+ namespace
86
+ , this.createSignal(signalOrOptions)
87
+ )
73
88
  }
74
89
 
75
90
  async removeItem(
76
91
  namespace: string
77
92
  , itemId: string
78
- , signal?: AbortSignal
93
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
79
94
  ): Promise<void> {
80
- await this.client.removeItem(namespace, itemId, this.withTimeout(signal))
95
+ await this.client.removeItem(
96
+ namespace
97
+ , itemId
98
+ , this.createSignal(signalOrOptions)
99
+ )
81
100
  }
82
101
 
83
102
  async getItemSize(
84
103
  namespace: string
85
104
  , itemId: string
86
- , signal?: AbortSignal
105
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
87
106
  ): Promise<number> {
88
107
  return await this.client.getItemSize(
89
108
  namespace
90
109
  , itemId
91
- , this.withTimeout(signal)
110
+ , this.createSignal(signalOrOptions)
92
111
  )
93
112
  }
94
113
 
@@ -101,14 +120,14 @@ export class EStoreClient {
101
120
  , itemId: string
102
121
  , event: JSONValue
103
122
  , nextEventIndex?: number
104
- , signal?: AbortSignal
123
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
105
124
  ): Promise<void> {
106
125
  if (isUndefined(nextEventIndex)) {
107
126
  await this.client.appendEvent(
108
127
  namespace
109
128
  , itemId
110
129
  , event
111
- , this.withTimeout(signal)
130
+ , this.createSignal(signalOrOptions)
112
131
  )
113
132
  } else {
114
133
  await this.client.appendEvent(
@@ -116,7 +135,7 @@ export class EStoreClient {
116
135
  , itemId
117
136
  , event
118
137
  , nextEventIndex
119
- , this.withTimeout(signal)
138
+ , this.createSignal(signalOrOptions)
120
139
  )
121
140
  }
122
141
  }
@@ -129,20 +148,20 @@ export class EStoreClient {
129
148
  namespace: string
130
149
  , itemId: string
131
150
  , lastEventIndex?: number
132
- , signal?: AbortSignal
151
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
133
152
  ): Promise<void> {
134
153
  if (isUndefined(lastEventIndex)) {
135
154
  await this.client.popEvent(
136
155
  namespace
137
156
  , itemId
138
- , this.withTimeout(signal)
157
+ , this.createSignal(signalOrOptions)
139
158
  )
140
159
  } else {
141
160
  await this.client.popEvent(
142
161
  namespace
143
162
  , itemId
144
163
  , lastEventIndex
145
- , this.withTimeout(signal)
164
+ , this.createSignal(signalOrOptions)
146
165
  )
147
166
  }
148
167
  }
@@ -151,20 +170,29 @@ export class EStoreClient {
151
170
  namespace: string
152
171
  , itemId: string
153
172
  , index: number
154
- , signal?: AbortSignal
173
+ , signalOrOptions?: AbortSignal | IEStoreClientRequestOptions
155
174
  ): Promise<JSONValue | null> {
156
175
  return await this.client.getEvent(
157
176
  namespace
158
177
  , itemId
159
178
  , index
160
- , this.withTimeout(signal)
179
+ , this.createSignal(signalOrOptions)
161
180
  )
162
181
  }
163
182
 
164
- private withTimeout(signal?: AbortSignal): AbortSignal {
183
+ private createSignal(
184
+ signalOrOptions: AbortSignal | IEStoreClientRequestOptions = {}
185
+ ): AbortSignal {
186
+ const options: IEStoreClientRequestOptions = isAbortSignal(signalOrOptions)
187
+ ? { signal: signalOrOptions }
188
+ : signalOrOptions
189
+
165
190
  return raceAbortSignals([
166
- isntUndefined(this.timeout) && timeoutSignal(this.timeout)
167
- , signal
191
+ options.signal
192
+ , options.timeout !== false && (
193
+ (options.timeout && timeoutSignal(options.timeout)) ??
194
+ (this.timeout && timeoutSignal(this.timeout))
195
+ )
168
196
  ])
169
197
  }
170
198
  }