supastash 0.1.37 → 0.1.39

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/index.d.ts CHANGED
@@ -8,9 +8,11 @@ export { syncAllTables, syncTable } from "./hooks/syncEngine";
8
8
  export { useSupastashSyncStatus } from "./hooks/syncStatus";
9
9
  export { supastashEventBus } from "./utils/events/eventBus";
10
10
  export { supastash } from "./utils/query/builder";
11
+ export { refreshScreen } from "./utils/refreshScreenCalls";
11
12
  export { dropAllTables, dropTable, wipeAllTables, wipeOldDataForAllTables, wipeOldDataForATable, wipeTable, } from "./utils/schema/wipeTables";
12
13
  export { getAllTables } from "./utils/sync/getAllTables";
13
14
  export { updateFilters } from "./utils/sync/pullFromRemote/updateFilter";
15
+ export { upsertData } from "./utils/sync/pullFromRemote/updateLocalDb";
14
16
  export { refreshAllTables, refreshTable, refreshTableWithPayload, } from "./utils/sync/refreshTables";
15
17
  export { clearSyncCalls, getAllSyncTables, getSyncCall, registerSyncCall, unregisterSyncCall, } from "./utils/sync/registration/syncCalls";
16
18
  export { clearAllLocalDeleteLog, clearAllLocalSyncLog, clearLocalDeleteLog, clearLocalSyncLog, clearSyncLog, getLocalDeleteLog, getSyncLog, resetSyncLog, setLocalDeleteLog, setLocalSyncLog, setSyncLog, } from "./utils/sync/status/syncStatus";
@@ -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,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,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,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,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACvE,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"}
package/dist/index.js CHANGED
@@ -9,9 +9,11 @@ export { syncAllTables, syncTable } from "./hooks/syncEngine";
9
9
  export { useSupastashSyncStatus } from "./hooks/syncStatus";
10
10
  export { supastashEventBus } from "./utils/events/eventBus";
11
11
  export { supastash } from "./utils/query/builder";
12
+ export { refreshScreen } from "./utils/refreshScreenCalls";
12
13
  export { dropAllTables, dropTable, wipeAllTables, wipeOldDataForAllTables, wipeOldDataForATable, wipeTable, } from "./utils/schema/wipeTables";
13
14
  export { getAllTables } from "./utils/sync/getAllTables";
14
15
  export { updateFilters } from "./utils/sync/pullFromRemote/updateFilter";
16
+ export { upsertData } from "./utils/sync/pullFromRemote/updateLocalDb";
15
17
  export { refreshAllTables, refreshTable, refreshTableWithPayload, } from "./utils/sync/refreshTables";
16
18
  export { clearSyncCalls, getAllSyncTables, getSyncCall, registerSyncCall, unregisterSyncCall, } from "./utils/sync/registration/syncCalls";
17
19
  export { clearAllLocalDeleteLog, clearAllLocalSyncLog, clearLocalDeleteLog, clearLocalSyncLog, clearSyncLog, getLocalDeleteLog, getSyncLog, resetSyncLog, setLocalDeleteLog, setLocalSyncLog, setSyncLog, } from "./utils/sync/status/syncStatus";
