unikvs 0.0.2 → 0.0.3

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/core/_assign-context.d.ts +3 -0
  3. package/dist/src/core/_assign-context.d.ts.map +1 -0
  4. package/dist/src/core/_assign-context.js +3 -0
  5. package/dist/src/core/_combine-signals.d.ts +3 -0
  6. package/dist/src/core/_combine-signals.d.ts.map +1 -0
  7. package/dist/src/core/_combine-signals.js +34 -0
  8. package/dist/src/core/_is-iterable.d.ts +2 -0
  9. package/dist/src/core/_is-iterable.d.ts.map +1 -0
  10. package/dist/src/core/_is-iterable.js +3 -0
  11. package/dist/src/core/_is-plain-object.d.ts +2 -0
  12. package/dist/src/core/_is-plain-object.d.ts.map +1 -0
  13. package/dist/src/core/_is-plain-object.js +7 -0
  14. package/dist/src/core/_logger.d.ts +3 -0
  15. package/dist/src/core/_logger.d.ts.map +1 -0
  16. package/dist/src/core/_logger.js +3 -0
  17. package/dist/src/core/_merge-context.d.ts +3 -0
  18. package/dist/src/core/_merge-context.d.ts.map +1 -0
  19. package/dist/src/core/_merge-context.js +4 -0
  20. package/dist/src/core/_to-context.d.ts +7 -0
  21. package/dist/src/core/_to-context.d.ts.map +1 -0
  22. package/dist/src/core/_to-context.js +42 -0
  23. package/dist/src/core/_to-value-stream.d.ts +4 -0
  24. package/dist/src/core/_to-value-stream.d.ts.map +1 -0
  25. package/dist/src/core/_to-value-stream.js +38 -0
  26. package/dist/src/core/_with-readable-stream-from.d.ts +6 -0
  27. package/dist/src/core/_with-readable-stream-from.d.ts.map +1 -0
  28. package/dist/src/core/_with-readable-stream-from.js +58 -0
  29. package/dist/src/core/context.types.d.ts +5 -0
  30. package/dist/src/core/context.types.d.ts.map +1 -0
  31. package/dist/src/core/context.types.js +1 -0
  32. package/dist/src/core/errors.d.ts +13 -0
  33. package/dist/src/core/errors.d.ts.map +1 -0
  34. package/dist/src/core/errors.js +20 -0
  35. package/dist/src/core/index.d.ts +15 -0
  36. package/dist/src/core/index.d.ts.map +1 -0
  37. package/dist/src/core/index.js +4 -0
  38. package/dist/src/core/plugin.types.d.ts +8 -0
  39. package/dist/src/core/plugin.types.d.ts.map +1 -0
  40. package/dist/src/core/plugin.types.js +1 -0
  41. package/dist/src/core/storage.types.d.ts +22 -0
  42. package/dist/src/core/storage.types.d.ts.map +1 -0
  43. package/dist/src/core/storage.types.js +1 -0
  44. package/dist/src/core/to-readable-stream.d.ts +2 -0
  45. package/dist/src/core/to-readable-stream.d.ts.map +1 -0
  46. package/dist/src/core/to-readable-stream.js +4 -0
  47. package/dist/src/core/transformer.types.d.ts +18 -0
  48. package/dist/src/core/transformer.types.d.ts.map +1 -0
  49. package/dist/src/core/transformer.types.js +1 -0
  50. package/dist/src/core/unikvs-config.d.ts +82 -0
  51. package/dist/src/core/unikvs-config.d.ts.map +1 -0
  52. package/dist/src/core/unikvs-config.js +49 -0
  53. package/dist/src/core/unikvs.d.ts +73 -0
  54. package/dist/src/core/unikvs.d.ts.map +1 -0
  55. package/dist/src/core/unikvs.js +678 -0
  56. package/dist/src/core/utils.types.d.ts +3 -0
  57. package/dist/src/core/utils.types.d.ts.map +1 -0
  58. package/dist/src/core/utils.types.js +1 -0
  59. package/dist/src/core/value-stream.types.d.ts +4 -0
  60. package/dist/src/core/value-stream.types.d.ts.map +1 -0
  61. package/dist/src/core/value-stream.types.js +1 -0
  62. package/dist/src/destinations/memory-storage.d.ts +17 -0
  63. package/dist/src/destinations/memory-storage.d.ts.map +1 -0
  64. package/dist/src/destinations/memory-storage.js +113 -0
  65. package/dist/src/types/storage.d.ts +5 -0
  66. package/dist/src/types/storage.d.ts.map +1 -0
  67. package/dist/src/types/storage.js +1 -0
  68. package/dist/src/types/transformer.d.ts +5 -0
  69. package/dist/src/types/transformer.d.ts.map +1 -0
  70. package/dist/src/types/transformer.js +1 -0
  71. package/package.json +69 -6
  72. package/src/core/_assign-context.ts +5 -0
  73. package/src/core/_combine-signals.ts +40 -0
  74. package/src/core/_is-iterable.ts +3 -0
  75. package/src/core/_is-plain-object.ts +11 -0
  76. package/src/core/_logger.ts +5 -0
  77. package/src/core/_merge-context.ts +9 -0
  78. package/src/core/_to-context.ts +59 -0
  79. package/src/core/_to-value-stream.ts +41 -0
  80. package/src/core/_with-readable-stream-from.ts +70 -0
  81. package/src/core/context.types.ts +7 -0
  82. package/src/core/errors.ts +37 -0
  83. package/src/core/index.ts +23 -0
  84. package/src/core/plugin.types.ts +10 -0
  85. package/src/core/storage.types.ts +53 -0
  86. package/src/core/to-readable-stream.ts +7 -0
  87. package/src/core/transformer.types.ts +110 -0
  88. package/src/core/unikvs-config.ts +230 -0
  89. package/src/core/unikvs.ts +740 -0
  90. package/src/core/utils.types.ts +3 -0
  91. package/src/core/value-stream.types.ts +3 -0
  92. package/src/destinations/memory-storage.ts +160 -0
  93. package/src/types/storage.ts +5 -0
  94. package/src/types/transformer.ts +5 -0
  95. package/README.md +0 -45
