@tanstack/db 0.0.4 → 0.0.6
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/dist/cjs/collection.cjs +182 -113
- package/dist/cjs/collection.cjs.map +1 -1
- package/dist/cjs/collection.d.cts +43 -15
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/proxy.cjs +87 -248
- package/dist/cjs/proxy.cjs.map +1 -1
- package/dist/cjs/proxy.d.cts +5 -5
- package/dist/cjs/query/compiled-query.cjs +23 -14
- package/dist/cjs/query/compiled-query.cjs.map +1 -1
- package/dist/cjs/query/compiled-query.d.cts +3 -1
- package/dist/cjs/query/evaluators.cjs +35 -20
- package/dist/cjs/query/evaluators.cjs.map +1 -1
- package/dist/cjs/query/evaluators.d.cts +8 -3
- package/dist/cjs/query/extractors.cjs +20 -20
- package/dist/cjs/query/extractors.cjs.map +1 -1
- package/dist/cjs/query/extractors.d.cts +3 -3
- package/dist/cjs/query/group-by.cjs +12 -15
- package/dist/cjs/query/group-by.cjs.map +1 -1
- package/dist/cjs/query/group-by.d.cts +7 -7
- package/dist/cjs/query/joins.cjs +41 -55
- package/dist/cjs/query/joins.cjs.map +1 -1
- package/dist/cjs/query/joins.d.cts +3 -3
- package/dist/cjs/query/order-by.cjs +37 -84
- package/dist/cjs/query/order-by.cjs.map +1 -1
- package/dist/cjs/query/order-by.d.cts +2 -2
- package/dist/cjs/query/pipeline-compiler.cjs +13 -18
- package/dist/cjs/query/pipeline-compiler.cjs.map +1 -1
- package/dist/cjs/query/pipeline-compiler.d.cts +2 -1
- package/dist/cjs/query/query-builder.cjs +22 -29
- package/dist/cjs/query/query-builder.cjs.map +1 -1
- package/dist/cjs/query/query-builder.d.cts +16 -10
- package/dist/cjs/query/schema.d.cts +12 -11
- package/dist/cjs/query/select.cjs +47 -24
- package/dist/cjs/query/select.cjs.map +1 -1
- package/dist/cjs/query/select.d.cts +2 -2
- package/dist/cjs/query/types.d.cts +1 -0
- package/dist/cjs/transactions.cjs +20 -9
- package/dist/cjs/transactions.cjs.map +1 -1
- package/dist/cjs/types.d.cts +66 -7
- package/dist/esm/collection.d.ts +43 -15
- package/dist/esm/collection.js +183 -114
- package/dist/esm/collection.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/proxy.d.ts +5 -5
- package/dist/esm/proxy.js +87 -248
- package/dist/esm/proxy.js.map +1 -1
- package/dist/esm/query/compiled-query.d.ts +3 -1
- package/dist/esm/query/compiled-query.js +23 -14
- package/dist/esm/query/compiled-query.js.map +1 -1
- package/dist/esm/query/evaluators.d.ts +8 -3
- package/dist/esm/query/evaluators.js +36 -21
- package/dist/esm/query/evaluators.js.map +1 -1
- package/dist/esm/query/extractors.d.ts +3 -3
- package/dist/esm/query/extractors.js +20 -20
- package/dist/esm/query/extractors.js.map +1 -1
- package/dist/esm/query/group-by.d.ts +7 -7
- package/dist/esm/query/group-by.js +14 -17
- package/dist/esm/query/group-by.js.map +1 -1
- package/dist/esm/query/joins.d.ts +3 -3
- package/dist/esm/query/joins.js +42 -56
- package/dist/esm/query/joins.js.map +1 -1
- package/dist/esm/query/order-by.d.ts +2 -2
- package/dist/esm/query/order-by.js +39 -86
- package/dist/esm/query/order-by.js.map +1 -1
- package/dist/esm/query/pipeline-compiler.d.ts +2 -1
- package/dist/esm/query/pipeline-compiler.js +14 -19
- package/dist/esm/query/pipeline-compiler.js.map +1 -1
- package/dist/esm/query/query-builder.d.ts +16 -10
- package/dist/esm/query/query-builder.js +22 -29
- package/dist/esm/query/query-builder.js.map +1 -1
- package/dist/esm/query/schema.d.ts +12 -11
- package/dist/esm/query/select.d.ts +2 -2
- package/dist/esm/query/select.js +48 -25
- package/dist/esm/query/select.js.map +1 -1
- package/dist/esm/query/types.d.ts +1 -0
- package/dist/esm/transactions.js +20 -9
- package/dist/esm/transactions.js.map +1 -1
- package/dist/esm/types.d.ts +66 -7
- package/package.json +2 -2
- package/src/collection.ts +286 -146
- package/src/proxy.ts +141 -358
- package/src/query/compiled-query.ts +30 -15
- package/src/query/evaluators.ts +49 -21
- package/src/query/extractors.ts +24 -21
- package/src/query/group-by.ts +24 -22
- package/src/query/joins.ts +88 -75
- package/src/query/order-by.ts +56 -106
- package/src/query/pipeline-compiler.ts +34 -37
- package/src/query/query-builder.ts +49 -46
- package/src/query/schema.ts +18 -15
- package/src/query/select.ts +68 -33
- package/src/query/types.ts +1 -0
- package/src/transactions.ts +30 -14
- package/src/types.ts +76 -7
- package/dist/cjs/query/key-by.cjs +0 -43
- package/dist/cjs/query/key-by.cjs.map +0 -1
- package/dist/cjs/query/key-by.d.cts +0 -3
- package/dist/esm/query/key-by.d.ts +0 -3
- package/dist/esm/query/key-by.js +0 -43
- package/dist/esm/query/key-by.js.map +0 -1
- package/src/query/key-by.ts +0 -61
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IStreamBuilder } from '@electric-sql/d2ts';
|
|
1
2
|
import { Collection } from './collection.js';
|
|
2
3
|
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
3
4
|
import { Transaction } from './transactions.js';
|
|
@@ -11,7 +12,7 @@ export interface PendingMutation<T extends object = Record<string, unknown>> {
|
|
|
11
12
|
original: Record<string, unknown>;
|
|
12
13
|
modified: Record<string, unknown>;
|
|
13
14
|
changes: Record<string, unknown>;
|
|
14
|
-
key:
|
|
15
|
+
key: any;
|
|
15
16
|
type: OperationType;
|
|
16
17
|
metadata: unknown;
|
|
17
18
|
syncMetadata: Record<string, unknown>;
|
|
@@ -26,6 +27,13 @@ export type MutationFnParams = {
|
|
|
26
27
|
transaction: Transaction;
|
|
27
28
|
};
|
|
28
29
|
export type MutationFn = (params: MutationFnParams) => Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* Utility type for a Transaction with at least one mutation
|
|
32
|
+
* This is used internally by the Transaction.commit method
|
|
33
|
+
*/
|
|
34
|
+
export type TransactionWithMutations<T extends object = Record<string, unknown>> = Transaction & {
|
|
35
|
+
mutations: [PendingMutation<T>, ...Array<PendingMutation<T>>];
|
|
36
|
+
};
|
|
29
37
|
export interface TransactionConfig {
|
|
30
38
|
/** Unique identifier for the transaction */
|
|
31
39
|
id?: string;
|
|
@@ -36,7 +44,7 @@ export interface TransactionConfig {
|
|
|
36
44
|
}
|
|
37
45
|
export type { Transaction };
|
|
38
46
|
type Value<TExtensions = never> = string | number | boolean | bigint | null | TExtensions | Array<Value<TExtensions>> | {
|
|
39
|
-
[key: string]: Value<TExtensions>;
|
|
47
|
+
[key: string | number | symbol]: Value<TExtensions>;
|
|
40
48
|
};
|
|
41
49
|
export type Row<TExtensions = never> = Record<string, Value<TExtensions>>;
|
|
42
50
|
export type OperationType = `insert` | `update` | `delete`;
|
|
@@ -44,17 +52,17 @@ export interface SyncConfig<T extends object = Record<string, unknown>> {
|
|
|
44
52
|
sync: (params: {
|
|
45
53
|
collection: Collection<T>;
|
|
46
54
|
begin: () => void;
|
|
47
|
-
write: (message: ChangeMessage<T
|
|
55
|
+
write: (message: Omit<ChangeMessage<T>, `key`>) => void;
|
|
48
56
|
commit: () => void;
|
|
49
57
|
}) => void;
|
|
50
58
|
/**
|
|
51
59
|
* Get the sync metadata for insert operations
|
|
52
|
-
* @returns Record containing
|
|
60
|
+
* @returns Record containing relation information
|
|
53
61
|
*/
|
|
54
62
|
getSyncMetadata?: () => Record<string, unknown>;
|
|
55
63
|
}
|
|
56
64
|
export interface ChangeMessage<T extends object = Record<string, unknown>> {
|
|
57
|
-
key:
|
|
65
|
+
key: any;
|
|
58
66
|
value: T;
|
|
59
67
|
previousValue?: T;
|
|
60
68
|
type: OperationType;
|
|
@@ -83,12 +91,63 @@ export interface OperationConfig {
|
|
|
83
91
|
metadata?: Record<string, unknown>;
|
|
84
92
|
}
|
|
85
93
|
export interface InsertConfig {
|
|
86
|
-
key?: string | Array<string | undefined>;
|
|
87
94
|
metadata?: Record<string, unknown>;
|
|
88
95
|
}
|
|
89
96
|
export interface CollectionConfig<T extends object = Record<string, unknown>> {
|
|
90
|
-
id
|
|
97
|
+
id?: string;
|
|
91
98
|
sync: SyncConfig<T>;
|
|
92
99
|
schema?: StandardSchema<T>;
|
|
100
|
+
/**
|
|
101
|
+
* Function to extract the ID from an object
|
|
102
|
+
* This is required for update/delete operations which now only accept IDs
|
|
103
|
+
* @param item The item to extract the ID from
|
|
104
|
+
* @returns The ID string for the item
|
|
105
|
+
* @example
|
|
106
|
+
* // For a collection with a 'uuid' field as the primary key
|
|
107
|
+
* getId: (item) => item.uuid
|
|
108
|
+
*/
|
|
109
|
+
getId: (item: T) => any;
|
|
110
|
+
/**
|
|
111
|
+
* Optional asynchronous handler function called before an insert operation
|
|
112
|
+
* @param params Object containing transaction and mutation information
|
|
113
|
+
* @returns Promise resolving to any value
|
|
114
|
+
*/
|
|
115
|
+
onInsert?: MutationFn;
|
|
116
|
+
/**
|
|
117
|
+
* Optional asynchronous handler function called before an update operation
|
|
118
|
+
* @param params Object containing transaction and mutation information
|
|
119
|
+
* @returns Promise resolving to any value
|
|
120
|
+
*/
|
|
121
|
+
onUpdate?: MutationFn;
|
|
122
|
+
/**
|
|
123
|
+
* Optional asynchronous handler function called before a delete operation
|
|
124
|
+
* @param params Object containing transaction and mutation information
|
|
125
|
+
* @returns Promise resolving to any value
|
|
126
|
+
*/
|
|
127
|
+
onDelete?: MutationFn;
|
|
93
128
|
}
|
|
94
129
|
export type ChangesPayload<T extends object = Record<string, unknown>> = Array<ChangeMessage<T>>;
|
|
130
|
+
/**
|
|
131
|
+
* An input row from a collection
|
|
132
|
+
*/
|
|
133
|
+
export type InputRow = [unknown, Record<string, unknown>];
|
|
134
|
+
/**
|
|
135
|
+
* A keyed stream is a stream of rows
|
|
136
|
+
* This is used as the inputs from a collection to a query
|
|
137
|
+
*/
|
|
138
|
+
export type KeyedStream = IStreamBuilder<InputRow>;
|
|
139
|
+
/**
|
|
140
|
+
* A namespaced row is a row withing a pipeline that had each table wrapped in its alias
|
|
141
|
+
*/
|
|
142
|
+
export type NamespacedRow = Record<string, Record<string, unknown>>;
|
|
143
|
+
/**
|
|
144
|
+
* A keyed namespaced row is a row with a key and a namespaced row
|
|
145
|
+
* This is the main representation of a row in a query pipeline
|
|
146
|
+
*/
|
|
147
|
+
export type KeyedNamespacedRow = [unknown, NamespacedRow];
|
|
148
|
+
/**
|
|
149
|
+
* A namespaced and keyed stream is a stream of rows
|
|
150
|
+
* This is used throughout a query pipeline and as the output from a query without
|
|
151
|
+
* a `select` clause.
|
|
152
|
+
*/
|
|
153
|
+
export type NamespacedAndKeyedStream = IStreamBuilder<KeyedNamespacedRow>;
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/db",
|
|
3
3
|
"description": "A reactive client store for building super fast apps on sync",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.6",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@electric-sql/d2ts": "^0.1.
|
|
6
|
+
"@electric-sql/d2ts": "^0.1.6",
|
|
7
7
|
"@standard-schema/spec": "^1.0.0",
|
|
8
8
|
"@tanstack/store": "^0.7.0"
|
|
9
9
|
},
|