@capacitor-community/sqlite 5.5.1 → 5.6.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.
Files changed (34) hide show
  1. package/README.md +2 -0
  2. package/android/src/main/java/com/getcapacitor/community/database/sqlite/CapacitorSQLite.java +1 -1
  3. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/Database.java +217 -218
  4. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/ImportExportJson/ExportToJson.java +1 -1
  5. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/ImportExportJson/ImportFromJson.java +103 -102
  6. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsFile.java +1 -1
  7. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsMigrate.java +1 -1
  8. package/android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/UtilsSQLStatement.java +1 -1
  9. package/dist/esm/definitions.js.map +1 -1
  10. package/dist/esm/web-typeorm-utils/database.d.ts +21 -0
  11. package/dist/esm/web-typeorm-utils/database.js +91 -0
  12. package/dist/esm/web-typeorm-utils/database.js.map +1 -0
  13. package/dist/esm/web-typeorm-utils/utilsSQLite.d.ts +28 -0
  14. package/dist/esm/web-typeorm-utils/utilsSQLite.js +233 -0
  15. package/dist/esm/web-typeorm-utils/utilsSQLite.js.map +1 -0
  16. package/dist/esm/web.d.ts +4 -2
  17. package/dist/esm/web.js +210 -56
  18. package/dist/esm/web.js.map +1 -1
  19. package/dist/plugin.cjs.js +519 -49
  20. package/dist/plugin.cjs.js.map +1 -1
  21. package/dist/plugin.js +519 -49
  22. package/dist/plugin.js.map +1 -1
  23. package/electron/dist/plugin.js +14 -6
  24. package/electron/dist/plugin.js.map +1 -1
  25. package/ios/Plugin/CapacitorSQLite.swift +3 -4
  26. package/ios/Plugin/Database.swift +3 -1
  27. package/ios/Plugin/Utils/UtilsDelete.swift +1 -1
  28. package/ios/Plugin/Utils/UtilsSQLCipher.swift +1 -2
  29. package/ios/Plugin/Utils/UtilsSQLStatement.swift +35 -37
  30. package/package.json +6 -6
  31. package/src/definitions.ts +0 -1
  32. package/src/web-typeorm-utils/database.ts +111 -0
  33. package/src/web-typeorm-utils/utilsSQLite.ts +249 -0
  34. package/src/web.ts +212 -62
@@ -950,11 +950,335 @@ const CapacitorSQLite = core.registerPlugin('CapacitorSQLite', {
950
950
  electron: () => window.CapacitorCustomPlatform.plugins.CapacitorSQLite,
951
951
  });
952
952
 
