shelving 1.26.1 → 1.27.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/db/Database.d.ts +3 -3
- package/firestore/client/FirestoreClientProvider.d.ts +3 -3
- package/firestore/client/FirestoreClientProvider.js +4 -8
- package/firestore/lite/FirestoreLiteProvider.d.ts +3 -3
- package/firestore/lite/FirestoreLiteProvider.js +3 -0
- package/firestore/server/FirestoreServerProvider.d.ts +3 -3
- package/firestore/server/FirestoreServerProvider.js +9 -6
- package/package.json +1 -1
- package/provider/CacheProvider.d.ts +3 -3
- package/provider/CacheProvider.js +6 -3
- package/provider/MemoryProvider.d.ts +3 -3
- package/provider/MemoryProvider.js +15 -3
- package/provider/Provider.d.ts +12 -9
- package/provider/ThroughProvider.d.ts +3 -3
- package/provider/ValidationProvider.d.ts +2 -2
package/db/Database.d.ts
CHANGED
|
@@ -81,19 +81,19 @@ export declare class DataQuery<T extends Data = Data> extends Query<T> implement
|
|
|
81
81
|
* @param data Complete data to set the document to.
|
|
82
82
|
* @return Nothing (possibly promised).
|
|
83
83
|
*/
|
|
84
|
-
set(data: T):
|
|
84
|
+
set(data: T): number | PromiseLike<number>;
|
|
85
85
|
/**
|
|
86
86
|
* Update all matching documents with the same partial value.
|
|
87
87
|
*
|
|
88
88
|
* @param updates `Update` instance or set of updates to apply to every matching document.
|
|
89
89
|
* @return Nothing (possibly promised).
|
|
90
90
|
*/
|
|
91
|
-
update(updates: Update<T> | PropUpdates<T>):
|
|
91
|
+
update(updates: Update<T> | PropUpdates<T>): number | PromiseLike<number>;
|
|
92
92
|
/**
|
|
93
93
|
* Delete all matching documents.
|
|
94
94
|
* @return Nothing (possibly promised).
|
|
95
95
|
*/
|
|
96
|
-
delete():
|
|
96
|
+
delete(): number | PromiseLike<number>;
|
|
97
97
|
/** Iterate over the resuls (will throw `Promise` if the results are asynchronous). */
|
|
98
98
|
[Symbol.iterator](): Iterator<Entry<T>, void>;
|
|
99
99
|
/** Validate a set of results for this query reference. */
|
|
@@ -17,7 +17,7 @@ export declare class FirestoreClientProvider extends Provider implements Asynchr
|
|
|
17
17
|
delete<T extends Data>(ref: DataDocument<T>): Promise<void>;
|
|
18
18
|
getQuery<T extends Data>(ref: DataQuery<T>): Promise<Results<T>>;
|
|
19
19
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
20
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T): Promise<
|
|
21
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<
|
|
22
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<
|
|
20
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T): Promise<number>;
|
|
21
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<number>;
|
|
22
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<number>;
|
|
23
23
|
}
|
|
@@ -109,22 +109,18 @@ export class FirestoreClientProvider extends Provider {
|
|
|
109
109
|
}
|
|
110
110
|
async setQuery(ref, data) {
|
|
111
111
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, updates)));
|
|
115
|
-
}
|
|
116
|
-
else if (data)
|
|
117
|
-
await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
|
|
118
|
-
else
|
|
119
|
-
await Promise.all(snapshot.docs.map(s => deleteDoc(s.ref)));
|
|
112
|
+
await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
|
|
113
|
+
return snapshot.size;
|
|
120
114
|
}
|
|
121
115
|
async updateQuery(ref, updates) {
|
|
122
116
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
123
117
|
const fieldValues = getFieldValues(updates);
|
|
124
118
|
await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
|
|
119
|
+
return snapshot.size;
|
|
125
120
|
}
|
|
126
121
|
async deleteQuery(ref) {
|
|
127
122
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
128
123
|
await Promise.all(snapshot.docs.map(s => deleteDoc(s.ref)));
|
|
124
|
+
return snapshot.size;
|
|
129
125
|
}
|
|
130
126
|
}
|
|
@@ -17,7 +17,7 @@ export declare class FirestoreClientProvider extends Provider implements Asynchr
|
|
|
17
17
|
delete<T extends Data>(ref: DataDocument<T>): Promise<void>;
|
|
18
18
|
getQuery<T extends Data>(ref: DataQuery<T>): Promise<Results<T>>;
|
|
19
19
|
subscribeQuery(): Unsubscriber;
|
|
20
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T | Update<T> | undefined): Promise<
|
|
21
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<
|
|
22
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<
|
|
20
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T | Update<T> | undefined): Promise<number>;
|
|
21
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<number>;
|
|
22
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<number>;
|
|
23
23
|
}
|
|
@@ -110,14 +110,17 @@ export class FirestoreClientProvider extends Provider {
|
|
|
110
110
|
async setQuery(ref, data) {
|
|
111
111
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
112
112
|
await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
|
|
113
|
+
return snapshot.size;
|
|
113
114
|
}
|
|
114
115
|
async updateQuery(ref, updates) {
|
|
115
116
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
116
117
|
const fieldValues = getFieldValues(updates);
|
|
117
118
|
await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
|
|
119
|
+
return snapshot.size;
|
|
118
120
|
}
|
|
119
121
|
async deleteQuery(ref) {
|
|
120
122
|
const snapshot = await getDocs(getQuery(this.firestore, ref));
|
|
121
123
|
await Promise.all(snapshot.docs.map(s => deleteDoc(s.ref)));
|
|
124
|
+
return snapshot.size;
|
|
122
125
|
}
|
|
123
126
|
}
|
|
@@ -15,7 +15,7 @@ export declare class FirestoreServerProvider extends Provider implements Asynchr
|
|
|
15
15
|
delete<T extends Data>(ref: DataDocument<T>): Promise<void>;
|
|
16
16
|
getQuery<T extends Data>(ref: DataQuery<T>): Promise<Iterable<Entry<T>>>;
|
|
17
17
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
18
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T | Update<T> | undefined): Promise<
|
|
19
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<
|
|
20
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<
|
|
18
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T | Update<T> | undefined): Promise<number>;
|
|
19
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<number>;
|
|
20
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<number>;
|
|
21
21
|
}
|
|
@@ -104,28 +104,31 @@ export class FirestoreServerProvider extends Provider {
|
|
|
104
104
|
return getQuery(this.firestore, ref).onSnapshot(snapshot => dispatchNext(observer, getResults(snapshot)), thrown => dispatchError(observer, thrown));
|
|
105
105
|
}
|
|
106
106
|
async setQuery(ref, data) {
|
|
107
|
-
await bulkWrite(this.firestore, ref, (w, s) => void w.set(s.ref, data));
|
|
107
|
+
return await bulkWrite(this.firestore, ref, (w, s) => void w.set(s.ref, data));
|
|
108
108
|
}
|
|
109
109
|
async updateQuery(ref, updates) {
|
|
110
110
|
const fieldValues = getFieldValues(updates);
|
|
111
|
-
await bulkWrite(this.firestore, ref, (w, s) => void w.update(s.ref, fieldValues));
|
|
111
|
+
return await bulkWrite(this.firestore, ref, (w, s) => void w.update(s.ref, fieldValues));
|
|
112
112
|
}
|
|
113
113
|
async deleteQuery(ref) {
|
|
114
|
-
await bulkWrite(this.firestore, ref, (w, s) => void w.delete(s.ref));
|
|
114
|
+
return await bulkWrite(this.firestore, ref, (w, s) => void w.delete(s.ref));
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
/** Perform a bulk update on a set of documents using a `BulkWriter` */
|
|
118
118
|
async function bulkWrite(firestore, ref, callback) {
|
|
119
|
+
let count = 0;
|
|
119
120
|
const writer = firestore.bulkWriter();
|
|
120
121
|
const query = getQuery(firestore, ref).limit(BATCH_SIZE).select(); // `select()` turs the query into a field mask query (with no field masks) which saves data transfer and memory.
|
|
121
122
|
let current = query;
|
|
122
123
|
while (current) {
|
|
123
|
-
const
|
|
124
|
-
|
|
124
|
+
const { docs, size } = await current.get();
|
|
125
|
+
count += size;
|
|
126
|
+
for (const s of docs)
|
|
125
127
|
callback(writer, s);
|
|
126
|
-
current =
|
|
128
|
+
current = size >= BATCH_SIZE && query.startAfter(docs.pop()).select();
|
|
127
129
|
void writer.flush();
|
|
128
130
|
}
|
|
129
131
|
await writer.close();
|
|
132
|
+
return count;
|
|
130
133
|
}
|
|
131
134
|
const BATCH_SIZE = 1000;
|
package/package.json
CHANGED
|
@@ -27,9 +27,9 @@ export declare class CacheProvider extends ThroughProvider implements Asynchrono
|
|
|
27
27
|
private _cacheResults;
|
|
28
28
|
getQuery<T extends Data>(ref: DataQuery<T>): Promise<Results<T>>;
|
|
29
29
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
30
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T): Promise<
|
|
31
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<
|
|
32
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<
|
|
30
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T): Promise<number>;
|
|
31
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): Promise<number>;
|
|
32
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): Promise<number>;
|
|
33
33
|
/** Reset this provider and clear all data. */
|
|
34
34
|
reset(): void;
|
|
35
35
|
}
|
|
@@ -79,16 +79,19 @@ export class CacheProvider extends ThroughProvider {
|
|
|
79
79
|
return super.subscribeQuery(ref, new TransformObserver(results => this._cacheResults(ref, results), observer));
|
|
80
80
|
}
|
|
81
81
|
async setQuery(ref, data) {
|
|
82
|
-
await super.setQuery(ref, data);
|
|
82
|
+
const count = await super.setQuery(ref, data);
|
|
83
83
|
this.cache.setQuery(ref, data);
|
|
84
|
+
return count;
|
|
84
85
|
}
|
|
85
86
|
async updateQuery(ref, updates) {
|
|
86
|
-
await super.updateQuery(ref, updates);
|
|
87
|
+
const count = await super.updateQuery(ref, updates);
|
|
87
88
|
this.cache.updateQuery(ref, updates);
|
|
89
|
+
return count;
|
|
88
90
|
}
|
|
89
91
|
async deleteQuery(ref) {
|
|
90
|
-
await super.deleteQuery(ref);
|
|
92
|
+
const count = await super.deleteQuery(ref);
|
|
91
93
|
this.cache.deleteQuery(ref);
|
|
94
|
+
return count;
|
|
92
95
|
}
|
|
93
96
|
/** Reset this provider and clear all data. */
|
|
94
97
|
reset() {
|
|
@@ -19,9 +19,9 @@ export declare class MemoryProvider extends Provider implements SynchronousProvi
|
|
|
19
19
|
delete<T extends Data>(ref: DataDocument<T>): void;
|
|
20
20
|
getQuery<T extends Data>(ref: DataQuery<T>): Results<T>;
|
|
21
21
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
22
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T):
|
|
23
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>):
|
|
24
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>):
|
|
22
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T): number;
|
|
23
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): number;
|
|
24
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): number;
|
|
25
25
|
/** Reset this provider and clear all data. */
|
|
26
26
|
reset(): void;
|
|
27
27
|
}
|
|
@@ -86,22 +86,34 @@ export class MemoryProvider extends Provider {
|
|
|
86
86
|
const table = this._table(ref);
|
|
87
87
|
// If there's a limit set: run the full query.
|
|
88
88
|
// If there's no limit set: only need to run the filtering (more efficient because sort order doesn't matter).
|
|
89
|
-
|
|
89
|
+
let count = 0;
|
|
90
|
+
for (const [id] of ref.limit ? ref.transform(table.data) : ref.filters.transform(table.data)) {
|
|
90
91
|
table.write(id, data);
|
|
92
|
+
count++;
|
|
93
|
+
}
|
|
94
|
+
return count;
|
|
91
95
|
}
|
|
92
96
|
updateQuery(ref, updates) {
|
|
93
97
|
const table = this._table(ref);
|
|
94
98
|
// If there's a limit set: run the full query.
|
|
95
99
|
// If there's no limit set: only need to run the filtering (more efficient because sort order doesn't matter).
|
|
96
|
-
|
|
100
|
+
let count = 0;
|
|
101
|
+
for (const [id, existing] of ref.limit ? ref.transform(table.data) : ref.filters.transform(table.data)) {
|
|
97
102
|
table.write(id, updates.transform(existing));
|
|
103
|
+
count++;
|
|
104
|
+
}
|
|
105
|
+
return count;
|
|
98
106
|
}
|
|
99
107
|
deleteQuery(ref) {
|
|
100
108
|
const table = this._table(ref);
|
|
101
109
|
// If there's a limit set: run the full query.
|
|
102
110
|
// If there's no limit set: only need to run the filtering (more efficient because sort order doesn't matter).
|
|
103
|
-
|
|
111
|
+
let count = 0;
|
|
112
|
+
for (const [id] of ref.limit ? ref.transform(table.data) : ref.filters.transform(table.data)) {
|
|
104
113
|
table.write(id, undefined);
|
|
114
|
+
count++;
|
|
115
|
+
}
|
|
116
|
+
return count;
|
|
105
117
|
}
|
|
106
118
|
/** Reset this provider and clear all data. */
|
|
107
119
|
reset() {
|
package/provider/Provider.d.ts
CHANGED
|
@@ -77,20 +77,23 @@ export declare abstract class Provider {
|
|
|
77
77
|
*
|
|
78
78
|
* @param ref Documents reference specifying which collection to set.
|
|
79
79
|
* @param value Value to set the document to.
|
|
80
|
+
* @return Number of documents that were set.
|
|
80
81
|
*/
|
|
81
|
-
abstract setQuery<T extends Data>(ref: DataQuery<T>, data: T):
|
|
82
|
+
abstract setQuery<T extends Data>(ref: DataQuery<T>, data: T): number | PromiseLike<number>;
|
|
82
83
|
/**
|
|
83
84
|
* Update the data of all matching documents.
|
|
84
85
|
*
|
|
85
86
|
* @param ref Documents reference specifying which collection to set.
|
|
86
87
|
* @param updates Update instance to set the document to.
|
|
88
|
+
* @return Number of documents that were updated.
|
|
87
89
|
*/
|
|
88
|
-
abstract updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>):
|
|
90
|
+
abstract updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): number | PromiseLike<number>;
|
|
89
91
|
/**
|
|
90
92
|
* Delete all matching documents.
|
|
91
93
|
* @param ref Document reference specifying which document to delete.
|
|
94
|
+
* @return Number of documents that were deleted.
|
|
92
95
|
*/
|
|
93
|
-
abstract deleteQuery<T extends Data>(ref: DataQuery<T>):
|
|
96
|
+
abstract deleteQuery<T extends Data>(ref: DataQuery<T>): number | PromiseLike<number>;
|
|
94
97
|
}
|
|
95
98
|
/** Provider with a fully synchronous interface */
|
|
96
99
|
export interface SynchronousProvider extends Provider {
|
|
@@ -100,9 +103,9 @@ export interface SynchronousProvider extends Provider {
|
|
|
100
103
|
update<T extends Data>(ref: DataDocument<T>, value: Update<T>): void;
|
|
101
104
|
delete<T extends Data>(ref: DataDocument<T>): void;
|
|
102
105
|
getQuery<T extends Data>(ref: DataQuery<T>): Results<T>;
|
|
103
|
-
setQuery<T extends Data>(ref: DataQuery<T>, value: T):
|
|
104
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>):
|
|
105
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>):
|
|
106
|
+
setQuery<T extends Data>(ref: DataQuery<T>, value: T): number;
|
|
107
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): number;
|
|
108
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): number;
|
|
106
109
|
}
|
|
107
110
|
/** Provider with a fully asynchronous interface */
|
|
108
111
|
export interface AsynchronousProvider extends Provider {
|
|
@@ -112,7 +115,7 @@ export interface AsynchronousProvider extends Provider {
|
|
|
112
115
|
update<T extends Data>(ref: DataDocument<T>, updates: Update<T>): PromiseLike<void>;
|
|
113
116
|
delete<T extends Data>(ref: DataDocument<T>): PromiseLike<void>;
|
|
114
117
|
getQuery<T extends Data>(ref: DataQuery<T>): PromiseLike<Results<T>>;
|
|
115
|
-
setQuery<T extends Data>(ref: DataQuery<T>, value: T): PromiseLike<
|
|
116
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): PromiseLike<
|
|
117
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>): PromiseLike<
|
|
118
|
+
setQuery<T extends Data>(ref: DataQuery<T>, value: T): PromiseLike<number>;
|
|
119
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): PromiseLike<number>;
|
|
120
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): PromiseLike<number>;
|
|
118
121
|
}
|
|
@@ -16,9 +16,9 @@ export declare class ThroughProvider extends Provider {
|
|
|
16
16
|
delete<T extends Data>(ref: DataDocument<T>): void | PromiseLike<void>;
|
|
17
17
|
getQuery<T extends Data>(ref: DataQuery<T>): Results<T> | PromiseLike<Results<T>>;
|
|
18
18
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
19
|
-
setQuery<T extends Data>(ref: DataQuery<T>, data: T):
|
|
20
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>):
|
|
21
|
-
deleteQuery<T extends Data>(ref: DataQuery<T>):
|
|
19
|
+
setQuery<T extends Data>(ref: DataQuery<T>, data: T): number | PromiseLike<number>;
|
|
20
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): number | PromiseLike<number>;
|
|
21
|
+
deleteQuery<T extends Data>(ref: DataQuery<T>): number | PromiseLike<number>;
|
|
22
22
|
}
|
|
23
23
|
/** Find a specific source provider in a database's provider stack. */
|
|
24
24
|
export declare function findSourceProvider<P extends Provider>(provider: Provider, type: Class<P>): P;
|
|
@@ -11,6 +11,6 @@ export declare class ValidationProvider extends ThroughProvider {
|
|
|
11
11
|
update<T extends Data>(ref: DataDocument<T>, updates: Update<T>): void | PromiseLike<void>;
|
|
12
12
|
getQuery<T extends Data>(ref: DataQuery<T>): Results<T> | PromiseLike<Results<T>>;
|
|
13
13
|
subscribeQuery<T extends Data>(ref: DataQuery<T>, observer: Observer<Results<T>>): Unsubscriber;
|
|
14
|
-
setQuery<T extends Data>(ref: DataQuery<T>, value: T):
|
|
15
|
-
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>):
|
|
14
|
+
setQuery<T extends Data>(ref: DataQuery<T>, value: T): number | PromiseLike<number>;
|
|
15
|
+
updateQuery<T extends Data>(ref: DataQuery<T>, updates: Update<T>): number | PromiseLike<number>;
|
|
16
16
|
}
|