@@ -0,0 +1,678 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
54
+ if (kind === "m") throw new TypeError("Private method is not writable");
55
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
56
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
57
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
58
+ };
59
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
60
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
61
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
62
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
63
+ };
64
+ var _UniKvs_instances, _UniKvs_con, _UniKvs_context, _UniKvs_destinations, _UniKvs_transformers, _UniKvs_transformerSet, _UniKvs_open;
65
+ import { asyncmux, Asyncmux } from "asyncmux";
66
+ import combineSignals from "./_combine-signals.js";
67
+ import log from "./_logger.js";
68
+ import mergeContext from "./_merge-context.js";
69
+ import toValueStream from "./_to-value-stream.js";
70
+ import UniKvsConfig from "./unikvs-config.js";
71
+ class UniKvs {
72
+ static config() {
73
+ return new UniKvsConfig(this);
74
+ }
75
+ constructor(context, destinations, transformers) {
76
+ _UniKvs_instances.add(this);
77
+ _UniKvs_con.set(this, void 0);
78
+ _UniKvs_context.set(this, void 0);
79
+ _UniKvs_destinations.set(this, void 0);
80
+ _UniKvs_transformers.set(this, void 0);
81
+ _UniKvs_transformerSet.set(this, void 0);
82
+ __classPrivateFieldSet(this, _UniKvs_con, null, "f");
83
+ __classPrivateFieldSet(this, _UniKvs_context, context, "f");
84
+ __classPrivateFieldSet(this, _UniKvs_destinations, destinations, "f");
85
+ __classPrivateFieldSet(this, _UniKvs_transformers, transformers, "f");
86
+ __classPrivateFieldSet(this, _UniKvs_transformerSet, new Set(transformers), "f");
87
+ }
88
+ get isOpen() {
89
+ return !!__classPrivateFieldGet(this, _UniKvs_con, "f");
90
+ }
91
+ async open(arg0 = {}) {
92
+ const env_1 = { stack: [], error: void 0, hasError: false };
93
+ try {
94
+ if (__classPrivateFieldGet(this, _UniKvs_con, "f")) {
95
+ throw new Error();
96
+ }
97
+ __classPrivateFieldSet(this, _UniKvs_con, {
98
+ ac: new AbortController(),
99
+ ioMux: new Asyncmux(),
100
+ }, "f");
101
+ const { ac } = __classPrivateFieldGet(this, _UniKvs_con, "f");
102
+ const { signal } = (function parseOpenArguments() {
103
+ const { signal } = arg0 instanceof AbortSignal ? { signal: arg0 } : arg0;
104
+ return {
105
+ signal: combineSignals([signal, ac.signal]),
106
+ };
107
+ })();
108
+ const _ = __addDisposableResource(env_1, await asyncmux(this, signal), false);
109
+ if (__classPrivateFieldGet(this, _UniKvs_con, "f").ac !== ac) {
110
+ throw new Error();
111
+ }
112
+ const context = { "unikvs:action": "open" };
113
+ const plugins = [...__classPrivateFieldGet(this, _UniKvs_destinations, "f"), ...__classPrivateFieldGet(this, _UniKvs_transformers, "f")];
114
+ const openFns = [];
115
+ const dispose = [];
116
+ for (const plugin of plugins) {
117
+ if (plugin.isOpen || !plugin.open) {
118
+ continue;
119
+ }
120
+ openFns.push(async () => {
121
+ await plugin.open(signal, context);
122
+ if (!plugin.close) {
123
+ return;
124
+ }
125
+ dispose.push(async () => {
126
+ try {
127
+ await plugin.close(signal, context);
128
+ }
129
+ catch (ex) {
130
+ if (!__classPrivateFieldGet(this, _UniKvs_transformerSet, "f").has(plugin)) {
131
+ log.warn `Failed to close storage: ${ex}`;
132
+ }
133
+ else {
134
+ log.warn `Failed to close transformer: ${ex}`;
135
+ }
136
+ }
137
+ });
138
+ });
139
+ }
140
+ try {
141
+ if (openFns.length > 0) {
142
+ const errors = [];
143
+ await Promise.all(openFns.map(async (f) => {
144
+ try {
145
+ await f();
146
+ }
147
+ catch (ex) {
148
+ errors.push(ex);
149
+ }
150
+ }));
151
+ switch (errors.length) {
152
+ case 0:
153
+ break;
154
+ case 1:
155
+ throw errors[0];
156
+ default:
157
+ throw new AggregateError(errors);
158
+ }
159
+ }
160
+ }
161
+ catch (ex) {
162
+ if (dispose.length > 0) {
163
+ await Promise.all(dispose.map((f) => f()));
164
+ }
165
+ __classPrivateFieldSet(this, _UniKvs_con, null, "f");
166
+ throw ex;
167
+ }
168
+ }
169
+ catch (e_1) {
170
+ env_1.error = e_1;
171
+ env_1.hasError = true;
172
+ }
173
+ finally {
174
+ __disposeResources(env_1);
175
+ }
176
+ }
177
+ async close(arg0 = {}) {
178
+ const env_2 = { stack: [], error: void 0, hasError: false };
179
+ try {
180
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
181
+ throw new Error();
182
+ }
183
+ const { signal } = (function parseCloseArguments() {
184
+ const { signal } = arg0 instanceof AbortSignal ? { signal: arg0 } : arg0;
185
+ return {
186
+ signal: combineSignals([signal, AbortSignal.timeout(10e3)]),
187
+ };
188
+ })();
189
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
190
+ ac.abort();
191
+ const _lock = __addDisposableResource(env_2, await asyncmux(this, signal), false);
192
+ const _ioLock = __addDisposableResource(env_2, await ioMux.lock({ signal }), false);
193
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
194
+ throw new Error();
195
+ }
196
+ const context = { "unikvs:action": "close" };
197
+ const plugins = [...__classPrivateFieldGet(this, _UniKvs_destinations, "f"), ...__classPrivateFieldGet(this, _UniKvs_transformers, "f")];
198
+ const closeFns = [];
199
+ for (const plugin of plugins) {
200
+ if (plugin.isOpen || !plugin.close) {
201
+ continue;
202
+ }
203
+ closeFns.push(async () => {
204
+ await plugin.close(signal, context);
205
+ });
206
+ }
207
+ if (closeFns.length > 0) {
208
+ const errors = [];
209
+ await Promise.all(closeFns.map(async (f) => {
210
+ try {
211
+ await f();
212
+ }
213
+ catch (ex) {
214
+ errors.push(ex);
215
+ }
216
+ }));
217
+ switch (errors.length) {
218
+ case 0:
219
+ break;
220
+ case 1:
221
+ throw errors[0];
222
+ default:
223
+ throw new AggregateError(errors);
224
+ }
225
+ }
226
+ }
227
+ catch (e_2) {
228
+ env_2.error = e_2;
229
+ env_2.hasError = true;
230
+ }
231
+ finally {
232
+ __disposeResources(env_2);
233
+ }
234
+ }
235
+ async set(arg0, arg1, arg2) {
236
+ const env_3 = { stack: [], error: void 0, hasError: false };
237
+ try {
238
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
239
+ throw new Error();
240
+ }
241
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
242
+ const { key, value, signal, context } = (function parseSetArguments(ctx) {
243
+ const { key, value, signal, context } = typeof arg0 === "object"
244
+ ? arg0
245
+ : {
246
+ ...arg2,
247
+ key: arg0,
248
+ value: arg1,
249
+ };
250
+ return {
251
+ key,
252
+ value,
253
+ signal: combineSignals([signal, ac.signal]),
254
+ context: mergeContext(ctx, context),
255
+ };
256
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
257
+ const _lock = __addDisposableResource(env_3, await asyncmux.readonly(this, signal), false);
258
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
259
+ throw new Error();
260
+ }
261
+ context["unikvs:action"] = "set";
262
+ const _close = __addDisposableResource(env_3, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
263
+ const errors = [];
264
+ if (value instanceof ReadableStream) {
265
+ const env_4 = { stack: [], error: void 0, hasError: false };
266
+ try {
267
+ let data = value;
268
+ for (const transformer of __classPrivateFieldGet(this, _UniKvs_transformers, "f")) {
269
+ const e = await transformer.getEncodable(signal, context);
270
+ data = data.pipeThrough(e);
271
+ }
272
+ const _ioLock = __addDisposableResource(env_4, await ioMux.lock({ key, signal }), false);
273
+ await Promise.all(__classPrivateFieldGet(this, _UniKvs_destinations, "f").map(async (storage, i) => {
274
+ let r = data;
275
+ if (i !== __classPrivateFieldGet(this, _UniKvs_destinations, "f").length - 1) {
276
+ [r, data] = data.tee();
277
+ }
278
+ try {
279
+ const w = await storage.getWritable(key, signal, context);
280
+ await r.pipeTo(w, { signal });
281
+ }
282
+ catch (ex) {
283
+ errors.push(ex);
284
+ }
285
+ }));
286
+ }
287
+ catch (e_3) {
288
+ env_4.error = e_3;
289
+ env_4.hasError = true;
290
+ }
291
+ finally {
292
+ __disposeResources(env_4);
293
+ }
294
+ }
295
+ else {
296
+ const env_5 = { stack: [], error: void 0, hasError: false };
297
+ try {
298
+ let data = value;
299
+ for (const transformer of __classPrivateFieldGet(this, _UniKvs_transformers, "f")) {
300
+ data = await transformer.encode(data, signal, context);
301
+ }
302
+ const _ioLock = __addDisposableResource(env_5, await ioMux.lock({ key, signal }), false);
303
+ await Promise.all(__classPrivateFieldGet(this, _UniKvs_destinations, "f").map(async (storage) => {
304
+ try {
305
+ await storage.write(key, data, signal, context);
306
+ }
307
+ catch (ex) {
308
+ errors.push(ex);
309
+ }
310
+ }));
311
+ }
312
+ catch (e_4) {
313
+ env_5.error = e_4;
314
+ env_5.hasError = true;
315
+ }
316
+ finally {
317
+ __disposeResources(env_5);
318
+ }
319
+ }
320
+ switch (errors.length) {
321
+ case 0:
322
+ break;
323
+ case 1:
324
+ throw errors[0];
325
+ default:
326
+ throw new AggregateError(errors);
327
+ }
328
+ }
329
+ catch (e_5) {
330
+ env_3.error = e_5;
331
+ env_3.hasError = true;
332
+ }
333
+ finally {
334
+ const result_1 = __disposeResources(env_3);
335
+ if (result_1)
336
+ await result_1;
337
+ }
338
+ }
339
+ async get(arg0, arg1 = {}) {
340
+ const env_6 = { stack: [], error: void 0, hasError: false };
341
+ try {
342
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
343
+ throw new Error();
344
+ }
345
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
346
+ const { key, signal, context } = (function parseGetArguments(ctx) {
347
+ const { key, signal, context } = typeof arg0 === "object"
348
+ ? arg0
349
+ : {
350
+ ...arg1,
351
+ key: arg0,
352
+ };
353
+ return {
354
+ key,
355
+ signal: combineSignals([signal, ac.signal]),
356
+ context: mergeContext(ctx, context),
357
+ };
358
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
359
+ const _lock = __addDisposableResource(env_6, await asyncmux.readonly(this, signal), false);
360
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
361
+ throw new Error();
362
+ }
363
+ context["unikvs:action"] = "get";
364
+ const _close = __addDisposableResource(env_6, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
365
+ const NONE = {};
366
+ let data = NONE;
367
+ {
368
+ const env_7 = { stack: [], error: void 0, hasError: false };
369
+ try {
370
+ const _ioLock = __addDisposableResource(env_7, await ioMux.rLock({ key, signal }), false);
371
+ for (const storage of __classPrivateFieldGet(this, _UniKvs_destinations, "f")) {
372
+ if (await storage.exists(key, signal, context)) {
373
+ data = await storage.read(key, signal, context);
374
+ }
375
+ }
376
+ }
377
+ catch (e_6) {
378
+ env_7.error = e_6;
379
+ env_7.hasError = true;
380
+ }
381
+ finally {
382
+ __disposeResources(env_7);
383
+ }
384
+ }
385
+ if (data === NONE) {
386
+ throw new Error();
387
+ }
388
+ if (__classPrivateFieldGet(this, _UniKvs_transformers, "f").length > 0) {
389
+ for (const transformer of __classPrivateFieldGet(this, _UniKvs_transformers, "f").toReversed()) {
390
+ data = await transformer.decode(data, signal, context);
391
+ }
392
+ }
393
+ return data;
394
+ }
395
+ catch (e_7) {
396
+ env_6.error = e_7;
397
+ env_6.hasError = true;
398
+ }
399
+ finally {
400
+ const result_2 = __disposeResources(env_6);
401
+ if (result_2)
402
+ await result_2;
403
+ }
404
+ }
405
+ async stream(arg0, arg1 = {}) {
406
+ const env_8 = { stack: [], error: void 0, hasError: false };
407
+ try {
408
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
409
+ throw new Error();
410
+ }
411
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
412
+ const { key, signal, context } = (function parseStreamArguments(ctx) {
413
+ const { key, signal, context } = typeof arg0 === "object"
414
+ ? arg0
415
+ : {
416
+ ...arg1,
417
+ key: arg0,
418
+ };
419
+ return {
420
+ key,
421
+ signal: combineSignals([signal, ac.signal]),
422
+ context: mergeContext(ctx, context),
423
+ };
424
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
425
+ const _lock = __addDisposableResource(env_8, await asyncmux.readonly(this, signal), false);
426
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
427
+ throw new Error();
428
+ }
429
+ context["unikvs:action"] = "stream";
430
+ const _close = __addDisposableResource(env_8, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
431
+ const NONE = {};
432
+ let r = NONE;
433
+ {
434
+ const env_9 = { stack: [], error: void 0, hasError: false };
435
+ try {
436
+ const _ioLock = __addDisposableResource(env_9, await ioMux.rLock({ key, signal }), false);
437
+ for (const storage of __classPrivateFieldGet(this, _UniKvs_destinations, "f")) {
438
+ if (await storage.exists(key, signal, context)) {
439
+ r = await storage.getReadable(key, signal, context);
440
+ }
441
+ }
442
+ }
443
+ catch (e_8) {
444
+ env_9.error = e_8;
445
+ env_9.hasError = true;
446
+ }
447
+ finally {
448
+ __disposeResources(env_9);
449
+ }
450
+ }
451
+ if (r === NONE) {
452
+ throw new Error();
453
+ }
454
+ if (__classPrivateFieldGet(this, _UniKvs_transformers, "f").length > 0) {
455
+ for (const transformer of __classPrivateFieldGet(this, _UniKvs_transformers, "f").toReversed()) {
456
+ const d = await transformer.getDecodable(signal, context);
457
+ r = r.pipeThrough(d);
458
+ }
459
+ }
460
+ return toValueStream(r);
461
+ }
462
+ catch (e_9) {
463
+ env_8.error = e_9;
464
+ env_8.hasError = true;
465
+ }
466
+ finally {
467
+ const result_3 = __disposeResources(env_8);
468
+ if (result_3)
469
+ await result_3;
470
+ }
471
+ }
472
+ async has(arg0, arg1 = {}) {
473
+ const env_10 = { stack: [], error: void 0, hasError: false };
474
+ try {
475
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
476
+ throw new Error();
477
+ }
478
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
479
+ const { key, signal, context } = (function parseHasArguments(ctx) {
480
+ const { key, signal, context } = typeof arg0 === "object"
481
+ ? arg0
482
+ : {
483
+ ...arg1,
484
+ key: arg0,
485
+ };
486
+ return {
487
+ key,
488
+ signal: combineSignals([signal, ac.signal]),
489
+ context: mergeContext(ctx, context),
490
+ };
491
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
492
+ const _lock = __addDisposableResource(env_10, await asyncmux.readonly(this, signal), false);
493
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
494
+ throw new Error();
495
+ }
496
+ context["unikvs:action"] = "has";
497
+ const _close = __addDisposableResource(env_10, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
498
+ const _ioLock = __addDisposableResource(env_10, await ioMux.rLock({ key, signal }), false);
499
+ for (const storage of __classPrivateFieldGet(this, _UniKvs_destinations, "f")) {
500
+ if (await storage.exists(key, signal, context)) {
501
+ return true;
502
+ }
503
+ }
504
+ return false;
505
+ }
506
+ catch (e_10) {
507
+ env_10.error = e_10;
508
+ env_10.hasError = true;
509
+ }
510
+ finally {
511
+ const result_4 = __disposeResources(env_10);
512
+ if (result_4)
513
+ await result_4;
514
+ }
515
+ }
516
+ async delete(arg0, arg1 = {}) {
517
+ const env_11 = { stack: [], error: void 0, hasError: false };
518
+ try {
519
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
520
+ throw new Error();
521
+ }
522
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
523
+ const { key, signal, context } = (function parseDeleteArguments(ctx) {
524
+ const { key, signal, context } = typeof arg0 === "object"
525
+ ? arg0
526
+ : {
527
+ ...arg1,
528
+ key: arg0,
529
+ };
530
+ return {
531
+ key,
532
+ signal: combineSignals([signal, ac.signal]),
533
+ context: mergeContext(ctx, context),
534
+ };
535
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
536
+ const _lock = __addDisposableResource(env_11, await asyncmux.readonly(this, signal), false);
537
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
538
+ throw new Error();
539
+ }
540
+ context["unikvs:action"] = "delete";
541
+ const _close = __addDisposableResource(env_11, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
542
+ const errors = [];
543
+ const _ioLock = __addDisposableResource(env_11, await ioMux.lock({ key, signal }), false);
544
+ await Promise.all(__classPrivateFieldGet(this, _UniKvs_destinations, "f").map(async (storage) => {
545
+ try {
546
+ if (await storage.exists(key, signal, context)) {
547
+ await storage.delete(key, signal, context);
548
+ }
549
+ }
550
+ catch (ex) {
551
+ errors.push(ex);
552
+ }
553
+ }));
554
+ switch (errors.length) {
555
+ case 0:
556
+ break;
557
+ case 1:
558
+ throw errors[0];
559
+ default:
560
+ throw new AggregateError(errors);
561
+ }
562
+ }
563
+ catch (e_11) {
564
+ env_11.error = e_11;
565
+ env_11.hasError = true;
566
+ }
567
+ finally {
568
+ const result_5 = __disposeResources(env_11);
569
+ if (result_5)
570
+ await result_5;
571
+ }
572
+ }
573
+ async clear(options = {}) {
574
+ const env_12 = { stack: [], error: void 0, hasError: false };
575
+ try {
576
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
577
+ throw new Error();
578
+ }
579
+ const { ac, ioMux } = __classPrivateFieldGet(this, _UniKvs_con, "f");
580
+ const { signal, context } = (function parseClearArguments(ctx) {
581
+ const { signal, context } = options;
582
+ return {
583
+ signal: combineSignals([signal, ac.signal]),
584
+ context: mergeContext(ctx, context),
585
+ };
586
+ })(__classPrivateFieldGet(this, _UniKvs_context, "f"));
587
+ const _lock = __addDisposableResource(env_12, await asyncmux.readonly(this, signal), false);
588
+ if (!__classPrivateFieldGet(this, _UniKvs_con, "f")) {
589
+ throw new Error();
590
+ }
591
+ context["unikvs:action"] = "clear";
592
+ const _close = __addDisposableResource(env_12, await __classPrivateFieldGet(this, _UniKvs_instances, "m", _UniKvs_open).call(this, signal, context), true);
593
+ const errors = [];
594
+ const _ioLock = __addDisposableResource(env_12, await ioMux.lock({ signal }), false);
595
+ await Promise.all(__classPrivateFieldGet(this, _UniKvs_destinations, "f").map(async (storage) => {
596
+ try {
597
+ await storage.clear(signal, context);
598
+ }
599
+ catch (ex) {
600
+ errors.push(ex);
601
+ }
602
+ }));
603
+ switch (errors.length) {
604
+ case 0:
605
+ break;
606
+ case 1:
607
+ throw errors[0];
608
+ default:
609
+ throw new AggregateError(errors);
610
+ }
611
+ }
612
+ catch (e_12) {
613
+ env_12.error = e_12;
614
+ env_12.hasError = true;
615
+ }
616
+ finally {
617
+ const result_6 = __disposeResources(env_12);
618
+ if (result_6)
619
+ await result_6;
620
+ }
621
+ }
622
+ }
623
+ _UniKvs_con = new WeakMap(), _UniKvs_context = new WeakMap(), _UniKvs_destinations = new WeakMap(), _UniKvs_transformers = new WeakMap(), _UniKvs_transformerSet = new WeakMap(), _UniKvs_instances = new WeakSet(), _UniKvs_open = async function _UniKvs_open(signal, context) {
624
+ const plugins = [...__classPrivateFieldGet(this, _UniKvs_destinations, "f"), ...__classPrivateFieldGet(this, _UniKvs_transformers, "f")];
625
+ const openFns = [];
626
+ const dispose = [];
627
+ for (const plugin of plugins) {
628
+ if (plugin.isOpen || !plugin.open) {
629
+ continue;
630
+ }
631
+ openFns.push(async () => {
632
+ await plugin.open(signal, context);
633
+ if (!plugin.close) {
634
+ return;
635
+ }
636
+ dispose.push(async () => {
637
+ try {
638
+ await plugin.close(signal, context);
639
+ }
640
+ catch (ex) {
641
+ if (!__classPrivateFieldGet(this, _UniKvs_transformerSet, "f").has(plugin)) {
642
+ log.warn `Failed to close storage: ${ex}`;
643
+ }
644
+ else {
645
+ log.warn `Failed to close transformer: ${ex}`;
646
+ }
647
+ }
648
+ });
649
+ });
650
+ }
651
+ if (openFns.length > 0) {
652
+ const errors = [];
653
+ await Promise.all(openFns.map(async (f) => {
654
+ try {
655
+ await f();
656
+ }
657
+ catch (ex) {
658
+ errors.push(ex);
659
+ }
660
+ }));
661
+ switch (errors.length) {
662
+ case 0:
663
+ break;
664
+ case 1:
665
+ throw errors[0];
666
+ default:
667
+ throw new AggregateError(errors);
668
+ }
669
+ }
670
+ return {
671
+ async [Symbol.asyncDispose]() {
672
+ if (dispose.length > 0) {
673
+ await Promise.all(dispose.map((f) => f()));
674
+ }
675
+ },
676
+ };
677
+ };
678
+ export default UniKvs;
@@ -0,0 +1,3 @@
1
+ export type ValueOf<T> = T[keyof T];
2
+ export type MaybePromise<T> = T | PromiseLike<T>;
3
+ //# sourceMappingURL=utils.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../../src/core/utils.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface ValueStream<T> extends ReadableStream<T> {
2
+ [Symbol.asyncIterator](): AsyncIteratorObject<T, undefined, unknown>;
3
+ }
4
+ //# sourceMappingURL=value-stream.types.d.ts.map