953
+ /************************************************
954
+ * Only to be used to run TypeOrm Cli
955
+ * migration:generate
956
+ * A in-memory database is used
957
+ ************************************************
958
+ */
959
+ class UtilsSQLite {
960
+ constructor() {
961
+ this.isExists = false;
962
+ this.retExists = { isExists: false, pathWasm: '' };
963
+ this.initSqlJs = require('sql.js');
964
+ this.OS = require('os');
965
+ this.FS = require('fs');
966
+ this.Path = require('path');
967
+ }
968
+ getTypeOrmDBFolder() {
969
+ // Find the index of the "node_modules" string in the path
970
+ const nodeModulesIndex = __dirname.indexOf('node_modules');
971
+ // Extract the part of the path before "node_modules"
972
+ const outputPath = __dirname.slice(0, nodeModulesIndex);
973
+ // Extract the App name
974
+ const appName = this.Path.basename(outputPath);
975
+ // Get the Documents path
976
+ const documentsDirectory = this.Path.join(this.OS.homedir(), 'Documents');
977
+ // Add "CapacitorSQLite" and appName
978
+ const outputFolderPath = this.Path.join(documentsDirectory, 'CapacitorSQLite', appName);
979
+ // Ensure the output folder exists
980
+ this.FS.mkdirSync(outputFolderPath, { recursive: true });
981
+ return outputFolderPath;
982
+ }
983
+ getTypeOrmDBPath(outputFolderPath, dbName) {
984
+ return this.Path.resolve(outputFolderPath, dbName);
985
+ }
986
+ async checkFileExistence(wasmPath) {
987
+ // check if a public folder exists
988
+ const folder = (await this.checkFolderExistence('public'))
989
+ ? 'public'
990
+ : 'src';
991
+ const pathWasm = this.Path.join(folder, wasmPath);
992
+ const retObj = {};
993
+ retObj.pathWasm = pathWasm;
994
+ try {
995
+ if (this.FS.existsSync(pathWasm)) {
996
+ retObj.isExists = true;
997
+ return Promise.resolve(retObj);
998
+ }
999
+ else {
1000
+ retObj.isExists = false;
1001
+ return Promise.resolve(retObj);
1002
+ }
1003
+ }
1004
+ catch (err) {
1005
+ retObj.isExists = false;
1006
+ return Promise.resolve(retObj);
1007
+ }
1008
+ }
1009
+ async checkFolderExistence(folder) {
1010
+ try {
1011
+ if (this.FS.existsSync(folder)) {
1012
+ return Promise.resolve(true);
1013
+ }
1014
+ else {
1015
+ return Promise.resolve(false);
1016
+ }
1017
+ }
1018
+ catch (err) {
1019
+ return Promise.resolve(false);
1020
+ }
1021
+ }
1022
+ async openOrCreateDatabase(wasmPath, databasePath) {
1023
+ let mDB;
1024
+ const msg = 'OpenOrCreateDatabase';
1025
+ try {
1026
+ this.retExists = await this.checkFileExistence(wasmPath);
1027
+ this.isExists = this.retExists.isExists;
1028
+ }
1029
+ catch (err) {
1030
+ this.isExists = false;
1031
+ }
1032
+ if (!this.isExists) {
1033
+ return Promise.reject(msg + ' No sql-wasm.wasm found in ' + wasmPath);
1034
+ }
1035
+ try {
1036
+ const config = {
1037
+ locateFile: (file) => `${this.retExists.pathWasm}/${file}`,
1038
+ };
1039
+ const SQL = await this.initSqlJs(config);
1040
+ // Check if the database exists
1041
+ if (!this.FS.existsSync(databasePath)) {
1042
+ mDB = new SQL.Database();
1043
+ }
1044
+ else {
1045
+ // Read the database file from the local disk
1046
+ const fileBuffer = this.FS.readFileSync(databasePath);
1047
+ // Create a new database instance
1048
+ mDB = new SQL.Database(fileBuffer);
1049
+ }
1050
+ return Promise.resolve(mDB);
1051
+ }
1052
+ catch (err) {
1053
+ return Promise.reject(msg + ' open database failed');
1054
+ }
1055
+ }
1056
+ async saveDatabase(mDb, outputPath) {
1057
+ try {
1058
+ // Export the modified database to a Uint8Array
1059
+ const data = mDb.export();
1060
+ // Write the Uint8Array to a file on the local disk
1061
+ this.FS.writeFileSync(outputPath, Buffer.from(data));
1062
+ return Promise.resolve();
1063
+ }
1064
+ catch (error) {
1065
+ return Promise.reject(error);
1066
+ }
1067
+ }
1068
+ closeDB(mDB) {
1069
+ const msg = 'closeDB';
1070
+ try {
1071
+ mDB.close();
1072
+ return Promise.resolve();
1073
+ }
1074
+ catch (err) {
1075
+ const errmsg = err.message ? err.message : err;
1076
+ return Promise.reject(`${msg} ${errmsg}`);
1077
+ }
1078
+ }
1079
+ async dbChanges(mDB) {
1080
+ const SELECT_CHANGE = 'SELECT total_changes()';
1081
+ let changes = 0;
1082
+ try {
1083
+ const res = mDB.exec(SELECT_CHANGE);
1084
+ // process the row here
1085
+ changes = res[0].values[0][0];
1086
+ return Promise.resolve(changes);
1087
+ }
1088
+ catch (err) {
1089
+ const errmsg = err.message ? err.message : err;
1090
+ return Promise.reject(`DbChanges failed: ${errmsg}`);
1091
+ }
1092
+ }
1093
+ async getLastId(mDB) {
1094
+ const SELECT_LAST_ID = 'SELECT last_insert_rowid()';
1095
+ let lastId = -1;
1096
+ try {
1097
+ const res = mDB.exec(SELECT_LAST_ID);
1098
+ // process the row here
1099
+ lastId = res[0].values[0][0];
1100
+ return Promise.resolve(lastId);
1101
+ }
1102
+ catch (err) {
1103
+ const errmsg = err.message ? err.message : err;
1104
+ return Promise.reject(new Error(`GetLastId failed: ${errmsg}`));
1105
+ }
1106
+ }
1107
+ async execute(mDB, sql) {
1108
+ try {
1109
+ mDB.exec(sql);
1110
+ const changes = await this.dbChanges(mDB);
1111
+ return Promise.resolve(changes);
1112
+ }
1113
+ catch (err) {
1114
+ const errmsg = err.message ? err.message : err;
1115
+ return Promise.reject(new Error(`Execute failed: ${errmsg}`));
1116
+ }
1117
+ }
1118
+ async run(mDB, statement, values, returnMode) {
1119
+ let res;
1120
+ let retValues = [];
1121
+ const retObj = {};
1122
+ try {
1123
+ if (values.length > 0) {
1124
+ res = mDB.exec(statement, values);
1125
+ }
1126
+ else {
1127
+ res = mDB.exec(statement);
1128
+ }
1129
+ if (returnMode === 'all' || returnMode === 'one') {
1130
+ if (res && res.length > 0) {
1131
+ retValues = this.getReturnedValues(res[0], returnMode);
1132
+ }
1133
+ }
1134
+ const lastId = await this.getLastId(mDB);
1135
+ retObj['lastId'] = lastId;
1136
+ if (retValues != null && retValues.length > 0)
1137
+ retObj['values'] = retValues;
1138
+ return Promise.resolve(retObj);
1139
+ }
1140
+ catch (err) {
1141
+ const errmsg = err.message ? err.message : err;
1142
+ return Promise.reject(new Error(`Run failed: ${errmsg}`));
1143
+ }
1144
+ }
1145
+ getReturnedValues(result, returnMode) {
1146
+ const retValues = [];
1147
+ for (const values of result.values) {
1148
+ const row = {};
1149
+ for (let j = 0; j < result.columns.length; j++) {
1150
+ row[result.columns[j]] = values[j];
1151
+ }
1152
+ retValues.push(row);
1153
+ if (returnMode === 'one') {
1154
+ break;
1155
+ }
1156
+ }
1157
+ return retValues;
1158
+ }
1159
+ async queryAll(mDB, sql, values) {
1160
+ try {
1161
+ let retArr = [];
1162
+ if (values != null && values.length > 0) {
1163
+ retArr = mDB.exec(sql, values);
1164
+ }
1165
+ else {
1166
+ retArr = mDB.exec(sql);
1167
+ }
1168
+ if (retArr.length == 0)
1169
+ return Promise.resolve([]);
1170
+ const result = retArr[0].values.map((entry) => {
1171
+ const obj = {};
1172
+ retArr[0].columns.forEach((column, index) => {
1173
+ obj[`${column}`] = entry[index];
1174
+ });
1175
+ return obj;
1176
+ });
1177
+ return Promise.resolve(result);
1178
+ }
1179
+ catch (err) {
1180
+ const errmsg = err.message ? err.message : err;
1181
+ return Promise.reject(new Error(`queryAll: ${errmsg}`));
1182
+ }
1183
+ }
1184
+ }
1185
+
1186
+ /************************************************
1187
+ * Only to be used to run TypeOrm Cli
1188
+ * migration:generate
1189
+ * A in-memory database is used
1190
+ ************************************************
1191
+ */
1192
+ class Database {
1193
+ constructor() {
1194
+ this.wasmPath = 'assets';
1195
+ this.sqliteUtil = new UtilsSQLite();
1196
+ this.typeOrmDBFolder = this.sqliteUtil.getTypeOrmDBFolder();
1197
+ this.dbPath = '';
1198
+ this.mDb = null;
1199
+ this._isDBOpen = false;
1200
+ }
1201
+ async open(dbName) {
1202
+ try {
1203
+ this.dbPath = this.sqliteUtil.getTypeOrmDBPath(this.typeOrmDBFolder, `${dbName}SQLite.db`);
1204
+ this.mDb = await this.sqliteUtil.openOrCreateDatabase(this.wasmPath, this.dbPath);
1205
+ this._isDBOpen = true;
1206
+ return Promise.resolve();
1207
+ }
1208
+ catch (err) {
1209
+ return Promise.reject(`Open: ${err}`);
1210
+ }
1211
+ }
1212
+ async close() {
1213
+ try {
1214
+ if (this._isDBOpen) {
1215
+ await this.sqliteUtil.saveDatabase(this.mDb, this.dbPath);
1216
+ await this.mDb.close();
1217
+ }
1218
+ return Promise.resolve();
1219
+ }
1220
+ catch (err) {
1221
+ return Promise.reject(`Close: ${err}`);
1222
+ }
1223
+ }
1224
+ async executeSQL(statements) {
1225
+ let changes = -1;
1226
+ try {
1227
+ if (this._isDBOpen) {
1228
+ const initChanges = await this.sqliteUtil.dbChanges(this.mDb);
1229
+ changes = await this.sqliteUtil.execute(this.mDb, statements);
1230
+ if (changes < 0) {
1231
+ return Promise.reject(new Error('ExecuteSQL: changes < 0'));
1232
+ }
1233
+ changes = (await this.sqliteUtil.dbChanges(this.mDb)) - initChanges;
1234
+ }
1235
+ return Promise.resolve(changes);
1236
+ }
1237
+ catch (err) {
1238
+ return Promise.reject(`ExecuteSQL: ${err}`);
1239
+ }
1240
+ }
1241
+ async run(statement, values, returnMode) {
1242
+ const retRes = { changes: -1, lastId: -1 };
1243
+ try {
1244
+ if (this._isDBOpen) {
1245
+ const initChanges = await this.sqliteUtil.dbChanges(this.mDb);
1246
+ const retObj = await this.sqliteUtil.run(this.mDb, statement, values, returnMode);
1247
+ const lastId = retObj['lastId'];
1248
+ if (lastId < 0) {
1249
+ return Promise.reject(new Error('RunSQL: lastId < 0'));
1250
+ }
1251
+ const changes = (await this.sqliteUtil.dbChanges(this.mDb)) - initChanges;
1252
+ retRes.changes = changes;
1253
+ retRes.lastId = lastId;
1254
+ retRes.values = retObj['values'] ? retObj['values'] : [];
1255
+ }
1256
+ return Promise.resolve({ changes: retRes });
1257
+ }
1258
+ catch (err) {
1259
+ return Promise.reject(`Run: ${err}`);
1260
+ }
1261
+ }
1262
+ async selectSQL(sql, values) {
1263
+ let retArr = [];
1264
+ try {
1265
+ if (this._isDBOpen) {
1266
+ retArr = await this.sqliteUtil.queryAll(this.mDb, sql, values);
1267
+ }
1268
+ return Promise.resolve({ values: retArr });
1269
+ }
1270
+ catch (err) {
1271
+ return Promise.reject(`SelectSQL: ${err}`);
1272
+ }
1273
+ }
1274
+ }
1275
+
953
1276
  class CapacitorSQLiteWeb extends core.WebPlugin {
954
1277
  constructor() {
955
1278
  super(...arguments);
956
1279
  this.jeepSqliteElement = null;
957
1280
  this.isWebStoreOpen = false;
1281
+ this.databases = {};
958
1282
  }
959
1283
  async initWebStore() {
960
1284
  await customElements.whenDefined('jeep-sqlite');
@@ -1019,36 +1343,88 @@ class CapacitorSQLiteWeb extends core.WebPlugin {
1019
1343
  return echoResult;
1020
1344
  }
1021
1345
  async createConnection(options) {
1022
- this.ensureJeepSqliteIsAvailable();
1023
- this.ensureWebstoreIsOpen();
1024
- try {
1025
- await this.jeepSqliteElement.createConnection(options);
1026
- return;
1346
+ if (typeof window !== 'undefined' && window.document) {
1347
+ this.ensureJeepSqliteIsAvailable();
1348
+ this.ensureWebstoreIsOpen();
1349
+ try {
1350
+ await this.jeepSqliteElement.createConnection(options);
1351
+ return;
1352
+ }
1353
+ catch (err) {
1354
+ throw new Error(`${err}`);
1355
+ }
1027
1356
  }
1028
- catch (err) {
1029
- throw new Error(`${err}`);
1357
+ else {
1358
+ // Only for typeOrm to run migration:generate
1359
+ const optionKeys = Object.keys(options);
1360
+ let dbName;
1361
+ if (!optionKeys.includes('database')) {
1362
+ throw new Error('Must provide a database name');
1363
+ }
1364
+ else {
1365
+ dbName = options.database;
1366
+ }
1367
+ const connName = 'RW_' + dbName;
1368
+ const databaseConnection = new Database();
1369
+ this.databases[connName] = databaseConnection;
1030
1370
  }
1031
1371
  }
1032
1372
  async open(options) {
1033
- this.ensureJeepSqliteIsAvailable();
1034
- this.ensureWebstoreIsOpen();
1035
- try {
1036
- await this.jeepSqliteElement.open(options);
1037
- return;
1373
+ if (typeof window !== 'undefined' && window.document) {
1374
+ this.ensureJeepSqliteIsAvailable();
1375
+ this.ensureWebstoreIsOpen();
1376
+ try {
1377
+ await this.jeepSqliteElement.open(options);
1378
+ return;
1379
+ }
1380
+ catch (err) {
1381
+ throw new Error(`${err}`);
1382
+ }
1038
1383
  }
1039
- catch (err) {
1040
- throw new Error(`${err}`);
1384
+ else {
1385
+ // Only for typeOrm to run migration:generate
1386
+ const dbName = options.database ? options.database : '';
1387
+ if (dbName.length === 0) {
1388
+ throw new Error('Must provide a database name');
1389
+ }
1390
+ const connName = 'RW_' + dbName;
1391
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1392
+ try {
1393
+ await database.open(dbName);
1394
+ }
1395
+ catch (err) {
1396
+ throw new Error(`### open ${err}`);
1397
+ }
1041
1398
  }
1042
1399
  }
1043
1400
  async closeConnection(options) {
1044
- this.ensureJeepSqliteIsAvailable();
1045
- this.ensureWebstoreIsOpen();
1046
- try {
1047
- await this.jeepSqliteElement.closeConnection(options);
1048
- return;
1401
+ if (typeof window !== 'undefined' && window.document) {
1402
+ this.ensureJeepSqliteIsAvailable();
1403
+ this.ensureWebstoreIsOpen();
1404
+ try {
1405
+ await this.jeepSqliteElement.closeConnection(options);
1406
+ return;
1407
+ }
1408
+ catch (err) {
1409
+ throw new Error(`${err}`);
1410
+ }
1049
1411
  }
1050
- catch (err) {
1051
- throw new Error(`${err}`);
1412
+ else {
1413
+ // Only for typeOrm to run migration:generate
1414
+ const dbName = options.database ? options.database : '';
1415
+ if (dbName.length === 0) {
1416
+ throw new Error('Must provide a database name');
1417
+ }
1418
+ const connName = 'RW_' + dbName;
1419
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1420
+ try {
1421
+ await database.close();
1422
+ // remove the connection from dictionary
1423
+ delete this.databases[connName];
1424
+ }
1425
+ catch (err) {
1426
+ throw new Error(`### closeConnection ${err}`);
1427
+ }
1052
1428
  }
1053
1429
  }
1054
1430
  async getVersion(options) {
@@ -1073,14 +1449,31 @@ class CapacitorSQLiteWeb extends core.WebPlugin {
1073
1449
  }
1074
1450
  }
1075
1451
  async close(options) {
1076
- this.ensureJeepSqliteIsAvailable();
1077
- this.ensureWebstoreIsOpen();
1078
- try {
1079
- await this.jeepSqliteElement.close(options);
1080
- return;
1452
+ if (typeof window !== 'undefined' && window.document) {
1453
+ this.ensureJeepSqliteIsAvailable();
1454
+ this.ensureWebstoreIsOpen();
1455
+ try {
1456
+ await this.jeepSqliteElement.close(options);
1457
+ return;
1458
+ }
1459
+ catch (err) {
1460
+ throw new Error(`${err}`);
1461
+ }
1081
1462
  }
1082
- catch (err) {
1083
- throw new Error(`${err}`);
1463
+ else {
1464
+ // Only for typeOrm to run migration:generate
1465
+ const dbName = options.database ? options.database : '';
1466
+ if (dbName.length === 0) {
1467
+ throw new Error('Must provide a database name');
1468
+ }
1469
+ const connName = 'RW_' + dbName;
1470
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1471
+ try {
1472
+ await database.close();
1473
+ }
1474
+ catch (err) {
1475
+ throw new Error(`### close ${err}`);
1476
+ }
1084
1477
  }
1085
1478
  }
1086
1479
  async beginTransaction(options) {
@@ -1139,14 +1532,37 @@ class CapacitorSQLiteWeb extends core.WebPlugin {
1139
1532
  }
1140
1533
  }
1141
1534
  async execute(options) {
1142
- this.ensureJeepSqliteIsAvailable();
1143
- this.ensureWebstoreIsOpen();
1144
- try {
1145
- const executeResult = await this.jeepSqliteElement.execute(options);
1146
- return executeResult;
1535
+ if (typeof window !== 'undefined' && window.document) {
1536
+ this.ensureJeepSqliteIsAvailable();
1537
+ this.ensureWebstoreIsOpen();
1538
+ try {
1539
+ const executeResult = await this.jeepSqliteElement.execute(options);
1540
+ return executeResult;
1541
+ }
1542
+ catch (err) {
1543
+ throw new Error(`${err}`);
1544
+ }
1147
1545
  }
1148
- catch (err) {
1149
- throw new Error(`${err}`);
1546
+ else {
1547
+ // Only for typeOrm to run migration:generate
1548
+ const dbName = options.database ? options.database : '';
1549
+ if (dbName.length === 0) {
1550
+ throw new Error('Must provide a database name');
1551
+ }
1552
+ const statements = options.statements ? options.statements : '';
1553
+ if (statements.length === 0) {
1554
+ return Promise.reject('Must provide raw SQL statements');
1555
+ }
1556
+ const connName = 'RW_' + dbName;
1557
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1558
+ try {
1559
+ const ret = await database.executeSQL(statements);
1560
+ const executeResult = { changes: { changes: ret } };
1561
+ return executeResult;
1562
+ }
1563
+ catch (err) {
1564
+ throw new Error(`${err}`);
1565
+ }
1150
1566
  }
1151
1567
  }
1152
1568
  async executeSet(options) {
@@ -1161,25 +1577,72 @@ class CapacitorSQLiteWeb extends core.WebPlugin {
1161
1577
  }
1162
1578
  }
1163
1579
  async run(options) {
1164
- this.ensureJeepSqliteIsAvailable();
1165
- this.ensureWebstoreIsOpen();
1166
- try {
1167
- const runResult = await this.jeepSqliteElement.run(options);
1168
- return runResult;
1580
+ if (typeof window !== 'undefined' && window.document) {
1581
+ this.ensureJeepSqliteIsAvailable();
1582
+ this.ensureWebstoreIsOpen();
1583
+ try {
1584
+ const runResult = await this.jeepSqliteElement.run(options);
1585
+ return runResult;
1586
+ }
1587
+ catch (err) {
1588
+ throw new Error(`${err}`);
1589
+ }
1169
1590
  }
1170
- catch (err) {
1171
- throw new Error(`${err}`);
1591
+ else {
1592
+ // Only for typeOrm to run migration:generate
1593
+ const dbName = options.database ? options.database : '';
1594
+ if (dbName.length === 0) {
1595
+ throw new Error('Must provide a database name');
1596
+ }
1597
+ const statement = options.statement ? options.statement : '';
1598
+ if (statement.length === 0) {
1599
+ return Promise.reject('Must provide raw SQL statement');
1600
+ }
1601
+ const values = options.values ? options.values : [];
1602
+ const returnMode = options.returnMode ? options.returnMode : 'no';
1603
+ const connName = 'RW_' + dbName;
1604
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1605
+ try {
1606
+ const runResult = await database.run(statement, values, returnMode);
1607
+ return runResult;
1608
+ }
1609
+ catch (err) {
1610
+ throw new Error(`${err}`);
1611
+ }
1172
1612
  }
1173
1613
  }
1174
1614
  async query(options) {
1175
- this.ensureJeepSqliteIsAvailable();
1176
- this.ensureWebstoreIsOpen();
1177
- try {
1178
- const queryResult = await this.jeepSqliteElement.query(options);
1179
- return queryResult;
1615
+ if (typeof window !== 'undefined' && window.document) {
1616
+ this.ensureJeepSqliteIsAvailable();
1617
+ this.ensureWebstoreIsOpen();
1618
+ try {
1619
+ const queryResult = await this.jeepSqliteElement.query(options);
1620
+ return queryResult;
1621
+ }
1622
+ catch (err) {
1623
+ throw new Error(`${err}`);
1624
+ }
1180
1625
  }
1181
- catch (err) {
1182
- throw new Error(`${err}`);
1626
+ else {
1627
+ // Only for typeOrm to run migration:generate
1628
+ const dbName = options.database ? options.database : '';
1629
+ if (dbName.length === 0) {
1630
+ throw new Error('Must provide a database name');
1631
+ }
1632
+ const statement = options.statement ? options.statement : '';
1633
+ if (statement.length === 0) {
1634
+ return Promise.reject('Must provide raw SQL statement');
1635
+ }
1636
+ const values = options.values ? options.values : [];
1637
+ const connName = 'RW_' + dbName;
1638
+ const database = this.getDatabaseConnectionOrThrowError(connName);
1639
+ try {
1640
+ const queryResult = await database.selectSQL(statement, values);
1641
+ return queryResult;
1642
+ }
1643
+ catch (err) {
1644
+ throw new Error(`${err}`);
1645
+ }
1183
1646
  }
1184
1647
  }
1185
1648
  async isDBExists(options) {
@@ -1378,6 +1841,13 @@ class CapacitorSQLiteWeb extends core.WebPlugin {
1378
1841
  throw new Error('WebStore is not open yet. You have to call "initWebStore()" first.');
1379
1842
  }
1380
1843
  }
1844
+ getDatabaseConnectionOrThrowError(dbName) {
1845
+ const databaseNames = Object.keys(this.databases);
1846
+ if (!databaseNames.includes(dbName)) {
1847
+ throw new Error(`No connection available for database "${dbName}"`);
1848
+ }
1849
+ return this.databases[dbName];
1850
+ }
1381
1851
  ////////////////////////////////////
1382
1852
  ////// UNIMPLEMENTED METHODS
1383
1853
  ////////////////////////////////////