supastash 0.2.2 → 0.2.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAOxE,CAAC"}
1
+ {"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAIxE,CAAC"}
@@ -96,9 +96,6 @@ export const FetchOlderHelpers = {
96
96
  async storeToDb({ table, data }) {
97
97
  if (data.length === 0)
98
98
  return;
99
- const db = await getSupastashDb();
100
- await db.withTransaction(async (tx) => {
101
- await upsertChunkData({ tx, table, records: data });
102
- });
99
+ await upsertChunkData({ table, records: data });
103
100
  },
104
101
  };
@@ -1 +1 @@
1
- {"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAsGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgGhB"}
1
+ {"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/desktop/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAmGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgGhB"}
@@ -55,37 +55,34 @@ export async function updateLocalDb(table, filters, onReceiveData) {
55
55
  });
56
56
  refreshNeeded = !!data?.length || !!deletedIds?.length;
57
57
  // Delete records that are no longer in the remote data
58
- await db.withTransaction(async (tx) => {
59
- if (deletedIds && deletedIds.length > 0) {
60
- const ids = deletedIds;
61
- for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
62
- const slice = ids.slice(i, i + CHUNK_SIZE);
63
- const placeholders = slice.map(() => "?").join(", ");
64
- await tx.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
65
- }
58
+ if (deletedIds && deletedIds.length > 0) {
59
+ const ids = deletedIds;
60
+ for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
61
+ const slice = ids.slice(i, i + CHUNK_SIZE);
62
+ const placeholders = slice.map(() => "?").join(", ");
63
+ await db.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
66
64
  }
67
- // Get the local stamp of the records
68
- let localStamp = new Map();
69
- if (data?.length) {
70
- const ids = data.map((r) => r.id).filter(Boolean);
71
- for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
72
- const slice = ids.slice(i, i + CHUNK_SIZE);
73
- const placeholders = slice.map(() => "?").join(", ");
74
- const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
75
- for (const row of rows ?? []) {
76
- localStamp.set(row.id, row.updated_at ?? null);
77
- }
65
+ }
66
+ // Get the local stamp of the records
67
+ let localStamp = new Map();
68
+ if (data?.length) {
69
+ const ids = data.map((r) => r.id).filter(Boolean);
70
+ for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
71
+ const slice = ids.slice(i, i + CHUNK_SIZE);
72
+ const placeholders = slice.map(() => "?").join(", ");
73
+ const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
74
+ for (const row of rows ?? []) {
75
+ localStamp.set(row.id, row.updated_at ?? null);
78
76
  }
79
77
  }
80
- // Update local database with remote changes
81
- if (data?.length) {
82
- await upsertChunkData({
83
- tx,
84
- table,
85
- records: data,
86
- });
87
- }
88
- });
78
+ }
79
+ // Update local database with remote changes
80
+ if (data?.length) {
81
+ await upsertChunkData({
82
+ table,
83
+ records: data,
84
+ });
85
+ }
89
86
  if (timestamps) {
90
87
  await setSupastashSyncStatus(table, filters, {
91
88
  lastSyncedAt: timestamps.updatedMax,
@@ -1 +1 @@
1
- {"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAOxE,CAAC"}
1
+ {"version":3,"file":"fetchOlderHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/fetchOlderHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AASvE,eAAO,MAAM,iBAAiB;sDAIzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;yCAmBE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B;;;;gFA8BE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB;uBAqDkB,cAAc,GAAG;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,WAAW,EAAE,CAAC;KACrB;+BAagC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE;CAIxE,CAAC"}
@@ -96,9 +96,6 @@ export const FetchOlderHelpers = {
96
96
  async storeToDb({ table, data }) {
97
97
  if (data.length === 0)
98
98
  return;
99
- const db = await getSupastashDb();
100
- await db.withTransaction(async (tx) => {
101
- await upsertChunkData({ tx, table, records: data });
102
- });
99
+ await upsertChunkData({ table, records: data });
103
100
  },
104
101
  };
@@ -1 +1 @@
1
- {"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAsGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FhB"}
1
+ {"version":3,"file":"updateLocalDb.d.ts","sourceRoot":"","sources":["../../../../../src/native/utils/sync/pullFromRemote/updateLocalDb.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAiB7E;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,EAAE,EAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,iBAkGhD;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqElC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;EAyBE;AACF,wBAAsB,eAAe,CAAC,EACpC,EAAE,EACF,KAAK,EACL,OAAO,GACR,EAAE;IACD,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FhB"}
@@ -42,7 +42,6 @@ export async function updateLocalDb(table, filters, onReceiveData) {
42
42
  const data = dataResult?.data;
43
43
  const timestamps = dataResult.timestamps;
44
44
  const deletedIds = dataResult.deletedIds;
45
- const deletedIdSet = new Set(deletedIds ?? []);
46
45
  SyncInfoUpdater.setUnsyncedDataCount({
47
46
  amount: data?.length ?? 0,
48
47
  type: "pull",
@@ -55,37 +54,34 @@ export async function updateLocalDb(table, filters, onReceiveData) {
55
54
  });
56
55
  refreshNeeded = !!data?.length || !!deletedIds?.length;
57
56
  // Delete records that are no longer in the remote data
58
- await db.withTransaction(async (tx) => {
59
- if (deletedIds && deletedIds.length > 0) {
60
- const ids = deletedIds;
61
- for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
62
- const slice = ids.slice(i, i + CHUNK_SIZE);
63
- const placeholders = slice.map(() => "?").join(", ");
64
- await tx.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
65
- }
57
+ if (deletedIds && deletedIds.length > 0) {
58
+ const ids = deletedIds;
59
+ for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
60
+ const slice = ids.slice(i, i + CHUNK_SIZE);
61
+ const placeholders = slice.map(() => "?").join(", ");
62
+ await db.runAsync(`DELETE FROM ${table} WHERE id IN (${placeholders})`, slice);
66
63
  }
67
- // Get the local stamp of the records
68
- let localStamp = new Map();
69
- if (data?.length) {
70
- const ids = data.map((r) => r.id).filter(Boolean);
71
- for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
72
- const slice = ids.slice(i, i + CHUNK_SIZE);
73
- const placeholders = slice.map(() => "?").join(", ");
74
- const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
75
- for (const row of rows ?? []) {
76
- localStamp.set(row.id, row.updated_at ?? null);
77
- }
64
+ }
65
+ // Get the local stamp of the records
66
+ let localStamp = new Map();
67
+ if (data?.length) {
68
+ const ids = data.map((r) => r.id).filter(Boolean);
69
+ for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
70
+ const slice = ids.slice(i, i + CHUNK_SIZE);
71
+ const placeholders = slice.map(() => "?").join(", ");
72
+ const rows = await db.getAllAsync(`SELECT id, updated_at FROM ${table} WHERE id IN (${placeholders})`, slice);
73
+ for (const row of rows ?? []) {
74
+ localStamp.set(row.id, row.updated_at ?? null);
78
75
  }
79
76
  }
80
- // Update local database with remote changes
81
- if (data?.length) {
82
- await upsertChunkData({
83
- tx,
84
- table,
85
- records: data,
86
- });
87
- }
88
- });
77
+ }
78
+ // Update local database with remote changes
79
+ if (data?.length) {
80
+ await upsertChunkData({
81
+ table,
82
+ records: data,
83
+ });
84
+ }
89
85
  if (timestamps) {
90
86
  await setSupastashSyncStatus(table, filters, {
91
87
  lastSyncedAt: timestamps.updatedMax,
@@ -1 +1 @@
1
- {"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../../src/shared/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAI3C,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,mBAAmB,CAyJ1E,CAAC"}
1
+ {"version":3,"file":"rn_nitro.d.ts","sourceRoot":"","sources":["../../../../src/shared/db/adapters/rn_nitro.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,mCAAmC,CAAC;AAI3C,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,mBAAmB,CA+I1E,CAAC"}
@@ -50,61 +50,43 @@ export const SQLiteAdapterNitro = {
50
50
  await db.close?.();
51
51
  },
52
52
  withTransaction: async (fn) => {
53
- const statements = [];
54
- const enqueue = (sql, params) => {
55
- statements.push({ sql, params });
56
- };
57
- const txExecutor = {
58
- runAsync: async (sql, params) => {
59
- enqueue(sql, params ?? []);
60
- },
61
- execAsync: async (statement) => {
62
- enqueue(statement, []);
63
- },
64
- getAllAsync: async (sql, params) => {
65
- const result = await db.executeAsync(sql, params ?? []);
66
- return result.rows?._array ?? [];
67
- },
68
- getFirstAsync: async (sql, params) => {
69
- const result = await db.executeAsync(sql, params ?? []);
70
- return result.rows?._array?.[0] ?? null;
71
- },
72
- query: async (sql, params) => {
73
- const { sql: q, params: p } = params
74
- ? namedToPositional(sql, params)
75
- : { sql, params: [] };
76
- const result = await db.executeAsync(q, p ?? []);
77
- return result.rows?._array ?? [];
78
- },
79
- queryOne: async (sql, params) => {
80
- const { sql: q, params: p } = params
81
- ? namedToPositional(sql, params)
82
- : { sql, params: [] };
83
- const result = await db.executeAsync(q, p ?? []);
84
- return result.rows?._array?.[0] ?? null;
85
- },
86
- execute: async (sql, params) => {
87
- const { sql: q, params: p } = params
88
- ? namedToPositional(sql, params)
89
- : { sql, params: [] };
90
- enqueue(q, p ?? []);
91
- return {};
92
- },
93
- };
94
- await fn(txExecutor);
95
- if (statements.length === 0)
96
- return;
97
- await db.executeAsync("BEGIN");
98
- try {
99
- for (const { sql, params } of statements) {
100
- await db.executeAsync(sql, params);
101
- }
102
- await db.executeAsync("COMMIT");
103
- }
104
- catch (err) {
105
- await db.executeAsync("ROLLBACK").catch(() => { });
106
- throw err;
107
- }
53
+ await db.transaction(async (tx) => {
54
+ const txExecutor = {
55
+ runAsync: async (sql, params) => await tx.executeAsync(sql, params ?? []),
56
+ execAsync: async (statement) => {
57
+ await tx.executeAsync(statement);
58
+ },
59
+ getAllAsync: async (sql, params) => {
60
+ const result = await tx.executeAsync(sql, params ?? []);
61
+ return result.rows?._array ?? [];
62
+ },
63
+ getFirstAsync: async (sql, params) => {
64
+ const result = await tx.executeAsync(sql, params ?? []);
65
+ return result.rows?._array?.[0] ?? null;
66
+ },
67
+ query: async (sql, params) => {
68
+ const { sql: q, params: p } = params
69
+ ? namedToPositional(sql, params)
70
+ : { sql, params: [] };
71
+ const result = await tx.executeAsync(q, p ?? []);
72
+ return result.rows?._array ?? [];
73
+ },
74
+ queryOne: async (sql, params) => {
75
+ const { sql: q, params: p } = params
76
+ ? namedToPositional(sql, params)
77
+ : { sql, params: [] };
78
+ const result = await tx.executeAsync(q, p ?? []);
79
+ return result.rows?._array?.[0] ?? null;
80
+ },
81
+ execute: async (sql, params) => {
82
+ const { sql: q, params: p } = params
83
+ ? namedToPositional(sql, params)
84
+ : { sql, params: [] };
85
+ return await tx.executeAsync(q, p ?? []);
86
+ },
87
+ };
88
+ await fn(txExecutor);
89
+ });
108
90
  },
109
91
  };
110
92
  },
@@ -42,7 +42,9 @@ export declare class SupastashQueryBuilder<T extends CrudMethods, U extends bool
42
42
  *
43
43
  * In this example, both inserts succeed or both fail.
44
44
  */
45
- withTransaction(fn: (tx: SupastashTransactionalBuilder<T, U, R>) => Promise<void> | void): Promise<void>;
45
+ withTransaction(fn: (tx: SupastashTransactionalBuilder<T, U, R>) => Promise<void> | void, options?: {
46
+ syncMode?: "fire-and-forget" | "await-all";
47
+ }): Promise<void>;
46
48
  }
47
49
  type SupastashTransactionalBuilder<T extends CrudMethods, U extends boolean, R> = Omit<SupastashQueryBuilder<T, U, R>, "withTransaction">;
48
50
  export type SupastashTransactionClient = SupastashTransactionalBuilder<CrudMethods, boolean, PayloadData>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/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;IAOlB;;;;;;;;;;;;;;;;;;;;;;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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/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;IAOlB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,CACb,EAAE,EAAE,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACxE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAA;KAAE;CA0D3D;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"}
@@ -50,7 +50,7 @@ export class SupastashQueryBuilder {
50
50
  *
51
51
  * In this example, both inserts succeed or both fail.
52
52
  */
53
- withTransaction(fn) {
53
+ withTransaction(fn, options) {
54
54
  const query = async () => {
55
55
  // Create a new transaction id
56
56
  const newTxId = generateUUIDv4();
@@ -81,8 +81,18 @@ export class SupastashQueryBuilder {
81
81
  type: "remoteOnly",
82
82
  };
83
83
  });
84
- for (const state of newStates) {
85
- queueRemoteCall(state);
84
+ const queue = async () => {
85
+ for (const state of newStates) {
86
+ await queueRemoteCall(state);
87
+ }
88
+ };
89
+ if (options?.syncMode === "await-all") {
90
+ // wait for all (fail fast)
91
+ await queue();
92
+ }
93
+ else {
94
+ // fire and forget (default)
95
+ queue();
86
96
  }
87
97
  }
88
98
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supastash",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",