shelving 1.105.0 → 1.106.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/change/Change.d.ts +83 -0
- package/change/Change.js +67 -0
- package/change/index.d.ts +1 -0
- package/change/index.js +1 -0
- package/db/CollectionReference.d.ts +61 -39
- package/db/CollectionReference.js +73 -41
- package/db/Database.d.ts +65 -39
- package/db/Database.js +70 -28
- package/db/ItemReference.d.ts +13 -30
- package/db/ItemReference.js +9 -12
- package/db/ItemState.d.ts +9 -7
- package/db/ItemState.js +15 -13
- package/db/QueryReference.d.ts +18 -12
- package/db/QueryReference.js +27 -22
- package/db/QueryState.d.ts +8 -7
- package/db/QueryState.js +15 -13
- package/db/index.d.ts +0 -1
- package/db/index.js +0 -1
- package/firestore/client/FirestoreClientProvider.d.ts +1 -1
- package/firestore/client/FirestoreClientProvider.js +1 -1
- package/firestore/lite/FirestoreLiteProvider.d.ts +1 -1
- package/firestore/lite/FirestoreLiteProvider.js +1 -1
- package/firestore/server/FirestoreServerProvider.d.ts +1 -1
- package/firestore/server/FirestoreServerProvider.js +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +2 -1
- package/provider/CacheProvider.d.ts +1 -1
- package/provider/DebugProvider.d.ts +3 -3
- package/provider/MemoryProvider.d.ts +17 -17
- package/provider/MemoryProvider.js +1 -1
- package/provider/Provider.d.ts +31 -3
- package/provider/Provider.js +1 -1
- package/provider/ThroughProvider.d.ts +1 -1
- package/provider/ValidationProvider.d.ts +6 -6
- package/provider/ValidationProvider.js +3 -3
- package/react/{createCache.d.ts → createCacheContext.d.ts} +4 -6
- package/react/{createCache.js → createCacheContext.js} +7 -4
- package/react/createDataContext.d.ts +19 -0
- package/react/createDataContext.js +29 -0
- package/react/index.d.ts +3 -3
- package/react/index.js +3 -5
- package/schema/AllowSchema.js +3 -4
- package/schema/ColorSchema.d.ts +1 -6
- package/schema/ColorSchema.js +13 -9
- package/schema/EmailSchema.d.ts +1 -6
- package/schema/EmailSchema.js +9 -6
- package/schema/KeySchema.d.ts +4 -6
- package/schema/KeySchema.js +5 -5
- package/schema/LinkSchema.d.ts +1 -4
- package/schema/LinkSchema.js +8 -4
- package/schema/OptionalSchema.js +0 -1
- package/schema/PhoneSchema.d.ts +0 -4
- package/schema/PhoneSchema.js +10 -6
- package/schema/Schema.d.ts +6 -6
- package/schema/Schema.js +1 -1
- package/schema/SlugSchema.d.ts +2 -4
- package/schema/SlugSchema.js +8 -3
- package/test/basics.d.ts +1 -1
- package/test/people.d.ts +1 -1
- package/test/util.d.ts +2 -2
- package/test/util.js +3 -3
- package/util/duration.js +8 -8
- package/util/index.d.ts +1 -0
- package/util/index.js +1 -0
- package/util/item.d.ts +23 -0
- package/util/item.js +21 -0
- package/util/optional.d.ts +2 -0
- package/util/optional.js +2 -0
- package/util/units.d.ts +6 -6
- package/util/units.js +11 -13
- package/util/validate.d.ts +7 -0
- package/util/validate.js +0 -1
- package/db/Change.d.ts +0 -43
- package/db/Change.js +0 -35
- package/react/useData.d.ts +0 -15
- package/react/useData.js +0 -16
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { AsyncProvider, Provider } from "../provider/Provider.js";
|
|
2
|
+
import type { ImmutableArray } from "../util/array.js";
|
|
3
|
+
import type { Data } from "../util/data.js";
|
|
4
|
+
import type { ItemQuery } from "../util/item.js";
|
|
5
|
+
import type { Updates } from "../util/update.js";
|
|
6
|
+
import { type Optional } from "../util/optional.js";
|
|
7
|
+
/** A change to a database. */
|
|
8
|
+
export interface Change {
|
|
9
|
+
readonly action: string;
|
|
10
|
+
}
|
|
11
|
+
/** A change to a database collection. */
|
|
12
|
+
export interface CollectionChange<T extends Data> extends Change {
|
|
13
|
+
readonly collection: string;
|
|
14
|
+
readonly id?: string | never;
|
|
15
|
+
readonly query?: ItemQuery<T> | never;
|
|
16
|
+
}
|
|
17
|
+
/** Add an item to a database collection. */
|
|
18
|
+
export interface AddItemChange<T extends Data> extends CollectionChange<T> {
|
|
19
|
+
readonly action: "add";
|
|
20
|
+
readonly id?: never;
|
|
21
|
+
readonly query?: never;
|
|
22
|
+
readonly data: T;
|
|
23
|
+
}
|
|
24
|
+
/** Change an item in a database collection. */
|
|
25
|
+
export interface ItemChange<T extends Data> extends CollectionChange<T> {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly query?: never;
|
|
28
|
+
}
|
|
29
|
+
/** Set an item in a database collection. */
|
|
30
|
+
export interface SetItemChange<T extends Data> extends ItemChange<T> {
|
|
31
|
+
readonly action: "set";
|
|
32
|
+
readonly data: T;
|
|
33
|
+
}
|
|
34
|
+
/** Update an item in a database collection. */
|
|
35
|
+
export interface UpdateItemChange<T extends Data> extends ItemChange<T> {
|
|
36
|
+
readonly action: "update";
|
|
37
|
+
readonly updates: Updates<T>;
|
|
38
|
+
}
|
|
39
|
+
/** Delete an item in a database collection. */
|
|
40
|
+
export interface DeleteItemChange<T extends Data> extends ItemChange<T> {
|
|
41
|
+
readonly action: "delete";
|
|
42
|
+
}
|
|
43
|
+
/** Change multiple items in a database collection. */
|
|
44
|
+
export interface QueryChange<T extends Data> extends CollectionChange<T> {
|
|
45
|
+
readonly query: ItemQuery<T>;
|
|
46
|
+
readonly id?: never;
|
|
47
|
+
}
|
|
48
|
+
/** Set multiple items in a database collection. */
|
|
49
|
+
export interface SetQueryChange<T extends Data> extends QueryChange<T> {
|
|
50
|
+
readonly action: "set";
|
|
51
|
+
readonly data: T;
|
|
52
|
+
}
|
|
53
|
+
/** Update multiple items in a database collection. */
|
|
54
|
+
export interface UpdateQueryChange<T extends Data> extends QueryChange<T> {
|
|
55
|
+
readonly action: "update";
|
|
56
|
+
readonly updates: Updates<T>;
|
|
57
|
+
}
|
|
58
|
+
/** Delete multiple items in a database collection. */
|
|
59
|
+
export interface DeleteQueryChange<T extends Data> extends QueryChange<T> {
|
|
60
|
+
readonly action: "delete";
|
|
61
|
+
}
|
|
62
|
+
/** Write an item in a database collection. */
|
|
63
|
+
export type WriteItemChange<T extends Data> = SetItemChange<T> | UpdateItemChange<T> | DeleteItemChange<T>;
|
|
64
|
+
/** Write multiple item in a database collection. */
|
|
65
|
+
export type WriteQueryChange<T extends Data> = SetQueryChange<T> | UpdateQueryChange<T> | DeleteQueryChange<T>;
|
|
66
|
+
/** Write an item or multiple items in a database collection. */
|
|
67
|
+
export type WriteChange<T extends Data> = AddItemChange<T> | WriteItemChange<T> | WriteQueryChange<T>;
|
|
68
|
+
/** Write a set of changes to a synchronous provider. */
|
|
69
|
+
export declare function writeProviderChanges<T extends Data>(provider: Provider, ...changes: Optional<WriteChange<T>>[]): ImmutableArray<WriteChange<T>>;
|
|
70
|
+
/**
|
|
71
|
+
* Write a single change to a synchronous provider.
|
|
72
|
+
* @param change Change that should be written.
|
|
73
|
+
* @return Change that was written.
|
|
74
|
+
*/
|
|
75
|
+
export declare function writeProviderChange<T extends Data>(provider: Provider, change: WriteChange<T>): WriteChange<T>;
|
|
76
|
+
/** Write a set of changes to an asynchronous provider. */
|
|
77
|
+
export declare function writeAsyncProviderChanges<T extends Data>(provider: AsyncProvider, ...changes: Optional<WriteChange<T>>[]): Promise<ImmutableArray<WriteChange<T>>>;
|
|
78
|
+
/**
|
|
79
|
+
* Write a single change to an asynchronous provider.
|
|
80
|
+
* @param change Change that should be written.
|
|
81
|
+
* @return Change that was written.
|
|
82
|
+
*/
|
|
83
|
+
export declare function writeAsyncProviderChange<T extends Data>(provider: AsyncProvider, change: WriteChange<T>): Promise<WriteChange<T>>;
|
package/change/Change.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { notOptional } from "../util/optional.js";
|
|
2
|
+
/** Write a set of changes to a synchronous provider. */
|
|
3
|
+
export function writeProviderChanges(provider, ...changes) {
|
|
4
|
+
return changes.filter(notOptional).map(change => writeProviderChange(provider, change));
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Write a single change to a synchronous provider.
|
|
8
|
+
* @param change Change that should be written.
|
|
9
|
+
* @return Change that was written.
|
|
10
|
+
*/
|
|
11
|
+
export function writeProviderChange(provider, change) {
|
|
12
|
+
const { action, collection, id, query } = change;
|
|
13
|
+
if (action === "add") {
|
|
14
|
+
// `add` change returns a `set` change so it includes the ID to reflect the change that was written.
|
|
15
|
+
return { action: "set", collection, id: provider.addItem(collection, change.data), data: change.data };
|
|
16
|
+
}
|
|
17
|
+
else if (id) {
|
|
18
|
+
if (action === "set")
|
|
19
|
+
provider.setItem(collection, id, change.data);
|
|
20
|
+
else if (action === "update")
|
|
21
|
+
provider.updateItem(collection, id, change.updates);
|
|
22
|
+
else if (action === "delete")
|
|
23
|
+
provider.deleteItem(collection, id);
|
|
24
|
+
}
|
|
25
|
+
else if (query) {
|
|
26
|
+
if (action === "set")
|
|
27
|
+
provider.setQuery(collection, query, change.data);
|
|
28
|
+
else if (action === "update")
|
|
29
|
+
provider.updateQuery(collection, query, change.updates);
|
|
30
|
+
else if (action === "delete")
|
|
31
|
+
provider.deleteQuery(collection, query);
|
|
32
|
+
}
|
|
33
|
+
return change;
|
|
34
|
+
}
|
|
35
|
+
/** Write a set of changes to an asynchronous provider. */
|
|
36
|
+
export function writeAsyncProviderChanges(provider, ...changes) {
|
|
37
|
+
return Promise.all(changes.filter(notOptional).map(change => writeAsyncProviderChange(provider, change)));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Write a single change to an asynchronous provider.
|
|
41
|
+
* @param change Change that should be written.
|
|
42
|
+
* @return Change that was written.
|
|
43
|
+
*/
|
|
44
|
+
export async function writeAsyncProviderChange(provider, change) {
|
|
45
|
+
const { collection, action, id, query } = change;
|
|
46
|
+
if (action === "add") {
|
|
47
|
+
// `add` change returns a `set` change so it includes the ID to reflect the change that was written.
|
|
48
|
+
return { action: "set", collection, id: await provider.addItem(collection, change.data), data: change.data };
|
|
49
|
+
}
|
|
50
|
+
else if (id) {
|
|
51
|
+
if (action === "set")
|
|
52
|
+
await provider.setItem(collection, id, change.data);
|
|
53
|
+
else if (action === "update")
|
|
54
|
+
await provider.updateItem(collection, id, change.updates);
|
|
55
|
+
else if (action === "delete")
|
|
56
|
+
await provider.deleteItem(collection, id);
|
|
57
|
+
}
|
|
58
|
+
else if (query) {
|
|
59
|
+
if (action === "set")
|
|
60
|
+
await provider.setQuery(collection, query, change.data);
|
|
61
|
+
else if (action === "update")
|
|
62
|
+
await provider.updateQuery(collection, query, change.updates);
|
|
63
|
+
else if (action === "delete")
|
|
64
|
+
await provider.deleteQuery(collection, query);
|
|
65
|
+
}
|
|
66
|
+
return change;
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Change.js";
|
package/change/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Change.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { AsyncProvider, Provider } from "../provider/Provider.js";
|
|
1
|
+
import type { AddItemChange, DeleteItemChange, DeleteQueryChange, SetItemChange, SetQueryChange, UpdateItemChange, UpdateQueryChange } from "../change/Change.js";
|
|
2
|
+
import type { AbstractProvider, AsyncProvider, Provider } from "../provider/Provider.js";
|
|
4
3
|
import type { Data } from "../util/data.js";
|
|
4
|
+
import type { ItemArray, ItemData, ItemQuery, ItemValue } from "../util/item.js";
|
|
5
5
|
import type { Updates } from "../util/update.js";
|
|
6
6
|
import { AsyncItemReference, ItemReference } from "./ItemReference.js";
|
|
7
7
|
import { AsyncQueryReference, QueryReference } from "./QueryReference.js";
|
|
8
8
|
/** Reference to a collection in a synchronous or asynchronous provider. */
|
|
9
9
|
declare abstract class AbstractCollectionReference<T extends Data = Data> {
|
|
10
|
-
abstract readonly provider:
|
|
10
|
+
abstract readonly provider: AbstractProvider;
|
|
11
11
|
readonly collection: string;
|
|
12
12
|
constructor(collection: string);
|
|
13
13
|
/**
|
|
@@ -15,16 +15,16 @@ declare abstract class AbstractCollectionReference<T extends Data = Data> {
|
|
|
15
15
|
* @return Array of entities.
|
|
16
16
|
*/
|
|
17
17
|
abstract items: ItemArray<T> | PromiseLike<ItemArray<T>>;
|
|
18
|
-
/**
|
|
19
|
-
* Count the number of results of this set of items.
|
|
20
|
-
* @return Number of items matching the query (possibly promised).
|
|
21
|
-
*/
|
|
22
|
-
abstract count: number | PromiseLike<number>;
|
|
23
18
|
/**
|
|
24
19
|
* Does at least one item exist for this query?
|
|
25
20
|
* @return `true` if a item exists or `false` otherwise (possibly promised).
|
|
26
21
|
*/
|
|
27
22
|
abstract exists: boolean | PromiseLike<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Count the number of results of this set of items.
|
|
25
|
+
* @return Number of items matching the query (possibly promised).
|
|
26
|
+
*/
|
|
27
|
+
abstract count: number | PromiseLike<number>;
|
|
28
28
|
/**
|
|
29
29
|
* Get the first item matched by this query or `null` if this query has no results.
|
|
30
30
|
* @throws RequiredError if there were no results for this query.
|
|
@@ -44,24 +44,38 @@ declare abstract class AbstractCollectionReference<T extends Data = Data> {
|
|
|
44
44
|
abstract query(query?: ItemQuery<T>): QueryReference<T> | AsyncQueryReference<T>;
|
|
45
45
|
/** Create a query on this item's collection. */
|
|
46
46
|
abstract item(id: string): ItemReference<T> | AsyncItemReference<T>;
|
|
47
|
-
/** Get an item
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
/** Get an
|
|
58
|
-
|
|
59
|
-
/** Get a
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
/** Get
|
|
64
|
-
|
|
47
|
+
/** Get an add change for an item in a database collection. */
|
|
48
|
+
getItemAdd(data: T): AddItemChange<T>;
|
|
49
|
+
/** Get a set change for an item in a database collection. */
|
|
50
|
+
getItemSet(id: string, data: T): SetItemChange<T>;
|
|
51
|
+
/** Get an update change for an item in a database collection. */
|
|
52
|
+
getItemUpdate(id: string, updates: Updates<T>): UpdateItemChange<T>;
|
|
53
|
+
/** Get a delete change for an item in a database collection. */
|
|
54
|
+
getItemDelete(id: string): DeleteItemChange<T>;
|
|
55
|
+
/** Get a set change for multiple items in a database collection. */
|
|
56
|
+
getQuerySet(query: ItemQuery<T>, data: T): SetQueryChange<T>;
|
|
57
|
+
/** Get an update change for multiple items in a database collection. */
|
|
58
|
+
getQueryUpdate(query: ItemQuery<T>, updates: Updates<T>): UpdateQueryChange<T>;
|
|
59
|
+
/** Get a delete change for multiple items in a database collection. */
|
|
60
|
+
getQueryDelete(query: ItemQuery<T>): DeleteQueryChange<T>;
|
|
61
|
+
/** Add an item to a database collection. */
|
|
62
|
+
abstract addItem(data: T): string | Promise<string>;
|
|
63
|
+
/** Get an item from a database collection. */
|
|
64
|
+
abstract getItem(id: string): ItemValue<T> | Promise<ItemValue<T>>;
|
|
65
|
+
/** Set an item to a database collection. */
|
|
66
|
+
abstract setItem(id: string, data: T): void | Promise<void>;
|
|
67
|
+
/** Update an item to a database collection. */
|
|
68
|
+
abstract updateItem(id: string, updates: Updates<T>): void | Promise<void>;
|
|
69
|
+
/** Delete an item to a database collection. */
|
|
70
|
+
abstract deleteItem(id: string): void | Promise<void>;
|
|
71
|
+
/** Get multiple items from a database collection. */
|
|
72
|
+
abstract getQuery(query: ItemQuery<T>): ItemArray<T> | Promise<ItemArray<T>>;
|
|
73
|
+
/** Set multiple items in a database collection. */
|
|
74
|
+
abstract setQuery(query: ItemQuery<T>, data: T): number | Promise<number>;
|
|
75
|
+
/** Update multiple items in a database collection. */
|
|
76
|
+
abstract updateQuery(query: ItemQuery<T>, updates: Updates<T>): number | Promise<number>;
|
|
77
|
+
/** Delete multiple items in a database collection. */
|
|
78
|
+
abstract deleteQuery(query: ItemQuery<T>): number | Promise<number>;
|
|
65
79
|
toString(): string;
|
|
66
80
|
}
|
|
67
81
|
/** Reference to a collection in a synchronous provider. */
|
|
@@ -69,35 +83,43 @@ export declare class CollectionReference<T extends Data = Data> extends Abstract
|
|
|
69
83
|
readonly provider: Provider;
|
|
70
84
|
constructor(provider: Provider, collection: string);
|
|
71
85
|
get items(): ItemArray<T>;
|
|
72
|
-
get count(): number;
|
|
73
86
|
get exists(): boolean;
|
|
87
|
+
get count(): number;
|
|
74
88
|
get first(): ItemValue<T>;
|
|
75
89
|
get last(): ItemValue<T>;
|
|
76
90
|
get data(): ItemData<T>;
|
|
77
91
|
query(constraints?: ItemQuery<T>): QueryReference<T>;
|
|
78
92
|
item(id: string): ItemReference<T>;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
addItem(data: T): string;
|
|
94
|
+
getItem(id: string): ItemValue<T>;
|
|
95
|
+
setItem(id: string, data: T): void;
|
|
96
|
+
updateItem(id: string, updates: Updates<T>): void;
|
|
97
|
+
deleteItem(id: string): void;
|
|
98
|
+
getQuery(query: ItemQuery<T>): ItemArray<T>;
|
|
99
|
+
setQuery(query: ItemQuery<T>, data: T): number;
|
|
100
|
+
updateQuery(query: ItemQuery<T>, updates: Updates<T>): number;
|
|
101
|
+
deleteQuery(query: ItemQuery<T>): number;
|
|
84
102
|
}
|
|
85
103
|
/** Reference to a collection in an asynchronous provider. */
|
|
86
104
|
export declare class AsyncCollectionReference<T extends Data = Data> extends AbstractCollectionReference<T> {
|
|
87
105
|
readonly provider: AsyncProvider;
|
|
88
106
|
constructor(provider: AsyncProvider, collection: string);
|
|
89
107
|
get items(): Promise<ItemArray<T>>;
|
|
90
|
-
get count(): Promise<number>;
|
|
91
108
|
get exists(): Promise<boolean>;
|
|
109
|
+
get count(): Promise<number>;
|
|
92
110
|
get first(): Promise<ItemValue<T>>;
|
|
93
111
|
get last(): Promise<ItemValue<T>>;
|
|
94
112
|
get data(): Promise<ItemData<T>>;
|
|
95
113
|
query(query?: ItemQuery<T>): AsyncQueryReference<T>;
|
|
96
114
|
item(id: string): AsyncItemReference<T>;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
addItem(data: T): Promise<string>;
|
|
116
|
+
getItem(id: string): Promise<ItemValue<T>>;
|
|
117
|
+
setItem(id: string, data: T): Promise<void>;
|
|
118
|
+
updateItem(id: string, updates: Updates<T>): Promise<void>;
|
|
119
|
+
deleteItem(id: string): Promise<void>;
|
|
120
|
+
getQuery(query: ItemQuery<T>): Promise<ItemArray<T>>;
|
|
121
|
+
setQuery(query: ItemQuery<T>, data: T): Promise<number>;
|
|
122
|
+
updateQuery(query: ItemQuery<T>, updates: Updates<T>): Promise<number>;
|
|
123
|
+
deleteQuery(query: ItemQuery<T>): Promise<number>;
|
|
102
124
|
}
|
|
103
125
|
export {};
|
|
@@ -1,28 +1,42 @@
|
|
|
1
|
-
import { countArray, getFirstItem, getOptionalFirstItem, getOptionalLastItem
|
|
1
|
+
import { countArray, getFirstItem, getOptionalFirstItem, getOptionalLastItem } from "../util/array.js";
|
|
2
2
|
import { AsyncItemReference, ItemReference } from "./ItemReference.js";
|
|
3
3
|
import { AsyncQueryReference, QueryReference } from "./QueryReference.js";
|
|
4
|
+
const NO_QUERY = {}; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
5
|
+
const SINGLE_QUERY = { $limit: 1 }; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
4
6
|
/** Reference to a collection in a synchronous or asynchronous provider. */
|
|
5
7
|
class AbstractCollectionReference {
|
|
6
8
|
collection;
|
|
7
9
|
constructor(collection) {
|
|
8
10
|
this.collection = collection;
|
|
9
11
|
}
|
|
10
|
-
/** Get an add change for
|
|
11
|
-
|
|
12
|
+
/** Get an add change for an item in a database collection. */
|
|
13
|
+
getItemAdd(data) {
|
|
12
14
|
return { action: "add", collection: this.collection, data };
|
|
13
15
|
}
|
|
14
|
-
/** Get a set change for
|
|
15
|
-
|
|
16
|
+
/** Get a set change for an item in a database collection. */
|
|
17
|
+
getItemSet(id, data) {
|
|
16
18
|
return { action: "set", collection: this.collection, id, data };
|
|
17
19
|
}
|
|
18
|
-
/** Get an update change for
|
|
19
|
-
|
|
20
|
+
/** Get an update change for an item in a database collection. */
|
|
21
|
+
getItemUpdate(id, updates) {
|
|
20
22
|
return { action: "update", collection: this.collection, id, updates };
|
|
21
23
|
}
|
|
22
|
-
/** Get a delete change for
|
|
23
|
-
|
|
24
|
+
/** Get a delete change for an item in a database collection. */
|
|
25
|
+
getItemDelete(id) {
|
|
24
26
|
return { action: "delete", collection: this.collection, id };
|
|
25
27
|
}
|
|
28
|
+
/** Get a set change for multiple items in a database collection. */
|
|
29
|
+
getQuerySet(query, data) {
|
|
30
|
+
return { action: "set", collection: this.collection, query, data };
|
|
31
|
+
}
|
|
32
|
+
/** Get an update change for multiple items in a database collection. */
|
|
33
|
+
getQueryUpdate(query, updates) {
|
|
34
|
+
return { action: "update", collection: this.collection, query, updates };
|
|
35
|
+
}
|
|
36
|
+
/** Get a delete change for multiple items in a database collection. */
|
|
37
|
+
getQueryDelete(query) {
|
|
38
|
+
return { action: "delete", collection: this.collection, query };
|
|
39
|
+
}
|
|
26
40
|
// Implement toString()
|
|
27
41
|
toString() {
|
|
28
42
|
return this.collection;
|
|
@@ -36,22 +50,22 @@ export class CollectionReference extends AbstractCollectionReference {
|
|
|
36
50
|
this.provider = provider;
|
|
37
51
|
}
|
|
38
52
|
get items() {
|
|
39
|
-
return
|
|
53
|
+
return this.provider.getQuery(this.collection, NO_QUERY);
|
|
54
|
+
}
|
|
55
|
+
get exists() {
|
|
56
|
+
return !!this.first;
|
|
40
57
|
}
|
|
41
58
|
get count() {
|
|
42
59
|
return this.items.length;
|
|
43
60
|
}
|
|
44
|
-
get exists() {
|
|
45
|
-
return !!_getSingleItemArray(this).length;
|
|
46
|
-
}
|
|
47
61
|
get first() {
|
|
48
|
-
return getOptionalFirstItem(
|
|
62
|
+
return getOptionalFirstItem(this.provider.getQuery(this.collection, SINGLE_QUERY));
|
|
49
63
|
}
|
|
50
64
|
get last() {
|
|
51
65
|
return getOptionalLastItem(this.items);
|
|
52
66
|
}
|
|
53
67
|
get data() {
|
|
54
|
-
return getFirstItem(
|
|
68
|
+
return getFirstItem(this.provider.getQuery(this.collection, SINGLE_QUERY));
|
|
55
69
|
}
|
|
56
70
|
query(constraints) {
|
|
57
71
|
return new QueryReference(this.provider, this.collection, constraints);
|
|
@@ -59,21 +73,33 @@ export class CollectionReference extends AbstractCollectionReference {
|
|
|
59
73
|
item(id) {
|
|
60
74
|
return new ItemReference(this.provider, this.collection, id);
|
|
61
75
|
}
|
|
62
|
-
|
|
63
|
-
return this.provider.getItem(this.collection, id);
|
|
64
|
-
}
|
|
65
|
-
add(data) {
|
|
76
|
+
addItem(data) {
|
|
66
77
|
return this.provider.addItem(this.collection, data);
|
|
67
78
|
}
|
|
68
|
-
|
|
79
|
+
getItem(id) {
|
|
80
|
+
return this.provider.getItem(this.collection, id);
|
|
81
|
+
}
|
|
82
|
+
setItem(id, data) {
|
|
69
83
|
return this.provider.setItem(this.collection, id, data);
|
|
70
84
|
}
|
|
71
|
-
|
|
85
|
+
updateItem(id, updates) {
|
|
72
86
|
return this.provider.updateItem(this.collection, id, updates);
|
|
73
87
|
}
|
|
74
|
-
|
|
88
|
+
deleteItem(id) {
|
|
75
89
|
return this.provider.deleteItem(this.collection, id);
|
|
76
90
|
}
|
|
91
|
+
getQuery(query) {
|
|
92
|
+
return this.provider.getQuery(this.collection, query);
|
|
93
|
+
}
|
|
94
|
+
setQuery(query, data) {
|
|
95
|
+
return this.provider.setQuery(this.collection, query, data);
|
|
96
|
+
}
|
|
97
|
+
updateQuery(query, updates) {
|
|
98
|
+
return this.provider.updateQuery(this.collection, query, updates);
|
|
99
|
+
}
|
|
100
|
+
deleteQuery(query) {
|
|
101
|
+
return this.provider.deleteQuery(this.collection, query);
|
|
102
|
+
}
|
|
77
103
|
}
|
|
78
104
|
/** Reference to a collection in an asynchronous provider. */
|
|
79
105
|
export class AsyncCollectionReference extends AbstractCollectionReference {
|
|
@@ -83,22 +109,22 @@ export class AsyncCollectionReference extends AbstractCollectionReference {
|
|
|
83
109
|
this.provider = provider;
|
|
84
110
|
}
|
|
85
111
|
get items() {
|
|
86
|
-
return
|
|
112
|
+
return this.provider.getQuery(this.collection, NO_QUERY);
|
|
113
|
+
}
|
|
114
|
+
get exists() {
|
|
115
|
+
return this.first.then(Boolean);
|
|
87
116
|
}
|
|
88
117
|
get count() {
|
|
89
118
|
return this.items.then(countArray);
|
|
90
119
|
}
|
|
91
|
-
get exists() {
|
|
92
|
-
return _getSingleItemArray(this).then(isArrayLength);
|
|
93
|
-
}
|
|
94
120
|
get first() {
|
|
95
|
-
return
|
|
121
|
+
return this.provider.getQuery(this.collection, SINGLE_QUERY).then(getOptionalFirstItem);
|
|
96
122
|
}
|
|
97
123
|
get last() {
|
|
98
124
|
return this.items.then(getOptionalLastItem);
|
|
99
125
|
}
|
|
100
126
|
get data() {
|
|
101
|
-
return
|
|
127
|
+
return this.provider.getQuery(this.collection, SINGLE_QUERY).then(getFirstItem);
|
|
102
128
|
}
|
|
103
129
|
query(query) {
|
|
104
130
|
return new AsyncQueryReference(this.provider, this.collection, query);
|
|
@@ -106,25 +132,31 @@ export class AsyncCollectionReference extends AbstractCollectionReference {
|
|
|
106
132
|
item(id) {
|
|
107
133
|
return new AsyncItemReference(this.provider, this.collection, id);
|
|
108
134
|
}
|
|
109
|
-
|
|
110
|
-
return this.provider.getItem(this.collection, id);
|
|
111
|
-
}
|
|
112
|
-
add(data) {
|
|
135
|
+
addItem(data) {
|
|
113
136
|
return this.provider.addItem(this.collection, data);
|
|
114
137
|
}
|
|
115
|
-
|
|
138
|
+
getItem(id) {
|
|
139
|
+
return this.provider.getItem(this.collection, id);
|
|
140
|
+
}
|
|
141
|
+
setItem(id, data) {
|
|
116
142
|
return this.provider.setItem(this.collection, id, data);
|
|
117
143
|
}
|
|
118
|
-
|
|
144
|
+
updateItem(id, updates) {
|
|
119
145
|
return this.provider.updateItem(this.collection, id, updates);
|
|
120
146
|
}
|
|
121
|
-
|
|
147
|
+
deleteItem(id) {
|
|
122
148
|
return this.provider.deleteItem(this.collection, id);
|
|
123
149
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
getQuery(query) {
|
|
151
|
+
return this.provider.getQuery(this.collection, query);
|
|
152
|
+
}
|
|
153
|
+
setQuery(query, data) {
|
|
154
|
+
return this.provider.setQuery(this.collection, query, data);
|
|
155
|
+
}
|
|
156
|
+
updateQuery(query, updates) {
|
|
157
|
+
return this.provider.updateQuery(this.collection, query, updates);
|
|
158
|
+
}
|
|
159
|
+
deleteQuery(query) {
|
|
160
|
+
return this.provider.deleteQuery(this.collection, query);
|
|
161
|
+
}
|
|
130
162
|
}
|
package/db/Database.d.ts
CHANGED
|
@@ -1,41 +1,58 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
1
|
+
import type { AddItemChange, DeleteItemChange, DeleteQueryChange, SetItemChange, SetQueryChange, UpdateItemChange, UpdateQueryChange, WriteChange } from "../change/Change.js";
|
|
2
|
+
import type { AbstractProvider, AsyncProvider, Provider } from "../provider/Provider.js";
|
|
3
|
+
import type { ImmutableArray } from "../util/array.js";
|
|
4
|
+
import type { DataKey, DataValue, Datas } from "../util/data.js";
|
|
5
|
+
import type { ItemArray, ItemQuery, ItemValue } from "../util/item.js";
|
|
5
6
|
import type { Optional } from "../util/optional.js";
|
|
6
7
|
import type { Updates } from "../util/update.js";
|
|
7
8
|
import { AsyncCollectionReference, CollectionReference } from "./CollectionReference.js";
|
|
8
9
|
import { AsyncItemReference, ItemReference } from "./ItemReference.js";
|
|
9
10
|
import { AsyncQueryReference, QueryReference } from "./QueryReference.js";
|
|
10
11
|
/** Database with a synchronous or asynchronous provider. */
|
|
11
|
-
declare abstract class AbstractDatabase<T extends Datas> {
|
|
12
|
-
abstract readonly provider:
|
|
12
|
+
export declare abstract class AbstractDatabase<T extends Datas> {
|
|
13
|
+
abstract readonly provider: AbstractProvider;
|
|
13
14
|
/** Create a query on a collection in this database. */
|
|
14
15
|
abstract collection<K extends DataKey<T>>(collection: K): CollectionReference<T[K]> | AsyncCollectionReference<T[K]>;
|
|
15
16
|
/** Create a query on a collection in this database. */
|
|
16
17
|
abstract query<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): QueryReference<T[K]> | AsyncQueryReference<T[K]>;
|
|
17
18
|
/** Reference an item in a collection in this database. */
|
|
18
19
|
abstract item<K extends DataKey<T>>(collection: K, id: string): ItemReference<T[K]> | AsyncItemReference<T[K]>;
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
/** Get a
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
/** Get
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
/** Get an
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
|
|
20
|
+
/** Get an add change for an item in a database collection. */
|
|
21
|
+
getItemAdd<K extends DataKey<T>>(collection: K, data: T[K]): AddItemChange<T[K]>;
|
|
22
|
+
/** Get a set change for an item in a database collection. */
|
|
23
|
+
getItemSet<K extends DataKey<T>>(collection: K, id: string, data: T[K]): SetItemChange<T[K]>;
|
|
24
|
+
/** Get an update change for an item in a database collection. */
|
|
25
|
+
getItemUpdate<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): UpdateItemChange<T[K]>;
|
|
26
|
+
/** Get a delete change for an item in a database collection. */
|
|
27
|
+
getItemDelete<K extends DataKey<T>>(collection: K, id: string): DeleteItemChange<T[K]>;
|
|
28
|
+
/** Get a set change for multiple items in a database collection. */
|
|
29
|
+
getQuerySet<K extends DataKey<T>>(collection: K, query: ItemQuery<T>, data: T[K]): SetQueryChange<T[K]>;
|
|
30
|
+
/** Get an update change for multiple items in a database collection. */
|
|
31
|
+
getQueryUpdate<K extends DataKey<T>>(collection: K, query: ItemQuery<T>, updates: Updates<T[K]>): UpdateQueryChange<T[K]>;
|
|
32
|
+
/** Get a delete change for multiple items in a database collection. */
|
|
33
|
+
getQueryDelete<K extends DataKey<T>>(collection: K, query: ItemQuery<T>): DeleteQueryChange<T>;
|
|
34
|
+
/** Add an item to a database collection. */
|
|
35
|
+
abstract addItem<K extends DataKey<T>>(collection: K, data: T[K]): string | Promise<string>;
|
|
36
|
+
/** Get an item from a database collection. */
|
|
37
|
+
abstract getItem<K extends DataKey<T>>(collection: K, id: string): ItemValue<T[K]> | Promise<ItemValue<T[K]>>;
|
|
38
|
+
/** Set an item to a database collection. */
|
|
39
|
+
abstract setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): void | Promise<void>;
|
|
40
|
+
/** Update an item to a database collection. */
|
|
41
|
+
abstract updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): void | Promise<void>;
|
|
42
|
+
/** Delete an item to a database collection. */
|
|
43
|
+
abstract deleteItem<K extends DataKey<T>>(collection: K, id: string): void | Promise<void>;
|
|
44
|
+
/** Get multiple items from a database collection. */
|
|
45
|
+
abstract getQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): ItemArray<T[K]> | Promise<ItemArray<T[K]>>;
|
|
46
|
+
/** Set multiple items in a database collection. */
|
|
47
|
+
abstract setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): number | Promise<number>;
|
|
48
|
+
/** Update multiple items in a database collection. */
|
|
49
|
+
abstract updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): number | Promise<number>;
|
|
50
|
+
/** Delete multiple items in a database collection. */
|
|
51
|
+
abstract deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): number | Promise<number>;
|
|
52
|
+
/** Write a single change to this database. */
|
|
53
|
+
abstract writeChange<K extends DataKey<T>>(change: WriteChange<T[K]>): WriteChange<T[K]> | PromiseLike<WriteChange<T[K]>>;
|
|
54
|
+
/** Write a set of changes to this database. */
|
|
55
|
+
abstract writeChanges(...changes: Optional<WriteChange<DataValue<T>>>[]): ImmutableArray<WriteChange<DataValue<T>>> | PromiseLike<ImmutableArray<WriteChange<DataValue<T>>>>;
|
|
39
56
|
}
|
|
40
57
|
/** Database with a synchronous provider. */
|
|
41
58
|
export declare class Database<T extends Datas = Datas> extends AbstractDatabase<T> {
|
|
@@ -44,12 +61,17 @@ export declare class Database<T extends Datas = Datas> extends AbstractDatabase<
|
|
|
44
61
|
collection<K extends DataKey<T>>(collection: K): CollectionReference<T[K]>;
|
|
45
62
|
query<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): QueryReference<T[K]>;
|
|
46
63
|
item<K extends DataKey<T>>(collection: K, id: string): ItemReference<T[K]>;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
addItem<K extends DataKey<T>>(collection: K, data: T[K]): string;
|
|
65
|
+
getItem<K extends DataKey<T>>(collection: K, id: string): ItemValue<T[K]>;
|
|
66
|
+
setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): void;
|
|
67
|
+
updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): void;
|
|
68
|
+
deleteItem<K extends DataKey<T>>(collection: K, id: string): void;
|
|
69
|
+
getQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): ItemArray<T[K]>;
|
|
70
|
+
setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): number;
|
|
71
|
+
updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): number;
|
|
72
|
+
deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): number;
|
|
73
|
+
writeChange<K extends DataKey<T>>(change: WriteChange<T[K]>): WriteChange<T[K]>;
|
|
74
|
+
writeChanges(...changes: Optional<WriteChange<DataValue<T>>>[]): ImmutableArray<WriteChange<DataValue<T>>>;
|
|
53
75
|
}
|
|
54
76
|
/** Database with a synchronous provider. */
|
|
55
77
|
export declare class AsyncDatabase<T extends Datas = Datas> extends AbstractDatabase<T> {
|
|
@@ -58,11 +80,15 @@ export declare class AsyncDatabase<T extends Datas = Datas> extends AbstractData
|
|
|
58
80
|
collection<K extends DataKey<T>>(collection: K): AsyncCollectionReference<T[K]>;
|
|
59
81
|
query<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncQueryReference<T[K]>;
|
|
60
82
|
item<K extends DataKey<T>>(collection: K, id: string): AsyncItemReference<T[K]>;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
83
|
+
addItem<K extends DataKey<T>>(collection: K, data: T[K]): Promise<string>;
|
|
84
|
+
getItem<K extends DataKey<T>>(collection: K, id: string): Promise<ItemValue<T[K]>>;
|
|
85
|
+
setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): Promise<void>;
|
|
86
|
+
updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): Promise<void>;
|
|
87
|
+
deleteItem<K extends DataKey<T>>(collection: K, id: string): Promise<void>;
|
|
88
|
+
getQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): Promise<ItemArray<T[K]>>;
|
|
89
|
+
setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): Promise<number>;
|
|
90
|
+
updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): Promise<number>;
|
|
91
|
+
deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): Promise<number>;
|
|
92
|
+
writeChange<K extends DataKey<T>>(change: WriteChange<T[K]>): PromiseLike<WriteChange<T[K]>>;
|
|
93
|
+
writeChanges(...changes: Optional<WriteChange<DataValue<T>>>[]): PromiseLike<ImmutableArray<WriteChange<DataValue<T>>>>;
|
|
67
94
|
}
|
|
68
|
-
export {};
|