@workglow/indexeddb 0.2.31 → 0.2.32
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 +34 -0
- package/dist/job-queue/IndexedDbQueueStorage.d.ts +16 -11
- package/dist/job-queue/IndexedDbQueueStorage.d.ts.map +1 -1
- package/dist/job-queue/IndexedDbRateLimiterStorage.d.ts +15 -4
- package/dist/job-queue/IndexedDbRateLimiterStorage.d.ts.map +1 -1
- package/dist/job-queue/browser.js +399 -351
- package/dist/job-queue/browser.js.map +9 -6
- package/dist/job-queue/common.d.ts +3 -0
- package/dist/job-queue/common.d.ts.map +1 -1
- package/dist/job-queue/node.js +399 -351
- package/dist/job-queue/node.js.map +9 -6
- package/dist/migrations/IndexedDbMigrationRunner.d.ts +93 -0
- package/dist/migrations/IndexedDbMigrationRunner.d.ts.map +1 -0
- package/dist/migrations/indexedDbQueueMigrations.d.ts +24 -0
- package/dist/migrations/indexedDbQueueMigrations.d.ts.map +1 -0
- package/dist/migrations/indexedDbRateLimiterMigrations.d.ts +37 -0
- package/dist/migrations/indexedDbRateLimiterMigrations.d.ts.map +1 -0
- package/dist/storage/IndexedDbTable.d.ts.map +1 -1
- package/dist/storage/IndexedDbTabularMigrationApplier.d.ts +84 -0
- package/dist/storage/IndexedDbTabularMigrationApplier.d.ts.map +1 -0
- package/dist/storage/IndexedDbTabularStorage.d.ts +21 -2
- package/dist/storage/IndexedDbTabularStorage.d.ts.map +1 -1
- package/dist/storage/browser.js +472 -30
- package/dist/storage/browser.js.map +8 -5
- package/dist/storage/common.d.ts +3 -0
- package/dist/storage/common.d.ts.map +1 -1
- package/dist/storage/node.js +472 -30
- package/dist/storage/node.js.map +8 -5
- package/dist/storage/openIdb.d.ts +19 -0
- package/dist/storage/openIdb.d.ts.map +1 -0
- package/package.json +7 -7
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @workglow/indexeddb
|
|
2
|
+
|
|
3
|
+
IndexedDB backends for @workglow/storage and @workglow/job-queue.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- IndexedDB implementation of `@workglow/storage` interfaces
|
|
8
|
+
- IndexedDB implementation of `@workglow/job-queue` interfaces
|
|
9
|
+
- Works in browser environments
|
|
10
|
+
- Persistent local storage for tasks and queues
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @workglow/indexeddb
|
|
16
|
+
# or
|
|
17
|
+
bun add @workglow/indexeddb
|
|
18
|
+
# or
|
|
19
|
+
yarn add @workglow/indexeddb
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { IndexedDbTabularStorage } from "@workglow/indexeddb/storage";
|
|
26
|
+
import { IndexedDbQueueStorage } from "@workglow/indexeddb/job-queue";
|
|
27
|
+
|
|
28
|
+
const storage = new IndexedDbTabularStorage("my-database");
|
|
29
|
+
const queue = new IndexedDbQueueStorage("my-queue");
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## License
|
|
33
|
+
|
|
34
|
+
Apache 2.0 - See [LICENSE](../../LICENSE) for details.
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { MigrationOptions } from "../storage/IndexedDbTable";
|
|
7
6
|
import { JobStatus } from "@workglow/job-queue";
|
|
8
7
|
import type { IQueueStorage, JobStorageFormat, PrefixColumn, QueueChangePayload, QueueStorageOptions, QueueSubscribeOptions } from "@workglow/job-queue";
|
|
9
8
|
export declare const INDEXED_DB_QUEUE_STORAGE: import("@workglow/util").ServiceToken<IQueueStorage<any, any>>;
|
|
10
9
|
/**
|
|
11
|
-
* Extended options for IndexedDB queue storage including prefix support
|
|
10
|
+
* Extended options for IndexedDB queue storage including prefix support.
|
|
12
11
|
*/
|
|
13
|
-
export interface IndexedDbQueueStorageOptions extends QueueStorageOptions
|
|
12
|
+
export interface IndexedDbQueueStorageOptions extends QueueStorageOptions {
|
|
14
13
|
/** Enable BroadcastChannel notifications (default: true) */
|
|
15
14
|
readonly useBroadcastChannel?: boolean;
|
|
16
15
|
/** Backup polling interval in ms (default: 5000, 0 to disable) */
|
|
@@ -25,7 +24,6 @@ export declare class IndexedDbQueueStorage<Input, Output> implements IQueueStora
|
|
|
25
24
|
readonly scope: "process";
|
|
26
25
|
private db;
|
|
27
26
|
private readonly tableName;
|
|
28
|
-
private readonly migrationOptions;
|
|
29
27
|
/** The prefix column definitions */
|
|
30
28
|
protected readonly prefixes: readonly PrefixColumn[];
|
|
31
29
|
/** The prefix values for filtering */
|
|
@@ -35,10 +33,6 @@ export declare class IndexedDbQueueStorage<Input, Output> implements IQueueStora
|
|
|
35
33
|
/** Hybrid subscription options */
|
|
36
34
|
private readonly hybridOptions;
|
|
37
35
|
constructor(queueName: string, options?: IndexedDbQueueStorageOptions);
|
|
38
|
-
/**
|
|
39
|
-
* Gets prefix column names for use in indexes
|
|
40
|
-
*/
|
|
41
|
-
private getPrefixColumnNames;
|
|
42
36
|
/**
|
|
43
37
|
* Checks if a job matches the current prefix values
|
|
44
38
|
*/
|
|
@@ -49,10 +43,21 @@ export declare class IndexedDbQueueStorage<Input, Output> implements IQueueStora
|
|
|
49
43
|
private getPrefixKeyValues;
|
|
50
44
|
private getDb;
|
|
51
45
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
46
|
+
* Returns the versioned migrations that this storage's object store +
|
|
47
|
+
* indexes depend on. Callers can compose them with other storages'
|
|
48
|
+
* migrations under a shared {@link IndexedDbMigrationRunner}; otherwise
|
|
49
|
+
* call {@link migrate}.
|
|
50
|
+
*/
|
|
51
|
+
getMigrations(): import("./common").IndexedDbMigration[];
|
|
52
|
+
/**
|
|
53
|
+
* Applies any pending migrations for this queue's IndexedDB database, then
|
|
54
|
+
* opens a long-lived connection at the migrated version. Idempotent — a
|
|
55
|
+
* second call closes any prior handle (so it doesn't pin the
|
|
56
|
+
* pre-migration version or block another tab's upgrade), reruns the
|
|
57
|
+
* runner (no-op if the bookkeeping store says everything is applied), and
|
|
58
|
+
* reopens the connection.
|
|
54
59
|
*/
|
|
55
|
-
|
|
60
|
+
migrate(): Promise<void>;
|
|
56
61
|
/**
|
|
57
62
|
* Adds a job to the queue.
|
|
58
63
|
* @param job - The job to add to the queue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbQueueStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbQueueStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"IndexedDbQueueStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbQueueStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { MigrationOptions } from "../storage/IndexedDbTable";
|
|
7
6
|
import type { PrefixColumn } from "@workglow/job-queue";
|
|
8
7
|
import type { IRateLimiterStorage, RateLimiterStorageOptions, RateLimiterStorageScope } from "@workglow/job-queue";
|
|
9
8
|
export declare const INDEXED_DB_RATE_LIMITER_STORAGE: import("@workglow/util").ServiceToken<IRateLimiterStorage>;
|
|
10
9
|
/**
|
|
11
10
|
* Extended options for IndexedDB rate limiter storage including prefix support.
|
|
12
11
|
*/
|
|
13
|
-
export interface IndexedDbRateLimiterStorageOptions extends RateLimiterStorageOptions
|
|
12
|
+
export interface IndexedDbRateLimiterStorageOptions extends RateLimiterStorageOptions {
|
|
14
13
|
}
|
|
15
14
|
/**
|
|
16
15
|
* IndexedDB implementation of rate limiter storage.
|
|
@@ -32,7 +31,6 @@ export declare class IndexedDbRateLimiterStorage implements IRateLimiterStorage
|
|
|
32
31
|
private nextAvailableDb;
|
|
33
32
|
private readonly executionTableName;
|
|
34
33
|
private readonly nextAvailableTableName;
|
|
35
|
-
private readonly migrationOptions;
|
|
36
34
|
/** The prefix column definitions */
|
|
37
35
|
protected readonly prefixes: readonly PrefixColumn[];
|
|
38
36
|
/** The prefix values for filtering */
|
|
@@ -52,7 +50,20 @@ export declare class IndexedDbRateLimiterStorage implements IRateLimiterStorage
|
|
|
52
50
|
private getPrefixKeyValues;
|
|
53
51
|
private getExecutionDb;
|
|
54
52
|
private getNextAvailableDb;
|
|
55
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Returns the versioned migration groups (one per IndexedDB database) that
|
|
55
|
+
* the rate-limiter's tables depend on. The execution and next-available
|
|
56
|
+
* stores live in separate databases, so this returns two groups.
|
|
57
|
+
*/
|
|
58
|
+
getMigrations(): import("./common").IndexedDbMigrationGroup[];
|
|
59
|
+
/**
|
|
60
|
+
* Applies any pending migrations for the rate limiter's two IndexedDB
|
|
61
|
+
* databases, then opens long-lived connections at the migrated versions.
|
|
62
|
+
* Idempotent — a second call closes any prior handles (so they don't pin
|
|
63
|
+
* the pre-migration versions or block another tab's upgrade), reruns the
|
|
64
|
+
* runner (no-op if everything is recorded as applied), and reopens.
|
|
65
|
+
*/
|
|
66
|
+
migrate(): Promise<void>;
|
|
56
67
|
/**
|
|
57
68
|
* Atomically reserves an execution slot in IndexedDB.
|
|
58
69
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbRateLimiterStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbRateLimiterStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"IndexedDbRateLimiterStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbRateLimiterStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,+BAA+B,4DAE3C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kCAAmC,SAAQ,yBAAyB;CAAG;AAqBxF;;;;;;;;GAQG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE;;;;OAIG;IACH,SAAgB,KAAK,EAAE,uBAAuB,CAAa;IAC3D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,oCAAoC;IACpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IACrD,sCAAsC;IACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAE3E,YAAY,OAAO,GAAE,kCAAuC,EAa3D;IAED;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;YAIZ,cAAc;YAMd,kBAAkB;IAMhC;;;;OAIG;IACI,aAAa,iDAMnB;IAED;;;;;;OAMG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBpC;IAED;;;;;;;;;;;;;OAaG;IACU,mBAAmB,CAC9B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqEzB;IAEY,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E;IAEY,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7D;IAEY,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1F;IAEY,0BAA0B,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkC7B;IAEY,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoBhF;IAEY,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3F;IAEY,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CnD;CACF"}
|