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
package/README.md
CHANGED
|
@@ -15,6 +15,15 @@
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
> 🔴 **NEW — Replication Mode**
|
|
19
|
+
>
|
|
20
|
+
> Improves sync ordering and prevents missed updates in distributed offline systems.
|
|
21
|
+
> ⚠️ Must read if your app supports multiple devices or long offline sessions.
|
|
22
|
+
>
|
|
23
|
+
> 👉 Learn more: https://0xzekea.github.io/supastash/docs/replication-mode
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
18
27
|
## ✨ Features
|
|
19
28
|
|
|
20
29
|
- 🔁 **Two-way sync** (Supabase ↔ SQLite)
|
|
@@ -91,8 +100,8 @@ configureSupastash({
|
|
|
91
100
|
id: "TEXT PRIMARY KEY",
|
|
92
101
|
name: "TEXT",
|
|
93
102
|
email: "TEXT",
|
|
94
|
-
created_at: "
|
|
95
|
-
updated_at: "
|
|
103
|
+
created_at: "TEXT NOT NULL",
|
|
104
|
+
updated_at: "TEXT NOT NULL",
|
|
96
105
|
});
|
|
97
106
|
},
|
|
98
107
|
|
|
@@ -173,9 +182,12 @@ useSupastashFilters({
|
|
|
173
182
|
- Your Supabase tables must have:
|
|
174
183
|
|
|
175
184
|
- A primary key `id` (string or UUID)
|
|
176
|
-
- `timestamptz` columns for `created_at`, `updated_at`, and `deleted_at`
|
|
177
185
|
|
|
178
|
-
-
|
|
186
|
+
- `timestamptz` columns for `created_at`, `updated_at`, and `deleted_at`
|
|
187
|
+
- If using `replicationMode: "server-side"`(Recommended), you must also add:
|
|
188
|
+
- `arrived_at timestamptz NOT NULL DEFAULT now()`
|
|
189
|
+
- A server trigger to enforce `arrived_at` updates
|
|
190
|
+
- Run this SQL in Supabase to allow schema reflection:
|
|
179
191
|
|
|
180
192
|
```sql
|
|
181
193
|
create or replace function get_table_schema(table_name text)
|
|
@@ -206,7 +218,7 @@ const { data: orders } = useSupatashData("orders", {
|
|
|
206
218
|
|
|
207
219
|
## 🔄 How Sync Works
|
|
208
220
|
|
|
209
|
-
- Tracks rows using `updated_at
|
|
221
|
+
- Tracks rows using a replication cursor (`updated_at` by default, or `arrived_at` in server-side mode)
|
|
210
222
|
- Batches changes in background and retries failed ones
|
|
211
223
|
- Local cache backed by Supabase
|
|
212
224
|
- Runs pull/push jobs efficiently using staged task pipelines
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC3B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC3B,MAAM,mCAAmC,CAAC;AAiC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,0BAA0B,EACrE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,gBAAgB,EAAE,CAAC,CAAA;CAAE,QAuCrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,0BAA0B,KACjC,eAAe,CAAC,CAAC,CAAC,CAEtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,0BAA0B,EACpC,MAAM,EAAE;IACR,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG;QAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;KAC3B,CAAC;CACH,QAEA"}
|
|
@@ -14,8 +14,12 @@ let _config = {
|
|
|
14
14
|
pull: true,
|
|
15
15
|
useFiltersFromStore: true,
|
|
16
16
|
},
|
|
17
|
+
replicationMode: "client-side",
|
|
18
|
+
maxSyncLookbackDays: 365,
|
|
19
|
+
perTableSyncLookbackDays: undefined,
|
|
20
|
+
fullSyncTables: [],
|
|
17
21
|
listeners: 250,
|
|
18
|
-
supabaseBatchSize:
|
|
22
|
+
supabaseBatchSize: 800,
|
|
19
23
|
debugMode: true,
|
|
20
24
|
syncPolicy: DEFAULT_POLICY,
|
|
21
25
|
fieldEnforcement: DEFAULT_FIELDS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo_sqlite.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/expo_sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"expo_sqlite.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/expo_sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,sBAoD/B,CAAC"}
|
|
@@ -19,6 +19,17 @@ export const SQLiteAdapterExpo = {
|
|
|
19
19
|
closeAsync: async () => {
|
|
20
20
|
await db.closeAsync?.();
|
|
21
21
|
},
|
|
22
|
+
withTransaction: async (fn) => {
|
|
23
|
+
return await db.withTransactionAsync(async () => {
|
|
24
|
+
const txExecutor = {
|
|
25
|
+
runAsync: async (sql, params) => await db.runAsync(sql, params ?? []),
|
|
26
|
+
execAsync: async (statement) => await db.execAsync(statement),
|
|
27
|
+
getAllAsync: async (sql, params) => await db.getAllAsync(sql, params ?? []),
|
|
28
|
+
getFirstAsync: async (sql, params) => await db.getFirstAsync(sql, params ?? []),
|
|
29
|
+
};
|
|
30
|
+
return await fn(txExecutor);
|
|
31
|
+
});
|
|
32
|
+
},
|
|
22
33
|
};
|
|
23
34
|
},
|
|
24
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAG3C,eAAO,MAAM,kBAAkB,EAAE,sBA2EhC,CAAC"}
|
|
@@ -29,6 +29,26 @@ export const SQLiteAdapterNitro = {
|
|
|
29
29
|
closeAsync: async () => {
|
|
30
30
|
await db.close?.();
|
|
31
31
|
},
|
|
32
|
+
withTransaction: async (fn) => {
|
|
33
|
+
await db.transaction(async (tx) => {
|
|
34
|
+
const txExecutor = {
|
|
35
|
+
runAsync: async (sql, params) => await tx.executeAsync(sql, params ?? []),
|
|
36
|
+
execAsync: async (statement) => {
|
|
37
|
+
await tx.executeAsync(statement);
|
|
38
|
+
},
|
|
39
|
+
getAllAsync: async (sql, params) => {
|
|
40
|
+
const result = await tx.executeAsync(sql, params ?? []);
|
|
41
|
+
const mainResult = result.rows?._array ?? [];
|
|
42
|
+
return mainResult;
|
|
43
|
+
},
|
|
44
|
+
getFirstAsync: async (sql, params) => {
|
|
45
|
+
const result = await tx.executeAsync(sql, params ?? []);
|
|
46
|
+
return result.rows?._array?.[0] ?? null;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
return await fn(txExecutor);
|
|
50
|
+
});
|
|
51
|
+
},
|
|
32
52
|
};
|
|
33
53
|
},
|
|
34
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn_sqlite_storage.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/rn_sqlite_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"rn_sqlite_storage.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/rn_sqlite_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,oBAAoB,EAAE,sBA+ElC,CAAC"}
|
|
@@ -20,6 +20,33 @@ export const SQLiteAdapterStorage = {
|
|
|
20
20
|
closeAsync: async () => {
|
|
21
21
|
await db.close?.();
|
|
22
22
|
},
|
|
23
|
+
withTransaction: async (fn) => {
|
|
24
|
+
await db.transaction(async (tx) => {
|
|
25
|
+
const txExecutor = {
|
|
26
|
+
runAsync: async (sql, params) => {
|
|
27
|
+
await tx.executeSql(sql, params ?? []);
|
|
28
|
+
},
|
|
29
|
+
execAsync: async (statement) => {
|
|
30
|
+
await tx.executeSql(statement);
|
|
31
|
+
},
|
|
32
|
+
getAllAsync: async (sql, params) => {
|
|
33
|
+
const [, resultSet] = await tx.executeSql(sql, params ?? []);
|
|
34
|
+
const rows = [];
|
|
35
|
+
for (let i = 0; i < resultSet.rows.length; i++) {
|
|
36
|
+
rows.push(resultSet.rows.item(i));
|
|
37
|
+
}
|
|
38
|
+
return rows;
|
|
39
|
+
},
|
|
40
|
+
getFirstAsync: async (sql, params) => {
|
|
41
|
+
const [, resultSet] = await tx.executeSql(sql, params ?? []);
|
|
42
|
+
if (resultSet.rows.length === 0)
|
|
43
|
+
return null;
|
|
44
|
+
return resultSet.rows.item(0);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return await fn(txExecutor);
|
|
48
|
+
});
|
|
49
|
+
},
|
|
23
50
|
};
|
|
24
51
|
},
|
|
25
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchCalls.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/fetchCalls.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"fetchCalls.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/fetchCalls.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AAKxC,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;EA4GtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAWxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,mBAAmB,CAAC,CAAC,CAAC,CAqGxB"}
|
|
@@ -2,8 +2,8 @@ import { useEffect, useMemo, useRef } from "react";
|
|
|
2
2
|
import { AppState } from "react-native";
|
|
3
3
|
import { localCache } from "../../store/localCache";
|
|
4
4
|
import { supastashEventBus } from "../../utils/events/eventBus";
|
|
5
|
-
import { buildFilterString } from "../../utils/fetchData/buildFilter";
|
|
6
5
|
import useRealtimeData from "../../utils/fetchData/realTimeCall";
|
|
6
|
+
import { ReusedHelpers } from "../../utils/reusedHelpers";
|
|
7
7
|
import { isTrulyNullish } from "../../utils/serializer";
|
|
8
8
|
import useDataState from "./dataState";
|
|
9
9
|
import useEventQueues from "./eventQueues";
|
|
@@ -80,11 +80,19 @@ export function useSupastashData(table, options = {}) {
|
|
|
80
80
|
const { dataMap, data, groupedBy, } = useDataState(table);
|
|
81
81
|
const queueHandler = useEventQueues(table, options, flushIntervalMs);
|
|
82
82
|
const { triggerRefresh, trigger, cancel, initialFetchAndSync, isFetching } = fetchCalls(table, options, hasTriggeredRef);
|
|
83
|
-
const subKey = useMemo(() => `${table}:${buildFilterString(filter)}`, [table, filter]);
|
|
83
|
+
const subKey = useMemo(() => `${table}:${ReusedHelpers.buildFilterString(filter)}`, [table, filter]);
|
|
84
84
|
const isAnyNullish = useMemo(() => {
|
|
85
|
-
if (!options.sqlFilter)
|
|
85
|
+
if (!options.sqlFilter?.length)
|
|
86
86
|
return false;
|
|
87
|
-
|
|
87
|
+
const check = (filter) => {
|
|
88
|
+
if (!filter || typeof filter !== "object")
|
|
89
|
+
return false;
|
|
90
|
+
if ("or" in filter) {
|
|
91
|
+
return filter.or?.some(check) ?? false;
|
|
92
|
+
}
|
|
93
|
+
return isTrulyNullish(filter.value) && filter.operator !== "is";
|
|
94
|
+
};
|
|
95
|
+
return options.sqlFilter.some(check);
|
|
88
96
|
}, [options.sqlFilter]);
|
|
89
97
|
useEffect(() => {
|
|
90
98
|
if (!shouldFetch || (lazy && !hasTriggeredRef.current))
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import NetInfo from "@react-native-community/netinfo";
|
|
3
3
|
import { useCallback, useEffect, useRef } from "react";
|
|
4
4
|
import { getSupastashConfig } from "../../core/config";
|
|
5
|
-
import { buildFilterString } from "../../utils/fetchData/buildFilter";
|
|
6
5
|
import { RealtimeManager } from "../../utils/fetchData/realTimeManager";
|
|
7
6
|
import { logError } from "../../utils/logs";
|
|
7
|
+
import { ReusedHelpers } from "../../utils/reusedHelpers";
|
|
8
8
|
import { supabaseClientErr } from "../../utils/supabaseClientErr";
|
|
9
9
|
const generateHookId = () => `hook_${Date.now()}_${Math.random().toString(36)}`;
|
|
10
10
|
function useRealtimeSubscription(table, queueHandler, options, initialized, realtime) {
|
|
@@ -36,7 +36,7 @@ function useRealtimeSubscription(table, queueHandler, options, initialized, real
|
|
|
36
36
|
if (!isConnected) {
|
|
37
37
|
if (isSubscribedRef.current) {
|
|
38
38
|
const filterString = options.filter
|
|
39
|
-
? buildFilterString(options.filter)
|
|
39
|
+
? ReusedHelpers.buildFilterString(options.filter)
|
|
40
40
|
: undefined;
|
|
41
41
|
RealtimeManager.unsubscribe(table, hookId, filterString);
|
|
42
42
|
isSubscribedRef.current = false;
|
|
@@ -50,7 +50,7 @@ function useRealtimeSubscription(table, queueHandler, options, initialized, real
|
|
|
50
50
|
(!options.lazy || initialized));
|
|
51
51
|
if (shouldSubscribe && !isSubscribedRef.current) {
|
|
52
52
|
const filterString = options.filter
|
|
53
|
-
? buildFilterString(options.filter)
|
|
53
|
+
? ReusedHelpers.buildFilterString(options.filter)
|
|
54
54
|
: undefined;
|
|
55
55
|
RealtimeManager.subscribe(table, hookId, queueHandler, filterString);
|
|
56
56
|
isSubscribedRef.current = true;
|
|
@@ -63,7 +63,7 @@ function useRealtimeSubscription(table, queueHandler, options, initialized, real
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
const filterString = options.filter
|
|
66
|
-
? buildFilterString(options.filter)
|
|
66
|
+
? ReusedHelpers.buildFilterString(options.filter)
|
|
67
67
|
: undefined;
|
|
68
68
|
const unsubscribeStatus = RealtimeManager.onStatusChange(handleStatusChange);
|
|
69
69
|
const unsubscribeNetInfo = NetInfo.addEventListener(({ isConnected }) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function registerSub(table: string, filter?:
|
|
3
|
-
export declare function unregisterSub(table: string, filter?:
|
|
1
|
+
import { SupastashFilter } from "../../types/realtimeData.types";
|
|
2
|
+
export declare function registerSub(table: string, filter?: SupastashFilter): boolean;
|
|
3
|
+
export declare function unregisterSub(table: string, filter?: SupastashFilter): void;
|
|
4
4
|
//# sourceMappingURL=registerSub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSub.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/registerSub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"registerSub.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashData/registerSub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAQ5E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAQ3E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReusedHelpers } from "../../utils/reusedHelpers";
|
|
2
2
|
const subRegistry = {};
|
|
3
3
|
export function registerSub(table, filter) {
|
|
4
|
-
const key = `${table}::${buildFilterString(filter) ?? ""}`;
|
|
4
|
+
const key = `${table}::${ReusedHelpers.buildFilterString(filter) ?? ""}`;
|
|
5
5
|
if (subRegistry[key]) {
|
|
6
6
|
subRegistry[key]++;
|
|
7
7
|
return true;
|
|
@@ -10,7 +10,7 @@ export function registerSub(table, filter) {
|
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
12
|
export function unregisterSub(table, filter) {
|
|
13
|
-
const key = `${table}::${buildFilterString(filter) ?? ""}`;
|
|
13
|
+
const key = `${table}::${ReusedHelpers.buildFilterString(filter) ?? ""}`;
|
|
14
14
|
if (subRegistry[key]) {
|
|
15
15
|
subRegistry[key]--;
|
|
16
16
|
if (subRegistry[key] <= 0) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SupastashFilter } from "../../types/
|
|
1
|
+
import { SupastashFilter } from "../../types/realtimeData.types";
|
|
2
2
|
/**
|
|
3
3
|
* useSupastashFilters
|
|
4
4
|
*
|
|
@@ -27,7 +27,7 @@ import { SupastashFilter } from "../../types/supastashFilters.types";
|
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
29
|
* @param {SupastashFilter} filters - An object where each key is a table name, and its value is
|
|
30
|
-
* an array of `
|
|
30
|
+
* an array of `SupastashFilter` objects that define the filter criteria for that table's pull sync.
|
|
31
31
|
*
|
|
32
32
|
* @note This hook does not re-run unless the `filters` object reference changes.
|
|
33
33
|
* To force re-evaluation, pass a fresh object (not just mutated data).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashFilters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashFilters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,QAwD5D"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { filterTracker, tableFilters, tableFiltersUsed, } from "../../store/tableFilters";
|
|
3
3
|
import { logWarn } from "../../utils/logs";
|
|
4
|
-
import
|
|
4
|
+
import { ReusedHelpers } from "../../utils/reusedHelpers";
|
|
5
|
+
import { warnOnMisMatch } from "../../utils/sync/pullFromRemote/validateFilters";
|
|
5
6
|
import { checkIfTableExist } from "../../utils/tableValidator";
|
|
6
7
|
/**
|
|
7
8
|
* useSupastashFilters
|
|
@@ -31,7 +32,7 @@ import { checkIfTableExist } from "../../utils/tableValidator";
|
|
|
31
32
|
* ```
|
|
32
33
|
*
|
|
33
34
|
* @param {SupastashFilter} filters - An object where each key is a table name, and its value is
|
|
34
|
-
* an array of `
|
|
35
|
+
* an array of `SupastashFilter` objects that define the filter criteria for that table's pull sync.
|
|
35
36
|
*
|
|
36
37
|
* @note This hook does not re-run unless the `filters` object reference changes.
|
|
37
38
|
* To force re-evaluation, pass a fresh object (not just mutated data).
|
|
@@ -62,8 +63,9 @@ export function useSupastashFilters(filters) {
|
|
|
62
63
|
logWarn(`Table '${table}' does not exist; skipping filters`);
|
|
63
64
|
continue;
|
|
64
65
|
}
|
|
65
|
-
const raw = filters[table] ??
|
|
66
|
-
|
|
66
|
+
const raw = (filters[table] ??
|
|
67
|
+
[]);
|
|
68
|
+
const valid = raw.filter((f) => ReusedHelpers.isValidFilter([f]));
|
|
67
69
|
if (!valid.length) {
|
|
68
70
|
tableFilters.delete(table);
|
|
69
71
|
tableFiltersUsed.delete(table);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashLiteQuery/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/supastashLiteQuery/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAWhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiDM;AACN,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAC3C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAChC,eAAe,CAAC,CAAC,CAAC,CA0FpB"}
|
|
@@ -109,9 +109,19 @@ export function useSupastashLiteQuery(table, options = {}) {
|
|
|
109
109
|
loadMore();
|
|
110
110
|
}, [loadMore]);
|
|
111
111
|
const isAnyNullish = useMemo(() => {
|
|
112
|
-
if (!options.sqlFilter)
|
|
112
|
+
if (!options.sqlFilter?.length)
|
|
113
113
|
return false;
|
|
114
|
-
|
|
114
|
+
const check = (filter) => {
|
|
115
|
+
if (!filter || typeof filter !== "object")
|
|
116
|
+
return false;
|
|
117
|
+
if ("or" in filter) {
|
|
118
|
+
return filter.or?.some(check) ?? false;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return isTrulyNullish(filter.value) && filter.operator !== "is";
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
return options.sqlFilter.some(check);
|
|
115
125
|
}, [options.sqlFilter]);
|
|
116
126
|
return { data, loadMore, loading, hasMore, reset };
|
|
117
127
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { refreshScreen } from "./utils/refreshScreenCalls";
|
|
|
13
13
|
export { dropAllTables, dropTable, wipeAllTables, wipeOldDataForAllTables, wipeOldDataForATable, wipeTable, } from "./utils/schema/wipeTables";
|
|
14
14
|
export { getSupastashRuntimeMode, reinitializeSupastash, } from "./utils/supastashMode";
|
|
15
15
|
export { getAllTables } from "./utils/sync/getAllTables";
|
|
16
|
+
export { fetchOlderPage } from "./utils/sync/pullFromRemote/fetchOlder";
|
|
16
17
|
export { updateFilters } from "./utils/sync/pullFromRemote/updateFilter";
|
|
17
18
|
export { updateLocalDb, upsertData, } from "./utils/sync/pullFromRemote/updateLocalDb";
|
|
18
19
|
export { refreshAllTables, refreshTable, refreshTableWithPayload, } from "./utils/sync/refreshTables";
|
|
@@ -20,5 +21,6 @@ export { clearSyncCalls, getAllSyncTables, getSyncCall, registerSyncCall, unregi
|
|
|
20
21
|
export { clearAllLocalDeleteLog, clearAllLocalSyncLog, clearLocalDeleteLog, clearLocalSyncLog, clearSyncLog, getLocalDeleteLog, getSyncLog, resetSyncLog, setLocalDeleteLog, setLocalSyncLog, setSyncLog, } from "./utils/sync/status/syncStatus";
|
|
21
22
|
export type { CrudMethods } from "./types/query.types";
|
|
22
23
|
export type { RealtimeOptions, SupastashDataResult, SupastashFilter, } from "./types/realtimeData.types";
|
|
23
|
-
export type { SupastashConfig, SupastashHookReturn, SupastashSQLiteClientTypes, SupastashSQLiteDatabase, } from "./types/supastashConfig.types";
|
|
24
|
+
export type { SupastashConfig, SupastashHookReturn, SupastashSQLiteClientTypes, SupastashSQLiteDatabase, SupastashSQLiteExecutor, } from "./types/supastashConfig.types";
|
|
25
|
+
export type { SupastashClient, SupastashTransactionClient, } from "./utils/query/builder";
|
|
24
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EACL,aAAa,EACb,UAAU,GACX,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EACL,aAAa,EACb,UAAU,GACX,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,eAAe,EACf,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export { refreshScreen } from "./utils/refreshScreenCalls";
|
|
|
14
14
|
export { dropAllTables, dropTable, wipeAllTables, wipeOldDataForAllTables, wipeOldDataForATable, wipeTable, } from "./utils/schema/wipeTables";
|
|
15
15
|
export { getSupastashRuntimeMode, reinitializeSupastash, } from "./utils/supastashMode";
|
|
16
16
|
export { getAllTables } from "./utils/sync/getAllTables";
|
|
17
|
+
export { fetchOlderPage } from "./utils/sync/pullFromRemote/fetchOlder";
|
|
17
18
|
export { updateFilters } from "./utils/sync/pullFromRemote/updateFilter";
|
|
18
19
|
export { updateLocalDb, upsertData, } from "./utils/sync/pullFromRemote/updateLocalDb";
|
|
19
20
|
export { refreshAllTables, refreshTable, refreshTableWithPayload, } from "./utils/sync/refreshTables";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SupastashFilter } from "../types/realtimeData.types";
|
|
2
2
|
export declare const tableFiltersUsed: Set<string>;
|
|
3
|
-
export declare const filterTracker: Map<string,
|
|
4
|
-
export declare const tableFilters: Map<string,
|
|
3
|
+
export declare const filterTracker: Map<string, SupastashFilter[]>;
|
|
4
|
+
export declare const tableFilters: Map<string, SupastashFilter[]>;
|
|
5
5
|
//# sourceMappingURL=tableFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tableFilters.d.ts","sourceRoot":"","sources":["../../src/store/tableFilters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tableFilters.d.ts","sourceRoot":"","sources":["../../src/store/tableFilters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,eAAO,MAAM,gBAAgB,aAAoB,CAAC;AAClD,eAAO,MAAM,aAAa,gCAAuC,CAAC;AAElE,eAAO,MAAM,YAAY,gCAAuC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/store/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,eAAO,MAAM,OAAO,EAAS,MAAM,CACjC,MAAM,EACN,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CACpD,CAAC"}
|
package/dist/store/tx.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const txStore = {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { SQLiteDatabase, SQLiteRunResult } from "expo-sqlite";
|
|
2
|
+
|
|
3
|
+
export interface ExpoSQLiteDatabase extends SQLiteDatabase {
|
|
2
4
|
runAsync<T = any>(
|
|
3
5
|
statement: string,
|
|
4
6
|
params: SQLiteBindParams
|
|
@@ -44,15 +46,3 @@ export type SQLiteBindBlobParams = Record<string, Uint8Array>;
|
|
|
44
46
|
export type SQLiteColumnNames = string[];
|
|
45
47
|
export type SQLiteColumnValues = any[];
|
|
46
48
|
export type SQLiteAnyDatabase = any;
|
|
47
|
-
|
|
48
|
-
export interface SQLiteRunResult {
|
|
49
|
-
/**
|
|
50
|
-
* The last inserted row ID. Returned from the [`sqlite3_last_insert_rowid()`](https://www.sqlite.org/c3ref/last_insert_rowid.html) function.
|
|
51
|
-
*/
|
|
52
|
-
lastInsertRowId: number;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The number of rows affected. Returned from the [`sqlite3_changes()`](https://www.sqlite.org/c3ref/changes.html) function.
|
|
56
|
-
*/
|
|
57
|
-
changes: number;
|
|
58
|
-
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { SupastashQueryResult, SupastashResult } from "./query.types";
|
|
2
2
|
export type { SupastashDataHook, SupastashDataResult, } from "./realtimeData.types";
|
|
3
|
-
export type { SupastashConfig, SupastashSQLiteClientTypes, } from "./supastashConfig.types";
|
|
3
|
+
export type { SupastashConfig, SupastashSQLiteClientTypes, SupastashSQLiteDatabase, SupastashSQLiteExecutor, } from "./supastashConfig.types";
|
|
4
4
|
export type { SyncResult, TableSchema } from "./syncEngine.types";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SupastashFilter } from "./realtimeData.types";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* LiteQueryOptions
|
|
@@ -44,7 +44,7 @@ export type LiteQueryOptions<R = any> = {
|
|
|
44
44
|
* }
|
|
45
45
|
* ]
|
|
46
46
|
*/
|
|
47
|
-
sqlFilter?:
|
|
47
|
+
sqlFilter?: SupastashFilter<R>[];
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
export interface LiteQueryResult<R> {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PostgrestError, PostgrestSingleResponse } from "@supabase/supabase-js";
|
|
2
|
+
import { SupastashSQLiteExecutor } from "./supastashConfig.types";
|
|
2
3
|
|
|
3
|
-
type SupabaseResult<T> = PostgrestSingleResponse<T>;
|
|
4
|
+
export type SupabaseResult<T> = PostgrestSingleResponse<T>;
|
|
4
5
|
export type PayloadData = any;
|
|
5
6
|
|
|
6
7
|
export type SupabaseQueryReturn<U extends boolean, Z> = U extends true
|
|
@@ -50,6 +51,12 @@ export interface SupastashQuery<
|
|
|
50
51
|
viewRemoteResult: boolean;
|
|
51
52
|
onConflictKeys?: string[];
|
|
52
53
|
preserveTimestamp: boolean;
|
|
54
|
+
throwOnError: boolean;
|
|
55
|
+
fetchPolicy: FetchPolicy | null;
|
|
56
|
+
// With tx
|
|
57
|
+
txId: string | null;
|
|
58
|
+
tx: SupastashSQLiteExecutor | null;
|
|
59
|
+
withTx: boolean;
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
export interface CrudReturnValue {
|
|
@@ -95,6 +102,8 @@ export type SyncMode =
|
|
|
95
102
|
| "localOnly"
|
|
96
103
|
| "remoteOnly";
|
|
97
104
|
|
|
105
|
+
export type FetchPolicy = "localFirst" | "remoteFirst";
|
|
106
|
+
|
|
98
107
|
export type SupastashQueryResult<
|
|
99
108
|
T extends CrudMethods,
|
|
100
109
|
U extends boolean,
|
|
@@ -135,6 +144,13 @@ export type QueryBuilder<
|
|
|
135
144
|
// Transitions to U = true when called
|
|
136
145
|
single(): QueryBuilder<T, true, R, Z>;
|
|
137
146
|
|
|
147
|
+
/**
|
|
148
|
+
* Throws an error if the query fails.
|
|
149
|
+
*
|
|
150
|
+
* @returns more filter options.
|
|
151
|
+
*/
|
|
152
|
+
throwOnError(): QueryBuilder<T, U, R, Z>;
|
|
153
|
+
|
|
138
154
|
// Executes the query
|
|
139
155
|
execute<V extends boolean = false>(
|
|
140
156
|
options?: ExecuteOptions & { viewRemoteResult?: V }
|
|
@@ -168,3 +184,10 @@ export interface ExecuteOptions {
|
|
|
168
184
|
*/
|
|
169
185
|
debug?: boolean;
|
|
170
186
|
}
|
|
187
|
+
|
|
188
|
+
interface BatchedCall<T extends CrudMethods, U extends boolean, R> {
|
|
189
|
+
state: SupastashQuery<T, U, R>;
|
|
190
|
+
opKey: string;
|
|
191
|
+
resolve: (success: boolean) => void;
|
|
192
|
+
reject: (error: any) => void;
|
|
193
|
+
}
|
|
@@ -8,13 +8,17 @@ export type FilterOperator =
|
|
|
8
8
|
| "in"
|
|
9
9
|
| "is";
|
|
10
10
|
|
|
11
|
-
export type
|
|
11
|
+
export type Filter<R = any> = {
|
|
12
12
|
column: keyof R;
|
|
13
13
|
operator: FilterOperator;
|
|
14
14
|
value: string | number | null | boolean | (string | number)[];
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
export type SupastashFilter<R = any> =
|
|
17
|
+
export type SupastashFilter<R = any> =
|
|
18
|
+
| Filter<R>
|
|
19
|
+
| {
|
|
20
|
+
or: Filter<R>[];
|
|
21
|
+
};
|
|
18
22
|
|
|
19
23
|
export interface RealtimeOptions<R = any> {
|
|
20
24
|
/**
|
|
@@ -88,7 +92,7 @@ export interface RealtimeOptions<R = any> {
|
|
|
88
92
|
* @example
|
|
89
93
|
* sqlFilter: [{ column: "user_id", operator: "eq", value: "123" }]
|
|
90
94
|
*/
|
|
91
|
-
sqlFilter?:
|
|
95
|
+
sqlFilter?: SupastashFilter<R>[];
|
|
92
96
|
|
|
93
97
|
/**
|
|
94
98
|
* Clears the shared cache for this table when the hook mounts.
|
|
@@ -115,7 +119,7 @@ export interface RealtimeOptions<R = any> {
|
|
|
115
119
|
* value: "123"
|
|
116
120
|
* }
|
|
117
121
|
*/
|
|
118
|
-
filter?:
|
|
122
|
+
filter?: SupastashFilter<R>;
|
|
119
123
|
|
|
120
124
|
/**
|
|
121
125
|
* If true, only use the filter for the realtime subscription stream.
|