expo-sqlite 58.0.11 → 58.0.12

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/android/build.gradle +2 -2
  3. package/build/WebConfiguration.d.ts +31 -0
  4. package/build/WebConfiguration.js +21 -0
  5. package/build/WebConfiguration.js.map +1 -0
  6. package/build/index.d.ts +1 -0
  7. package/build/index.js +1 -0
  8. package/build/index.js.map +1 -1
  9. package/dev-plugin-dist/+not-found.html +2 -4
  10. package/dev-plugin-dist/_expo/static/js/web/{__common-8b6d10c7ab64ecfd128d45105ef5590b.js → __common-3e95e247f8ee6d975454b07047f39148.js} +52 -51
  11. package/dev-plugin-dist/_expo/static/js/web/{_layout-1da259c4109daa50bd04899675f5d333.js → _layout-0bc906c56b363d38baf86696db19957e.js} +24 -24
  12. package/dev-plugin-dist/_expo/static/js/web/{entry-5e24130038c41e25d9a78d08664ef6cb.js → entry-293efbd088ab66af1b3334c3eeafa61f.js} +756 -755
  13. package/dev-plugin-dist/_expo/static/js/web/{index-17ca77580cae7c249688c43b3b3e0949.js → index-454a4f95007576080f4f47d70441d41a.js} +1740 -1740
  14. package/dev-plugin-dist/_expo/static/js/web/{worker-cc2e40fb110f53b73733dd7e24d9d8f6.js → worker-172ab4a50823f055f5bd777d90d1a36a.js} +17 -17
  15. package/dev-plugin-dist/_sitemap.html +2 -4
  16. package/dev-plugin-dist/index.html +2 -4
  17. package/expo-module.config.json +0 -3
  18. package/ios/DatabaseFileUtils.swift +101 -5
  19. package/ios/SQLiteModule.swift +8 -2
  20. package/ios/Tests/DatabaseFileUtilsTests.swift +119 -0
  21. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.aar +0 -0
  22. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.aar.md5 +1 -0
  23. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.aar.sha1 +1 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.aar.sha256 +1 -0
  25. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.aar.sha512 +1 -0
  26. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11.module → 58.0.12/expo.modules.sqlite-58.0.12.module} +17 -17
  27. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.module.md5 +1 -0
  28. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.module.sha1 +1 -0
  29. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.module.sha256 +1 -0
  30. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.module.sha512 +1 -0
  31. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11.pom → 58.0.12/expo.modules.sqlite-58.0.12.pom} +1 -1
  32. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.pom.md5 +1 -0
  33. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.pom.sha1 +1 -0
  34. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.pom.sha256 +1 -0
  35. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.12/expo.modules.sqlite-58.0.12.pom.sha512 +1 -0
  36. package/package.json +2 -2
  37. package/src/WebConfiguration.ts +36 -0
  38. package/src/index.ts +1 -0
  39. package/web/SQLiteModule.ts +16 -0
  40. package/web/WorkerChannel.ts +17 -9
  41. package/web/wa-sqlite/sqlite-api.js +4 -1
  42. package/web/web.types.ts +6 -0
  43. package/web/worker.ts +50 -38
  44. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar +0 -0
  45. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.md5 +0 -1
  46. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha1 +0 -1
  47. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha256 +0 -1
  48. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha512 +0 -1
  49. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.md5 +0 -1
  50. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha1 +0 -1
  51. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha256 +0 -1
  52. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha512 +0 -1
  53. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.md5 +0 -1
  54. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha1 +0 -1
  55. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha256 +0 -1
  56. package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha512 +0 -1
  57. /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar → 58.0.12/expo.modules.sqlite-58.0.12-sources.jar} +0 -0
  58. /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.md5 → 58.0.12/expo.modules.sqlite-58.0.12-sources.jar.md5} +0 -0
  59. /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha1 → 58.0.12/expo.modules.sqlite-58.0.12-sources.jar.sha1} +0 -0
  60. /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha256 → 58.0.12/expo.modules.sqlite-58.0.12-sources.jar.sha256} +0 -0
  61. /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha512 → 58.0.12/expo.modules.sqlite-58.0.12-sources.jar.sha512} +0 -0
package/web/web.types.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  type SQLiteColumnNames,
9
9
  type SQLiteColumnValues,
10
10
  } from '../src/NativeStatement';
11
+ import { type SQLiteWebOptions } from '../src/WebConfiguration';
11
12
  import { type SQLAction } from './SQLAction';
12
13
 
13
14
  export interface SyncWorkerMessage {
@@ -250,6 +251,11 @@ type SessionInvertChangesetMessage = BaseWorkerMessage & {
250
251
  };
251
252
  };
252
253
 
254
+ export interface ConfigureWorkerMessage {
255
+ type: 'configure';
256
+ data: SQLiteWebOptions;
257
+ }
258
+
253
259
  //#endregion Request messages
254
260
 
255
261
  //#region Response messages
package/web/worker.ts CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { type Changeset } from '../src/NativeSession';
6
6
  import { type SQLiteColumnNames, type SQLiteColumnValues } from '../src/NativeStatement';
