supastash 0.1.61 → 0.2.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/README.md +17 -5
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +5 -1
- package/dist/db/adapters/expo_sqlite.d.ts.map +1 -1
- package/dist/db/adapters/expo_sqlite.js +11 -0
- package/dist/db/adapters/rn_nitro.d.ts.map +1 -1
- package/dist/db/adapters/rn_nitro.js +20 -0
- package/dist/db/adapters/rn_sqlite_storage.d.ts.map +1 -1
- package/dist/db/adapters/rn_sqlite_storage.js +27 -0
- package/dist/hooks/supastashData/fetchCalls.d.ts.map +1 -1
- package/dist/hooks/supastashData/index.d.ts.map +1 -1
- package/dist/hooks/supastashData/index.js +12 -4
- package/dist/hooks/supastashData/realtimeSubscription.js +4 -4
- package/dist/hooks/supastashData/registerSub.d.ts +3 -3
- package/dist/hooks/supastashData/registerSub.d.ts.map +1 -1
- package/dist/hooks/supastashData/registerSub.js +3 -3
- package/dist/hooks/supastashFilters/index.d.ts +2 -2
- package/dist/hooks/supastashFilters/index.d.ts.map +1 -1
- package/dist/hooks/supastashFilters/index.js +6 -4
- package/dist/hooks/supastashLiteQuery/index.d.ts.map +1 -1
- package/dist/hooks/supastashLiteQuery/index.js +12 -2
- package/dist/hooks/syncEngine/pushLocal/index.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/store/tableFilters.d.ts +3 -3
- package/dist/store/tableFilters.d.ts.map +1 -1
- package/dist/store/tx.d.ts +3 -0
- package/dist/store/tx.d.ts.map +1 -0
- package/dist/store/tx.js +1 -0
- package/dist/types/expoSqlite.types.d.ts +3 -13
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/liteQuery.types.d.ts +2 -2
- package/dist/types/query.types.d.ts +24 -1
- package/dist/types/realtimeData.types.d.ts +8 -4
- package/dist/types/supastashConfig.types.d.ts +83 -6
- package/dist/types/syncEngine.types.d.ts +49 -7
- package/dist/utils/errorHandler.d.ts +6 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +8 -0
- package/dist/utils/fetchData/buildFilter.d.ts +8 -4
- package/dist/utils/fetchData/buildFilter.d.ts.map +1 -1
- package/dist/utils/fetchData/createTable.d.ts.map +1 -1
- package/dist/utils/fetchData/createTable.js +3 -46
- package/dist/utils/fetchData/deleteData.d.ts.map +1 -1
- package/dist/utils/fetchData/deleteData.js +6 -3
- package/dist/utils/fetchData/fetchLocalData.d.ts +2 -2
- package/dist/utils/fetchData/fetchLocalData.d.ts.map +1 -1
- package/dist/utils/fetchData/initialFetch.d.ts +2 -2
- package/dist/utils/fetchData/initialFetch.d.ts.map +1 -1
- package/dist/utils/fetchData/liteHelpers.d.ts +2 -2
- package/dist/utils/fetchData/liteHelpers.d.ts.map +1 -1
- package/dist/utils/fetchData/liteHelpers.js +14 -119
- package/dist/utils/fetchData/realTimeCall.js +2 -2
- package/dist/utils/fetchData/receiveData.js +1 -1
- package/dist/utils/query/builder/crud.d.ts +5 -5
- package/dist/utils/query/builder/crud.d.ts.map +1 -1
- package/dist/utils/query/builder/filters.d.ts +36 -12
- package/dist/utils/query/builder/filters.d.ts.map +1 -1
- package/dist/utils/query/builder/filters.js +32 -0
- package/dist/utils/query/builder/index.d.ts +29 -1
- package/dist/utils/query/builder/index.d.ts.map +1 -1
- package/dist/utils/query/builder/index.js +77 -1
- package/dist/utils/query/builder/mainQuery.d.ts.map +1 -1
- package/dist/utils/query/builder/mainQuery.js +17 -2
- package/dist/utils/query/helpers/localDb/getLocalMethod.d.ts +2 -2
- package/dist/utils/query/helpers/localDb/getLocalMethod.d.ts.map +1 -1
- package/dist/utils/query/helpers/localDb/getLocalMethod.js +7 -6
- package/dist/utils/query/helpers/localDb/insertMany.d.ts +3 -0
- package/dist/utils/query/helpers/localDb/insertMany.d.ts.map +1 -1
- package/dist/utils/query/helpers/localDb/insertMany.js +10 -3
- package/dist/utils/query/helpers/localDb/localQueryBuilder.d.ts +6 -6
- package/dist/utils/query/helpers/localDb/localQueryBuilder.d.ts.map +1 -1
- package/dist/utils/query/helpers/localDb/localQueryBuilder.js +17 -10
- package/dist/utils/query/helpers/localDb/upsertMany.d.ts +3 -0
- package/dist/utils/query/helpers/localDb/upsertMany.d.ts.map +1 -1
- package/dist/utils/query/helpers/localDb/upsertMany.js +9 -2
- package/dist/utils/query/helpers/mainQueryHelpers.d.ts.map +1 -1
- package/dist/utils/query/helpers/mainQueryHelpers.js +38 -8
- package/dist/utils/query/helpers/queueRemote.d.ts.map +1 -1
- package/dist/utils/query/helpers/queueRemote.js +33 -24
- package/dist/utils/query/localDbQuery/delete.d.ts +9 -3
- package/dist/utils/query/localDbQuery/delete.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/delete.js +16 -5
- package/dist/utils/query/localDbQuery/index.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/index.js +3 -3
- package/dist/utils/query/localDbQuery/insert.d.ts +2 -2
- package/dist/utils/query/localDbQuery/insert.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/insert.js +8 -5
- package/dist/utils/query/localDbQuery/select.d.ts +2 -2
- package/dist/utils/query/localDbQuery/select.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/select.js +5 -2
- package/dist/utils/query/localDbQuery/update.d.ts +2 -2
- package/dist/utils/query/localDbQuery/update.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/update.js +5 -2
- package/dist/utils/query/localDbQuery/upsert.d.ts +2 -2
- package/dist/utils/query/localDbQuery/upsert.d.ts.map +1 -1
- package/dist/utils/query/localDbQuery/upsert.js +8 -3
- package/dist/utils/query/remoteQuery/supabaseQuery.d.ts.map +1 -1
- package/dist/utils/query/remoteQuery/supabaseQuery.js +4 -1
- package/dist/utils/reusedHelpers.d.ts +8 -0
- package/dist/utils/reusedHelpers.d.ts.map +1 -0
- package/dist/utils/reusedHelpers.js +162 -0
- package/dist/utils/schema/createSyncStatus.d.ts +3 -1
- package/dist/utils/schema/createSyncStatus.d.ts.map +1 -1
- package/dist/utils/schema/createSyncStatus.js +30 -3
- package/dist/utils/sync/pullFromRemote/fetchOlder.d.ts +44 -0
- package/dist/utils/sync/pullFromRemote/fetchOlder.d.ts.map +1 -0
- package/dist/utils/sync/pullFromRemote/fetchOlder.js +55 -0
- package/dist/utils/sync/pullFromRemote/fetchOlderHelpers.d.ts +33 -0
- package/dist/utils/sync/pullFromRemote/fetchOlderHelpers.d.ts.map +1 -0
- package/dist/utils/sync/pullFromRemote/fetchOlderHelpers.js +110 -0
- package/dist/utils/sync/pullFromRemote/helpers.d.ts +10 -7
- package/dist/utils/sync/pullFromRemote/helpers.d.ts.map +1 -1
- package/dist/utils/sync/pullFromRemote/helpers.js +20 -14
- package/dist/utils/sync/pullFromRemote/pullData.d.ts +2 -3
- package/dist/utils/sync/pullFromRemote/pullData.d.ts.map +1 -1
- package/dist/utils/sync/pullFromRemote/pullData.js +4 -9
- package/dist/utils/sync/pullFromRemote/pullDeletedData.d.ts +8 -5
- package/dist/utils/sync/pullFromRemote/updateFilter.d.ts +1 -1
- package/dist/utils/sync/pullFromRemote/updateFilter.d.ts.map +1 -1
- package/dist/utils/sync/pullFromRemote/updateFilter.js +5 -3
- package/dist/utils/sync/pullFromRemote/updateLocalDb.d.ts +4 -3
- package/dist/utils/sync/pullFromRemote/updateLocalDb.d.ts.map +1 -1
- package/dist/utils/sync/pullFromRemote/updateLocalDb.js +51 -46
- package/dist/utils/sync/pullFromRemote/validateFilters.d.ts +2 -4
- package/dist/utils/sync/pullFromRemote/validateFilters.d.ts.map +1 -1
- package/dist/utils/sync/pullFromRemote/validateFilters.js +9 -63
- package/dist/utils/sync/pushLocal/deleteChunks.d.ts.map +1 -1
- package/dist/utils/sync/pushLocal/deleteChunks.js +7 -5
- package/dist/utils/sync/pushLocal/getAllUnsyncedData.d.ts.map +1 -1
- package/dist/utils/sync/pushLocal/getAllUnsyncedData.js +12 -44
- package/dist/utils/sync/pushLocal/uploadHelpers.js +1 -1
- package/dist/utils/sync/status/filterKey.d.ts +3 -3
- package/dist/utils/sync/status/filterKey.d.ts.map +1 -1
- package/dist/utils/sync/status/filterKey.js +5 -2
- package/dist/utils/sync/status/remoteSchema.d.ts +4 -0
- package/dist/utils/sync/status/remoteSchema.d.ts.map +1 -0
- package/dist/utils/sync/status/remoteSchema.js +140 -0
- package/dist/utils/sync/status/repo.d.ts +5 -5
- package/dist/utils/sync/status/repo.d.ts.map +1 -1
- package/dist/utils/sync/status/repo.js +40 -22
- package/dist/utils/sync/status/services.d.ts +5 -6
- package/dist/utils/sync/status/services.d.ts.map +1 -1
- package/dist/utils/sync/status/services.js +1 -6
- package/dist/utils/sync/status/syncStatus.d.ts +5 -7
- package/dist/utils/sync/status/syncStatus.d.ts.map +1 -1
- package/dist/utils/sync/status/syncStatus.js +11 -3
- package/package.json +2 -2
- package/dist/types/supastashFilters.types.d.ts +0 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CrudMethods, ExecuteOptions, SupastashQuery, SupastashQueryResult, SyncMode } from "../../../types/query.types";
|
|
2
|
+
type FilterBuilderFor<T extends CrudMethods, U extends boolean, R, Z> = T extends "select" ? SupastashFilterBuilder<T, U, R, Z> : Omit<SupastashFilterBuilder<T, U, R, Z>, "cacheFirst">;
|
|
2
3
|
/**
|
|
3
4
|
* Builder for the filter methods
|
|
4
5
|
* @param T - The method to call
|
|
@@ -30,7 +31,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
30
31
|
* @param value - The value to filter by.
|
|
31
32
|
* @returns more filter options.
|
|
32
33
|
*/
|
|
33
|
-
eq(column: string, value: any):
|
|
34
|
+
eq(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
34
35
|
/**
|
|
35
36
|
* Sets the NEQ operator for the query.
|
|
36
37
|
*
|
|
@@ -38,7 +39,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
38
39
|
* @param value - The value to filter by.
|
|
39
40
|
* @returns more filter options.
|
|
40
41
|
*/
|
|
41
|
-
neq(column: string, value: any):
|
|
42
|
+
neq(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
42
43
|
/**
|
|
43
44
|
* Sets the GT operator for the query.
|
|
44
45
|
*
|
|
@@ -46,7 +47,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
46
47
|
* @param value - The value to filter by.
|
|
47
48
|
* @returns more filter options.
|
|
48
49
|
*/
|
|
49
|
-
gt(column: string, value: any):
|
|
50
|
+
gt(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
50
51
|
/**
|
|
51
52
|
* Sets the LT operator for the query.
|
|
52
53
|
*
|
|
@@ -54,7 +55,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
54
55
|
* @param value - The value to filter by.
|
|
55
56
|
* @returns more filter options.
|
|
56
57
|
*/
|
|
57
|
-
lt(column: string, value: any):
|
|
58
|
+
lt(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
58
59
|
/**
|
|
59
60
|
* Sets the GTE operator for the query.
|
|
60
61
|
*
|
|
@@ -62,7 +63,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
62
63
|
* @param value - The value to filter by.
|
|
63
64
|
* @returns more filter options.
|
|
64
65
|
*/
|
|
65
|
-
gte(column: string, value: any):
|
|
66
|
+
gte(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
66
67
|
/**
|
|
67
68
|
* Sets the LTE operator for the query.
|
|
68
69
|
*
|
|
@@ -70,7 +71,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
70
71
|
* @param value - The value to filter by.
|
|
71
72
|
* @returns more filter options.
|
|
72
73
|
*/
|
|
73
|
-
lte(column: string, value: any):
|
|
74
|
+
lte(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
74
75
|
/**
|
|
75
76
|
* Sets the LIKE operator for the query.
|
|
76
77
|
*
|
|
@@ -78,7 +79,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
78
79
|
* @param value - The value to filter by.
|
|
79
80
|
* @returns more filter options.
|
|
80
81
|
*/
|
|
81
|
-
like(column: string, value: any):
|
|
82
|
+
like(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
82
83
|
/**
|
|
83
84
|
* Sets the IS operator for the query.
|
|
84
85
|
*
|
|
@@ -86,7 +87,7 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
86
87
|
* @param value - The value to filter by.
|
|
87
88
|
* @returns more filter options.
|
|
88
89
|
*/
|
|
89
|
-
is(column: string, value: any):
|
|
90
|
+
is(column: string, value: any): FilterBuilderFor<T, U, R, Z>;
|
|
90
91
|
/**
|
|
91
92
|
* Sets the IN operator for the query.
|
|
92
93
|
*
|
|
@@ -94,14 +95,14 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
94
95
|
* @param value - The value to filter by.
|
|
95
96
|
* @returns more filter options.
|
|
96
97
|
*/
|
|
97
|
-
in(column: string, value: any[]):
|
|
98
|
+
in(column: string, value: any[]): FilterBuilderFor<T, U, R, Z>;
|
|
98
99
|
/**
|
|
99
100
|
* Sets the limit of the query.
|
|
100
101
|
*
|
|
101
102
|
* @param n - The number of results to return.
|
|
102
103
|
* @returns more filter options.
|
|
103
104
|
*/
|
|
104
|
-
limit(n: number):
|
|
105
|
+
limit(n: number): FilterBuilderFor<T, U, R, Z>;
|
|
105
106
|
/**
|
|
106
107
|
* Returns only one result instead of an array.
|
|
107
108
|
* Sets `limit(1)` automatically. Fails if more than one result is returned.
|
|
@@ -109,20 +110,42 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
109
110
|
* Similar to Supabase `.single()`.
|
|
110
111
|
*/
|
|
111
112
|
single(): SupastashFilterBuilder<T, true, R, Z>;
|
|
113
|
+
/**
|
|
114
|
+
* Creates its own SQLite transaction for this insert or upsert.
|
|
115
|
+
*
|
|
116
|
+
* Do not use inside `db.withTransaction(...)` or
|
|
117
|
+
* `supastash.withTransaction(...)` — nested transactions are not allowed.
|
|
118
|
+
*/
|
|
119
|
+
withTx(): FilterBuilderFor<T, U, R, Z>;
|
|
112
120
|
/**
|
|
113
121
|
* Sets the preserve timestamp of the query.
|
|
114
122
|
*
|
|
115
123
|
* @param preserve - Whether to preserve the timestamp.
|
|
116
124
|
* @returns more filter options.
|
|
117
125
|
*/
|
|
118
|
-
preserveTimestamp(preserve: boolean):
|
|
126
|
+
preserveTimestamp(preserve: boolean): FilterBuilderFor<T, U, R, Z>;
|
|
119
127
|
/**
|
|
120
128
|
* Sets the sync mode of the query.
|
|
121
129
|
*
|
|
122
130
|
* @param mode - The sync mode to use.
|
|
123
131
|
* @returns more filter options.
|
|
124
132
|
*/
|
|
125
|
-
syncMode(mode: SyncMode):
|
|
133
|
+
syncMode(mode: SyncMode): FilterBuilderFor<T, U, R, Z>;
|
|
134
|
+
/**
|
|
135
|
+
* Throws an error if the query fails.
|
|
136
|
+
*
|
|
137
|
+
* @returns more filter options.
|
|
138
|
+
*/
|
|
139
|
+
throwOnError(): FilterBuilderFor<T, U, R, Z>;
|
|
140
|
+
/**
|
|
141
|
+
* Executes a cache-first fetch strategy.
|
|
142
|
+
*
|
|
143
|
+
* Attempts to resolve the query from the local database.
|
|
144
|
+
* Falls back to the remote database if no usable result is found.
|
|
145
|
+
*
|
|
146
|
+
* @returns Query results from local and/or remote sources.
|
|
147
|
+
*/
|
|
148
|
+
cacheFirst(): FilterBuilderFor<T, U, R, Z>;
|
|
126
149
|
/**
|
|
127
150
|
* Executes the query.
|
|
128
151
|
* Must be called after all filters are set.
|
|
@@ -149,4 +172,5 @@ export default class SupastashFilterBuilder<T extends CrudMethods, U extends boo
|
|
|
149
172
|
viewRemoteResult?: V;
|
|
150
173
|
}): Promise<SupastashQueryResult<T, U, V, Z>>;
|
|
151
174
|
}
|
|
175
|
+
export {};
|
|
152
176
|
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACT,MAAM,4BAA4B,CAAC;AAKpC;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB,CACzC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,EACD,CAAC;IAqCW,OAAO,CAAC,QAAQ,CAAC,KAAK;IAnClC;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAYb;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAStB;;;OAGG;gBAC0B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI/B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;IAI/B;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM;IAIf;;;;;OAKG;IACH,MAAM;IAQN;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,OAAO;IAInC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAIvB;;;;;OAKG;IACH,OAAO,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC/B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE,GAClD,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IA4D5C;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC3B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE;IAKrD;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC1B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE;CAItD"}
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACT,MAAM,4BAA4B,CAAC;AAKpC,KAAK,gBAAgB,CACnB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,EACD,CAAC,IACC,CAAC,SAAS,QAAQ,GAClB,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB,CACzC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,EACD,CAAC;IAqCW,OAAO,CAAC,QAAQ,CAAC,KAAK;IAnClC;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAYb;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAStB;;;OAGG;gBAC0B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI9B;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI/B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI7B;;;;;;OAMG;IACH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;IAI/B;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM;IAIf;;;;;OAKG;IACH,MAAM;IAQN;;;;;OAKG;IACH,MAAM;IAUN;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,OAAO;IAInC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAIvB;;;;OAIG;IACH,YAAY;IAIZ;;;;;;;OAOG;IACH,UAAU;IAIV;;;;;OAKG;IACH,OAAO,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC/B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE,GAClD,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IA4D5C;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC3B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE;IAKrD;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EAC1B,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;KAAE;CAItD"}
|
|
@@ -151,6 +151,19 @@ export default class SupastashFilterBuilder {
|
|
|
151
151
|
limit: 1,
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Creates its own SQLite transaction for this insert or upsert.
|
|
156
|
+
*
|
|
157
|
+
* Do not use inside `db.withTransaction(...)` or
|
|
158
|
+
* `supastash.withTransaction(...)` — nested transactions are not allowed.
|
|
159
|
+
*/
|
|
160
|
+
withTx() {
|
|
161
|
+
const isInATx = this.query.txId !== null;
|
|
162
|
+
if (isInATx) {
|
|
163
|
+
throw new Error(`[Supastash] Cannot use \`withTx()\` inside a transaction. Method: ${this.query.method} on table: ${this.query.table}`);
|
|
164
|
+
}
|
|
165
|
+
return this.withQueryPatch({ withTx: true });
|
|
166
|
+
}
|
|
154
167
|
/**
|
|
155
168
|
* Sets the preserve timestamp of the query.
|
|
156
169
|
*
|
|
@@ -169,6 +182,25 @@ export default class SupastashFilterBuilder {
|
|
|
169
182
|
syncMode(mode) {
|
|
170
183
|
return this.withQueryPatch({ type: mode });
|
|
171
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Throws an error if the query fails.
|
|
187
|
+
*
|
|
188
|
+
* @returns more filter options.
|
|
189
|
+
*/
|
|
190
|
+
throwOnError() {
|
|
191
|
+
return this.withQueryPatch({ throwOnError: true });
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Executes a cache-first fetch strategy.
|
|
195
|
+
*
|
|
196
|
+
* Attempts to resolve the query from the local database.
|
|
197
|
+
* Falls back to the remote database if no usable result is found.
|
|
198
|
+
*
|
|
199
|
+
* @returns Query results from local and/or remote sources.
|
|
200
|
+
*/
|
|
201
|
+
cacheFirst() {
|
|
202
|
+
return this.withQueryPatch({ fetchPolicy: "localFirst" });
|
|
203
|
+
}
|
|
172
204
|
/**
|
|
173
205
|
* Executes the query.
|
|
174
206
|
* Must be called after all filters are set.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CrudMethods, SupastashQuery } from "../../../types/query.types";
|
|
1
|
+
import { CrudMethods, PayloadData, SupastashQuery } from "../../../types/query.types";
|
|
2
2
|
import SupastashCrudBuilder from "./crud";
|
|
3
3
|
/**
|
|
4
4
|
* Builder for the supastash query
|
|
@@ -19,7 +19,34 @@ export declare class SupastashQueryBuilder<T extends CrudMethods, U extends bool
|
|
|
19
19
|
* @returns crud options.
|
|
20
20
|
*/
|
|
21
21
|
from(table: string): SupastashCrudBuilder<T, U, R>;
|
|
22
|
+
/**
|
|
23
|
+
* Executes multiple Supastash operations inside a single SQLite transaction.
|
|
24
|
+
*
|
|
25
|
+
* ⚠️ Do NOT call this inside `db.withTransaction(...)`
|
|
26
|
+
* or another `supastash.withTransaction(...)`.
|
|
27
|
+
* Nested transactions are not supported and will throw.
|
|
28
|
+
*
|
|
29
|
+
* All queries executed using the provided `tx` builder
|
|
30
|
+
* will share the same SQLite transaction and `txId`.
|
|
31
|
+
*
|
|
32
|
+
* If any operation inside the callback throws,
|
|
33
|
+
* the entire transaction is rolled back automatically.
|
|
34
|
+
*
|
|
35
|
+
* Example:
|
|
36
|
+
*
|
|
37
|
+
* await supastash.withTransaction(async (tx) => {
|
|
38
|
+
* await tx.from("orders").insert(order).run();
|
|
39
|
+
* await tx.from("ledger").insert(ledgerEntry).run();
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
*
|
|
43
|
+
* In this example, both inserts succeed or both fail.
|
|
44
|
+
*/
|
|
45
|
+
withTransaction(fn: (tx: SupastashTransactionalBuilder<T, U, R>) => Promise<void> | void): Promise<void>;
|
|
22
46
|
}
|
|
47
|
+
type SupastashTransactionalBuilder<T extends CrudMethods, U extends boolean, R> = Omit<SupastashQueryBuilder<T, U, R>, "withTransaction">;
|
|
48
|
+
export type SupastashTransactionClient = SupastashTransactionalBuilder<CrudMethods, boolean, PayloadData>;
|
|
49
|
+
export type SupastashClient = SupastashTransactionalBuilder<CrudMethods, boolean, PayloadData>;
|
|
23
50
|
/**
|
|
24
51
|
* Supastash query builder for local-first CRUD operations.
|
|
25
52
|
*
|
|
@@ -42,4 +69,5 @@ export declare class SupastashQueryBuilder<T extends CrudMethods, U extends bool
|
|
|
42
69
|
* .run(); // Required to execute the query
|
|
43
70
|
*/
|
|
44
71
|
export declare const supastash: SupastashQueryBuilder<CrudMethods, boolean, any>;
|
|
72
|
+
export {};
|
|
45
73
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAEX,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAGpC,OAAO,oBAAoB,MAAM,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,qBAAa,qBAAqB,CAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD;;;OAGG;gBACS,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI1C;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM;IAMlB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,CACb,EAAE,EAAE,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAgD3E;AAED,KAAK,6BAA6B,CAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,IACC,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,CACpE,WAAW,EACX,OAAO,EACP,WAAW,CACZ,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,6BAA6B,CACzD,WAAW,EACX,OAAO,EACP,WAAW,CACZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS,kDAyBiC,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { getSupastashDb } from "../../../db/dbInitializer";
|
|
2
|
+
import { txStore } from "../../../store/tx";
|
|
1
3
|
import { generateUUIDv4 } from "../../genUUID";
|
|
4
|
+
import { queueRemoteCall } from "../helpers/queueRemote";
|
|
2
5
|
import SupastashCrudBuilder from "./crud";
|
|
3
6
|
/**
|
|
4
7
|
* Builder for the supastash query
|
|
@@ -20,9 +23,76 @@ export class SupastashQueryBuilder {
|
|
|
20
23
|
* @returns crud options.
|
|
21
24
|
*/
|
|
22
25
|
from(table) {
|
|
23
|
-
const
|
|
26
|
+
const id = generateUUIDv4();
|
|
27
|
+
const newQuery = { ...this.query, table, id };
|
|
24
28
|
return new SupastashCrudBuilder(newQuery);
|
|
25
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Executes multiple Supastash operations inside a single SQLite transaction.
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ Do NOT call this inside `db.withTransaction(...)`
|
|
34
|
+
* or another `supastash.withTransaction(...)`.
|
|
35
|
+
* Nested transactions are not supported and will throw.
|
|
36
|
+
*
|
|
37
|
+
* All queries executed using the provided `tx` builder
|
|
38
|
+
* will share the same SQLite transaction and `txId`.
|
|
39
|
+
*
|
|
40
|
+
* If any operation inside the callback throws,
|
|
41
|
+
* the entire transaction is rolled back automatically.
|
|
42
|
+
*
|
|
43
|
+
* Example:
|
|
44
|
+
*
|
|
45
|
+
* await supastash.withTransaction(async (tx) => {
|
|
46
|
+
* await tx.from("orders").insert(order).run();
|
|
47
|
+
* await tx.from("ledger").insert(ledgerEntry).run();
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
*
|
|
51
|
+
* In this example, both inserts succeed or both fail.
|
|
52
|
+
*/
|
|
53
|
+
withTransaction(fn) {
|
|
54
|
+
const query = async () => {
|
|
55
|
+
// Create a new transaction id
|
|
56
|
+
const newTxId = generateUUIDv4();
|
|
57
|
+
try {
|
|
58
|
+
const db = await getSupastashDb();
|
|
59
|
+
// Add the transaction to the store
|
|
60
|
+
txStore[newTxId] = [];
|
|
61
|
+
// Execute the local calls
|
|
62
|
+
await db.withTransaction(async (tx) => {
|
|
63
|
+
const txQuery = {
|
|
64
|
+
...this.query,
|
|
65
|
+
txId: newTxId,
|
|
66
|
+
tx,
|
|
67
|
+
throwOnError: true, // Throw the error to roll back the transaction
|
|
68
|
+
};
|
|
69
|
+
const txBuilder = new SupastashQueryBuilder(txQuery);
|
|
70
|
+
return fn(txBuilder);
|
|
71
|
+
});
|
|
72
|
+
// Execute the remote calls
|
|
73
|
+
const remoteCalls = txStore[newTxId] ?? [];
|
|
74
|
+
if (remoteCalls.length > 0) {
|
|
75
|
+
const newStates = remoteCalls.map((call) => {
|
|
76
|
+
return {
|
|
77
|
+
...call,
|
|
78
|
+
txId: null,
|
|
79
|
+
tx: null,
|
|
80
|
+
withTx: false,
|
|
81
|
+
type: "remoteOnly",
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
for (const state of newStates) {
|
|
85
|
+
queueRemoteCall(state);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
// Delete the transaction from the store
|
|
91
|
+
delete txStore[newTxId];
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
return query();
|
|
95
|
+
}
|
|
26
96
|
}
|
|
27
97
|
/**
|
|
28
98
|
* Supastash query builder for local-first CRUD operations.
|
|
@@ -59,4 +129,10 @@ export const supastash = new SupastashQueryBuilder({
|
|
|
59
129
|
viewRemoteResult: false,
|
|
60
130
|
onConflictKeys: ["id"],
|
|
61
131
|
preserveTimestamp: false,
|
|
132
|
+
throwOnError: false,
|
|
133
|
+
fetchPolicy: null,
|
|
134
|
+
// With tx
|
|
135
|
+
txId: null,
|
|
136
|
+
tx: null,
|
|
137
|
+
withTx: false,
|
|
62
138
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mainQuery.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/mainQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mainQuery.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/builder/mainQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAGX,cAAc,EACd,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AAWpC;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,EACD,CAAC,EAED,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,gBAAgB,EAAE,CAAC,CAAA;CAAE,GACvD,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAiG3C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getSupastashConfig } from "../../../core/config";
|
|
2
|
+
import { txStore } from "../../../store/tx";
|
|
2
3
|
import { logWarn } from "../../logs";
|
|
3
4
|
import { refreshScreen } from "../../refreshScreenCalls";
|
|
4
5
|
import { assignInsertIds, getCommonError, runSyncStrategy, validatePayloadForSingleInsert, } from "../helpers/mainQueryHelpers";
|
|
@@ -22,8 +23,10 @@ export async function queryDb(state) {
|
|
|
22
23
|
payload: updatedPayload,
|
|
23
24
|
type: syncMode,
|
|
24
25
|
};
|
|
26
|
+
if (state.txId && ["localFirst"].includes(updatedState.type)) {
|
|
27
|
+
txStore[state.txId].push(updatedState);
|
|
28
|
+
}
|
|
25
29
|
const { localResult, remoteResult, } = await runSyncStrategy(updatedState);
|
|
26
|
-
localData = localResult?.data;
|
|
27
30
|
const success = !localResult?.error && !remoteResult?.error;
|
|
28
31
|
const commonError = getCommonError(table, method, localResult, remoteResult);
|
|
29
32
|
if (viewRemoteResult) {
|
|
@@ -39,14 +42,26 @@ export async function queryDb(state) {
|
|
|
39
42
|
success,
|
|
40
43
|
});
|
|
41
44
|
}
|
|
45
|
+
const remoteData = remoteResult?.data;
|
|
46
|
+
const localData = localResult?.data;
|
|
47
|
+
const policy = state.fetchPolicy;
|
|
48
|
+
const fetchPolicyData = !policy
|
|
49
|
+
? null
|
|
50
|
+
: policy === "localFirst"
|
|
51
|
+
? localData ?? remoteData
|
|
52
|
+
: remoteData ?? localData;
|
|
53
|
+
const data = fetchPolicyData ??
|
|
54
|
+
(type === "remoteOnly" ? remoteData : localData ?? null);
|
|
42
55
|
return Promise.resolve({
|
|
43
|
-
data
|
|
56
|
+
data,
|
|
44
57
|
error: commonError ?? null,
|
|
45
58
|
success,
|
|
46
59
|
});
|
|
47
60
|
}
|
|
48
61
|
catch (error) {
|
|
49
62
|
logWarn(`[Supastash] ${error instanceof Error ? error.message : String(error)}`);
|
|
63
|
+
if (state.throwOnError)
|
|
64
|
+
throw error;
|
|
50
65
|
if (state.viewRemoteResult) {
|
|
51
66
|
return Promise.resolve({
|
|
52
67
|
remote: null,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CrudMethods,
|
|
1
|
+
import { CrudMethods, MethodReturnTypeMap, SupastashQuery } from "../../../../types/query.types";
|
|
2
2
|
/**
|
|
3
3
|
* Gets method for local db calls
|
|
4
4
|
*
|
|
@@ -11,5 +11,5 @@ import { CrudMethods, FilterCalls, MethodReturnTypeMap, SupastashQuery, SyncMode
|
|
|
11
11
|
* @param isSingle - Whether to return a single row or multiple rows
|
|
12
12
|
* @returns query
|
|
13
13
|
*/
|
|
14
|
-
export default function getLocalMethod<T extends CrudMethods, U extends boolean, R, Z>(
|
|
14
|
+
export default function getLocalMethod<T extends CrudMethods, U extends boolean, R, Z>(state: SupastashQuery<T, U, R>): () => Promise<MethodReturnTypeMap<U, Z>[T]>;
|
|
15
15
|
//# sourceMappingURL=getLocalMethod.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocalMethod.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/getLocalMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"getLocalMethod.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/getLocalMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,mBAAmB,EACnB,cAAc,EACf,MAAM,+BAA+B,CAAC;AASvC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,EACjB,CAAC,EACD,CAAC,EACD,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAY7E"}
|
|
@@ -11,13 +11,14 @@ import { buildDelete, buildInsert, buildSelect, buildUpdate, buildUpsert, } from
|
|
|
11
11
|
* @param isSingle - Whether to return a single row or multiple rows
|
|
12
12
|
* @returns query
|
|
13
13
|
*/
|
|
14
|
-
export default function getLocalMethod(
|
|
14
|
+
export default function getLocalMethod(state) {
|
|
15
|
+
const { method } = state;
|
|
15
16
|
const handlers = {
|
|
16
|
-
select: buildSelect(
|
|
17
|
-
insert: buildInsert(
|
|
18
|
-
update: buildUpdate(
|
|
19
|
-
delete: buildDelete(
|
|
20
|
-
upsert: buildUpsert(
|
|
17
|
+
select: buildSelect(state),
|
|
18
|
+
insert: buildInsert(state),
|
|
19
|
+
update: buildUpdate(state),
|
|
20
|
+
delete: buildDelete(state),
|
|
21
|
+
upsert: buildUpsert(state),
|
|
21
22
|
none: async () => null,
|
|
22
23
|
};
|
|
23
24
|
return handlers[method];
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { SyncMode } from "../../../../types/query.types";
|
|
2
|
+
import { SupastashSQLiteExecutor } from "../../../../types/supastashConfig.types";
|
|
2
3
|
interface InsertOptions<R = any> {
|
|
3
4
|
table: string;
|
|
4
5
|
syncMode?: SyncMode;
|
|
5
6
|
nowISO?: string;
|
|
6
7
|
returnInsertedRows?: boolean;
|
|
8
|
+
withTx: boolean;
|
|
9
|
+
tx: SupastashSQLiteExecutor | null;
|
|
7
10
|
}
|
|
8
11
|
export declare function insertMany<R = any>(payload: R[], opts: InsertOptions<R>): Promise<R[] | void>;
|
|
9
12
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertMany.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/insertMany.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"insertMany.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/insertMany.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAEL,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AAIjD,UAAU,aAAa,CAAC,CAAC,GAAG,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACpC;AAMD,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACtC,OAAO,EAAE,CAAC,EAAE,EACZ,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CA+GrB"}
|
|
@@ -5,7 +5,6 @@ const MAX_PARAMS = 999;
|
|
|
5
5
|
const CHECK_BATCH = 900;
|
|
6
6
|
const YIELD_EVERY = 500;
|
|
7
7
|
export async function insertMany(payload, opts) {
|
|
8
|
-
const db = await getSupastashDb();
|
|
9
8
|
const { table, syncMode, returnInsertedRows } = opts;
|
|
10
9
|
const timeStamp = opts.nowISO ?? new Date().toISOString();
|
|
11
10
|
assertTableName(table);
|
|
@@ -24,6 +23,7 @@ export async function insertMany(payload, opts) {
|
|
|
24
23
|
idSet.add(id);
|
|
25
24
|
return id;
|
|
26
25
|
});
|
|
26
|
+
const db = opts.tx ?? (await getSupastashDb());
|
|
27
27
|
// 2) Check existing ids in DB (batched; fail-fast)
|
|
28
28
|
for (let i = 0; i < ids.length; i += CHECK_BATCH) {
|
|
29
29
|
const part = ids.slice(i, i + CHECK_BATCH);
|
|
@@ -36,7 +36,7 @@ export async function insertMany(payload, opts) {
|
|
|
36
36
|
}
|
|
37
37
|
// 3) Do inserts in a single transaction
|
|
38
38
|
const insertedIds = [];
|
|
39
|
-
const run = async () => {
|
|
39
|
+
const run = async (db) => {
|
|
40
40
|
for (let i = 0; i < payload.length; i++) {
|
|
41
41
|
const item = payload[i];
|
|
42
42
|
const newPayload = {
|
|
@@ -63,7 +63,14 @@ export async function insertMany(payload, opts) {
|
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
65
|
try {
|
|
66
|
-
|
|
66
|
+
if (opts.withTx && !opts.tx) {
|
|
67
|
+
await db.withTransaction(async (tx) => {
|
|
68
|
+
await run(tx);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
await run(opts.tx ?? db);
|
|
73
|
+
}
|
|
67
74
|
}
|
|
68
75
|
catch (e) {
|
|
69
76
|
throw e;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CrudMethods,
|
|
1
|
+
import { CrudMethods, SupastashQuery } from "../../../../types/query.types";
|
|
2
2
|
/**
|
|
3
3
|
* Builds a select query
|
|
4
4
|
*
|
|
@@ -9,7 +9,7 @@ import { CrudMethods, FilterCalls, SupastashQuery, SyncMode } from "../../../../
|
|
|
9
9
|
* @param isSingle - Whether to return a single row or multiple rows
|
|
10
10
|
* @returns query
|
|
11
11
|
*/
|
|
12
|
-
export declare function buildSelect<T extends boolean, R, Z>(
|
|
12
|
+
export declare function buildSelect<T extends boolean, R, Z>(state: SupastashQuery<CrudMethods, boolean, R>): () => Promise<T extends true ? import("../../../../types/query.types").PayloadResult<Z> : import("../../../../types/query.types").PayloadListResult<Z>>;
|
|
13
13
|
/**
|
|
14
14
|
* Builds an insert query
|
|
15
15
|
*
|
|
@@ -17,18 +17,18 @@ export declare function buildSelect<T extends boolean, R, Z>(table: string, sele
|
|
|
17
17
|
* @param payload - The payload to insert
|
|
18
18
|
* @returns query
|
|
19
19
|
*/
|
|
20
|
-
export declare function buildInsert<T extends boolean, R, Z>(
|
|
20
|
+
export declare function buildInsert<T extends boolean, R, Z>(state: SupastashQuery<CrudMethods, boolean, R>): () => Promise<T extends true ? import("../../../../types/query.types").PayloadResult<Z> : import("../../../../types/query.types").PayloadListResult<Z>>;
|
|
21
21
|
/**
|
|
22
22
|
* Builds an update query
|
|
23
23
|
*
|
|
24
24
|
* @returns query
|
|
25
25
|
*/
|
|
26
|
-
export declare function buildUpdate<T extends boolean, R, Z>(
|
|
26
|
+
export declare function buildUpdate<T extends boolean, R, Z>(state: SupastashQuery<CrudMethods, boolean, R>): () => Promise<T extends true ? import("../../../../types/query.types").PayloadResult<Z> : import("../../../../types/query.types").PayloadListResult<Z>>;
|
|
27
27
|
/**
|
|
28
28
|
* Builds a delete query
|
|
29
29
|
*
|
|
30
30
|
* @returns query
|
|
31
31
|
*/
|
|
32
|
-
export declare function buildDelete<Z = any>(
|
|
33
|
-
export declare function buildUpsert<T extends boolean, R, Z>(
|
|
32
|
+
export declare function buildDelete<Z = any>(state: SupastashQuery<CrudMethods, boolean, Z>): () => Promise<import("../../../../types/query.types").SupatashDeleteResult<Z>>;
|
|
33
|
+
export declare function buildUpsert<T extends boolean, R, Z>(state: SupastashQuery<CrudMethods, boolean, R>): () => Promise<T extends true ? import("../../../../types/query.types").PayloadResult<Z> : import("../../../../types/query.types").PayloadListResult<Z>>;
|
|
34
34
|
//# sourceMappingURL=localQueryBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/localQueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"localQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/localQueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAO5E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACjD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,2JAI/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACjD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,2JAU/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACjD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,2JAG/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,kFAG/C;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACjD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,2JAU/C"}
|
|
@@ -13,8 +13,8 @@ import { upsertData } from "../../localDbQuery/upsert";
|
|
|
13
13
|
* @param isSingle - Whether to return a single row or multiple rows
|
|
14
14
|
* @returns query
|
|
15
15
|
*/
|
|
16
|
-
export function buildSelect(
|
|
17
|
-
return async () => await selectData(
|
|
16
|
+
export function buildSelect(state) {
|
|
17
|
+
return async () => await selectData({ ...state, select: state.select || "*" });
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Builds an insert query
|
|
@@ -23,30 +23,37 @@ export function buildSelect(table, select, filters, limit, isSingle) {
|
|
|
23
23
|
* @param payload - The payload to insert
|
|
24
24
|
* @returns query
|
|
25
25
|
*/
|
|
26
|
-
export function buildInsert(
|
|
26
|
+
export function buildInsert(state) {
|
|
27
|
+
const payload = state.payload;
|
|
27
28
|
const newPayload = payload
|
|
28
29
|
? Array.isArray(payload)
|
|
29
30
|
? payload
|
|
30
31
|
: [payload]
|
|
31
32
|
: null;
|
|
32
|
-
return async () => await insertData(
|
|
33
|
+
return async () => await insertData({ ...state, payload: newPayload });
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
35
36
|
* Builds an update query
|
|
36
37
|
*
|
|
37
38
|
* @returns query
|
|
38
39
|
*/
|
|
39
|
-
export function buildUpdate(
|
|
40
|
-
return async () => await updateData(
|
|
40
|
+
export function buildUpdate(state) {
|
|
41
|
+
return async () => await updateData(state);
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* Builds a delete query
|
|
44
45
|
*
|
|
45
46
|
* @returns query
|
|
46
47
|
*/
|
|
47
|
-
export function buildDelete(
|
|
48
|
-
return async () => await deleteData(
|
|
48
|
+
export function buildDelete(state) {
|
|
49
|
+
return async () => await deleteData(state);
|
|
49
50
|
}
|
|
50
|
-
export function buildUpsert(
|
|
51
|
-
|
|
51
|
+
export function buildUpsert(state) {
|
|
52
|
+
const payload = state.payload;
|
|
53
|
+
const newPayload = payload
|
|
54
|
+
? Array.isArray(payload)
|
|
55
|
+
? payload
|
|
56
|
+
: [payload]
|
|
57
|
+
: null;
|
|
58
|
+
return async () => await upsertData({ ...state, payload: newPayload });
|
|
52
59
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CrudMethods, SupastashQuery, SyncMode } from "../../../../types/query.types";
|
|
2
|
+
import { SupastashSQLiteExecutor } from "../../../../types/supastashConfig.types";
|
|
2
3
|
interface UpsertOptions<R = any> {
|
|
3
4
|
table: string;
|
|
4
5
|
onConflictKeys?: string[];
|
|
@@ -7,6 +8,8 @@ interface UpsertOptions<R = any> {
|
|
|
7
8
|
preserveTimestamp?: boolean;
|
|
8
9
|
returnRows?: boolean;
|
|
9
10
|
yieldEvery?: number;
|
|
11
|
+
withTx: boolean;
|
|
12
|
+
tx: SupastashSQLiteExecutor | null;
|
|
10
13
|
}
|
|
11
14
|
export declare function upsertMany<R = any>(items: R[], opts: UpsertOptions<R>, state: SupastashQuery<CrudMethods, boolean, R>): Promise<R[] | void>;
|
|
12
15
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsertMany.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/upsertMany.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACT,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"upsertMany.d.ts","sourceRoot":"","sources":["../../../../../src/utils/query/helpers/localDb/upsertMany.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACT,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAKlF,UAAU,aAAa,CAAC,CAAC,GAAG,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACpC;AAMD,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CA0LrB"}
|