shelving 1.53.0 → 1.56.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.
Files changed (49) hide show
  1. package/db/Database.d.ts +3 -3
  2. package/db/Database.js +3 -3
  3. package/firestore/client/FirestoreClientProvider.d.ts +3 -3
  4. package/firestore/client/FirestoreClientProvider.js +9 -13
  5. package/firestore/lite/FirestoreLiteProvider.d.ts +3 -3
  6. package/firestore/lite/FirestoreLiteProvider.js +9 -13
  7. package/firestore/server/FirestoreServerProvider.d.ts +3 -3
  8. package/firestore/server/FirestoreServerProvider.js +6 -10
  9. package/package.json +14 -14
  10. package/provider/CacheProvider.d.ts +3 -3
  11. package/provider/CacheProvider.js +6 -6
  12. package/provider/ErrorProvider.d.ts +5 -7
  13. package/provider/ErrorProvider.js +6 -7
  14. package/provider/MemoryProvider.d.ts +3 -3
  15. package/provider/MemoryProvider.js +2 -2
  16. package/provider/Provider.d.ts +10 -10
  17. package/provider/ThroughProvider.d.ts +3 -3
  18. package/provider/ThroughProvider.js +4 -4
  19. package/provider/ValidationProvider.d.ts +3 -3
  20. package/provider/ValidationProvider.js +4 -4
  21. package/query/Query.js +1 -1
  22. package/react/index.d.ts +2 -1
  23. package/react/index.js +2 -1
  24. package/react/useDocument.js +6 -6
  25. package/react/useInstance.d.ts +10 -0
  26. package/react/useInstance.js +22 -0
  27. package/react/useLazy.d.ts +14 -0
  28. package/react/{usePureMemo.js → useLazy.js} +1 -1
  29. package/react/usePagination.js +3 -3
  30. package/react/usePureEffect.d.ts +1 -5
  31. package/react/usePureEffect.js +3 -7
  32. package/react/usePureState.d.ts +2 -9
  33. package/react/usePureState.js +1 -1
  34. package/react/useQuery.js +6 -6
  35. package/stream/ArrayState.js +6 -6
  36. package/stream/BooleanState.d.ts +7 -0
  37. package/stream/BooleanState.js +13 -0
  38. package/stream/ObjectState.d.ts +14 -0
  39. package/stream/ObjectState.js +26 -0
  40. package/stream/index.d.ts +2 -0
  41. package/stream/index.js +2 -0
  42. package/update/util.d.ts +6 -3
  43. package/update/util.js +0 -1
  44. package/util/lazy.d.ts +1 -4
  45. package/util/lazy.js +1 -2
  46. package/util/template.d.ts +3 -5
  47. package/util/template.js +15 -16
  48. package/util/transform.d.ts +2 -2
  49. package/react/usePureMemo.d.ts +0 -19
package/db/Database.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Entry, Observable, Observer, Result, Unsubscriber, Results, Validatable, Validator, Key, Data, Entries, Datas, Validators, ValidatorType, Dispatcher } from "../util/index.js";
2
- import { PropUpdates, Update } from "../update/index.js";
2
+ import { DataUpdate, PropUpdates } from "../update/index.js";
3
3
  import type { Provider } from "../provider/Provider.js";
4
4
  import { Filters, Sorts, Query, FilterProps, SortKeys } from "../query/index.js";
5
5
  /**
@@ -98,7 +98,7 @@ export declare class DatabaseQuery<T extends Data = Data> extends Query<T> imple
98
98
  * @param updates `Update` instance or set of updates to apply to every matching document.
99
99
  * @return Nothing (possibly promised).
100
100
  */
101
- update(updates: Update<T> | PropUpdates<T>): number | PromiseLike<number>;
101
+ update(updates: DataUpdate<T> | PropUpdates<T>): number | PromiseLike<number>;
102
102
  /**
103
103
  * Delete all matching documents.
104
104
  * @return Nothing (possibly promised).
@@ -154,7 +154,7 @@ export declare class DatabaseDocument<T extends Data = Data> implements Observab
154
154
  /** Set the complete data of this document. */
155
155
  set(data: T): void | PromiseLike<void>;
156
156
  /** Update this document. */
157
- update(updates: Update<T> | PropUpdates<T>): void | PromiseLike<void>;
157
+ update(updates: DataUpdate<T> | PropUpdates<T>): void | PromiseLike<void>;
158
158
  /** Delete this document. */
159
159
  delete(): void | PromiseLike<void>;
160
160
  /** Validate data for this query reference. */