@@ -16,7 +16,7 @@ export function buildWhereClause(filters) {
16
16
  case "IN":
17
17
  if (!Array.isArray(value) || value.length === 0)
18
18
  continue;
19
- const isValid = safeValue.every((v) => typeof v === "string" ||
19
+ const isValid = value.every((v) => typeof v === "string" ||
20
20
  typeof v === "number" ||
21
21
  typeof v === "boolean" ||
22
22
  v === null);
@@ -15,7 +15,7 @@ export async function deleteData(table, filters, syncMode) {
15
15
  const db = await getSupastashDb();
16
16
  const timeStamp = new Date().toISOString();
17
17
  const itemsToBeDeleted = await db.getAllAsync(`SELECT * FROM ${table} ${clause}`, filterValues);
18
- await db.runAsync(`UPDATE ${table} SET deleted_at = ?, synced_at = ?, updated_at = ? ${clause}`, [timeStamp, timeStamp, timeStamp, ...filterValues]);
18
+ await db.runAsync(`UPDATE ${table} SET deleted_at = ?, synced_at = NULL ${clause}`, [timeStamp, ...filterValues]);
19
19
  if (syncMode === "localOnly" || syncMode === "remoteFirst") {
20
20
  permanentlyDeleteData(table, filters);
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"supabaseQuery.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/remoteQuery/supabaseQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAC;AAWpC;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACzD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,EACxC,SAAS,UAAQ,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAuNpC"}
1
+ {"version":3,"file":"supabaseQuery.d.ts","sourceRoot":"","sources":["../../../../src/utils/query/remoteQuery/supabaseQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAC;AAWpC;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EACzD,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,EACxC,SAAS,UAAQ,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CA0NpC"}
@@ -97,9 +97,9 @@ export async function querySupabase(state, isBatched = false) {
97
97
  });
98
98
  break;
99
99
  case "delete":
100
+ console.log("delete", timeStamp);
100
101
  filterQuery = query.update({
101
102
  deleted_at: timeStamp,
102
- updated_at: timeStamp,
103
103
  });
104
104
  break;
105
105
  default:
@@ -113,6 +113,9 @@ export async function querySupabase(state, isBatched = false) {
113
113
  filterQuery = filterQuery[op](column, value);
114
114
  }
115
115
  }
116
+ if (method === "delete") {
117
+ console.log("delete", filterQuery);
118
+ }
116
119
  if (limit != null) {
117
120
  filterQuery = filterQuery.limit(limit);
118
121
  }
@@ -1,9 +1,21 @@
1
1
  export declare function isTrulyNullish(value: any): boolean;
2
2
  /**
3
- * Converts a value into a stable JSON string representation.
4
- *
5
- * @param value - The value to convert
6
- * @returns A stable stringified version of the input
3
+ * Deterministically stringify any value:
4
+ * - Sorts object keys for stability
5
+ * - Converts Date -> ISO string
6
+ * - Converts BigInt -> string
7
+ * - Replaces NaN/Infinity/undefined with null
8
+ * - Handles circular references
9
+ */
10
+ export declare function stableStringify(input: any): string;
11
+ /**
12
+ * Normalize a value to something SQLite can bind safely:
13
+ * - Dates -> ISO string
14
+ * - Booleans -> 1/0
15
+ * - Arrays/Objects -> stable JSON string
16
+ * - BigInt -> string
17
+ * - undefined/NaN/Infinity -> null
18
+ * - Everything else passes through
7
19
  */
8
20
  export declare function getSafeValue(value: any): any;
9
21
  //# sourceMappingURL=serializer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/utils/serializer.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAUlD;AAuBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAuB5C"}
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/utils/serializer.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAUlD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAqClD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAa5C"}
@@ -8,46 +8,72 @@ export function isTrulyNullish(value) {
8
8
  (typeof value === "number" && isNaN(value)));
9
9
  }
10
10
  /**
11
- * Converts a value into a stable JSON string representation.
12
- *
13
- * @param obj - The object to convert
14
- * @returns A stable stringified version of the input
11
+ * Deterministically stringify any value:
12
+ * - Sorts object keys for stability
13
+ * - Converts Date -> ISO string
14
+ * - Converts BigInt -> string
15
+ * - Replaces NaN/Infinity/undefined with null
16
+ * - Handles circular references
15
17
  */
16
- function stableStringify(obj) {
17
- if (Array.isArray(obj))
18
- return JSON.stringify(obj);
19
- if (typeof obj === "object" && obj !== null) {
20
- return JSON.stringify(Object.keys(obj)
21
- .sort()
22
- .reduce((acc, key) => {
23
- acc[key] = obj[key];
24
- return acc;
25
- }, {}));
26
- }
27
- return JSON.stringify(obj);
18
+ export function stableStringify(input) {
19
+ const seen = new WeakSet();
20
+ const sanitize = (val) => {
21
+ if (val === null)
22
+ return null;
23
+ const t = typeof val;
24
+ if (t === "number") {
25
+ return Number.isFinite(val) ? val : null;
26
+ }
27
+ if (t === "bigint")
28
+ return val.toString();
29
+ if (t === "string")
30
+ return val;
31
+ if (t === "boolean")
32
+ return val;
33
+ if (val instanceof Date)
34
+ return val.toISOString();
35
+ if (Array.isArray(val)) {
36
+ return val.map((v) => sanitize(v));
37
+ }
38
+ if (t === "object") {
39
+ if (seen.has(val))
40
+ return "[Circular]";
41
+ seen.add(val);
42
+ const out = {};
43
+ for (const k of Object.keys(val).sort()) {
44
+ out[k] = sanitize(val[k]);
45
+ }
46
+ seen.delete(val);
47
+ return out;
48
+ }
49
+ // functions/symbol/undefined -> null
50
+ return null;
51
+ };
52
+ return JSON.stringify(sanitize(input));
28
53
  }
29
54
  /**
30
- * Converts a value into a stable JSON string representation.
31
- *
32
- * @param value - The value to convert
33
- * @returns A stable stringified version of the input
55
+ * Normalize a value to something SQLite can bind safely:
56
+ * - Dates -> ISO string
57
+ * - Booleans -> 1/0
58
+ * - Arrays/Objects -> stable JSON string
59
+ * - BigInt -> string
60
+ * - undefined/NaN/Infinity -> null
61
+ * - Everything else passes through
34
62
  */
35
63
  export function getSafeValue(value) {
64
+ if (value === undefined)
65
+ return null;
66
+ if (typeof value === "number" && !Number.isFinite(value))
67
+ return null;
36
68
  if (value instanceof Date)
37
69
  return value.toISOString();
38
- if (Array.isArray(value)) {
39
- const allPrimitives = value.every((v) => typeof v === "string" ||
40
- typeof v === "number" ||
41
- typeof v === "boolean" ||
42
- v === null);
43
- if (allPrimitives)
44
- return value;
45
- const allObjects = value.every((v) => typeof v === "object" && v !== null);
46
- if (allObjects)
47
- return value.map(stableStringify);
70
+ if (typeof value === "bigint")
71
+ return value.toString();
72
+ if (typeof value === "boolean")
73
+ return value ? 1 : 0;
74
+ if (Array.isArray(value))
48
75
  return stableStringify(value);
49
- }
50
- if (typeof value === "object" && value !== null)
76
+ if (value && typeof value === "object")
51
77
  return stableStringify(value);
52
78
  return value;
53
79
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supastash",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",