@procedures/store 0.17.2 → 0.17.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.
- package/CHANGELOG.md +17 -0
- package/README.md +34 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +2 -2
- package/dist/indexeddb/document-storage.d.ts +186 -0
- package/dist/indexeddb/document-storage.d.ts.map +1 -0
- package/dist/indexeddb/document-storage.js +598 -0
- package/dist/indexeddb/document-storage.js.map +1 -0
- package/dist/indexeddb/idb.d.ts +82 -9
- package/dist/indexeddb/idb.d.ts.map +1 -1
- package/dist/indexeddb/idb.js +100 -22
- package/dist/indexeddb/idb.js.map +1 -1
- package/dist/indexeddb.d.ts +8 -3
- package/dist/indexeddb.d.ts.map +1 -1
- package/dist/indexeddb.js +8 -3
- package/dist/indexeddb.js.map +1 -1
- package/package.json +4 -4
- package/src/browser.ts +2 -2
- package/src/indexeddb/document-storage.ts +689 -0
- package/src/indexeddb/idb.ts +136 -21
- package/src/indexeddb.ts +8 -3
package/dist/indexeddb/idb.d.ts
CHANGED
|
@@ -28,8 +28,8 @@ export interface IdbDatabaseLike {
|
|
|
28
28
|
createObjectStore(name: string, options?: {
|
|
29
29
|
keyPath?: string;
|
|
30
30
|
autoIncrement?: boolean;
|
|
31
|
-
}):
|
|
32
|
-
transaction(names: string, mode?: "readonly" | "readwrite"): IdbTransactionLike;
|
|
31
|
+
}): IdbObjectStoreLike;
|
|
32
|
+
transaction(names: string | string[], mode?: "readonly" | "readwrite"): IdbTransactionLike;
|
|
33
33
|
close(): void;
|
|
34
34
|
onversionchange: ((event: any) => void) | null;
|
|
35
35
|
}
|
|
@@ -51,6 +51,30 @@ export interface IdbObjectStoreLike {
|
|
|
51
51
|
add(value: unknown, key?: string): IdbRequestLike<unknown>;
|
|
52
52
|
delete(key: string): IdbRequestLike<unknown>;
|
|
53
53
|
clear(): IdbRequestLike<unknown>;
|
|
54
|
+
index(name: string): IdbIndexLike;
|
|
55
|
+
createIndex(name: string, keyPath: string, options?: {
|
|
56
|
+
unique?: boolean;
|
|
57
|
+
}): unknown;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* An index of an object store. The results follow the order of the keys of the index. A record
|
|
61
|
+
* without the key path of the index is not in the index.
|
|
62
|
+
*/
|
|
63
|
+
export interface IdbIndexLike {
|
|
64
|
+
/** The records, the first `count` of them when `count` is given. */
|
|
65
|
+
getAll(query?: null, count?: number): IdbRequestLike<unknown[]>;
|
|
66
|
+
/** The primary keys of the records, without their values. */
|
|
67
|
+
getAllKeys(query?: null, count?: number): IdbRequestLike<unknown[]>;
|
|
68
|
+
count(): IdbRequestLike<number>;
|
|
69
|
+
/** A cursor over the records. `"prev"` starts at the highest key of the index. */
|
|
70
|
+
openCursor(query?: null, direction?: "next" | "prev"): IdbRequestLike<IdbCursorLike | null>;
|
|
71
|
+
}
|
|
72
|
+
/** A cursor of an index, with the value of its record. */
|
|
73
|
+
export interface IdbCursorLike {
|
|
74
|
+
/** The key of the index. */
|
|
75
|
+
readonly key: unknown;
|
|
76
|
+
readonly value: unknown;
|
|
77
|
+
continue(): void;
|
|
54
78
|
}
|
|
55
79
|
/** The options of the IndexedDB stores. */
|
|
56
80
|
export interface IndexedDbOptions {
|
|
@@ -66,21 +90,72 @@ export interface IndexedDbOptions {
|
|
|
66
90
|
*/
|
|
67
91
|
export declare function hasIndexedDb(): boolean;
|
|
68
92
|
/**
|
|
69
|
-
*
|
|
93
|
+
* This function calls `then` with the result of the request when the request succeeds. An error of
|
|
94
|
+
* `then` goes to `fail`, which aborts the transaction. Thus a check in a step of a transaction
|
|
95
|
+
* undoes each request of the transaction.
|
|
96
|
+
*/
|
|
97
|
+
export declare function onResult<R>(request: IdbRequestLike<R>, fail: (error: unknown) => void, then: (result: R) => void): void;
|
|
98
|
+
/** An object store of a database, with its indexes. */
|
|
99
|
+
export interface IdbStoreSchema {
|
|
100
|
+
readonly name: string;
|
|
101
|
+
readonly options?: {
|
|
102
|
+
keyPath?: string;
|
|
103
|
+
autoIncrement?: boolean;
|
|
104
|
+
};
|
|
105
|
+
readonly indexes?: ReadonlyArray<{
|
|
106
|
+
readonly name: string;
|
|
107
|
+
readonly keyPath: string;
|
|
108
|
+
readonly unique?: boolean;
|
|
109
|
+
}>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The work of one transaction. It makes the requests, and it gives a function that reads their
|
|
113
|
+
* results after the commit. `fail` aborts the transaction: the promise of the transaction then
|
|
114
|
+
* rejects with the error of `fail`, and each request is undone.
|
|
115
|
+
*/
|
|
116
|
+
export type IdbWork<R> = (transaction: IdbTransactionLike, fail: (error: unknown) => void) => () => R;
|
|
117
|
+
/**
|
|
118
|
+
* One database, version 1, with its object stores. The connection opens at the first operation,
|
|
70
119
|
* and a failed open tries again at the next operation.
|
|
71
120
|
*/
|
|
72
|
-
export declare class
|
|
121
|
+
export declare class IdbConnection {
|
|
73
122
|
/** The name of the database. */
|
|
74
123
|
readonly database: string;
|
|
75
|
-
/** The
|
|
76
|
-
readonly
|
|
77
|
-
private readonly storeOptions;
|
|
124
|
+
/** The object stores of the database. */
|
|
125
|
+
private readonly stores;
|
|
78
126
|
private readonly factory;
|
|
127
|
+
/** The function that writes the first records when the open makes the object stores. */
|
|
128
|
+
private readonly onCreate?;
|
|
79
129
|
private connection;
|
|
80
130
|
private closed;
|
|
81
131
|
constructor(
|
|
82
132
|
/** The name of the database. */
|
|
83
133
|
database: string,
|
|
134
|
+
/** The object stores of the database. */
|
|
135
|
+
stores: readonly IdbStoreSchema[], factory: IdbFactoryLike | undefined,
|
|
136
|
+
/** The function that writes the first records when the open makes the object stores. */
|
|
137
|
+
onCreate?: ((store: (name: string) => IdbObjectStoreLike) => void) | undefined);
|
|
138
|
+
/**
|
|
139
|
+
* This method runs work in one transaction over the object stores of `names`. The promise resolves
|
|
140
|
+
* after the transaction commits, so a write is durable when the promise resolves. An error of a
|
|
141
|
+
* request, a throw of the work and a call of `fail` abort the transaction: each request is undone.
|
|
142
|
+
*/
|
|
143
|
+
transaction<R>(mode: "readonly" | "readwrite", names: readonly string[], work: IdbWork<R>): Promise<R>;
|
|
144
|
+
/** This method closes the connection. A later operation throws. */
|
|
145
|
+
close(): Promise<void>;
|
|
146
|
+
private open;
|
|
147
|
+
private connect;
|
|
148
|
+
}
|
|
149
|
+
/** One object store in its own database, version 1. The stores of programs, queues and sync states use it. */
|
|
150
|
+
export declare class IdbStoreConnection {
|
|
151
|
+
/** The name of the database. */
|
|
152
|
+
readonly database: string;
|
|
153
|
+
/** The name of the object store. */
|
|
154
|
+
readonly store: string;
|
|
155
|
+
private readonly connection;
|
|
156
|
+
constructor(
|
|
157
|
+
/** The name of the database. */
|
|
158
|
+
database: string,
|
|
84
159
|
/** The name of the object store. */
|
|
85
160
|
store: string, storeOptions: {
|
|
86
161
|
keyPath?: string;
|
|
@@ -94,7 +169,5 @@ export declare class IdbStoreConnection {
|
|
|
94
169
|
run<R>(mode: "readonly" | "readwrite", work: (store: IdbObjectStoreLike) => () => R): Promise<R>;
|
|
95
170
|
/** This method closes the connection. A later operation throws. */
|
|
96
171
|
close(): Promise<void>;
|
|
97
|
-
private open;
|
|
98
|
-
private connect;
|
|
99
172
|
}
|
|
100
173
|
//# sourceMappingURL=idb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idb.d.ts","sourceRoot":"","sources":["../../src/indexeddb/idb.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,8BAA8B;AAC9B,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CACxC;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,eAAe,CAAC;IACzE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAChD;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;CAC1D;AAED,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC/D,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"idb.d.ts","sourceRoot":"","sources":["../../src/indexeddb/idb.ts"],"names":[],"mappings":"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"}
|
package/dist/indexeddb/idb.js
CHANGED
|
@@ -21,45 +21,80 @@ function errorOf(cause, message) {
|
|
|
21
21
|
return cause instanceof Error ? cause : new Error(message, { cause });
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* This function calls `then` with the result of the request when the request succeeds. An error of
|
|
25
|
+
* `then` goes to `fail`, which aborts the transaction. Thus a check in a step of a transaction
|
|
26
|
+
* undoes each request of the transaction.
|
|
27
|
+
*/
|
|
28
|
+
export function onResult(request, fail, then) {
|
|
29
|
+
request.onsuccess = () => {
|
|
30
|
+
try {
|
|
31
|
+
then(request.result);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
fail(error);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* One database, version 1, with its object stores. The connection opens at the first operation,
|
|
25
40
|
* and a failed open tries again at the next operation.
|
|
26
41
|
*/
|
|
27
|
-
export class
|
|
42
|
+
export class IdbConnection {
|
|
28
43
|
database;
|
|
29
|
-
|
|
30
|
-
storeOptions;
|
|
44
|
+
stores;
|
|
31
45
|
factory;
|
|
46
|
+
onCreate;
|
|
32
47
|
connection;
|
|
33
48
|
closed = false;
|
|
34
49
|
constructor(
|
|
35
50
|
/** The name of the database. */
|
|
36
51
|
database,
|
|
37
|
-
/** The
|
|
38
|
-
|
|
52
|
+
/** The object stores of the database. */
|
|
53
|
+
stores, factory,
|
|
54
|
+
/** The function that writes the first records when the open makes the object stores. */
|
|
55
|
+
onCreate) {
|
|
39
56
|
this.database = database;
|
|
40
|
-
this.
|
|
41
|
-
this.storeOptions = storeOptions;
|
|
57
|
+
this.stores = stores;
|
|
42
58
|
this.factory = factory;
|
|
59
|
+
this.onCreate = onCreate;
|
|
43
60
|
}
|
|
44
61
|
/**
|
|
45
|
-
* This method runs work in one transaction
|
|
46
|
-
*
|
|
47
|
-
* the
|
|
62
|
+
* This method runs work in one transaction over the object stores of `names`. The promise resolves
|
|
63
|
+
* after the transaction commits, so a write is durable when the promise resolves. An error of a
|
|
64
|
+
* request, a throw of the work and a call of `fail` abort the transaction: each request is undone.
|
|
48
65
|
*/
|
|
49
|
-
async
|
|
66
|
+
async transaction(mode, names, work) {
|
|
50
67
|
const db = await this.open();
|
|
51
68
|
return new Promise((resolve, reject) => {
|
|
52
69
|
let transaction;
|
|
70
|
+
let failure;
|
|
71
|
+
const abort = () => {
|
|
72
|
+
try {
|
|
73
|
+
transaction?.abort();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// The transaction ended already
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const fail = (error) => {
|
|
80
|
+
if (failure)
|
|
81
|
+
return;
|
|
82
|
+
failure = { error };
|
|
83
|
+
abort();
|
|
84
|
+
reject(error);
|
|
85
|
+
};
|
|
53
86
|
let read;
|
|
54
87
|
try {
|
|
55
|
-
transaction = db.transaction(
|
|
56
|
-
read = work(transaction
|
|
88
|
+
transaction = db.transaction(names.length === 1 ? names[0] : [...names], mode);
|
|
89
|
+
read = work(transaction, fail);
|
|
57
90
|
}
|
|
58
91
|
catch (error) {
|
|
59
|
-
|
|
92
|
+
// A request that the work made before the throw does not commit
|
|
93
|
+
fail(error);
|
|
60
94
|
return;
|
|
61
95
|
}
|
|
62
|
-
|
|
96
|
+
const current = transaction;
|
|
97
|
+
current.oncomplete = () => {
|
|
63
98
|
try {
|
|
64
99
|
resolve(read());
|
|
65
100
|
}
|
|
@@ -67,8 +102,8 @@ export class IdbStoreConnection {
|
|
|
67
102
|
reject(error);
|
|
68
103
|
}
|
|
69
104
|
};
|
|
70
|
-
|
|
71
|
-
|
|
105
|
+
current.onerror = (event) => reject(failure ? failure.error : errorOf(event?.target?.error ?? current.error, `The IndexedDB transaction on ${this.database} failed`));
|
|
106
|
+
current.onabort = () => reject(failure ? failure.error : errorOf(current.error, `The IndexedDB transaction on ${this.database} was aborted`));
|
|
72
107
|
});
|
|
73
108
|
}
|
|
74
109
|
/** This method closes the connection. A later operation throws. */
|
|
@@ -113,14 +148,30 @@ export class IdbStoreConnection {
|
|
|
113
148
|
}
|
|
114
149
|
request.onupgradeneeded = () => {
|
|
115
150
|
const db = request.result;
|
|
116
|
-
|
|
117
|
-
|
|
151
|
+
const created = new Map();
|
|
152
|
+
for (const schema of this.stores) {
|
|
153
|
+
if (db.objectStoreNames.contains(schema.name))
|
|
154
|
+
continue;
|
|
155
|
+
const store = db.createObjectStore(schema.name, schema.options ?? {});
|
|
156
|
+
for (const index of schema.indexes ?? [])
|
|
157
|
+
store.createIndex(index.name, index.keyPath, { unique: index.unique ?? false });
|
|
158
|
+
created.set(schema.name, store);
|
|
159
|
+
}
|
|
160
|
+
if (this.onCreate && created.size > 0) {
|
|
161
|
+
this.onCreate((name) => {
|
|
162
|
+
const store = created.get(name);
|
|
163
|
+
if (!store)
|
|
164
|
+
throw new Error(`The object store ${name} of ${this.database} existed before the open`);
|
|
165
|
+
return store;
|
|
166
|
+
});
|
|
167
|
+
}
|
|
118
168
|
};
|
|
119
169
|
request.onsuccess = () => {
|
|
120
170
|
const db = request.result;
|
|
121
|
-
|
|
171
|
+
const missing = this.stores.find((schema) => !db.objectStoreNames.contains(schema.name));
|
|
172
|
+
if (missing) {
|
|
122
173
|
db.close();
|
|
123
|
-
reject(new Error(`The IndexedDB database ${this.database} exists, and it has no object store ${
|
|
174
|
+
reject(new Error(`The IndexedDB database ${this.database} exists, and it has no object store ${missing.name}`));
|
|
124
175
|
return;
|
|
125
176
|
}
|
|
126
177
|
// Another tab wants a new version: close this connection, so the upgrade can run
|
|
@@ -134,4 +185,31 @@ export class IdbStoreConnection {
|
|
|
134
185
|
});
|
|
135
186
|
}
|
|
136
187
|
}
|
|
188
|
+
/** One object store in its own database, version 1. The stores of programs, queues and sync states use it. */
|
|
189
|
+
export class IdbStoreConnection {
|
|
190
|
+
database;
|
|
191
|
+
store;
|
|
192
|
+
connection;
|
|
193
|
+
constructor(
|
|
194
|
+
/** The name of the database. */
|
|
195
|
+
database,
|
|
196
|
+
/** The name of the object store. */
|
|
197
|
+
store, storeOptions, factory) {
|
|
198
|
+
this.database = database;
|
|
199
|
+
this.store = store;
|
|
200
|
+
this.connection = new IdbConnection(database, [{ name: store, options: storeOptions }], factory);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* This method runs work in one transaction. The work makes the requests, and it gives a function that reads
|
|
204
|
+
* their results. The promise resolves after the transaction commits, so a write is durable when
|
|
205
|
+
* the promise resolves. An error of a request aborts the transaction: each request is undone.
|
|
206
|
+
*/
|
|
207
|
+
run(mode, work) {
|
|
208
|
+
return this.connection.transaction(mode, [this.store], (transaction) => work(transaction.objectStore(this.store)));
|
|
209
|
+
}
|
|
210
|
+
/** This method closes the connection. A later operation throws. */
|
|
211
|
+
close() {
|
|
212
|
+
return this.connection.close();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
137
215
|
//# sourceMappingURL=idb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idb.js","sourceRoot":"","sources":["../../src/indexeddb/idb.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"idb.js","sourceRoot":"","sources":["../../src/indexeddb/idb.ts"],"names":[],"mappings":"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"}
|
package/dist/indexeddb.d.ts
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The entry `@procedures/store/indexeddb`: the stores of a browser (roadmap R45).
|
|
3
3
|
*
|
|
4
|
+
* - `IndexedDbStorage` is a collection storage in IndexedDB (roadmap CLI-22). It is the durable
|
|
5
|
+
* local copy of a `HybridStorage` in a browser app without SignalDB.
|
|
4
6
|
* - `IndexedDbProgramStore` keeps programs in IndexedDB.
|
|
5
7
|
* - `IndexedDbQueueStore` keeps the queue of a `HybridStorage` in IndexedDB.
|
|
6
8
|
* - `IndexedDbSyncStateStore` keeps the sync state of a `HybridStorage` in IndexedDB: the cursor
|
|
7
9
|
* and the base versions (roadmap CLI-21).
|
|
8
10
|
* - `MemoryProgramStore`, `MemoryQueueStore` and `MemorySyncStateStore` are the fallbacks for a
|
|
9
|
-
* browser without IndexedDB. `hasIndexedDb()` tells which one to use.
|
|
11
|
+
* browser without IndexedDB. `hasIndexedDb()` tells which one to use. `InMemoryStorage` of
|
|
12
|
+
* `@procedures/collections` is the fallback of `IndexedDbStorage`.
|
|
10
13
|
*
|
|
11
|
-
* The package root does not import this entry
|
|
12
|
-
* a page that loads it gets only these stores.
|
|
14
|
+
* The package root does not import this entry. This entry does not import the root of the client or
|
|
15
|
+
* zod: a page that loads it gets only these stores. It imports `@procedures/client/query`, a module
|
|
16
|
+
* without imports, and `@procedures/collections` (the contract of the storages and its listeners).
|
|
13
17
|
*/
|
|
18
|
+
export { IndexedDbStorage, type IndexedDbStorageOptions } from "./indexeddb/document-storage.js";
|
|
14
19
|
export { IndexedDbProgramStore, DEFAULT_PROGRAM_DATABASE } from "./indexeddb/program-store.js";
|
|
15
20
|
export { IndexedDbQueueStore } from "./indexeddb/queue-store.js";
|
|
16
21
|
export { IndexedDbSyncStateStore } from "./indexeddb/sync-state-store.js";
|
package/dist/indexeddb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../src/indexeddb.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../src/indexeddb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/indexeddb.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The entry `@procedures/store/indexeddb`: the stores of a browser (roadmap R45).
|
|
3
3
|
*
|
|
4
|
+
* - `IndexedDbStorage` is a collection storage in IndexedDB (roadmap CLI-22). It is the durable
|
|
5
|
+
* local copy of a `HybridStorage` in a browser app without SignalDB.
|
|
4
6
|
* - `IndexedDbProgramStore` keeps programs in IndexedDB.
|
|
5
7
|
* - `IndexedDbQueueStore` keeps the queue of a `HybridStorage` in IndexedDB.
|
|
6
8
|
* - `IndexedDbSyncStateStore` keeps the sync state of a `HybridStorage` in IndexedDB: the cursor
|
|
7
9
|
* and the base versions (roadmap CLI-21).
|
|
8
10
|
* - `MemoryProgramStore`, `MemoryQueueStore` and `MemorySyncStateStore` are the fallbacks for a
|
|
9
|
-
* browser without IndexedDB. `hasIndexedDb()` tells which one to use.
|
|
11
|
+
* browser without IndexedDB. `hasIndexedDb()` tells which one to use. `InMemoryStorage` of
|
|
12
|
+
* `@procedures/collections` is the fallback of `IndexedDbStorage`.
|
|
10
13
|
*
|
|
11
|
-
* The package root does not import this entry
|
|
12
|
-
* a page that loads it gets only these stores.
|
|
14
|
+
* The package root does not import this entry. This entry does not import the root of the client or
|
|
15
|
+
* zod: a page that loads it gets only these stores. It imports `@procedures/client/query`, a module
|
|
16
|
+
* without imports, and `@procedures/collections` (the contract of the storages and its listeners).
|
|
13
17
|
*/
|
|
18
|
+
export { IndexedDbStorage } from "./indexeddb/document-storage.js";
|
|
14
19
|
export { IndexedDbProgramStore, DEFAULT_PROGRAM_DATABASE } from "./indexeddb/program-store.js";
|
|
15
20
|
export { IndexedDbQueueStore } from "./indexeddb/queue-store.js";
|
|
16
21
|
export { IndexedDbSyncStateStore } from "./indexeddb/sync-state-store.js";
|
package/dist/indexeddb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.js","sourceRoot":"","sources":["../src/indexeddb.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"indexeddb.js","sourceRoot":"","sources":["../src/indexeddb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAgC,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA8C,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/store",
|
|
4
|
-
"version": "0.17.
|
|
4
|
+
"version": "0.17.3",
|
|
5
5
|
"description": "A program store for procedure-as-data: save the programs that procedure.define makes, load them back after a restart, in memory, a JSON file, IndexedDB or a remote collection storage.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"program-store",
|
|
@@ -78,12 +78,12 @@
|
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"@mark1russell7/service": "^0.5.1",
|
|
81
|
-
"@procedures/client": "0.17.
|
|
82
|
-
"@procedures/collections": "0.17.
|
|
81
|
+
"@procedures/client": "0.17.3",
|
|
82
|
+
"@procedures/collections": "0.17.3",
|
|
83
83
|
"zod": "^4.6.5"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"@procedures/fs": "0.17.
|
|
86
|
+
"@procedures/fs": "0.17.3",
|
|
87
87
|
"@mark1russell7/cue": "^1.0.0",
|
|
88
88
|
"@types/node": "^22.0.0",
|
|
89
89
|
"fake-indexeddb": "^6.2.5",
|
package/src/browser.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* - `HybridStorage` keeps a local copy in front of a remote storage, with its errors and its types.
|
|
6
6
|
* - `ApiStorage` is the remote storage over the collection procedures of a server.
|
|
7
7
|
* - `EventsChangeFeed` pushes the remote changes to a `HybridStorage`.
|
|
8
|
-
* - The entry also has all of `@procedures/store/indexeddb`: the IndexedDB
|
|
9
|
-
* fallbacks in memory.
|
|
8
|
+
* - The entry also has all of `@procedures/store/indexeddb`: `IndexedDbStorage`, the IndexedDB
|
|
9
|
+
* stores and their fallbacks in memory.
|
|
10
10
|
*
|
|
11
11
|
* No module of this entry imports a module of Node, directly or through another module. The
|
|
12
12
|
* modules import `@procedures/client/browser` and not the root of the client, because the root
|