7
+ import { type SQLiteWebOptions } from '../src/WebConfiguration';
7
8
  import { createSQLAction } from './SQLAction';
8
9
  import { SQLiteOptions } from './SQLiteOptions';
9
10
  import { sendWorkerResult } from './WorkerChannel';
@@ -21,6 +22,7 @@ import WaSQLiteFactory from './wa-sqlite/wa-sqlite';
21
22
  // @ts-expect-error wasm module is not typed
22
23
  import wasmModule from './wa-sqlite/wa-sqlite.wasm';
23
24
  import {
25
+ type ConfigureWorkerMessage,
24
26
  type SQLiteWorkerMessage,
25
27
  type SQLiteWorkerMessageType,
26
28
  type MessageTypeMap,
@@ -40,6 +42,7 @@ interface DatabaseEntity {
40
42
  }
41
43
  interface StatementEntity {
42
44
  pointer: StatementPointer;
45
+ databasePointer: DatabasePointer;
43
46
  }
44
47
  interface SessionEntity {
45
48
  pointer: SessionPointer;
@@ -54,6 +57,7 @@ const MIN_INT32 = -0x80000000;
54
57
  let _sqlite3: SQLiteAPI | null = null;
55
58
  let _vfs: AccessHandlePoolVFS | null = null;
56
59
  let _vfsMemory: MemoryVFS | null = null;
60
+ let _webOptions: SQLiteWebOptions = {};
57
61
 
58
62
  const databaseIdMap = new Map<number, DatabaseEntity>();
59
63
  const statementIdMap = new Map<number, StatementEntity>();
@@ -61,7 +65,12 @@ const sessionIdMap = new Map<number, SessionEntity>();
61
65
 
62
66
  class SQLiteErrorException extends Error {}
63
67
 
64
- self.onmessage = async (event: MessageEvent<SQLiteWorkerMessage>) => {
68
+ self.onmessage = async (event: MessageEvent<SQLiteWorkerMessage | ConfigureWorkerMessage>) => {
69
+ if (event.data.type === 'configure') {
70
+ _webOptions = event.data.data;
71
+ return;
72
+ }
73
+
65
74
  let result: ResultType | null = null;
66
75
  let error: Error | null = null;
67
76
  try {
@@ -118,7 +127,7 @@ async function handleMessageImpl<T extends SQLiteWorkerMessageType>({
118
127
  }
119
128
 
120
129
  case 'finalize': {
121
- await finalize(data.nativeDatabaseId, data.nativeStatementId);
130
+ await finalize(data.nativeStatementId);
122
131
  break;
123
132
  }
124
133
 
@@ -253,12 +262,20 @@ async function backupDatabase(
253
262
  }
254
263
 
255
264
  async function closeDatabase(nativeDatabaseId: number) {
256
- maybeFinalizeAllStatements(nativeDatabaseId);
257
265
  const { sqlite3 } = await maybeInitAsync();
258
266
  const dbEntity = databaseIdMap.get(nativeDatabaseId);
259
- if (dbEntity) {
260
- databaseIdMap.delete(nativeDatabaseId);
267
+ if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
268
+
269
+ databaseIdMap.delete(nativeDatabaseId);
270
+ if ([...databaseIdMap.values()].includes(dbEntity)) {
271
+ return;
272
+ }
273
+ try {
274
+ await maybeFinalizeAllStatements(sqlite3, dbEntity);
261
275
  await sqlite3.close(dbEntity.pointer);
276
+ } catch (e) {
277
+ databaseIdMap.set(nativeDatabaseId, dbEntity);
278
+ throw e;
262
279
  }
263
280
  }
264
281
 
@@ -289,10 +306,9 @@ async function exec(nativeDatabaseId: number, source: string) {
289
306
  await sqlite3.exec(dbEntity.pointer, source);
290
307
  }
291
308
 
292
- async function finalize(nativeDatabaseId: number, nativeStatementId: number): Promise<void> {
309
+ // A closed handle to a shared connection may still own statements, so don't require its id here.
310
+ async function finalize(nativeStatementId: number): Promise<void> {
293
311
  const { sqlite3 } = await maybeInitAsync();
294
- const dbEntity = databaseIdMap.get(nativeDatabaseId);
295
- if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
296
312
  const stmt = statementIdMap.get(nativeStatementId);
297
313
  if (!stmt) throw new Error(`Statement not found - nativeStatementId[${nativeStatementId}]`);
298
314
 
@@ -429,7 +445,10 @@ async function prepare(
429
445
  const { value: statementPointer } = await asyncIterator.next();
430
446
  asyncIterator.return?.();
431
447
  if (!statementPointer) throw new Error('Failed to prepare statement');
432
- statementIdMap.set(nativeStatementId, { pointer: statementPointer });
448
+ statementIdMap.set(nativeStatementId, {
449
+ pointer: statementPointer,
450
+ databasePointer: dbEntity.pointer,
451
+ });
433
452
  }
434
453
 
435
454
  async function run(
@@ -736,40 +755,21 @@ async function initDb(sqlite3: SQLiteAPI, dbEntity: DatabaseEntity) {
736
755
  }
737
756
  }
738
757
 
739
- async function maybeFinalizeAllStatements(nativeDatabaseId: number) {
740
- const { sqlite3 } = await maybeInitAsync();
741
- const dbEntity = databaseIdMap.get(nativeDatabaseId);
742
- if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
758
+ async function maybeFinalizeAllStatements(sqlite3: SQLiteAPI, dbEntity: DatabaseEntity) {
743
759
  if (!dbEntity.openOptions.finalizeUnusedStatementsBeforeClosing) {
744
760
  return;
745
761
  }
746
762
 
747
- let error: Error | null = null;
748
- const finalizedStatements: StatementPointer[] = [];
749
- let stmt: StatementPointer | null = sqlite3.next_stmt(dbEntity.pointer, null);
750
- while (stmt != null && stmt !== 0) {
751
- const nextStmt: StatementPointer = sqlite3.next_stmt(dbEntity.pointer, stmt);
752
- try {
753
- sqlite3.finalize(stmt);
754
- finalizedStatements.push(stmt);
755
- } catch (e) {
756
- error = e;
757
- }
758
- stmt = nextStmt;
759
- }
760
-
761
- // Delete finalized statements from the map
762
- const statementsToDelete: number[] = [];
763
763
  for (const [nativeStatementId, stmtEntity] of statementIdMap.entries()) {
764
- if (finalizedStatements.includes(stmtEntity.pointer)) {
765
- statementsToDelete.push(nativeStatementId);
764
+ if (stmtEntity.databasePointer !== dbEntity.pointer) {
765
+ continue;
766
766
  }
767
- }
768
- for (const nativeStatementId of statementsToDelete) {
769
767
  statementIdMap.delete(nativeStatementId);
768
+ const result = await sqlite3.finalize(stmtEntity.pointer);
769
+ if (result !== SQLITE_OK) {
770
+ console.warn(`Finalizing a statement during close failed - error code[${result}]`);
771
+ }
770
772
  }
771
-
772
- if (error) throw error;
773
773
  }
774
774
 
775
775
  async function maybeInitAsync(): Promise<{
@@ -778,9 +778,7 @@ async function maybeInitAsync(): Promise<{
778
778
  vfsMemory: MemoryVFS;
779
779
  }> {
780
780
  if (!_sqlite3) {
781
- const module = await WaSQLiteFactory({
782
- locateFile: () => wasmModule,
783
- });
781
+ const module = await loadWaSQLiteModuleAsync();
784
782
  _sqlite3 = SQLite.Factory(module) as SQLiteAPI;
785
783
  if (!_sqlite3) {
786
784
  throw new Error('Failed to initialize wa-sqlite');
@@ -808,4 +806,18 @@ async function maybeInitAsync(): Promise<{
808
806
  return { sqlite3: _sqlite3, vfs: _vfs, vfsMemory: _vfsMemory };
809
807
  }
810
808
 
809
+ async function loadWaSQLiteModuleAsync(): Promise<any> {
810
+ const { wasmURL } = _webOptions;
811
+ try {
812
+ return await WaSQLiteFactory({ locateFile: () => wasmURL ?? wasmModule });
813
+ } catch (e) {
814
+ if (wasmURL == null) throw e;
815
+ throw new Error(
816
+ `Failed to load the SQLite WebAssembly module from "${wasmURL}". ` +
817
+ 'Check that the `wasmURL` passed to `configureWeb()` is reachable and built from the `expo/wa-sqlite` revision that this `expo-sqlite` uses. ' +
818
+ `Cause: ${e instanceof Error ? e.message : String(e)}`
819
+ );
820
+ }
821
+ }
822
+
811
823
  //#endregion Internal helpers
@@ -1 +0,0 @@
1
- 0832753b21e57b16e425e77702b1f0fdcb2cf1a6614c5a5bc0721f92bf3fb60c
@@ -1 +0,0 @@
1
- fe5e05c035e8a3b493952282f2a26f117cf856664daf52600e32e532e1767da7a0636626289a4a99fcd50afabbe4f558d8015e0a2df8f4ced1b5eaeea59e216a
@@ -1 +0,0 @@
1
- 376b11b9a3ff1e4b56b41ccdcdb5879e2b85b5d80806f288f895cecb36f5a74c
@@ -1 +0,0 @@
1
- 5180af07e56734ca90b61f172c2984a788ec4f60db8389a550994c5b3d72a2dc3de085a1c098cc21c93cb9c93fac644e95c288054b682bfb213c3e49352e7f93
@@ -1 +0,0 @@
1
- 3ed8156bef90899add45b91bb45d8375b5f4685653a9904414a34e9d8b258129
@@ -1 +0,0 @@
1
- a0b811afaadb78812cebc329aa2e4fc34ee2accf893d43ea4babfd594f2fd02b620cbca73361289ffda1fe8186cce5af2b5ae0227d69d3c1cf9ef04cc9cbb698