package/db/Database.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { callAsync, getFirstItem, throwAsync, validate, getMap, countItems, hasItems, ResultsObserver, } from "../util/index.js";
2
- import { DataUpdate, Update } from "../update/index.js";
2
+ import { DataUpdate } from "../update/index.js";
3
3
  import { Feedback, InvalidFeedback } from "../feedback/index.js";
4
4
  import { Filters, Sorts, Query, Filter } from "../query/index.js";
5
5
  import { DocumentRequiredError, DocumentValidationError, QueryRequiredError, QueryValidationError } from "./errors.js";
@@ -130,7 +130,7 @@ export class DatabaseQuery extends Query {
130
130
  * @return Nothing (possibly promised).
131
131
  */
132
132
  update(updates) {
133
- return this.db.provider.updateQuery(this, updates instanceof Update ? updates : new DataUpdate(updates));
133
+ return this.db.provider.updateQuery(this, updates instanceof DataUpdate ? updates : new DataUpdate(updates));
134
134
  }
135
135
  /**
136
136
  * Delete all matching documents.
@@ -236,7 +236,7 @@ export class DatabaseDocument {
236
236
  }
237
237
  /** Update this document. */
238
238
  update(updates) {
239
- return this.db.provider.update(this, updates instanceof Update ? updates : new DataUpdate(updates));
239
+ return this.db.provider.update(this, updates instanceof DataUpdate ? updates : new DataUpdate(updates));
240
240
  }
241
241
  /** Delete this document. */
242
242
  delete() {
@@ -1,5 +1,5 @@
1
1
  import type { Firestore } from "firebase/firestore";
2
- import { Entries, Provider, DatabaseDocument, DatabaseQuery, Result, Observer, Update, AsynchronousProvider, Data, Unsubscriber } from "../../index.js";
2
+ import { Entries, Provider, DatabaseDocument, DatabaseQuery, Result, Observer, AsynchronousProvider, DataUpdate, Data, Unsubscriber } from "../../index.js";
3
3
  /**
4
4
  * Firestore client database provider.
5
5
  * - Works with the Firebase JS SDK.
@@ -13,11 +13,11 @@ export declare class FirestoreClientProvider extends Provider implements Asynchr
13
13
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
14
14
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<string>;
15
15
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): Promise<void>;
16
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): Promise<void>;
16
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): Promise<void>;
17
17
  delete<T extends Data>(ref: DatabaseDocument<T>): Promise<void>;
18
18
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<Entries<T>>;
19
19
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
20
20
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<number>;
21
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): Promise<number>;
21
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): Promise<number>;
22
22
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<number>;
23
23
  }
@@ -1,5 +1,5 @@
1
1
  import { orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, onSnapshot, addDoc, setDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore";
2
- import { Provider, dispatchNext, dispatchError, Update, ObjectUpdate, Increment, DataUpdate, AssertionError, ArrayUpdate, UnsupportedError, } from "../../index.js";
2
+ import { Provider, dispatchNext, dispatchError, ObjectUpdate, Increment, DataUpdate, ArrayUpdate, UnsupportedError, } from "../../index.js";
3
3
  // Constants.
4
4
  // const ID = "__name__"; // DH: `__name__` is the entire path of the document. `__id__` is just ID.
5
5
  const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
@@ -46,15 +46,10 @@ function* getResults(snapshot) {
46
46
  yield [s.id, s.data()];
47
47
  }
48
48
  /** Convert `Update` instances into corresponding Firestore `FieldValue` instances. */
49
- function getFieldValues(update) {
50
- if (update instanceof DataUpdate)
51
- return Object.fromEntries(yieldFieldValues(update));
52
- throw new AssertionError("Unsupported transform", update);
53
- }
54
49
  function* yieldFieldValues(updates, prefix = "") {
55
50
  for (const [key, update] of updates) {
56
- if (!(update instanceof Update))
57
- yield [`${prefix}${key}`, update !== undefined ? update : firestoreDeleteField()];
51
+ if (update === undefined)
52
+ yield [`${prefix}${key}`, firestoreDeleteField()];
58
53
  else if (update instanceof Increment)
59
54
  yield [`${prefix}${key}`, firestoreIncrement(update.amount)];
60
55
  else if (update instanceof DataUpdate || update instanceof ObjectUpdate)
@@ -68,7 +63,7 @@ function* yieldFieldValues(updates, prefix = "") {
68
63
  yield [`${prefix}${key}`, firestoreArrayRemove(...update.deletes)];
69
64
  }
70
65
  else
71
- throw new AssertionError("Unsupported transform", update);
66
+ yield [`${prefix}${key}`, update];
72
67
  }
73
68
  }
74
69
  /**
@@ -95,8 +90,9 @@ export class FirestoreClientProvider extends Provider {
95
90
  async set(ref, data) {
96
91
  await setDoc(getDocument(this.firestore, ref), data);
97
92
  }
98
- async update(ref, updates) {
99
- await updateDoc(getDocument(this.firestore, ref), getFieldValues(updates));
93
+ async update(ref, update) {
94
+ const fieldValues = Object.fromEntries(yieldFieldValues(update));
95
+ await updateDoc(getDocument(this.firestore, ref), fieldValues);
100
96
  }
101
97
  async delete(ref) {
102
98
  await deleteDoc(getDocument(this.firestore, ref));
@@ -112,9 +108,9 @@ export class FirestoreClientProvider extends Provider {
112
108
  await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
113
109
  return snapshot.size;
114
110
  }
115
- async updateQuery(ref, updates) {
111
+ async updateQuery(ref, update) {
116
112
  const snapshot = await getDocs(getQuery(this.firestore, ref));
117
- const fieldValues = getFieldValues(updates);
113
+ const fieldValues = Object.fromEntries(yieldFieldValues(update));
118
114
  await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
119
115
  return snapshot.size;
120
116
  }
@@ -1,5 +1,5 @@
1
1
  import type { Firestore } from "firebase/firestore/lite";
2
- import { Provider, DatabaseDocument, DatabaseQuery, Result, Update, AsynchronousProvider, Data, Entries, Unsubscriber } from "../../index.js";
2
+ import { Provider, DatabaseDocument, DatabaseQuery, Result, Update, AsynchronousProvider, Data, DataUpdate, Entries, Unsubscriber } from "../../index.js";
3
3
  /**
4
4
  * Firestore Lite client database provider.
5
5
  * - Works with the Firebase JS SDK.
@@ -13,11 +13,11 @@ export declare class FirestoreClientProvider extends Provider implements Asynchr
13
13
  subscribe(): Unsubscriber;
14
14
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<string>;
15
15
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): Promise<void>;
16
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): Promise<void>;
16
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): Promise<void>;
17
17
  delete<T extends Data>(ref: DatabaseDocument<T>): Promise<void>;
18
18
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<Entries<T>>;
19
19
  subscribeQuery(): Unsubscriber;
20
20
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T | Update<T> | undefined): Promise<number>;
21
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): Promise<number>;
21
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): Promise<number>;
22
22
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<number>;
23
23
  }
@@ -1,5 +1,5 @@
1
1
  import { orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, setDoc, addDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore/lite";
2
- import { Provider, Update, ObjectUpdate, Increment, AssertionError, DataUpdate, ArrayUpdate, UnsupportedError, } from "../../index.js";
2
+ import { Provider, ObjectUpdate, Increment, DataUpdate, ArrayUpdate, UnsupportedError, } from "../../index.js";
3
3
  // Constants.
4
4
  // const ID = "__name__"; // DH: `__name__` is the entire path of the document. `__id__` is just ID.
5
5
  const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
@@ -46,15 +46,10 @@ function* getResults(snapshot) {
46
46
  yield [s.id, s.data()];
47
47
  }
48
48
  /** Convert `Update` instances into corresponding Firestore `FieldValue` instances. */
49
- function getFieldValues(update) {
50
- if (update instanceof DataUpdate)
51
- return Object.fromEntries(yieldFieldValues(update));
52
- throw new AssertionError("Unsupported transform", update);
53
- }
54
49
  function* yieldFieldValues(updates, prefix = "") {
55
50
  for (const [key, update] of updates) {
56
- if (!(update instanceof Update))
57
- yield [`${prefix}${key}`, update !== undefined ? update : firestoreDeleteField()];
51
+ if (update === undefined)
52
+ yield [`${prefix}${key}`, firestoreDeleteField()];
58
53
  else if (update instanceof Increment)
59
54
  yield [`${prefix}${key}`, firestoreIncrement(update.amount)];
60
55
  else if (update instanceof DataUpdate || update instanceof ObjectUpdate)
@@ -68,7 +63,7 @@ function* yieldFieldValues(updates, prefix = "") {
68
63
  yield [`${prefix}${key}`, firestoreArrayRemove(...update.deletes)];
69
64
  }
70
65
  else
71
- throw new AssertionError("Unsupported transform", update);
66
+ yield [`${prefix}${key}`, update];
72
67
  }
73
68
  }
74
69
  /**
@@ -96,8 +91,9 @@ export class FirestoreClientProvider extends Provider {
96
91
  async set(ref, data) {
97
92
  await setDoc(getDocument(this.firestore, ref), data);
98
93
  }
99
- async update(ref, updates) {
100
- await updateDoc(getDocument(this.firestore, ref), getFieldValues(updates));
94
+ async update(ref, update) {
95
+ const fieldValues = Object.fromEntries(yieldFieldValues(update));
96
+ await updateDoc(getDocument(this.firestore, ref), fieldValues);
101
97
  }
102
98
  async delete(ref) {
103
99
  await deleteDoc(getDocument(this.firestore, ref));
@@ -113,9 +109,9 @@ export class FirestoreClientProvider extends Provider {
113
109
  await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
114
110
  return snapshot.size;
115
111
  }
116
- async updateQuery(ref, updates) {
112
+ async updateQuery(ref, update) {
117
113
  const snapshot = await getDocs(getQuery(this.firestore, ref));
118
- const fieldValues = getFieldValues(updates);
114
+ const fieldValues = Object.fromEntries(yieldFieldValues(update));
119
115
  await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
120
116
  return snapshot.size;
121
117
  }
@@ -1,5 +1,5 @@
1
1
  import { Firestore } from "@google-cloud/firestore";
2
- import { Provider, DatabaseDocument, DatabaseQuery, Observer, Result, Update, Data, AsynchronousProvider, Entry, Entries, Unsubscriber } from "../../index.js";
2
+ import { Provider, DatabaseDocument, DatabaseQuery, Observer, Result, Update, Data, AsynchronousProvider, DataUpdate, Entry, Entries, Unsubscriber } from "../../index.js";
3
3
  /**
4
4
  * Firestore server database provider.
5
5
  * - Works with the Firebase Admin SDK for Node.JS
@@ -11,11 +11,11 @@ export declare class FirestoreServerProvider extends Provider implements Asynchr
11
11
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
12
12
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<string>;
13
13
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): Promise<void>;
14
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): Promise<void>;
14
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): Promise<void>;
15
15
  delete<T extends Data>(ref: DatabaseDocument<T>): Promise<void>;
16
16
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<Iterable<Entry<T>>>;
17
17
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
18
18
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T | Update<T> | undefined): Promise<number>;
19
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): Promise<number>;
19
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): Promise<number>;
20
20
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<number>;
21
21
  }
@@ -46,16 +46,11 @@ function* getResults(snapshot) {
46
46
  yield [s.id, s.data()];
47
47
  }
48
48
  /** Convert `Update` instances into corresponding Firestore `FieldValue` instances. */
49
- function getFieldValues(update) {
50
- if (update instanceof DataUpdate)
51
- return Object.fromEntries(yieldFieldValues(update));
52
- throw new AssertionError("Unsupported transform", update);
53
- }
54
49
  function* yieldFieldValues(updates, prefix = "") {
55
50
  for (const [key, update] of updates) {
56
51
  if (!(update instanceof Update))
57
52
  yield [`${prefix}${key}`, update !== undefined ? update : FieldValue.delete()];
58
- if (update instanceof Increment)
53
+ else if (update instanceof Increment)
59
54
  yield [`${prefix}${key}`, FieldValue.increment(update.amount)];
60
55
  else if (update instanceof DataUpdate || update instanceof ObjectUpdate)
61
56
  yield* yieldFieldValues(update, `${prefix}${key}.`);
@@ -92,8 +87,9 @@ export class FirestoreServerProvider extends Provider {
92
87
  async set(ref, data) {
93
88
  await getDocument(this.firestore, ref).set(data);
94
89
  }
95
- async update(ref, updates) {
96
- await getDocument(this.firestore, ref).update(getFieldValues(updates));
90
+ async update(ref, update) {
91
+ const fieldValues = Object.fromEntries(yieldFieldValues(update)); // eslint-disable-line @typescript-eslint/no-explicit-any
92
+ await getDocument(this.firestore, ref).update(fieldValues);
97
93
  }
98
94
  async delete(ref) {
99
95
  await getDocument(this.firestore, ref).delete();
@@ -107,8 +103,8 @@ export class FirestoreServerProvider extends Provider {
107
103
  async setQuery(ref, data) {
108
104
  return await bulkWrite(this.firestore, ref, (w, s) => void w.set(s.ref, data));
109
105
  }
110
- async updateQuery(ref, updates) {
111
- const fieldValues = getFieldValues(updates);
106
+ async updateQuery(ref, update) {
107
+ const fieldValues = Object.fromEntries(yieldFieldValues(update)); // eslint-disable-line @typescript-eslint/no-explicit-any
112
108
  return await bulkWrite(this.firestore, ref, (w, s) => void w.update(s.ref, fieldValues));
113
109
  }
114
110
  async deleteQuery(ref) {
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "state-management",
12
12
  "query-builder"
13
13
  ],
14
- "version": "1.53.0",
14
+ "version": "1.56.0",
15
15
  "repository": "https://github.com/dhoulb/shelving",
16
16
  "author": "Dave Houlbrooke <dave@shax.com>",
17
17
  "license": "0BSD",
@@ -59,24 +59,24 @@
59
59
  "build:jest": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.build.cjs"
60
60
  },
61
61
  "devDependencies": {
62
- "@google-cloud/firestore": "^4.15.1",
63
- "@types/jest": "^27.4.0",
64
- "@types/react": "^17.0.39",
65
- "@types/react-dom": "^17.0.11",
66
- "@typescript-eslint/eslint-plugin": "^5.12.0",
67
- "@typescript-eslint/parser": "^5.12.0",
68
- "eslint": "^8.9.0",
69
- "eslint-config-prettier": "^8.4.0",
70
- "eslint-plugin-import": "^2.25.4",
62
+ "@google-cloud/firestore": "^5.0.2",
63
+ "@types/jest": "^27.4.1",
64
+ "@types/react": "^17.0.44",
65
+ "@types/react-dom": "^17.0.15",
66
+ "@typescript-eslint/eslint-plugin": "^5.20.0",
67
+ "@typescript-eslint/parser": "^5.20.0",
68
+ "eslint": "^8.14.0",
69
+ "eslint-config-prettier": "^8.5.0",
70
+ "eslint-plugin-import": "^2.26.0",
71
71
  "eslint-plugin-prettier": "^4.0.0",
72
- "firebase": "^9.6.7",
72
+ "firebase": "^9.6.11",
73
73
  "jest": "^27.5.1",
74
74
  "jest-ts-webcompat-resolver": "^1.0.0",
75
- "prettier": "^2.5.1",
75
+ "prettier": "^2.6.2",
76
76
  "react": "^17.0.2",
77
77
  "react-dom": "^17.0.2",
78
- "ts-jest": "^27.1.3",
79
- "typescript": "^4.5.5"
78
+ "ts-jest": "^27.1.4",
79
+ "typescript": "^4.6.3"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "@google-cloud/firestore": ">=4.0.0",
@@ -1,5 +1,5 @@
1
1
  import type { DatabaseDocument, DatabaseQuery } from "../db/index.js";
2
- import { Update } from "../update/index.js";
2
+ import { DataUpdate } from "../update/index.js";
3
3
  import { Result, Unsubscriber, Observer, Entries, Data } from "../util/index.js";
4
4
  import type { Provider, AsynchronousProvider } from "./Provider.js";
5
5
  import { MemoryProvider } from "./MemoryProvider.js";
@@ -21,14 +21,14 @@ export declare class CacheProvider extends ThroughProvider implements Asynchrono
21
21
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
22
22
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<string>;
23
23
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): Promise<void>;
24
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): Promise<void>;
24
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): Promise<void>;
25
25
  delete<T extends Data>(ref: DatabaseDocument<T>): Promise<void>;
26
26
  /** Cache a set of document entries. */
27
27
  private _cacheEntries;
28
28
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<Entries<T>>;
29
29
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
30
30
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T): Promise<number>;
31
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): Promise<number>;
31
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): Promise<number>;
32
32
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): Promise<number>;
33
33
  /** Reset this provider and clear all data. */
34
34
  reset(): void;
@@ -43,11 +43,11 @@ export class CacheProvider extends ThroughProvider {
43
43
  await super.set(ref, data);
44
44
  this.cache.set(ref, data);
45
45
  }
46
- async update(ref, updates) {
47
- await super.update(ref, updates);
46
+ async update(ref, update) {
47
+ await super.update(ref, update);
48
48
  // Update the document in the cache if it exists using `updateDocuments()` and an `id` query.
49
49
  // Using `updateDocument()` would throw `RequiredError` if the document didn't exist.
50
- this.cache.updateQuery(ref.optional, updates);
50
+ this.cache.updateQuery(ref.optional, update);
51
51
  }
52
52
  async delete(ref) {
53
53
  await super.delete(ref);
@@ -83,9 +83,9 @@ export class CacheProvider extends ThroughProvider {
83
83
  this.cache.setQuery(ref, data);
84
84
  return count;
85
85
  }
86
- async updateQuery(ref, updates) {
87
- const count = await super.updateQuery(ref, updates);
88
- this.cache.updateQuery(ref, updates);
86
+ async updateQuery(ref, update) {
87
+ const count = await super.updateQuery(ref, update);
88
+ this.cache.updateQuery(ref, update);
89
89
  return count;
90
90
  }
91
91
  async deleteQuery(ref) {
@@ -1,8 +1,6 @@
1
- import { DatabaseDocument, DatabaseQuery } from "../db/Database.js";
2
- import { Update } from "../update/Update.js";
3
- import { Data, Result } from "../util/data.js";
4
- import { Entries } from "../util/entry.js";
5
- import { Observer, Unsubscriber } from "../util/observable.js";
1
+ import { DatabaseDocument, DatabaseQuery } from "../db/index.js";
2
+ import { Data, Result, Entries, Observer, Unsubscriber } from "../util/index.js";
3
+ import { DataUpdate } from "../update/index.js";
6
4
  import { ThroughProvider } from "./ThroughProvider.js";
7
5
  /** Provider that wraps errors thrown from deeper providers in `DatabaseReadError` and `DatabaseWriteError` etc to make it easier to see what read/write caused the error. */
8
6
  export declare class ErrorProvider extends ThroughProvider {
@@ -10,12 +8,12 @@ export declare class ErrorProvider extends ThroughProvider {
10
8
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
11
9
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): string | PromiseLike<string>;
12
10
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): void | PromiseLike<void>;
13
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): void | PromiseLike<void>;
11
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): void | PromiseLike<void>;
14
12
  delete<T extends Data>(ref: DatabaseDocument<T>): void | PromiseLike<void>;
15
13
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Entries<T> | PromiseLike<Entries<T>>;
16
14
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
17
15
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T): number | PromiseLike<number>;
18
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number | PromiseLike<number>;
16
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number | PromiseLike<number>;
19
17
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): number | PromiseLike<number>;
20
18
  }
21
19
  /** Thrown if an error occurs while reading a query. */
@@ -1,5 +1,4 @@
1
- import { isAsync } from "../index.js";
2
- import { ThroughObserver } from "../util/observable.js";
1
+ import { isAsync, ThroughObserver } from "../util/index.js";
3
2
  import { ThroughProvider } from "./ThroughProvider.js";
4
3
  /** Provider that wraps errors thrown from deeper providers in `DatabaseReadError` and `DatabaseWriteError` etc to make it easier to see what read/write caused the error. */
5
4
  export class ErrorProvider extends ThroughProvider {
@@ -51,9 +50,9 @@ export class ErrorProvider extends ThroughProvider {
51
50
  throw err;
52
51
  }
53
52
  }
54
- update(ref, updates) {
53
+ update(ref, update) {
55
54
  try {
56
- const result = super.update(ref, updates);
55
+ const result = super.update(ref, update);
57
56
  return isAsync(result)
58
57
  ? result.then(undefined, err => {
59
58
  throw err instanceof Error ? new DatabaseWriteError(err, ref) : err;
@@ -114,9 +113,9 @@ export class ErrorProvider extends ThroughProvider {
114
113
  throw err;
115
114
  }
116
115
  }
117
- updateQuery(ref, updates) {
116
+ updateQuery(ref, update) {
118
117
  try {
119
- const result = super.updateQuery(ref, updates);
118
+ const result = super.updateQuery(ref, update);
120
119
  return isAsync(result)
121
120
  ? result.then(undefined, err => {
122
121
  throw err instanceof Error ? new DatabaseWriteError(err, ref) : err;
@@ -162,7 +161,7 @@ export class DatabaseWriteError extends Error {
162
161
  this.ref = ref;
163
162
  }
164
163
  }
165
- DatabaseWriteError.prototype.name = "DocumentWriteError";
164
+ DatabaseWriteError.prototype.name = "DatabaseWriteError";
166
165
  /** Observer that wraps errors in subscriptions in `DatabaseReadError` */
167
166
  class DatabaseErrorObserver extends ThroughObserver {
168
167
  constructor(ref, target) {
@@ -1,5 +1,5 @@
1
1
  import { Data, Result, Entries, Unsubscriber, Observer } from "../util/index.js";
2
- import { Update } from "../update/index.js";
2
+ import { DataUpdate } from "../update/index.js";
3
3
  import { DatabaseQuery, DatabaseDocument } from "../db/index.js";
4
4
  import { Provider, SynchronousProvider } from "./Provider.js";
5
5
  /**
@@ -15,12 +15,12 @@ export declare class MemoryProvider extends Provider implements SynchronousProvi
15
15
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
16
16
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): string;
17
17
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): void;
18
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): void;
18
+ update<T extends Data>(ref: DatabaseDocument<T>, updates: DataUpdate<T>): void;
19
19
  delete<T extends Data>(ref: DatabaseDocument<T>): void;
20
20
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Entries<T>;
21
21
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
22
22
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T): number;
23
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number;
23
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number;
24
24
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): number;
25
25
  /** Reset this provider and clear all data. */
26
26
  reset(): void;
@@ -93,13 +93,13 @@ export class MemoryProvider extends Provider {
93
93
  }
94
94
  return count;
95
95
  }
96
- updateQuery(ref, updates) {
96
+ updateQuery(ref, update) {
97
97
  const table = this._table(ref);
98
98
  // If there's a limit set: run the full query.
99
99
  // If there's no limit set: only need to run the filtering (more efficient because sort order doesn't matter).
100
100
  let count = 0;
101
101
  for (const [id, existing] of ref.limit ? ref.transform(table.data) : ref.filters.transform(table.data)) {
102
- table.write(id, updates.transform(existing));
102
+ table.write(id, update.transform(existing));
103
103
  count++;
104
104
  }
105
105
  return count;
@@ -1,6 +1,6 @@
1
1
  import type { Observer, Unsubscriber, Result, Entries, Data } from "../util/index.js";
2
- import type { DatabaseDocument, DatabaseQuery } from "../db/Database.js";
3
- import type { Update } from "../update/index.js";
2
+ import type { DatabaseDocument, DatabaseQuery } from "../db/index.js";
3
+ import type { DataUpdate } from "../update/index.js";
4
4
  /** Provides access to data (e.g. IndexedDB, Firebase, or in-memory cache providers). */
5
5
  export declare abstract class Provider {
6
6
  /**
@@ -45,11 +45,11 @@ export declare abstract class Provider {
45
45
  * Update the data an existing document.
46
46
  *
47
47
  * @param ref Document reference specifying which document to update.
48
- * @param updates Update instance to set the document to.
48
+ * @param update Update instance to set the document to.
49
49
  *
50
50
  * @throws Error If the document does not exist (ideally a `RequiredError` but may be provider-specific).
51
51
  */
52
- abstract update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): void | PromiseLike<void>;
52
+ abstract update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): void | PromiseLike<void>;
53
53
  /**
54
54
  * Delete a specified document.
55
55
  * @param ref Document reference specifying which document to delete.
@@ -84,10 +84,10 @@ export declare abstract class Provider {
84
84
  * Update the data of all matching documents.
85
85
  *
86
86
  * @param ref Documents reference specifying which collection to set.
87
- * @param updates Update instance to set the document to.
87
+ * @param update Update instance to set the document to.
88
88
  * @return Number of documents that were updated.
89
89
  */
90
- abstract updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number | PromiseLike<number>;
90
+ abstract updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number | PromiseLike<number>;
91
91
  /**
92
92
  * Delete all matching documents.
93
93
  * @param ref Document reference specifying which document to delete.
@@ -100,11 +100,11 @@ export interface SynchronousProvider extends Provider {
100
100
  get<T extends Data>(ref: DatabaseDocument<T>): Result<T>;
101
101
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): string;
102
102
  set<T extends Data>(ref: DatabaseDocument<T>, value: T): void;
103
- update<T extends Data>(ref: DatabaseDocument<T>, value: Update<T>): void;
103
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): void;
104
104
  delete<T extends Data>(ref: DatabaseDocument<T>): void;
105
105
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Entries<T>;
106
106
  setQuery<T extends Data>(ref: DatabaseQuery<T>, value: T): number;
107
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number;
107
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number;
108
108
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): number;
109
109
  }
110
110
  /** Provider with a fully asynchronous interface */
@@ -112,10 +112,10 @@ export interface AsynchronousProvider extends Provider {
112
112
  get<T extends Data>(ref: DatabaseDocument<T>): PromiseLike<Result<T>>;
113
113
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): PromiseLike<string>;
114
114
  set<T extends Data>(ref: DatabaseDocument<T>, value: T): PromiseLike<void>;
115
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): PromiseLike<void>;
115
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): PromiseLike<void>;
116
116
  delete<T extends Data>(ref: DatabaseDocument<T>): PromiseLike<void>;
117
117
  getQuery<T extends Data>(ref: DatabaseQuery<T>): PromiseLike<Entries<T>>;
118
118
  setQuery<T extends Data>(ref: DatabaseQuery<T>, value: T): PromiseLike<number>;
119
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): PromiseLike<number>;
119
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): PromiseLike<number>;
120
120
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): PromiseLike<number>;
121
121
  }
@@ -1,6 +1,6 @@
1
1
  import type { Result, Entries, Unsubscriber, Observer, Class, Data } from "../util/index.js";
2
2
  import type { DatabaseDocument, DatabaseQuery } from "../db/index.js";
3
- import type { Update } from "../update/index.js";
3
+ import type { DataUpdate } from "../update/index.js";
4
4
  import { Provider } from "./Provider.js";
5
5
  /**
6
6
  * Pass all reads and writes through to a source provider.
@@ -12,12 +12,12 @@ export declare class ThroughProvider extends Provider {
12
12
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result<T>>): Unsubscriber;
13
13
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): string | PromiseLike<string>;
14
14
  set<T extends Data>(ref: DatabaseDocument<T>, data: T): void | PromiseLike<void>;
15
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): void | PromiseLike<void>;
15
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): void | PromiseLike<void>;
16
16
  delete<T extends Data>(ref: DatabaseDocument<T>): void | PromiseLike<void>;
17
17
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Entries<T> | PromiseLike<Entries<T>>;
18
18
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
19
19
  setQuery<T extends Data>(ref: DatabaseQuery<T>, data: T): number | PromiseLike<number>;
20
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number | PromiseLike<number>;
20
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number | PromiseLike<number>;
21
21
  deleteQuery<T extends Data>(ref: DatabaseQuery<T>): number | PromiseLike<number>;
22
22
  }
23
23
  /** Find a specific source provider in a database's provider stack. */
@@ -20,8 +20,8 @@ export class ThroughProvider extends Provider {
20
20
  set(ref, data) {
21
21
  return this.source.set(ref, data);
22
22
  }
23
- update(ref, updates) {
24
- return this.source.update(ref, updates);
23
+ update(ref, update) {
24
+ return this.source.update(ref, update);
25
25
  }
26
26
  delete(ref) {
27
27
  return this.source.delete(ref);
@@ -35,8 +35,8 @@ export class ThroughProvider extends Provider {
35
35
  setQuery(ref, data) {
36
36
  return this.source.setQuery(ref, data);
37
37
  }
38
- updateQuery(ref, updates) {
39
- return this.source.updateQuery(ref, updates);
38
+ updateQuery(ref, update) {
39
+ return this.source.updateQuery(ref, update);
40
40
  }
41
41
  deleteQuery(ref) {
42
42
  return this.source.deleteQuery(ref);
@@ -1,6 +1,6 @@
1
1
  import type { DatabaseDocument, DatabaseQuery } from "../db/index.js";
2
2
  import { Data, Result, Unsubscriber, Observer, Entries } from "../util/index.js";
3
- import { Update } from "../update/index.js";
3
+ import { DataUpdate } from "../update/index.js";
4
4
  import { ThroughProvider } from "./ThroughProvider.js";
5
5
  /** Validates any values that are read from or written to a source provider. */
6
6
  export declare class ValidationProvider extends ThroughProvider {
@@ -8,9 +8,9 @@ export declare class ValidationProvider extends ThroughProvider {
8
8
  subscribe<T extends Data>(ref: DatabaseDocument<T>, observer: Observer<Result>): Unsubscriber;
9
9
  add<T extends Data>(ref: DatabaseQuery<T>, data: T): string | PromiseLike<string>;
10
10
  set<T extends Data>(ref: DatabaseDocument<T>, value: T): void | PromiseLike<void>;
11
- update<T extends Data>(ref: DatabaseDocument<T>, updates: Update<T>): void | PromiseLike<void>;
11
+ update<T extends Data>(ref: DatabaseDocument<T>, update: DataUpdate<T>): void | PromiseLike<void>;
12
12
  getQuery<T extends Data>(ref: DatabaseQuery<T>): Entries<T> | PromiseLike<Entries<T>>;
13
13
  subscribeQuery<T extends Data>(ref: DatabaseQuery<T>, observer: Observer<Entries<T>>): Unsubscriber;
14
14
  setQuery<T extends Data>(ref: DatabaseQuery<T>, value: T): number | PromiseLike<number>;
15
- updateQuery<T extends Data>(ref: DatabaseQuery<T>, updates: Update<T>): number | PromiseLike<number>;
15
+ updateQuery<T extends Data>(ref: DatabaseQuery<T>, update: DataUpdate<T>): number | PromiseLike<number>;
16
16
  }