@aws-amplify/datastore-storage-adapter 1.2.13 → 1.2.14-unstable.1

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 (77) hide show
  1. package/ExpoSQLiteAdapter/index.js +7 -0
  2. package/SQLiteAdapter/index.js +7 -0
  3. package/dist/aws-amplify-datastore-sqlite-adapter-expo.js +2502 -0
  4. package/dist/aws-amplify-datastore-sqlite-adapter-expo.js.map +1 -0
  5. package/dist/aws-amplify-datastore-sqlite-adapter-expo.min.js +2 -0
  6. package/dist/aws-amplify-datastore-sqlite-adapter-expo.min.js.map +1 -0
  7. package/dist/aws-amplify-datastore-storage-adapter.js +1179 -1151
  8. package/dist/aws-amplify-datastore-storage-adapter.js.map +1 -1
  9. package/dist/aws-amplify-datastore-storage-adapter.min.js +1 -1
  10. package/dist/aws-amplify-datastore-storage-adapter.min.js.map +1 -1
  11. package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.d.ts +3 -0
  12. package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js +10 -0
  13. package/lib/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js.map +1 -0
  14. package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.d.ts +17 -0
  15. package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js +362 -0
  16. package/lib/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js.map +1 -0
  17. package/lib/SQLiteAdapter/SQLiteAdapter.d.ts +3 -23
  18. package/lib/SQLiteAdapter/SQLiteAdapter.js +3 -582
  19. package/lib/SQLiteAdapter/SQLiteAdapter.js.map +1 -1
  20. package/lib/SQLiteAdapter/SQLiteDatabase.d.ts +8 -8
  21. package/lib/SQLiteAdapter/SQLiteDatabase.js +46 -42
  22. package/lib/SQLiteAdapter/SQLiteDatabase.js.map +1 -1
  23. package/lib/common/CommonSQLiteAdapter.d.ts +23 -0
  24. package/lib/common/CommonSQLiteAdapter.js +579 -0
  25. package/lib/common/CommonSQLiteAdapter.js.map +1 -0
  26. package/lib/{SQLiteAdapter → common}/SQLiteUtils.d.ts +3 -2
  27. package/lib/{SQLiteAdapter → common}/SQLiteUtils.js +26 -2
  28. package/lib/common/SQLiteUtils.js.map +1 -0
  29. package/lib/common/constants.d.ts +1 -0
  30. package/lib/common/constants.js +4 -0
  31. package/lib/common/constants.js.map +1 -0
  32. package/lib/common/types.d.ts +13 -0
  33. package/lib/common/types.js +3 -0
  34. package/lib/common/types.js.map +1 -0
  35. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.d.ts +3 -0
  36. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js +5 -0
  37. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteAdapter.js.map +1 -0
  38. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.d.ts +17 -0
  39. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js +360 -0
  40. package/lib-esm/ExpoSQLiteAdapter/ExpoSQLiteDatabase.js.map +1 -0
  41. package/lib-esm/SQLiteAdapter/SQLiteAdapter.d.ts +3 -23
  42. package/lib-esm/SQLiteAdapter/SQLiteAdapter.js +3 -582
  43. package/lib-esm/SQLiteAdapter/SQLiteAdapter.js.map +1 -1
  44. package/lib-esm/SQLiteAdapter/SQLiteDatabase.d.ts +8 -8
  45. package/lib-esm/SQLiteAdapter/SQLiteDatabase.js +46 -42
  46. package/lib-esm/SQLiteAdapter/SQLiteDatabase.js.map +1 -1
  47. package/lib-esm/common/CommonSQLiteAdapter.d.ts +23 -0
  48. package/lib-esm/common/CommonSQLiteAdapter.js +577 -0
  49. package/lib-esm/common/CommonSQLiteAdapter.js.map +1 -0
  50. package/lib-esm/{SQLiteAdapter → common}/SQLiteUtils.d.ts +3 -2
  51. package/lib-esm/{SQLiteAdapter → common}/SQLiteUtils.js +24 -1
  52. package/lib-esm/common/SQLiteUtils.js.map +1 -0
  53. package/lib-esm/common/constants.d.ts +1 -0
  54. package/lib-esm/common/constants.js +2 -0
  55. package/lib-esm/common/constants.js.map +1 -0
  56. package/lib-esm/common/types.d.ts +13 -0
  57. package/lib-esm/common/types.js +1 -0
  58. package/lib-esm/common/types.js.map +1 -0
  59. package/package.json +7 -4
  60. package/src/ExpoSQLiteAdapter/ExpoSQLiteAdapter.ts +8 -0
  61. package/src/ExpoSQLiteAdapter/ExpoSQLiteDatabase.ts +282 -0
  62. package/src/SQLiteAdapter/SQLiteAdapter.ts +5 -475
  63. package/src/SQLiteAdapter/SQLiteDatabase.ts +49 -53
  64. package/src/common/CommonSQLiteAdapter.ts +478 -0
  65. package/src/{SQLiteAdapter → common}/SQLiteUtils.ts +32 -3
  66. package/src/common/constants.ts +1 -0
  67. package/src/common/types.ts +29 -0
  68. package/webpack.config.dev.js +2 -0
  69. package/lib/SQLiteAdapter/SQLiteUtils.js.map +0 -1
  70. package/lib/SQLiteAdapter/types.d.ts +0 -2
  71. package/lib/SQLiteAdapter/types.js +0 -28
  72. package/lib/SQLiteAdapter/types.js.map +0 -1
  73. package/lib-esm/SQLiteAdapter/SQLiteUtils.js.map +0 -1
  74. package/lib-esm/SQLiteAdapter/types.d.ts +0 -2
  75. package/lib-esm/SQLiteAdapter/types.js +0 -25
  76. package/lib-esm/SQLiteAdapter/types.js.map +0 -1
  77. package/src/SQLiteAdapter/types.ts +0 -31
@@ -100,18 +100,34 @@ return /******/ (function(modules) { // webpackBootstrap
100
100
  /*!************************************************!*\
101
101
  !*** ./lib-esm/SQLiteAdapter/SQLiteAdapter.js ***!
102
102
  \************************************************/
103
- /*! exports provided: SQLiteAdapter, default */
103
+ /*! exports provided: default */
104
104
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
105
105
 
106
106
  "use strict";
107
107
  __webpack_require__.r(__webpack_exports__);
108
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SQLiteAdapter", function() { return SQLiteAdapter; });
109
- /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @aws-amplify/core */ "@aws-amplify/core");
110
- /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__);
108
+ /* harmony import */ var _common_CommonSQLiteAdapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/CommonSQLiteAdapter */ "./lib-esm/common/CommonSQLiteAdapter.js");
111
109
  /* harmony import */ var _SQLiteDatabase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SQLiteDatabase */ "./lib-esm/SQLiteAdapter/SQLiteDatabase.js");
112
- /* harmony import */ var _SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SQLiteUtils */ "./lib-esm/SQLiteAdapter/SQLiteUtils.js");
113
- /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @aws-amplify/datastore */ "@aws-amplify/datastore");
114
- /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__);
110
+
111
+
112
+ var SQLiteAdapter = new _common_CommonSQLiteAdapter__WEBPACK_IMPORTED_MODULE_0__["CommonSQLiteAdapter"](new _SQLiteDatabase__WEBPACK_IMPORTED_MODULE_1__["default"]());
113
+ /* harmony default export */ __webpack_exports__["default"] = (SQLiteAdapter);
114
+
115
+ /***/ }),
116
+
117
+ /***/ "./lib-esm/SQLiteAdapter/SQLiteDatabase.js":
118
+ /*!*************************************************!*\
119
+ !*** ./lib-esm/SQLiteAdapter/SQLiteDatabase.js ***!
120
+ \*************************************************/
121
+ /*! exports provided: default */
122
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
123
+
124
+ "use strict";
125
+ __webpack_require__.r(__webpack_exports__);
126
+ /* harmony import */ var react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native-sqlite-storage */ "react-native-sqlite-storage");
127
+ /* harmony import */ var react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0__);
128
+ /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @aws-amplify/core */ "@aws-amplify/core");
129
+ /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__);
130
+ /* harmony import */ var _common_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/constants */ "./lib-esm/common/constants.js");
115
131
  var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
116
132
  function adopt(value) {
117
133
  return value instanceof P ? value : new P(function (resolve) {
@@ -255,32 +271,6 @@ var __generator = undefined && undefined.__generator || function (thisArg, body)
255
271
  }
256
272
  };
257
273
 
258
- var __asyncValues = undefined && undefined.__asyncValues || function (o) {
259
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
260
- var m = o[Symbol.asyncIterator],
261
- i;
262
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
263
- return this;
264
- }, i);
265
-
266
- function verb(n) {
267
- i[n] = o[n] && function (v) {
268
- return new Promise(function (resolve, reject) {
269
- v = o[n](v), settle(resolve, reject, v.done, v.value);
270
- });
271
- };
272
- }
273
-
274
- function settle(resolve, reject, d, v) {
275
- Promise.resolve(v).then(function (v) {
276
- resolve({
277
- value: v,
278
- done: d
279
- });
280
- }, reject);
281
- }
282
- };
283
-
284
274
  var __read = undefined && undefined.__read || function (o, n) {
285
275
  var m = typeof Symbol === "function" && o[Symbol.iterator];
286
276
  if (!m) return o;
@@ -328,94 +318,104 @@ var __values = undefined && undefined.__values || function (o) {
328
318
 
329
319
 
330
320
 
321
+ var logger = new _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__["ConsoleLogger"]('SQLiteDatabase');
322
+ react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.enablePromise(true);
323
+
324
+ if (_aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__["ConsoleLogger"].LOG_LEVEL === 'DEBUG') {
325
+ react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.DEBUG(true);
326
+ }
327
+ /*
328
+
329
+ Note:
330
+ I purposely avoided using arrow functions () => {} in this class,
331
+ Because I ran into issues with them in some of the SQLite method callbacks
332
+
333
+ Also, even though the SQLite library is promisified, certain operations
334
+ only work correctly with callbacks. Specifically, any time you need to
335
+ get the result of an `executeSql` command inside of a transaction
336
+ (see the batchQuery method below)
337
+
338
+ */
331
339
 
332
- var traverseModel = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["utils"].traverseModel,
333
- validatePredicate = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["utils"].validatePredicate,
334
- isModelConstructor = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["utils"].isModelConstructor;
335
- var logger = new _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__["ConsoleLogger"]('DataStore');
336
340
 
337
- var SQLiteAdapter =
341
+ var SQLiteDatabase =
338
342
  /** @class */
339
343
  function () {
340
- function SQLiteAdapter() {}
344
+ function SQLiteDatabase() {}
341
345
 
342
- SQLiteAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName) {
346
+ SQLiteDatabase.prototype.init = function () {
343
347
  return __awaiter(this, void 0, void 0, function () {
344
- var statements, error_1;
345
-
346
- var _this = this;
348
+ var _a;
347
349
 
348
- return __generator(this, function (_a) {
349
- switch (_a.label) {
350
+ return __generator(this, function (_b) {
351
+ switch (_b.label) {
350
352
  case 0:
351
- if (!!this.initPromise) return [3
352
- /*break*/
353
- , 1];
354
- this.initPromise = new Promise(function (res, rej) {
355
- _this.resolve = res;
356
- _this.reject = rej;
357
- });
358
- return [3
353
+ if (!!this.db) return [3
359
354
  /*break*/
360
- , 3];
361
-
362
- case 1:
355
+ , 2];
356
+ _a = this;
363
357
  return [4
364
358
  /*yield*/
365
- , this.initPromise];
359
+ , react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.openDatabase({
360
+ name: _common_constants__WEBPACK_IMPORTED_MODULE_2__["DB_NAME"],
361
+ location: 'default'
362
+ })];
366
363
 
367
- case 2:
368
- _a.sent();
364
+ case 1:
365
+ _a.db = _b.sent();
366
+ _b.label = 2;
369
367
 
368
+ case 2:
370
369
  return [2
371
370
  /*return*/
372
371
  ];
372
+ }
373
+ });
374
+ });
375
+ };
373
376
 
374
- case 3:
375
- this.schema = theSchema;
376
- this.namespaceResolver = namespaceResolver;
377
- this.modelInstanceCreator = modelInstanceCreator;
378
- this.getModelConstructorByModelName = getModelConstructorByModelName;
379
- _a.label = 4;
377
+ SQLiteDatabase.prototype.createSchema = function (statements) {
378
+ return __awaiter(this, void 0, void 0, function () {
379
+ return __generator(this, function (_a) {
380
+ switch (_a.label) {
381
+ case 0:
382
+ return [4
383
+ /*yield*/
384
+ , this.executeStatements(statements)];
380
385
 
381
- case 4:
382
- _a.trys.push([4, 8,, 9]);
386
+ case 1:
387
+ return [2
388
+ /*return*/
389
+ , _a.sent()];
390
+ }
391
+ });
392
+ });
393
+ };
383
394
 
384
- if (!!this.db) return [3
385
- /*break*/
386
- , 7];
387
- this.db = new _SQLiteDatabase__WEBPACK_IMPORTED_MODULE_1__["default"]();
395
+ SQLiteDatabase.prototype.clear = function () {
396
+ return __awaiter(this, void 0, void 0, function () {
397
+ return __generator(this, function (_a) {
398
+ switch (_a.label) {
399
+ case 0:
388
400
  return [4
389
401
  /*yield*/
390
- , this.db.init()];
402
+ , this.closeDB()];
391
403
 
392
- case 5:
404
+ case 1:
393
405
  _a.sent();
394
406
 
395
- statements = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["generateSchemaStatements"])(this.schema);
407
+ logger.debug('Deleting database');
396
408
  return [4
397
409
  /*yield*/
398
- , this.db.createSchema(statements)];
410
+ , react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.deleteDatabase({
411
+ name: _common_constants__WEBPACK_IMPORTED_MODULE_2__["DB_NAME"],
412
+ location: 'default'
413
+ })];
399
414
 
400
- case 6:
415
+ case 2:
401
416
  _a.sent();
402
417
 
403
- this.resolve();
404
- _a.label = 7;
405
-
406
- case 7:
407
- return [3
408
- /*break*/
409
- , 9];
410
-
411
- case 8:
412
- error_1 = _a.sent();
413
- this.reject(error_1);
414
- return [3
415
- /*break*/
416
- , 9];
417
-
418
- case 9:
418
+ logger.debug('Database deleted');
419
419
  return [2
420
420
  /*return*/
421
421
  ];
@@ -424,1406 +424,1435 @@ function () {
424
424
  });
425
425
  };
426
426
 
427
- SQLiteAdapter.prototype.clear = function () {
427
+ SQLiteDatabase.prototype.get = function (statement, params) {
428
428
  return __awaiter(this, void 0, void 0, function () {
429
+ var results;
429
430
  return __generator(this, function (_a) {
430
431
  switch (_a.label) {
431
432
  case 0:
432
433
  return [4
433
434
  /*yield*/
434
- , this.db.clear()];
435
+ , this.getAll(statement, params)];
435
436
 
436
437
  case 1:
437
- _a.sent();
438
-
439
- this.db = undefined;
440
- this.initPromise = undefined;
438
+ results = _a.sent();
441
439
  return [2
442
440
  /*return*/
443
- ];
441
+ , results[0]];
444
442
  }
445
443
  });
446
444
  });
447
445
  };
448
446
 
449
- SQLiteAdapter.prototype.save = function (model, condition) {
450
- var e_1, _a;
451
-
447
+ SQLiteDatabase.prototype.getAll = function (statement, params) {
452
448
  return __awaiter(this, void 0, void 0, function () {
453
- var modelConstructor, tableName, connectedModels, connectionStoreNames, _b, queryStatement, params, fromDB, predicates, predicateObjs, type, isValid, msg, result, saveStatements, connectionStoreNames_1, connectionStoreNames_1_1, resItem, modelName, item, instance, id, _c, queryStatement_1, params_1, fromDB_1, opType, saveStatement, e_1_1;
449
+ var _a, resultSet, result;
454
450
 
455
- return __generator(this, function (_d) {
456
- switch (_d.label) {
451
+ return __generator(this, function (_b) {
452
+ switch (_b.label) {
457
453
  case 0:
458
- modelConstructor = Object.getPrototypeOf(model).constructor;
459
- tableName = modelConstructor.name;
460
- connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[this.namespaceResolver(modelConstructor)], this.modelInstanceCreator, this.getModelConstructorByModelName);
461
- connectionStoreNames = Object.values(connectedModels).map(function (_a) {
462
- var modelName = _a.modelName,
463
- item = _a.item,
464
- instance = _a.instance;
465
- return {
466
- modelName: modelName,
467
- item: item,
468
- instance: instance
469
- };
470
- });
471
- _b = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(model.id, tableName), 2), queryStatement = _b[0], params = _b[1];
472
454
  return [4
473
455
  /*yield*/
474
- , this.db.get(queryStatement, params)];
456
+ , this.db.executeSql(statement, params)];
475
457
 
476
458
  case 1:
477
- fromDB = _d.sent();
478
-
479
- if (condition && fromDB) {
480
- predicates = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["ModelPredicateCreator"].getPredicates(condition);
481
- predicateObjs = predicates.predicates, type = predicates.type;
482
- isValid = validatePredicate(fromDB, type, predicateObjs);
483
-
484
- if (!isValid) {
485
- msg = 'Conditional update failed';
486
- logger.error(msg, {
487
- model: fromDB,
488
- condition: predicateObjs
489
- });
490
- throw new Error(msg);
491
- }
492
- }
459
+ _a = __read.apply(void 0, [_b.sent(), 1]), resultSet = _a[0];
460
+ result = resultSet && resultSet.rows && resultSet.rows.length && resultSet.rows.raw && resultSet.rows.raw();
461
+ return [2
462
+ /*return*/
463
+ , result || []];
464
+ }
465
+ });
466
+ });
467
+ };
493
468
 
494
- result = [];
495
- saveStatements = new Set();
496
- _d.label = 2;
469
+ SQLiteDatabase.prototype.save = function (statement, params) {
470
+ return __awaiter(this, void 0, void 0, function () {
471
+ return __generator(this, function (_a) {
472
+ switch (_a.label) {
473
+ case 0:
474
+ return [4
475
+ /*yield*/
476
+ , this.db.executeSql(statement, params)];
497
477
 
498
- case 2:
499
- _d.trys.push([2, 8, 9, 14]);
478
+ case 1:
479
+ _a.sent();
500
480
 
501
- connectionStoreNames_1 = __asyncValues(connectionStoreNames);
502
- _d.label = 3;
481
+ return [2
482
+ /*return*/
483
+ ];
484
+ }
485
+ });
486
+ });
487
+ };
503
488
 
504
- case 3:
489
+ SQLiteDatabase.prototype.batchQuery = function (queryParameterizedStatements) {
490
+ return __awaiter(this, void 0, void 0, function () {
491
+ var results;
492
+ return __generator(this, function (_a) {
493
+ switch (_a.label) {
494
+ case 0:
495
+ results = [];
505
496
  return [4
506
497
  /*yield*/
507
- , connectionStoreNames_1.next()];
498
+ , this.db.readTransaction(function (tx) {
499
+ var e_1, _a;
508
500
 
509
- case 4:
510
- if (!(connectionStoreNames_1_1 = _d.sent(), !connectionStoreNames_1_1.done)) return [3
511
- /*break*/
512
- , 7];
513
- resItem = connectionStoreNames_1_1.value;
514
- modelName = resItem.modelName, item = resItem.item, instance = resItem.instance;
515
- id = item.id;
516
- _c = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(id, modelName), 2), queryStatement_1 = _c[0], params_1 = _c[1];
517
- return [4
518
- /*yield*/
519
- , this.db.get(queryStatement_1, params_1)];
501
+ try {
502
+ for (var queryParameterizedStatements_1 = __values(queryParameterizedStatements), queryParameterizedStatements_1_1 = queryParameterizedStatements_1.next(); !queryParameterizedStatements_1_1.done; queryParameterizedStatements_1_1 = queryParameterizedStatements_1.next()) {
503
+ var _b = __read(queryParameterizedStatements_1_1.value, 2),
504
+ statement = _b[0],
505
+ params = _b[1];
520
506
 
521
- case 5:
522
- fromDB_1 = _d.sent();
523
- opType = fromDB_1 === undefined ? _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].INSERT : _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].UPDATE;
524
- saveStatement = fromDB_1 ? Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["modelUpdateStatement"])(instance, modelName) : Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["modelInsertStatement"])(instance, modelName);
507
+ tx.executeSql(statement, params, function (_, res) {
508
+ results.push(res.rows.raw()[0]);
509
+ }, logger.warn);
510
+ }
511
+ } catch (e_1_1) {
512
+ e_1 = {
513
+ error: e_1_1
514
+ };
515
+ } finally {
516
+ try {
517
+ if (queryParameterizedStatements_1_1 && !queryParameterizedStatements_1_1.done && (_a = queryParameterizedStatements_1["return"])) _a.call(queryParameterizedStatements_1);
518
+ } finally {
519
+ if (e_1) throw e_1.error;
520
+ }
521
+ }
522
+ })];
525
523
 
526
- if (id === model.id || opType === _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].INSERT) {
527
- saveStatements.add(saveStatement);
528
- result.push([instance, opType]);
529
- }
524
+ case 1:
525
+ _a.sent();
530
526
 
531
- _d.label = 6;
527
+ return [2
528
+ /*return*/
529
+ , results];
530
+ }
531
+ });
532
+ });
533
+ };
532
534
 
533
- case 6:
534
- return [3
535
- /*break*/
536
- , 3];
535
+ SQLiteDatabase.prototype.batchSave = function (saveParameterizedStatements, deleteParameterizedStatements) {
536
+ return __awaiter(this, void 0, void 0, function () {
537
+ return __generator(this, function (_a) {
538
+ switch (_a.label) {
539
+ case 0:
540
+ return [4
541
+ /*yield*/
542
+ , this.db.transaction(function (tx) {
543
+ var e_2, _a;
537
544
 
538
- case 7:
539
- return [3
540
- /*break*/
541
- , 14];
545
+ try {
546
+ for (var saveParameterizedStatements_1 = __values(saveParameterizedStatements), saveParameterizedStatements_1_1 = saveParameterizedStatements_1.next(); !saveParameterizedStatements_1_1.done; saveParameterizedStatements_1_1 = saveParameterizedStatements_1.next()) {
547
+ var _b = __read(saveParameterizedStatements_1_1.value, 2),
548
+ statement = _b[0],
549
+ params = _b[1];
542
550
 
543
- case 8:
544
- e_1_1 = _d.sent();
545
- e_1 = {
546
- error: e_1_1
547
- };
548
- return [3
549
- /*break*/
550
- , 14];
551
+ tx.executeSql(statement, params);
552
+ }
553
+ } catch (e_2_1) {
554
+ e_2 = {
555
+ error: e_2_1
556
+ };
557
+ } finally {
558
+ try {
559
+ if (saveParameterizedStatements_1_1 && !saveParameterizedStatements_1_1.done && (_a = saveParameterizedStatements_1["return"])) _a.call(saveParameterizedStatements_1);
560
+ } finally {
561
+ if (e_2) throw e_2.error;
562
+ }
563
+ }
564
+ })];
551
565
 
552
- case 9:
553
- _d.trys.push([9,, 12, 13]);
566
+ case 1:
567
+ _a.sent();
554
568
 
555
- if (!(connectionStoreNames_1_1 && !connectionStoreNames_1_1.done && (_a = connectionStoreNames_1["return"]))) return [3
569
+ if (!deleteParameterizedStatements) return [3
556
570
  /*break*/
557
- , 11];
571
+ , 3];
558
572
  return [4
559
573
  /*yield*/
560
- , _a.call(connectionStoreNames_1)];
574
+ , this.db.transaction(function (tx) {
575
+ var e_3, _a;
561
576
 
562
- case 10:
563
- _d.sent();
577
+ try {
578
+ for (var deleteParameterizedStatements_1 = __values(deleteParameterizedStatements), deleteParameterizedStatements_1_1 = deleteParameterizedStatements_1.next(); !deleteParameterizedStatements_1_1.done; deleteParameterizedStatements_1_1 = deleteParameterizedStatements_1.next()) {
579
+ var _b = __read(deleteParameterizedStatements_1_1.value, 2),
580
+ statement = _b[0],
581
+ params = _b[1];
564
582
 
565
- _d.label = 11;
583
+ tx.executeSql(statement, params);
584
+ }
585
+ } catch (e_3_1) {
586
+ e_3 = {
587
+ error: e_3_1
588
+ };
589
+ } finally {
590
+ try {
591
+ if (deleteParameterizedStatements_1_1 && !deleteParameterizedStatements_1_1.done && (_a = deleteParameterizedStatements_1["return"])) _a.call(deleteParameterizedStatements_1);
592
+ } finally {
593
+ if (e_3) throw e_3.error;
594
+ }
595
+ }
596
+ })];
566
597
 
567
- case 11:
568
- return [3
569
- /*break*/
570
- , 13];
598
+ case 2:
599
+ _a.sent();
571
600
 
572
- case 12:
573
- if (e_1) throw e_1.error;
574
- return [7
575
- /*endfinally*/
576
- ];
601
+ _a.label = 3;
577
602
 
578
- case 13:
579
- return [7
580
- /*endfinally*/
603
+ case 3:
604
+ return [2
605
+ /*return*/
581
606
  ];
607
+ }
608
+ });
609
+ });
610
+ };
582
611
 
583
- case 14:
612
+ SQLiteDatabase.prototype.selectAndDelete = function (queryParameterizedStatement, deleteParameterizedStatement) {
613
+ return __awaiter(this, void 0, void 0, function () {
614
+ var results, _a, queryStatement, queryParams, _b, deleteStatement, deleteParams;
615
+
616
+ return __generator(this, function (_c) {
617
+ switch (_c.label) {
618
+ case 0:
619
+ results = [];
620
+ _a = __read(queryParameterizedStatement, 2), queryStatement = _a[0], queryParams = _a[1];
621
+ _b = __read(deleteParameterizedStatement, 2), deleteStatement = _b[0], deleteParams = _b[1];
584
622
  return [4
585
623
  /*yield*/
586
- , this.db.batchSave(saveStatements)];
624
+ , this.db.transaction(function (tx) {
625
+ tx.executeSql(queryStatement, queryParams, function (_, res) {
626
+ results = res.rows.raw();
627
+ }, logger.warn);
628
+ tx.executeSql(deleteStatement, deleteParams, function () {}, logger.warn);
629
+ })];
587
630
 
588
- case 15:
589
- _d.sent();
631
+ case 1:
632
+ _c.sent();
590
633
 
591
634
  return [2
592
635
  /*return*/
593
- , result];
636
+ , results];
594
637
  }
595
638
  });
596
639
  });
597
640
  };
598
641
 
599
- SQLiteAdapter.prototype.load = function (namespaceName, srcModelName, records) {
600
- var records_1, records_1_1, records_2, records_2_1;
601
-
602
- var e_2, _a, e_3, _b, e_4, _c;
603
-
642
+ SQLiteDatabase.prototype.executeStatements = function (statements) {
604
643
  return __awaiter(this, void 0, void 0, function () {
605
- var namespace, relations, connectionTableNames, modelConstructor, relations_1, relations_1_1, relation, fieldName, tableName, targetName, relationType, modelConstructor_1, _d, recordItem, getByfield, _e, queryStatement, params, connectionRecord, e_3_1, recordItem, _f, queryStatement, params, connectionRecord, e_4_1, _, e_2_1;
606
-
607
- var _this = this;
608
-
609
- return __generator(this, function (_g) {
610
- switch (_g.label) {
644
+ return __generator(this, function (_a) {
645
+ switch (_a.label) {
611
646
  case 0:
612
- namespace = this.schema.namespaces[namespaceName];
613
- relations = namespace.relationships[srcModelName].relationTypes;
614
- connectionTableNames = relations.map(function (_a) {
615
- var modelName = _a.modelName;
616
- return modelName;
617
- });
618
- modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
619
-
620
- if (connectionTableNames.length === 0) {
621
- return [2
622
- /*return*/
623
- , records.map(function (record) {
624
- return _this.modelInstanceCreator(modelConstructor, record);
625
- })];
626
- }
647
+ return [4
648
+ /*yield*/
649
+ , this.db.transaction(function (tx) {
650
+ var e_4, _a;
627
651
 
628
- _g.label = 1;
652
+ try {
653
+ for (var statements_1 = __values(statements), statements_1_1 = statements_1.next(); !statements_1_1.done; statements_1_1 = statements_1.next()) {
654
+ var statement = statements_1_1.value;
655
+ tx.executeSql(statement);
656
+ }
657
+ } catch (e_4_1) {
658
+ e_4 = {
659
+ error: e_4_1
660
+ };
661
+ } finally {
662
+ try {
663
+ if (statements_1_1 && !statements_1_1.done && (_a = statements_1["return"])) _a.call(statements_1);
664
+ } finally {
665
+ if (e_4) throw e_4.error;
666
+ }
667
+ }
668
+ })];
629
669
 
630
670
  case 1:
631
- _g.trys.push([1, 34, 35, 40]);
671
+ _a.sent();
632
672
 
633
- relations_1 = __asyncValues(relations);
634
- _g.label = 2;
673
+ return [2
674
+ /*return*/
675
+ ];
676
+ }
677
+ });
678
+ });
679
+ };
635
680
 
636
- case 2:
681
+ SQLiteDatabase.prototype.closeDB = function () {
682
+ return __awaiter(this, void 0, void 0, function () {
683
+ return __generator(this, function (_a) {
684
+ switch (_a.label) {
685
+ case 0:
686
+ if (!this.db) return [3
687
+ /*break*/
688
+ , 2];
689
+ logger.debug('Closing Database');
637
690
  return [4
638
691
  /*yield*/
639
- , relations_1.next()];
692
+ , this.db.close()];
640
693
 
641
- case 3:
642
- if (!(relations_1_1 = _g.sent(), !relations_1_1.done)) return [3
643
- /*break*/
644
- , 33];
645
- relation = relations_1_1.value;
646
- fieldName = relation.fieldName, tableName = relation.modelName, targetName = relation.targetName, relationType = relation.relationType;
647
- modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, tableName);
648
- _d = relationType;
694
+ case 1:
695
+ _a.sent();
649
696
 
650
- switch (_d) {
651
- case 'HAS_ONE':
652
- return [3
653
- /*break*/
654
- , 4];
697
+ logger.debug('Database closed');
698
+ this.db = undefined;
699
+ _a.label = 2;
655
700
 
656
- case 'BELONGS_TO':
657
- return [3
658
- /*break*/
659
- , 17];
701
+ case 2:
702
+ return [2
703
+ /*return*/
704
+ ];
705
+ }
706
+ });
707
+ });
708
+ };
660
709
 
661
- case 'HAS_MANY':
662
- return [3
663
- /*break*/
664
- , 30];
665
- }
710
+ return SQLiteDatabase;
711
+ }();
666
712
 
667
- return [3
668
- /*break*/
669
- , 31];
713
+ /* harmony default export */ __webpack_exports__["default"] = (SQLiteDatabase);
670
714
 
671
- case 4:
672
- _g.trys.push([4, 10, 11, 16]);
715
+ /***/ }),
673
716
 
674
- records_1 = __asyncValues(records);
675
- _g.label = 5;
717
+ /***/ "./lib-esm/common/CommonSQLiteAdapter.js":
718
+ /*!***********************************************!*\
719
+ !*** ./lib-esm/common/CommonSQLiteAdapter.js ***!
720
+ \***********************************************/
721
+ /*! exports provided: CommonSQLiteAdapter */
722
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
676
723
 
677
- case 5:
678
- return [4
679
- /*yield*/
680
- , records_1.next()];
681
-
682
- case 6:
683
- if (!(records_1_1 = _g.sent(), !records_1_1.done)) return [3
684
- /*break*/
685
- , 9];
686
- recordItem = records_1_1.value;
687
- getByfield = recordItem[targetName] ? targetName : fieldName;
688
- if (!recordItem[getByfield]) return [3
689
- /*break*/
690
- , 9];
691
- _e = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(recordItem[getByfield], tableName), 2), queryStatement = _e[0], params = _e[1];
692
- return [4
693
- /*yield*/
694
- , this.db.get(queryStatement, params)];
695
-
696
- case 7:
697
- connectionRecord = _g.sent();
698
- recordItem[fieldName] = connectionRecord && this.modelInstanceCreator(modelConstructor_1, connectionRecord);
699
- _g.label = 8;
700
-
701
- case 8:
702
- return [3
703
- /*break*/
704
- , 5];
705
-
706
- case 9:
707
- return [3
708
- /*break*/
709
- , 16];
710
-
711
- case 10:
712
- e_3_1 = _g.sent();
713
- e_3 = {
714
- error: e_3_1
715
- };
716
- return [3
717
- /*break*/
718
- , 16];
724
+ "use strict";
725
+ __webpack_require__.r(__webpack_exports__);
726
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CommonSQLiteAdapter", function() { return CommonSQLiteAdapter; });
727
+ /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @aws-amplify/core */ "@aws-amplify/core");
728
+ /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__);
729
+ /* harmony import */ var _common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/SQLiteUtils */ "./lib-esm/common/SQLiteUtils.js");
730
+ /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @aws-amplify/datastore */ "@aws-amplify/datastore");
731
+ /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__);
732
+ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
733
+ function adopt(value) {
734
+ return value instanceof P ? value : new P(function (resolve) {
735
+ resolve(value);
736
+ });
737
+ }
719
738
 
720
- case 11:
721
- _g.trys.push([11,, 14, 15]);
739
+ return new (P || (P = Promise))(function (resolve, reject) {
740
+ function fulfilled(value) {
741
+ try {
742
+ step(generator.next(value));
743
+ } catch (e) {
744
+ reject(e);
745
+ }
746
+ }
722
747
 
723
- if (!(records_1_1 && !records_1_1.done && (_b = records_1["return"]))) return [3
724
- /*break*/
725
- , 13];
726
- return [4
727
- /*yield*/
728
- , _b.call(records_1)];
748
+ function rejected(value) {
749
+ try {
750
+ step(generator["throw"](value));
751
+ } catch (e) {
752
+ reject(e);
753
+ }
754
+ }
729
755
 
730
- case 12:
731
- _g.sent();
756
+ function step(result) {
757
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
758
+ }
732
759
 
733
- _g.label = 13;
760
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
761
+ });
762
+ };
734
763
 
735
- case 13:
736
- return [3
737
- /*break*/
738
- , 15];
764
+ var __generator = undefined && undefined.__generator || function (thisArg, body) {
765
+ var _ = {
766
+ label: 0,
767
+ sent: function sent() {
768
+ if (t[0] & 1) throw t[1];
769
+ return t[1];
770
+ },
771
+ trys: [],
772
+ ops: []
773
+ },
774
+ f,
775
+ y,
776
+ t,
777
+ g;
778
+ return g = {
779
+ next: verb(0),
780
+ "throw": verb(1),
781
+ "return": verb(2)
782
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
783
+ return this;
784
+ }), g;
739
785
 
740
- case 14:
741
- if (e_3) throw e_3.error;
742
- return [7
743
- /*endfinally*/
744
- ];
786
+ function verb(n) {
787
+ return function (v) {
788
+ return step([n, v]);
789
+ };
790
+ }
745
791
 
746
- case 15:
747
- return [7
748
- /*endfinally*/
749
- ];
792
+ function step(op) {
793
+ if (f) throw new TypeError("Generator is already executing.");
750
794
 
751
- case 16:
752
- return [3
753
- /*break*/
754
- , 32];
795
+ while (_) {
796
+ try {
797
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
798
+ if (y = 0, t) op = [op[0] & 2, t.value];
755
799
 
756
- case 17:
757
- _g.trys.push([17, 23, 24, 29]);
800
+ switch (op[0]) {
801
+ case 0:
802
+ case 1:
803
+ t = op;
804
+ break;
758
805
 
759
- records_2 = __asyncValues(records);
760
- _g.label = 18;
806
+ case 4:
807
+ _.label++;
808
+ return {
809
+ value: op[1],
810
+ done: false
811
+ };
761
812
 
762
- case 18:
763
- return [4
764
- /*yield*/
765
- , records_2.next()];
813
+ case 5:
814
+ _.label++;
815
+ y = op[1];
816
+ op = [0];
817
+ continue;
766
818
 
767
- case 19:
768
- if (!(records_2_1 = _g.sent(), !records_2_1.done)) return [3
769
- /*break*/
770
- , 22];
771
- recordItem = records_2_1.value;
772
- if (!recordItem[targetName]) return [3
773
- /*break*/
774
- , 21];
775
- _f = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(recordItem[targetName], tableName), 2), queryStatement = _f[0], params = _f[1];
776
- return [4
777
- /*yield*/
778
- , this.db.get(queryStatement, params)];
819
+ case 7:
820
+ op = _.ops.pop();
779
821
 
780
- case 20:
781
- connectionRecord = _g.sent();
782
- recordItem[fieldName] = connectionRecord && this.modelInstanceCreator(modelConstructor_1, connectionRecord);
783
- delete recordItem[targetName];
784
- _g.label = 21;
822
+ _.trys.pop();
785
823
 
786
- case 21:
787
- return [3
788
- /*break*/
789
- , 18];
824
+ continue;
790
825
 
791
- case 22:
792
- return [3
793
- /*break*/
794
- , 29];
826
+ default:
827
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
828
+ _ = 0;
829
+ continue;
830
+ }
795
831
 
796
- case 23:
797
- e_4_1 = _g.sent();
798
- e_4 = {
799
- error: e_4_1
800
- };
801
- return [3
802
- /*break*/
803
- , 29];
832
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
833
+ _.label = op[1];
834
+ break;
835
+ }
804
836
 
805
- case 24:
806
- _g.trys.push([24,, 27, 28]);
837
+ if (op[0] === 6 && _.label < t[1]) {
838
+ _.label = t[1];
839
+ t = op;
840
+ break;
841
+ }
807
842
 
808
- if (!(records_2_1 && !records_2_1.done && (_c = records_2["return"]))) return [3
809
- /*break*/
810
- , 26];
811
- return [4
812
- /*yield*/
813
- , _c.call(records_2)];
843
+ if (t && _.label < t[2]) {
844
+ _.label = t[2];
814
845
 
815
- case 25:
816
- _g.sent();
846
+ _.ops.push(op);
817
847
 
818
- _g.label = 26;
848
+ break;
849
+ }
819
850
 
820
- case 26:
821
- return [3
822
- /*break*/
823
- , 28];
851
+ if (t[2]) _.ops.pop();
824
852
 
825
- case 27:
826
- if (e_4) throw e_4.error;
827
- return [7
828
- /*endfinally*/
829
- ];
853
+ _.trys.pop();
830
854
 
831
- case 28:
832
- return [7
833
- /*endfinally*/
834
- ];
855
+ continue;
856
+ }
835
857
 
836
- case 29:
837
- return [3
838
- /*break*/
839
- , 32];
858
+ op = body.call(thisArg, _);
859
+ } catch (e) {
860
+ op = [6, e];
861
+ y = 0;
862
+ } finally {
863
+ f = t = 0;
864
+ }
865
+ }
840
866
 
841
- case 30:
842
- // TODO: Lazy loading
843
- return [3
844
- /*break*/
845
- , 32];
867
+ if (op[0] & 5) throw op[1];
868
+ return {
869
+ value: op[0] ? op[1] : void 0,
870
+ done: true
871
+ };
872
+ }
873
+ };
846
874
 
847
- case 31:
848
- _ = relationType;
849
- throw new Error("invalid relation type " + relationType);
875
+ var __asyncValues = undefined && undefined.__asyncValues || function (o) {
876
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
877
+ var m = o[Symbol.asyncIterator],
878
+ i;
879
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
880
+ return this;
881
+ }, i);
850
882
 
851
- case 32:
852
- return [3
853
- /*break*/
854
- , 2];
883
+ function verb(n) {
884
+ i[n] = o[n] && function (v) {
885
+ return new Promise(function (resolve, reject) {
886
+ v = o[n](v), settle(resolve, reject, v.done, v.value);
887
+ });
888
+ };
889
+ }
855
890
 
856
- case 33:
857
- return [3
858
- /*break*/
859
- , 40];
891
+ function settle(resolve, reject, d, v) {
892
+ Promise.resolve(v).then(function (v) {
893
+ resolve({
894
+ value: v,
895
+ done: d
896
+ });
897
+ }, reject);
898
+ }
899
+ };
860
900
 
861
- case 34:
862
- e_2_1 = _g.sent();
863
- e_2 = {
864
- error: e_2_1
865
- };
866
- return [3
867
- /*break*/
868
- , 40];
901
+ var __read = undefined && undefined.__read || function (o, n) {
902
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
903
+ if (!m) return o;
904
+ var i = m.call(o),
905
+ r,
906
+ ar = [],
907
+ e;
869
908
 
870
- case 35:
871
- _g.trys.push([35,, 38, 39]);
909
+ try {
910
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
911
+ ar.push(r.value);
912
+ }
913
+ } catch (error) {
914
+ e = {
915
+ error: error
916
+ };
917
+ } finally {
918
+ try {
919
+ if (r && !r.done && (m = i["return"])) m.call(i);
920
+ } finally {
921
+ if (e) throw e.error;
922
+ }
923
+ }
872
924
 
873
- if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1["return"]))) return [3
874
- /*break*/
875
- , 37];
876
- return [4
877
- /*yield*/
878
- , _a.call(relations_1)];
925
+ return ar;
926
+ };
879
927
 
880
- case 36:
881
- _g.sent();
928
+ var __values = undefined && undefined.__values || function (o) {
929
+ var s = typeof Symbol === "function" && Symbol.iterator,
930
+ m = s && o[s],
931
+ i = 0;
932
+ if (m) return m.call(o);
933
+ if (o && typeof o.length === "number") return {
934
+ next: function next() {
935
+ if (o && i >= o.length) o = void 0;
936
+ return {
937
+ value: o && o[i++],
938
+ done: !o
939
+ };
940
+ }
941
+ };
942
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
943
+ };
882
944
 
883
- _g.label = 37;
884
945
 
885
- case 37:
886
- return [3
887
- /*break*/
888
- , 39];
889
946
 
890
- case 38:
891
- if (e_2) throw e_2.error;
892
- return [7
893
- /*endfinally*/
894
- ];
895
947
 
896
- case 39:
897
- return [7
898
- /*endfinally*/
899
- ];
948
+ var traverseModel = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["utils"].traverseModel,
949
+ validatePredicate = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["utils"].validatePredicate,
950
+ isModelConstructor = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["utils"].isModelConstructor;
951
+ var logger = new _aws_amplify_core__WEBPACK_IMPORTED_MODULE_0__["ConsoleLogger"]('DataStore');
900
952
 
901
- case 40:
902
- return [2
903
- /*return*/
904
- , records.map(function (record) {
905
- return _this.modelInstanceCreator(modelConstructor, record);
906
- })];
907
- }
908
- });
909
- });
910
- };
953
+ var CommonSQLiteAdapter =
954
+ /** @class */
955
+ function () {
956
+ function CommonSQLiteAdapter(db) {
957
+ this.db = db;
958
+ }
911
959
 
912
- SQLiteAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
960
+ CommonSQLiteAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName) {
913
961
  return __awaiter(this, void 0, void 0, function () {
914
- var tableName, namespaceName, predicates, sortPredicates, limit, page, queryById, records;
962
+ var statements, error_1;
915
963
 
916
964
  var _this = this;
917
965
 
918
966
  return __generator(this, function (_a) {
919
967
  switch (_a.label) {
920
968
  case 0:
921
- tableName = modelConstructor.name;
922
- namespaceName = this.namespaceResolver(modelConstructor);
923
- predicates = predicate && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["ModelPredicateCreator"].getPredicates(predicate);
924
- sortPredicates = pagination && pagination.sort && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["ModelSortPredicateCreator"].getPredicates(pagination.sort);
925
- limit = pagination && pagination.limit;
926
- page = limit && pagination.page;
927
- queryById = predicates && this.idFromPredicate(predicates);
969
+ if (!!this.initPromise) return [3
970
+ /*break*/
971
+ , 1];
972
+ this.initPromise = new Promise(function (res, rej) {
973
+ _this.resolve = res;
974
+ _this.reject = rej;
975
+ });
976
+ return [3
977
+ /*break*/
978
+ , 3];
979
+
980
+ case 1:
928
981
  return [4
929
982
  /*yield*/
930
- , function () {
931
- return __awaiter(_this, void 0, void 0, function () {
932
- var record, _a, queryStatement, params;
983
+ , this.initPromise];
933
984
 
934
- return __generator(this, function (_b) {
935
- switch (_b.label) {
936
- case 0:
937
- if (!queryById) return [3
938
- /*break*/
939
- , 2];
940
- return [4
941
- /*yield*/
942
- , this.getById(tableName, queryById)];
985
+ case 2:
986
+ _a.sent();
943
987
 
944
- case 1:
945
- record = _b.sent();
946
- return [2
947
- /*return*/
948
- , record ? [record] : []];
988
+ return [2
989
+ /*return*/
990
+ ];
949
991
 
950
- case 2:
951
- _a = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryAllStatement"])(tableName, predicates, sortPredicates, limit, page), 2), queryStatement = _a[0], params = _a[1];
952
- return [4
953
- /*yield*/
954
- , this.db.getAll(queryStatement, params)];
992
+ case 3:
993
+ this.schema = theSchema;
994
+ this.namespaceResolver = namespaceResolver;
995
+ this.modelInstanceCreator = modelInstanceCreator;
996
+ this.getModelConstructorByModelName = getModelConstructorByModelName;
997
+ _a.label = 4;
955
998
 
956
- case 3:
957
- return [2
958
- /*return*/
959
- , _b.sent()];
960
- }
961
- });
962
- });
963
- }()];
999
+ case 4:
1000
+ _a.trys.push([4, 7,, 8]);
964
1001
 
965
- case 1:
966
- records = _a.sent();
967
1002
  return [4
968
1003
  /*yield*/
969
- , this.load(namespaceName, modelConstructor.name, records)];
970
-
971
- case 2:
972
- return [2
973
- /*return*/
974
- , _a.sent()];
975
- }
976
- });
977
- });
978
- };
1004
+ , this.db.init()];
979
1005
 
980
- SQLiteAdapter.prototype.getById = function (tableName, id) {
981
- return __awaiter(this, void 0, void 0, function () {
982
- var _a, queryStatement, params, record;
1006
+ case 5:
1007
+ _a.sent();
983
1008
 
984
- return __generator(this, function (_b) {
985
- switch (_b.label) {
986
- case 0:
987
- _a = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(id, tableName), 2), queryStatement = _a[0], params = _a[1];
1009
+ statements = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["generateSchemaStatements"])(this.schema);
988
1010
  return [4
989
1011
  /*yield*/
990
- , this.db.get(queryStatement, params)];
1012
+ , this.db.createSchema(statements)];
991
1013
 
992
- case 1:
993
- record = _b.sent();
1014
+ case 6:
1015
+ _a.sent();
1016
+
1017
+ this.resolve();
1018
+ return [3
1019
+ /*break*/
1020
+ , 8];
1021
+
1022
+ case 7:
1023
+ error_1 = _a.sent();
1024
+ this.reject(error_1);
1025
+ return [3
1026
+ /*break*/
1027
+ , 8];
1028
+
1029
+ case 8:
994
1030
  return [2
995
1031
  /*return*/
996
- , record];
1032
+ ];
997
1033
  }
998
1034
  });
999
1035
  });
1000
1036
  };
1001
1037
 
1002
- SQLiteAdapter.prototype.idFromPredicate = function (predicates) {
1003
- var predicateObjs = predicates.predicates;
1004
- var idPredicate = predicateObjs.length === 1 && predicateObjs.find(function (p) {
1005
- return Object(_aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["isPredicateObj"])(p) && p.field === 'id' && p.operator === 'eq';
1006
- });
1007
- return idPredicate && idPredicate.operand;
1008
- };
1009
-
1010
- SQLiteAdapter.prototype.queryOne = function (modelConstructor, firstOrLast) {
1011
- if (firstOrLast === void 0) {
1012
- firstOrLast = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["QueryOne"].FIRST;
1013
- }
1014
-
1038
+ CommonSQLiteAdapter.prototype.clear = function () {
1015
1039
  return __awaiter(this, void 0, void 0, function () {
1016
- var tableName, _a, queryStatement, params, result, modelInstance;
1017
-
1018
- return __generator(this, function (_b) {
1019
- switch (_b.label) {
1040
+ return __generator(this, function (_a) {
1041
+ switch (_a.label) {
1020
1042
  case 0:
1021
- tableName = modelConstructor.name;
1022
- _a = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryOneStatement"])(firstOrLast, tableName), 2), queryStatement = _a[0], params = _a[1];
1023
1043
  return [4
1024
1044
  /*yield*/
1025
- , this.db.get(queryStatement, params)];
1045
+ , this.db.clear()];
1026
1046
 
1027
1047
  case 1:
1028
- result = _b.sent();
1029
- modelInstance = result && this.modelInstanceCreator(modelConstructor, result);
1048
+ _a.sent();
1049
+
1050
+ this.initPromise = undefined;
1030
1051
  return [2
1031
1052
  /*return*/
1032
- , modelInstance];
1053
+ ];
1033
1054
  }
1034
1055
  });
1035
1056
  });
1036
- }; // Currently does not cascade
1037
- // TODO: use FKs in relations and have `ON DELETE CASCADE` set
1038
- // For Has Many and Has One relations to have SQL handle cascades automatically
1057
+ };
1039
1058
 
1059
+ CommonSQLiteAdapter.prototype.save = function (model, condition) {
1060
+ var e_1, _a;
1040
1061
 
1041
- SQLiteAdapter.prototype["delete"] = function (modelOrModelConstructor, condition) {
1042
1062
  return __awaiter(this, void 0, void 0, function () {
1043
- var modelConstructor, namespaceName, tableName, predicates, queryStatement, deleteStatement, models, modelInstances, model, modelConstructor, tableName, _a, queryStatement, params, fromDB, msg, predicates, predicateObjs, type, isValid, msg, _b, deleteStatement, deleteParams, _c, deleteStatement, params;
1063
+ var modelConstructor, tableName, connectedModels, connectionStoreNames, _b, queryStatement, params, fromDB, predicates, predicateObjs, type, isValid, msg, result, saveStatements, connectionStoreNames_1, connectionStoreNames_1_1, resItem, modelName, item, instance, id, _c, queryStatement_1, params_1, fromDB_1, opType, saveStatement, e_1_1;
1044
1064
 
1045
1065
  return __generator(this, function (_d) {
1046
1066
  switch (_d.label) {
1047
1067
  case 0:
1048
- if (!isModelConstructor(modelOrModelConstructor)) return [3
1049
- /*break*/
1050
- , 3];
1051
- modelConstructor = modelOrModelConstructor;
1052
- namespaceName = this.namespaceResolver(modelConstructor);
1068
+ modelConstructor = Object.getPrototypeOf(model).constructor;
1053
1069
  tableName = modelConstructor.name;
1054
- predicates = condition && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["ModelPredicateCreator"].getPredicates(condition);
1055
- queryStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryAllStatement"])(tableName, predicates);
1056
- deleteStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["deleteByPredicateStatement"])(tableName, predicates);
1070
+ connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[this.namespaceResolver(modelConstructor)], this.modelInstanceCreator, this.getModelConstructorByModelName);
1071
+ connectionStoreNames = Object.values(connectedModels).map(function (_a) {
1072
+ var modelName = _a.modelName,
1073
+ item = _a.item,
1074
+ instance = _a.instance;
1075
+ return {
1076
+ modelName: modelName,
1077
+ item: item,
1078
+ instance: instance
1079
+ };
1080
+ });
1081
+ _b = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(model.id, tableName), 2), queryStatement = _b[0], params = _b[1];
1057
1082
  return [4
1058
1083
  /*yield*/
1059
- , this.db.selectAndDelete(queryStatement, deleteStatement)];
1084
+ , this.db.get(queryStatement, params)];
1060
1085
 
1061
1086
  case 1:
1062
- models = _d.sent();
1063
- return [4
1064
- /*yield*/
1065
- , this.load(namespaceName, modelConstructor.name, models)];
1087
+ fromDB = _d.sent();
1088
+
1089
+ if (condition && fromDB) {
1090
+ predicates = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["ModelPredicateCreator"].getPredicates(condition);
1091
+ predicateObjs = predicates.predicates, type = predicates.type;
1092
+ isValid = validatePredicate(fromDB, type, predicateObjs);
1093
+
1094
+ if (!isValid) {
1095
+ msg = 'Conditional update failed';
1096
+ logger.error(msg, {
1097
+ model: fromDB,
1098
+ condition: predicateObjs
1099
+ });
1100
+ throw new Error(msg);
1101
+ }
1102
+ }
1103
+
1104
+ result = [];
1105
+ saveStatements = new Set();
1106
+ _d.label = 2;
1066
1107
 
1067
1108
  case 2:
1068
- modelInstances = _d.sent();
1069
- return [2
1070
- /*return*/
1071
- , [modelInstances, modelInstances]];
1109
+ _d.trys.push([2, 8, 9, 14]);
1110
+
1111
+ connectionStoreNames_1 = __asyncValues(connectionStoreNames);
1112
+ _d.label = 3;
1072
1113
 
1073
1114
  case 3:
1074
- model = modelOrModelConstructor;
1075
- modelConstructor = Object.getPrototypeOf(model).constructor;
1076
- tableName = modelConstructor.name;
1077
- if (!condition) return [3
1115
+ return [4
1116
+ /*yield*/
1117
+ , connectionStoreNames_1.next()];
1118
+
1119
+ case 4:
1120
+ if (!(connectionStoreNames_1_1 = _d.sent(), !connectionStoreNames_1_1.done)) return [3
1078
1121
  /*break*/
1079
- , 6];
1080
- _a = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(model.id, tableName), 2), queryStatement = _a[0], params = _a[1];
1122
+ , 7];
1123
+ resItem = connectionStoreNames_1_1.value;
1124
+ modelName = resItem.modelName, item = resItem.item, instance = resItem.instance;
1125
+ id = item.id;
1126
+ _c = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(id, modelName), 2), queryStatement_1 = _c[0], params_1 = _c[1];
1081
1127
  return [4
1082
1128
  /*yield*/
1083
- , this.db.get(queryStatement, params)];
1129
+ , this.db.get(queryStatement_1, params_1)];
1084
1130
 
1085
- case 4:
1086
- fromDB = _d.sent();
1131
+ case 5:
1132
+ fromDB_1 = _d.sent();
1133
+ opType = fromDB_1 === undefined ? _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["OpType"].INSERT : _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["OpType"].UPDATE;
1134
+ saveStatement = fromDB_1 ? Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["modelUpdateStatement"])(instance, modelName) : Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["modelInsertStatement"])(instance, modelName);
1135
+ saveStatements.add(saveStatement);
1136
+ result.push([instance, opType]);
1137
+ _d.label = 6;
1087
1138
 
1088
- if (fromDB === undefined) {
1089
- msg = 'Model instance not found in storage';
1090
- logger.warn(msg, {
1091
- model: model
1092
- });
1093
- return [2
1094
- /*return*/
1095
- , [[model], []]];
1096
- }
1139
+ case 6:
1140
+ return [3
1141
+ /*break*/
1142
+ , 3];
1097
1143
 
1098
- predicates = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["ModelPredicateCreator"].getPredicates(condition);
1099
- predicateObjs = predicates.predicates, type = predicates.type;
1100
- isValid = validatePredicate(fromDB, type, predicateObjs);
1144
+ case 7:
1145
+ return [3
1146
+ /*break*/
1147
+ , 14];
1101
1148
 
1102
- if (!isValid) {
1103
- msg = 'Conditional update failed';
1104
- logger.error(msg, {
1105
- model: fromDB,
1106
- condition: predicateObjs
1107
- });
1108
- throw new Error(msg);
1109
- }
1149
+ case 8:
1150
+ e_1_1 = _d.sent();
1151
+ e_1 = {
1152
+ error: e_1_1
1153
+ };
1154
+ return [3
1155
+ /*break*/
1156
+ , 14];
1157
+
1158
+ case 9:
1159
+ _d.trys.push([9,, 12, 13]);
1110
1160
 
1111
- _b = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["deleteByIdStatement"])(model.id, tableName), 2), deleteStatement = _b[0], deleteParams = _b[1];
1161
+ if (!(connectionStoreNames_1_1 && !connectionStoreNames_1_1.done && (_a = connectionStoreNames_1["return"]))) return [3
1162
+ /*break*/
1163
+ , 11];
1112
1164
  return [4
1113
1165
  /*yield*/
1114
- , this.db.save(deleteStatement, deleteParams)];
1166
+ , _a.call(connectionStoreNames_1)];
1115
1167
 
1116
- case 5:
1168
+ case 10:
1117
1169
  _d.sent();
1118
1170
 
1119
- return [2
1120
- /*return*/
1121
- , [[model], [model]]];
1171
+ _d.label = 11;
1122
1172
 
1123
- case 6:
1124
- _c = __read(Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["deleteByIdStatement"])(model.id, tableName), 2), deleteStatement = _c[0], params = _c[1];
1173
+ case 11:
1174
+ return [3
1175
+ /*break*/
1176
+ , 13];
1177
+
1178
+ case 12:
1179
+ if (e_1) throw e_1.error;
1180
+ return [7
1181
+ /*endfinally*/
1182
+ ];
1183
+
1184
+ case 13:
1185
+ return [7
1186
+ /*endfinally*/
1187
+ ];
1188
+
1189
+ case 14:
1125
1190
  return [4
1126
1191
  /*yield*/
1127
- , this.db.save(deleteStatement, params)];
1192
+ , this.db.batchSave(saveStatements)];
1128
1193
 
1129
- case 7:
1194
+ case 15:
1130
1195
  _d.sent();
1131
1196
 
1132
1197
  return [2
1133
1198
  /*return*/
1134
- , [[model], [model]]];
1199
+ , result];
1135
1200
  }
1136
1201
  });
1137
1202
  });
1138
1203
  };
1139
1204
 
1140
- SQLiteAdapter.prototype.batchSave = function (modelConstructor, items) {
1141
- return __awaiter(this, void 0, void 0, function () {
1142
- var tableName, result, itemsToSave, queryStatements, deleteStatements, saveStatements, _loop_1, this_1, items_1, items_1_1, item, queryResponses;
1143
-
1144
- var e_5, _a;
1145
-
1146
- return __generator(this, function (_b) {
1147
- switch (_b.label) {
1148
- case 0:
1149
- tableName = modelConstructor.name;
1150
- result = [];
1151
- itemsToSave = [];
1152
- queryStatements = new Set();
1153
- deleteStatements = new Set();
1154
- saveStatements = new Set();
1155
-
1156
- _loop_1 = function _loop_1(item) {
1157
- var connectedModels = traverseModel(modelConstructor.name, this_1.modelInstanceCreator(modelConstructor, item), this_1.schema.namespaces[this_1.namespaceResolver(modelConstructor)], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
1158
- var id = item.id,
1159
- _deleted = item._deleted;
1160
- var instance = connectedModels.find(function (_a) {
1161
- var instance = _a.instance;
1162
- return instance.id === id;
1163
- }).instance;
1205
+ CommonSQLiteAdapter.prototype.load = function (namespaceName, srcModelName, records) {
1206
+ var records_1, records_1_1, records_2, records_2_1;
1164
1207
 
1165
- if (_deleted) {
1166
- // create the delete statements right away
1167
- var deleteStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["deleteByIdStatement"])(instance.id, tableName);
1168
- deleteStatements.add(deleteStatement);
1169
- result.push([item, _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].DELETE]);
1170
- } else {
1171
- // query statements for the saves at first
1172
- var queryStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["queryByIdStatement"])(id, tableName);
1173
- queryStatements.add(queryStatement); // combination of insert and update items
1208
+ var e_2, _a, e_3, _b, e_4, _c;
1174
1209
 
1175
- itemsToSave.push(instance);
1176
- }
1177
- };
1210
+ return __awaiter(this, void 0, void 0, function () {
1211
+ var namespace, relations, connectionTableNames, modelConstructor, relations_1, relations_1_1, relation, fieldName, tableName, targetName, relationType, modelConstructor_1, _d, recordItem, getByfield, _e, queryStatement, params, connectionRecord, e_3_1, recordItem, _f, queryStatement, params, connectionRecord, e_4_1, _, e_2_1;
1178
1212
 
1179
- this_1 = this;
1213
+ var _this = this;
1180
1214
 
1181
- try {
1182
- for (items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
1183
- item = items_1_1.value;
1215
+ return __generator(this, function (_g) {
1216
+ switch (_g.label) {
1217
+ case 0:
1218
+ namespace = this.schema.namespaces[namespaceName];
1219
+ relations = namespace.relationships[srcModelName].relationTypes;
1220
+ connectionTableNames = relations.map(function (_a) {
1221
+ var modelName = _a.modelName;
1222
+ return modelName;
1223
+ });
1224
+ modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
1184
1225
 
1185
- _loop_1(item);
1186
- }
1187
- } catch (e_5_1) {
1188
- e_5 = {
1189
- error: e_5_1
1190
- };
1191
- } finally {
1192
- try {
1193
- if (items_1_1 && !items_1_1.done && (_a = items_1["return"])) _a.call(items_1);
1194
- } finally {
1195
- if (e_5) throw e_5.error;
1196
- }
1226
+ if (connectionTableNames.length === 0) {
1227
+ return [2
1228
+ /*return*/
1229
+ , records.map(function (record) {
1230
+ return _this.modelInstanceCreator(modelConstructor, record);
1231
+ })];
1197
1232
  }
1198
1233
 
1199
- return [4
1200
- /*yield*/
1201
- , this.db.batchQuery(queryStatements)];
1234
+ _g.label = 1;
1202
1235
 
1203
1236
  case 1:
1204
- queryResponses = _b.sent();
1205
- queryResponses.forEach(function (response, idx) {
1206
- if (response === undefined) {
1207
- var insertStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["modelInsertStatement"])(itemsToSave[idx], tableName);
1208
- saveStatements.add(insertStatement);
1209
- result.push([itemsToSave[idx], _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].INSERT]);
1210
- } else {
1211
- var updateStatement = Object(_SQLiteUtils__WEBPACK_IMPORTED_MODULE_2__["modelUpdateStatement"])(itemsToSave[idx], tableName);
1212
- saveStatements.add(updateStatement);
1213
- result.push([itemsToSave[idx], _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_3__["OpType"].UPDATE]);
1214
- }
1215
- }); // perform all of the insert/update/delete operations in a single transaction
1237
+ _g.trys.push([1, 34, 35, 40]);
1216
1238
 
1217
- return [4
1218
- /*yield*/
1219
- , this.db.batchSave(saveStatements, deleteStatements)];
1239
+ relations_1 = __asyncValues(relations);
1240
+ _g.label = 2;
1220
1241
 
1221
1242
  case 2:
1222
- // perform all of the insert/update/delete operations in a single transaction
1223
- _b.sent();
1243
+ return [4
1244
+ /*yield*/
1245
+ , relations_1.next()];
1224
1246
 
1225
- return [2
1226
- /*return*/
1227
- , result];
1228
- }
1229
- });
1230
- });
1231
- };
1247
+ case 3:
1248
+ if (!(relations_1_1 = _g.sent(), !relations_1_1.done)) return [3
1249
+ /*break*/
1250
+ , 33];
1251
+ relation = relations_1_1.value;
1252
+ fieldName = relation.fieldName, tableName = relation.modelName, targetName = relation.targetName, relationType = relation.relationType;
1253
+ modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, tableName);
1254
+ _d = relationType;
1232
1255
 
1233
- return SQLiteAdapter;
1234
- }();
1256
+ switch (_d) {
1257
+ case 'HAS_ONE':
1258
+ return [3
1259
+ /*break*/
1260
+ , 4];
1235
1261
 
1262
+ case 'BELONGS_TO':
1263
+ return [3
1264
+ /*break*/
1265
+ , 17];
1236
1266
 
1237
- /* harmony default export */ __webpack_exports__["default"] = (new SQLiteAdapter());
1267
+ case 'HAS_MANY':
1268
+ return [3
1269
+ /*break*/
1270
+ , 30];
1271
+ }
1238
1272
 
1239
- /***/ }),
1273
+ return [3
1274
+ /*break*/
1275
+ , 31];
1240
1276
 
1241
- /***/ "./lib-esm/SQLiteAdapter/SQLiteDatabase.js":
1242
- /*!*************************************************!*\
1243
- !*** ./lib-esm/SQLiteAdapter/SQLiteDatabase.js ***!
1244
- \*************************************************/
1245
- /*! exports provided: default */
1246
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1277
+ case 4:
1278
+ _g.trys.push([4, 10, 11, 16]);
1247
1279
 
1248
- "use strict";
1249
- __webpack_require__.r(__webpack_exports__);
1250
- /* harmony import */ var react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native-sqlite-storage */ "react-native-sqlite-storage");
1251
- /* harmony import */ var react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0__);
1252
- /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @aws-amplify/core */ "@aws-amplify/core");
1253
- /* harmony import */ var _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__);
1254
- var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
1255
- function adopt(value) {
1256
- return value instanceof P ? value : new P(function (resolve) {
1257
- resolve(value);
1258
- });
1259
- }
1280
+ records_1 = __asyncValues(records);
1281
+ _g.label = 5;
1260
1282
 
1261
- return new (P || (P = Promise))(function (resolve, reject) {
1262
- function fulfilled(value) {
1263
- try {
1264
- step(generator.next(value));
1265
- } catch (e) {
1266
- reject(e);
1267
- }
1268
- }
1283
+ case 5:
1284
+ return [4
1285
+ /*yield*/
1286
+ , records_1.next()];
1269
1287
 
1270
- function rejected(value) {
1271
- try {
1272
- step(generator["throw"](value));
1273
- } catch (e) {
1274
- reject(e);
1275
- }
1276
- }
1288
+ case 6:
1289
+ if (!(records_1_1 = _g.sent(), !records_1_1.done)) return [3
1290
+ /*break*/
1291
+ , 9];
1292
+ recordItem = records_1_1.value;
1293
+ getByfield = recordItem[targetName] ? targetName : fieldName;
1294
+ if (!recordItem[getByfield]) return [3
1295
+ /*break*/
1296
+ , 9];
1297
+ _e = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(recordItem[getByfield], tableName), 2), queryStatement = _e[0], params = _e[1];
1298
+ return [4
1299
+ /*yield*/
1300
+ , this.db.get(queryStatement, params)];
1277
1301
 
1278
- function step(result) {
1279
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
1280
- }
1302
+ case 7:
1303
+ connectionRecord = _g.sent();
1304
+ recordItem[fieldName] = connectionRecord && this.modelInstanceCreator(modelConstructor_1, connectionRecord);
1305
+ _g.label = 8;
1281
1306
 
1282
- step((generator = generator.apply(thisArg, _arguments || [])).next());
1283
- });
1284
- };
1307
+ case 8:
1308
+ return [3
1309
+ /*break*/
1310
+ , 5];
1285
1311
 
1286
- var __generator = undefined && undefined.__generator || function (thisArg, body) {
1287
- var _ = {
1288
- label: 0,
1289
- sent: function sent() {
1290
- if (t[0] & 1) throw t[1];
1291
- return t[1];
1292
- },
1293
- trys: [],
1294
- ops: []
1295
- },
1296
- f,
1297
- y,
1298
- t,
1299
- g;
1300
- return g = {
1301
- next: verb(0),
1302
- "throw": verb(1),
1303
- "return": verb(2)
1304
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
1305
- return this;
1306
- }), g;
1312
+ case 9:
1313
+ return [3
1314
+ /*break*/
1315
+ , 16];
1307
1316
 
1308
- function verb(n) {
1309
- return function (v) {
1310
- return step([n, v]);
1311
- };
1312
- }
1317
+ case 10:
1318
+ e_3_1 = _g.sent();
1319
+ e_3 = {
1320
+ error: e_3_1
1321
+ };
1322
+ return [3
1323
+ /*break*/
1324
+ , 16];
1313
1325
 
1314
- function step(op) {
1315
- if (f) throw new TypeError("Generator is already executing.");
1326
+ case 11:
1327
+ _g.trys.push([11,, 14, 15]);
1316
1328
 
1317
- while (_) {
1318
- try {
1319
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1320
- if (y = 0, t) op = [op[0] & 2, t.value];
1329
+ if (!(records_1_1 && !records_1_1.done && (_b = records_1["return"]))) return [3
1330
+ /*break*/
1331
+ , 13];
1332
+ return [4
1333
+ /*yield*/
1334
+ , _b.call(records_1)];
1321
1335
 
1322
- switch (op[0]) {
1323
- case 0:
1324
- case 1:
1325
- t = op;
1326
- break;
1336
+ case 12:
1337
+ _g.sent();
1327
1338
 
1328
- case 4:
1329
- _.label++;
1330
- return {
1331
- value: op[1],
1332
- done: false
1333
- };
1339
+ _g.label = 13;
1334
1340
 
1335
- case 5:
1336
- _.label++;
1337
- y = op[1];
1338
- op = [0];
1339
- continue;
1341
+ case 13:
1342
+ return [3
1343
+ /*break*/
1344
+ , 15];
1340
1345
 
1341
- case 7:
1342
- op = _.ops.pop();
1346
+ case 14:
1347
+ if (e_3) throw e_3.error;
1348
+ return [7
1349
+ /*endfinally*/
1350
+ ];
1343
1351
 
1344
- _.trys.pop();
1352
+ case 15:
1353
+ return [7
1354
+ /*endfinally*/
1355
+ ];
1345
1356
 
1346
- continue;
1357
+ case 16:
1358
+ return [3
1359
+ /*break*/
1360
+ , 32];
1347
1361
 
1348
- default:
1349
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
1350
- _ = 0;
1351
- continue;
1352
- }
1362
+ case 17:
1363
+ _g.trys.push([17, 23, 24, 29]);
1353
1364
 
1354
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
1355
- _.label = op[1];
1356
- break;
1357
- }
1365
+ records_2 = __asyncValues(records);
1366
+ _g.label = 18;
1358
1367
 
1359
- if (op[0] === 6 && _.label < t[1]) {
1360
- _.label = t[1];
1361
- t = op;
1362
- break;
1363
- }
1368
+ case 18:
1369
+ return [4
1370
+ /*yield*/
1371
+ , records_2.next()];
1364
1372
 
1365
- if (t && _.label < t[2]) {
1366
- _.label = t[2];
1373
+ case 19:
1374
+ if (!(records_2_1 = _g.sent(), !records_2_1.done)) return [3
1375
+ /*break*/
1376
+ , 22];
1377
+ recordItem = records_2_1.value;
1378
+ if (!recordItem[targetName]) return [3
1379
+ /*break*/
1380
+ , 21];
1381
+ _f = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(recordItem[targetName], tableName), 2), queryStatement = _f[0], params = _f[1];
1382
+ return [4
1383
+ /*yield*/
1384
+ , this.db.get(queryStatement, params)];
1367
1385
 
1368
- _.ops.push(op);
1386
+ case 20:
1387
+ connectionRecord = _g.sent();
1388
+ recordItem[fieldName] = connectionRecord && this.modelInstanceCreator(modelConstructor_1, connectionRecord);
1389
+ delete recordItem[targetName];
1390
+ _g.label = 21;
1369
1391
 
1370
- break;
1371
- }
1392
+ case 21:
1393
+ return [3
1394
+ /*break*/
1395
+ , 18];
1372
1396
 
1373
- if (t[2]) _.ops.pop();
1397
+ case 22:
1398
+ return [3
1399
+ /*break*/
1400
+ , 29];
1374
1401
 
1375
- _.trys.pop();
1402
+ case 23:
1403
+ e_4_1 = _g.sent();
1404
+ e_4 = {
1405
+ error: e_4_1
1406
+ };
1407
+ return [3
1408
+ /*break*/
1409
+ , 29];
1376
1410
 
1377
- continue;
1378
- }
1411
+ case 24:
1412
+ _g.trys.push([24,, 27, 28]);
1379
1413
 
1380
- op = body.call(thisArg, _);
1381
- } catch (e) {
1382
- op = [6, e];
1383
- y = 0;
1384
- } finally {
1385
- f = t = 0;
1386
- }
1387
- }
1414
+ if (!(records_2_1 && !records_2_1.done && (_c = records_2["return"]))) return [3
1415
+ /*break*/
1416
+ , 26];
1417
+ return [4
1418
+ /*yield*/
1419
+ , _c.call(records_2)];
1388
1420
 
1389
- if (op[0] & 5) throw op[1];
1390
- return {
1391
- value: op[0] ? op[1] : void 0,
1392
- done: true
1393
- };
1394
- }
1395
- };
1421
+ case 25:
1422
+ _g.sent();
1396
1423
 
1397
- var __read = undefined && undefined.__read || function (o, n) {
1398
- var m = typeof Symbol === "function" && o[Symbol.iterator];
1399
- if (!m) return o;
1400
- var i = m.call(o),
1401
- r,
1402
- ar = [],
1403
- e;
1424
+ _g.label = 26;
1404
1425
 
1405
- try {
1406
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
1407
- ar.push(r.value);
1408
- }
1409
- } catch (error) {
1410
- e = {
1411
- error: error
1412
- };
1413
- } finally {
1414
- try {
1415
- if (r && !r.done && (m = i["return"])) m.call(i);
1416
- } finally {
1417
- if (e) throw e.error;
1418
- }
1419
- }
1426
+ case 26:
1427
+ return [3
1428
+ /*break*/
1429
+ , 28];
1420
1430
 
1421
- return ar;
1422
- };
1431
+ case 27:
1432
+ if (e_4) throw e_4.error;
1433
+ return [7
1434
+ /*endfinally*/
1435
+ ];
1423
1436
 
1424
- var __values = undefined && undefined.__values || function (o) {
1425
- var s = typeof Symbol === "function" && Symbol.iterator,
1426
- m = s && o[s],
1427
- i = 0;
1428
- if (m) return m.call(o);
1429
- if (o && typeof o.length === "number") return {
1430
- next: function next() {
1431
- if (o && i >= o.length) o = void 0;
1432
- return {
1433
- value: o && o[i++],
1434
- done: !o
1435
- };
1436
- }
1437
- };
1438
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
1439
- };
1437
+ case 28:
1438
+ return [7
1439
+ /*endfinally*/
1440
+ ];
1441
+
1442
+ case 29:
1443
+ return [3
1444
+ /*break*/
1445
+ , 32];
1440
1446
 
1447
+ case 30:
1448
+ // TODO: Lazy loading
1449
+ return [3
1450
+ /*break*/
1451
+ , 32];
1441
1452
 
1453
+ case 31:
1454
+ _ = relationType;
1455
+ throw new Error("invalid relation type " + relationType);
1442
1456
 
1443
- var logger = new _aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__["ConsoleLogger"]('SQLiteDatabase');
1444
- react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.enablePromise(true);
1457
+ case 32:
1458
+ return [3
1459
+ /*break*/
1460
+ , 2];
1445
1461
 
1446
- if (_aws_amplify_core__WEBPACK_IMPORTED_MODULE_1__["ConsoleLogger"].LOG_LEVEL === 'DEBUG') {
1447
- react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.DEBUG(true);
1448
- }
1462
+ case 33:
1463
+ return [3
1464
+ /*break*/
1465
+ , 40];
1449
1466
 
1450
- var DB_NAME = 'AmplifyDatastore';
1451
- var DB_DISPLAYNAME = 'AWS Amplify DataStore SQLite Database'; // TODO: make these configurable
1467
+ case 34:
1468
+ e_2_1 = _g.sent();
1469
+ e_2 = {
1470
+ error: e_2_1
1471
+ };
1472
+ return [3
1473
+ /*break*/
1474
+ , 40];
1452
1475
 
1453
- var DB_SIZE = 200000;
1454
- var DB_VERSION = '1.0';
1455
- /*
1476
+ case 35:
1477
+ _g.trys.push([35,, 38, 39]);
1456
1478
 
1457
- Note:
1458
- I purposely avoided using arrow functions () => {} in this class,
1459
- Because I ran into issues with them in some of the SQLite method callbacks
1479
+ if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1["return"]))) return [3
1480
+ /*break*/
1481
+ , 37];
1482
+ return [4
1483
+ /*yield*/
1484
+ , _a.call(relations_1)];
1460
1485
 
1461
- Also, even though the SQLite library is promisified, certain operations
1462
- only work correctly with callbacks. Specifically, any time you need to
1463
- get the result of an `executeSql` command inside of a transaction
1464
- (see the batchQuery method below)
1486
+ case 36:
1487
+ _g.sent();
1465
1488
 
1466
- */
1489
+ _g.label = 37;
1467
1490
 
1468
- var SQLiteDatabase =
1469
- /** @class */
1470
- function () {
1471
- function SQLiteDatabase() {}
1491
+ case 37:
1492
+ return [3
1493
+ /*break*/
1494
+ , 39];
1472
1495
 
1473
- SQLiteDatabase.prototype.init = function () {
1474
- return __awaiter(this, void 0, void 0, function () {
1475
- var _a;
1496
+ case 38:
1497
+ if (e_2) throw e_2.error;
1498
+ return [7
1499
+ /*endfinally*/
1500
+ ];
1476
1501
 
1477
- return __generator(this, function (_b) {
1478
- switch (_b.label) {
1479
- case 0:
1480
- _a = this;
1481
- return [4
1482
- /*yield*/
1483
- , react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.openDatabase(DB_NAME, DB_VERSION, DB_DISPLAYNAME, DB_SIZE)];
1502
+ case 39:
1503
+ return [7
1504
+ /*endfinally*/
1505
+ ];
1484
1506
 
1485
- case 1:
1486
- _a.db = _b.sent();
1507
+ case 40:
1487
1508
  return [2
1488
1509
  /*return*/
1489
- ];
1510
+ , records.map(function (record) {
1511
+ return _this.modelInstanceCreator(modelConstructor, record);
1512
+ })];
1490
1513
  }
1491
1514
  });
1492
1515
  });
1493
1516
  };
1494
1517
 
1495
- SQLiteDatabase.prototype.createSchema = function (statements) {
1518
+ CommonSQLiteAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
1496
1519
  return __awaiter(this, void 0, void 0, function () {
1497
- return __generator(this, function (_a) {
1498
- switch (_a.label) {
1499
- case 0:
1500
- return [4
1501
- /*yield*/
1502
- , this.executeStatements(statements)];
1520
+ var tableName, namespaceName, predicates, sortPredicates, limit, page, queryById, records;
1503
1521
 
1504
- case 1:
1505
- return [2
1506
- /*return*/
1507
- , _a.sent()];
1508
- }
1509
- });
1510
- });
1511
- };
1522
+ var _this = this;
1512
1523
 
1513
- SQLiteDatabase.prototype.clear = function () {
1514
- return __awaiter(this, void 0, void 0, function () {
1515
1524
  return __generator(this, function (_a) {
1516
1525
  switch (_a.label) {
1517
1526
  case 0:
1527
+ tableName = modelConstructor.name;
1528
+ namespaceName = this.namespaceResolver(modelConstructor);
1529
+ predicates = predicate && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["ModelPredicateCreator"].getPredicates(predicate);
1530
+ sortPredicates = pagination && pagination.sort && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["ModelSortPredicateCreator"].getPredicates(pagination.sort);
1531
+ limit = pagination && pagination.limit;
1532
+ page = limit && pagination.page;
1533
+ queryById = predicates && this.idFromPredicate(predicates);
1518
1534
  return [4
1519
1535
  /*yield*/
1520
- , this.closeDB()];
1536
+ , function () {
1537
+ return __awaiter(_this, void 0, void 0, function () {
1538
+ var record, _a, queryStatement, params;
1521
1539
 
1522
- case 1:
1523
- _a.sent();
1540
+ return __generator(this, function (_b) {
1541
+ switch (_b.label) {
1542
+ case 0:
1543
+ if (!queryById) return [3
1544
+ /*break*/
1545
+ , 2];
1546
+ return [4
1547
+ /*yield*/
1548
+ , this.getById(tableName, queryById)];
1524
1549
 
1525
- logger.debug('Deleting database');
1550
+ case 1:
1551
+ record = _b.sent();
1552
+ return [2
1553
+ /*return*/
1554
+ , record ? [record] : []];
1555
+
1556
+ case 2:
1557
+ _a = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryAllStatement"])(tableName, predicates, sortPredicates, limit, page), 2), queryStatement = _a[0], params = _a[1];
1558
+ return [4
1559
+ /*yield*/
1560
+ , this.db.getAll(queryStatement, params)];
1561
+
1562
+ case 3:
1563
+ return [2
1564
+ /*return*/
1565
+ , _b.sent()];
1566
+ }
1567
+ });
1568
+ });
1569
+ }()];
1570
+
1571
+ case 1:
1572
+ records = _a.sent();
1526
1573
  return [4
1527
1574
  /*yield*/
1528
- , react_native_sqlite_storage__WEBPACK_IMPORTED_MODULE_0___default.a.deleteDatabase(DB_NAME)];
1575
+ , this.load(namespaceName, modelConstructor.name, records)];
1529
1576
 
1530
1577
  case 2:
1531
- _a.sent();
1532
-
1533
- logger.debug('Database deleted');
1534
1578
  return [2
1535
1579
  /*return*/
1536
- ];
1580
+ , _a.sent()];
1537
1581
  }
1538
1582
  });
1539
1583
  });
1540
1584
  };
1541
1585
 
1542
- SQLiteDatabase.prototype.get = function (statement, params) {
1586
+ CommonSQLiteAdapter.prototype.getById = function (tableName, id) {
1543
1587
  return __awaiter(this, void 0, void 0, function () {
1544
- var _a, resultSet, result;
1588
+ var _a, queryStatement, params, record;
1545
1589
 
1546
1590
  return __generator(this, function (_b) {
1547
1591
  switch (_b.label) {
1548
1592
  case 0:
1593
+ _a = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(id, tableName), 2), queryStatement = _a[0], params = _a[1];
1549
1594
  return [4
1550
1595
  /*yield*/
1551
- , this.db.executeSql(statement, params)];
1596
+ , this.db.get(queryStatement, params)];
1552
1597
 
1553
1598
  case 1:
1554
- _a = __read.apply(void 0, [_b.sent(), 1]), resultSet = _a[0];
1555
- result = resultSet && resultSet.rows && resultSet.rows.length && resultSet.rows.raw && resultSet.rows.raw();
1599
+ record = _b.sent();
1556
1600
  return [2
1557
1601
  /*return*/
1558
- , (result === null || result === void 0 ? void 0 : result[0]) || undefined];
1602
+ , record];
1559
1603
  }
1560
1604
  });
1561
1605
  });
1562
1606
  };
1563
1607
 
1564
- SQLiteDatabase.prototype.getAll = function (statement, params) {
1608
+ CommonSQLiteAdapter.prototype.idFromPredicate = function (predicates) {
1609
+ var predicateObjs = predicates.predicates;
1610
+ var idPredicate = predicateObjs.length === 1 && predicateObjs.find(function (p) {
1611
+ return Object(_aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["isPredicateObj"])(p) && p.field === 'id' && p.operator === 'eq';
1612
+ });
1613
+ return idPredicate && idPredicate.operand;
1614
+ };
1615
+
1616
+ CommonSQLiteAdapter.prototype.queryOne = function (modelConstructor, firstOrLast) {
1617
+ if (firstOrLast === void 0) {
1618
+ firstOrLast = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["QueryOne"].FIRST;
1619
+ }
1620
+
1565
1621
  return __awaiter(this, void 0, void 0, function () {
1566
- var _a, resultSet, result;
1622
+ var tableName, _a, queryStatement, params, result, modelInstance;
1567
1623
 
1568
1624
  return __generator(this, function (_b) {
1569
1625
  switch (_b.label) {
1570
1626
  case 0:
1627
+ tableName = modelConstructor.name;
1628
+ _a = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryOneStatement"])(firstOrLast, tableName), 2), queryStatement = _a[0], params = _a[1];
1571
1629
  return [4
1572
1630
  /*yield*/
1573
- , this.db.executeSql(statement, params)];
1631
+ , this.db.get(queryStatement, params)];
1574
1632
 
1575
1633
  case 1:
1576
- _a = __read.apply(void 0, [_b.sent(), 1]), resultSet = _a[0];
1577
- result = resultSet && resultSet.rows && resultSet.rows.length && resultSet.rows.raw && resultSet.rows.raw();
1634
+ result = _b.sent();
1635
+ modelInstance = result && this.modelInstanceCreator(modelConstructor, result);
1578
1636
  return [2
1579
1637
  /*return*/
1580
- , result || []];
1638
+ , modelInstance];
1581
1639
  }
1582
1640
  });
1583
1641
  });
1584
- };
1642
+ }; // Currently does not cascade
1643
+ // TODO: use FKs in relations and have `ON DELETE CASCADE` set
1644
+ // For Has Many and Has One relations to have SQL handle cascades automatically
1585
1645
 
1586
- SQLiteDatabase.prototype.save = function (statement, params) {
1646
+
1647
+ CommonSQLiteAdapter.prototype["delete"] = function (modelOrModelConstructor, condition) {
1587
1648
  return __awaiter(this, void 0, void 0, function () {
1588
- return __generator(this, function (_a) {
1589
- switch (_a.label) {
1649
+ var modelConstructor, namespaceName, tableName, predicates, queryStatement, deleteStatement, models, modelInstances, model, modelConstructor, tableName, _a, queryStatement, params, fromDB, msg, predicates, predicateObjs, type, isValid, msg, _b, deleteStatement, deleteParams, _c, deleteStatement, params;
1650
+
1651
+ return __generator(this, function (_d) {
1652
+ switch (_d.label) {
1590
1653
  case 0:
1654
+ if (!isModelConstructor(modelOrModelConstructor)) return [3
1655
+ /*break*/
1656
+ , 3];
1657
+ modelConstructor = modelOrModelConstructor;
1658
+ namespaceName = this.namespaceResolver(modelConstructor);
1659
+ tableName = modelConstructor.name;
1660
+ predicates = condition && _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["ModelPredicateCreator"].getPredicates(condition);
1661
+ queryStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryAllStatement"])(tableName, predicates);
1662
+ deleteStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["deleteByPredicateStatement"])(tableName, predicates);
1591
1663
  return [4
1592
1664
  /*yield*/
1593
- , this.db.executeSql(statement, params)];
1665
+ , this.db.selectAndDelete(queryStatement, deleteStatement)];
1594
1666
 
1595
1667
  case 1:
1596
- _a.sent();
1597
-
1598
- return [2
1599
- /*return*/
1600
- ];
1601
- }
1602
- });
1603
- });
1604
- };
1605
-
1606
- SQLiteDatabase.prototype.batchQuery = function (queryStatements) {
1607
- return __awaiter(this, void 0, void 0, function () {
1608
- var results;
1609
- return __generator(this, function (_a) {
1610
- switch (_a.label) {
1611
- case 0:
1612
- results = [];
1668
+ models = _d.sent();
1613
1669
  return [4
1614
1670
  /*yield*/
1615
- , this.db.readTransaction(function (tx) {
1616
- var e_1, _a;
1617
-
1618
- try {
1619
- for (var queryStatements_1 = __values(queryStatements), queryStatements_1_1 = queryStatements_1.next(); !queryStatements_1_1.done; queryStatements_1_1 = queryStatements_1.next()) {
1620
- var _b = __read(queryStatements_1_1.value, 2),
1621
- statement = _b[0],
1622
- params = _b[1];
1623
-
1624
- tx.executeSql(statement, params, function (_tx, res) {
1625
- results.push(res.rows.raw()[0]);
1626
- }, logger.warn);
1627
- }
1628
- } catch (e_1_1) {
1629
- e_1 = {
1630
- error: e_1_1
1631
- };
1632
- } finally {
1633
- try {
1634
- if (queryStatements_1_1 && !queryStatements_1_1.done && (_a = queryStatements_1["return"])) _a.call(queryStatements_1);
1635
- } finally {
1636
- if (e_1) throw e_1.error;
1637
- }
1638
- }
1639
- })];
1640
-
1641
- case 1:
1642
- _a.sent();
1671
+ , this.load(namespaceName, modelConstructor.name, models)];
1643
1672
 
1673
+ case 2:
1674
+ modelInstances = _d.sent();
1644
1675
  return [2
1645
1676
  /*return*/
1646
- , results];
1647
- }
1648
- });
1649
- });
1650
- };
1651
-
1652
- SQLiteDatabase.prototype.batchSave = function (saveStatements, deleteStatements) {
1653
- return __awaiter(this, void 0, void 0, function () {
1654
- return __generator(this, function (_a) {
1655
- switch (_a.label) {
1656
- case 0:
1677
+ , [modelInstances, modelInstances]];
1678
+
1679
+ case 3:
1680
+ model = modelOrModelConstructor;
1681
+ modelConstructor = Object.getPrototypeOf(model).constructor;
1682
+ tableName = modelConstructor.name;
1683
+ if (!condition) return [3
1684
+ /*break*/
1685
+ , 6];
1686
+ _a = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(model.id, tableName), 2), queryStatement = _a[0], params = _a[1];
1657
1687
  return [4
1658
1688
  /*yield*/
1659
- , this.db.transaction(function (tx) {
1660
- var e_2, _a, e_3, _b;
1689
+ , this.db.get(queryStatement, params)];
1661
1690
 
1662
- try {
1663
- for (var saveStatements_1 = __values(saveStatements), saveStatements_1_1 = saveStatements_1.next(); !saveStatements_1_1.done; saveStatements_1_1 = saveStatements_1.next()) {
1664
- var _c = __read(saveStatements_1_1.value, 2),
1665
- statement = _c[0],
1666
- params = _c[1];
1691
+ case 4:
1692
+ fromDB = _d.sent();
1667
1693
 
1668
- tx.executeSql(statement, params);
1669
- }
1670
- } catch (e_2_1) {
1671
- e_2 = {
1672
- error: e_2_1
1673
- };
1674
- } finally {
1675
- try {
1676
- if (saveStatements_1_1 && !saveStatements_1_1.done && (_a = saveStatements_1["return"])) _a.call(saveStatements_1);
1677
- } finally {
1678
- if (e_2) throw e_2.error;
1679
- }
1680
- }
1694
+ if (fromDB === undefined) {
1695
+ msg = 'Model instance not found in storage';
1696
+ logger.warn(msg, {
1697
+ model: model
1698
+ });
1699
+ return [2
1700
+ /*return*/
1701
+ , [[model], []]];
1702
+ }
1681
1703
 
1682
- if (deleteStatements) {
1683
- try {
1684
- for (var deleteStatements_1 = __values(deleteStatements), deleteStatements_1_1 = deleteStatements_1.next(); !deleteStatements_1_1.done; deleteStatements_1_1 = deleteStatements_1.next()) {
1685
- var _d = __read(deleteStatements_1_1.value, 2),
1686
- statement = _d[0],
1687
- params = _d[1];
1704
+ predicates = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["ModelPredicateCreator"].getPredicates(condition);
1705
+ predicateObjs = predicates.predicates, type = predicates.type;
1706
+ isValid = validatePredicate(fromDB, type, predicateObjs);
1688
1707
 
1689
- tx.executeSql(statement, params);
1690
- }
1691
- } catch (e_3_1) {
1692
- e_3 = {
1693
- error: e_3_1
1694
- };
1695
- } finally {
1696
- try {
1697
- if (deleteStatements_1_1 && !deleteStatements_1_1.done && (_b = deleteStatements_1["return"])) _b.call(deleteStatements_1);
1698
- } finally {
1699
- if (e_3) throw e_3.error;
1700
- }
1701
- }
1702
- }
1703
- })];
1708
+ if (!isValid) {
1709
+ msg = 'Conditional update failed';
1710
+ logger.error(msg, {
1711
+ model: fromDB,
1712
+ condition: predicateObjs
1713
+ });
1714
+ throw new Error(msg);
1715
+ }
1704
1716
 
1705
- case 1:
1706
- _a.sent();
1717
+ _b = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["deleteByIdStatement"])(model.id, tableName), 2), deleteStatement = _b[0], deleteParams = _b[1];
1718
+ return [4
1719
+ /*yield*/
1720
+ , this.db.save(deleteStatement, deleteParams)];
1721
+
1722
+ case 5:
1723
+ _d.sent();
1707
1724
 
1708
1725
  return [2
1709
1726
  /*return*/
1710
- ];
1711
- }
1712
- });
1713
- });
1714
- };
1715
-
1716
- SQLiteDatabase.prototype.selectAndDelete = function (query, _delete) {
1717
- return __awaiter(this, void 0, void 0, function () {
1718
- var results, _a, queryStatement, queryParams, _b, deleteStatement, deleteParams;
1727
+ , [[model], [model]]];
1719
1728
 
1720
- return __generator(this, function (_c) {
1721
- switch (_c.label) {
1722
- case 0:
1723
- results = [];
1724
- _a = __read(query, 2), queryStatement = _a[0], queryParams = _a[1];
1725
- _b = __read(_delete, 2), deleteStatement = _b[0], deleteParams = _b[1];
1729
+ case 6:
1730
+ _c = __read(Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["deleteByIdStatement"])(model.id, tableName), 2), deleteStatement = _c[0], params = _c[1];
1726
1731
  return [4
1727
1732
  /*yield*/
1728
- , this.db.transaction(function (tx) {
1729
- tx.executeSql(queryStatement, queryParams, function (_tx, res) {
1730
- results = res.rows.raw();
1731
- }, logger.warn);
1732
- tx.executeSql(deleteStatement, deleteParams, function () {}, logger.warn);
1733
- })];
1733
+ , this.db.save(deleteStatement, params)];
1734
1734
 
1735
- case 1:
1736
- _c.sent();
1735
+ case 7:
1736
+ _d.sent();
1737
1737
 
1738
1738
  return [2
1739
1739
  /*return*/
1740
- , results];
1740
+ , [[model], [model]]];
1741
1741
  }
1742
1742
  });
1743
1743
  });
1744
1744
  };
1745
1745
 
1746
- SQLiteDatabase.prototype.executeStatements = function (statements) {
1746
+ CommonSQLiteAdapter.prototype.batchSave = function (modelConstructor, items) {
1747
1747
  return __awaiter(this, void 0, void 0, function () {
1748
- return __generator(this, function (_a) {
1749
- switch (_a.label) {
1748
+ var tableName, result, itemsToSave, queryStatements, deleteStatements, saveStatements, _loop_1, this_1, items_1, items_1_1, item, queryResponses;
1749
+
1750
+ var e_5, _a;
1751
+
1752
+ return __generator(this, function (_b) {
1753
+ switch (_b.label) {
1750
1754
  case 0:
1751
- return [4
1752
- /*yield*/
1753
- , this.db.transaction(function (tx) {
1754
- var e_4, _a;
1755
+ tableName = modelConstructor.name;
1756
+ result = [];
1757
+ itemsToSave = [];
1758
+ queryStatements = new Set();
1759
+ deleteStatements = new Set();
1760
+ saveStatements = new Set();
1761
+
1762
+ _loop_1 = function _loop_1(item) {
1763
+ var connectedModels = traverseModel(modelConstructor.name, this_1.modelInstanceCreator(modelConstructor, item), this_1.schema.namespaces[this_1.namespaceResolver(modelConstructor)], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
1764
+ var id = item.id,
1765
+ _deleted = item._deleted;
1766
+ var instance = connectedModels.find(function (_a) {
1767
+ var instance = _a.instance;
1768
+ return instance.id === id;
1769
+ }).instance;
1770
+
1771
+ if (_deleted) {
1772
+ // create the delete statements right away
1773
+ var deleteStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["deleteByIdStatement"])(instance.id, tableName);
1774
+ deleteStatements.add(deleteStatement);
1775
+ result.push([item, _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["OpType"].DELETE]);
1776
+ } else {
1777
+ // query statements for the saves at first
1778
+ var queryStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["queryByIdStatement"])(id, tableName);
1779
+ queryStatements.add(queryStatement); // combination of insert and update items
1780
+
1781
+ itemsToSave.push(instance);
1782
+ }
1783
+ };
1784
+
1785
+ this_1 = this;
1786
+
1787
+ try {
1788
+ for (items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
1789
+ item = items_1_1.value;
1755
1790
 
1791
+ _loop_1(item);
1792
+ }
1793
+ } catch (e_5_1) {
1794
+ e_5 = {
1795
+ error: e_5_1
1796
+ };
1797
+ } finally {
1756
1798
  try {
1757
- for (var statements_1 = __values(statements), statements_1_1 = statements_1.next(); !statements_1_1.done; statements_1_1 = statements_1.next()) {
1758
- var statement = statements_1_1.value;
1759
- tx.executeSql(statement);
1760
- }
1761
- } catch (e_4_1) {
1762
- e_4 = {
1763
- error: e_4_1
1764
- };
1799
+ if (items_1_1 && !items_1_1.done && (_a = items_1["return"])) _a.call(items_1);
1765
1800
  } finally {
1766
- try {
1767
- if (statements_1_1 && !statements_1_1.done && (_a = statements_1["return"])) _a.call(statements_1);
1768
- } finally {
1769
- if (e_4) throw e_4.error;
1770
- }
1801
+ if (e_5) throw e_5.error;
1771
1802
  }
1772
- })];
1773
-
1774
- case 1:
1775
- return [2
1776
- /*return*/
1777
- , _a.sent()];
1778
- }
1779
- });
1780
- });
1781
- };
1803
+ }
1782
1804
 
1783
- SQLiteDatabase.prototype.closeDB = function () {
1784
- return __awaiter(this, void 0, void 0, function () {
1785
- return __generator(this, function (_a) {
1786
- switch (_a.label) {
1787
- case 0:
1788
- if (!this.db) return [3
1789
- /*break*/
1790
- , 2];
1791
- logger.debug('Closing Database');
1792
1805
  return [4
1793
1806
  /*yield*/
1794
- , this.db.close()];
1807
+ , this.db.batchQuery(queryStatements)];
1795
1808
 
1796
1809
  case 1:
1797
- _a.sent();
1810
+ queryResponses = _b.sent();
1811
+ queryResponses.forEach(function (response, idx) {
1812
+ if (response === undefined) {
1813
+ var insertStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["modelInsertStatement"])(itemsToSave[idx], tableName);
1814
+ saveStatements.add(insertStatement);
1815
+ result.push([itemsToSave[idx], _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["OpType"].INSERT]);
1816
+ } else {
1817
+ var updateStatement = Object(_common_SQLiteUtils__WEBPACK_IMPORTED_MODULE_1__["modelUpdateStatement"])(itemsToSave[idx], tableName);
1818
+ saveStatements.add(updateStatement);
1819
+ result.push([itemsToSave[idx], _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_2__["OpType"].UPDATE]);
1820
+ }
1821
+ }); // perform all of the insert/update/delete operations in a single transaction
1798
1822
 
1799
- logger.debug('Database closed');
1800
- _a.label = 2;
1823
+ return [4
1824
+ /*yield*/
1825
+ , this.db.batchSave(saveStatements, deleteStatements)];
1801
1826
 
1802
1827
  case 2:
1828
+ // perform all of the insert/update/delete operations in a single transaction
1829
+ _b.sent();
1830
+
1803
1831
  return [2
1804
1832
  /*return*/
1805
- ];
1833
+ , result];
1806
1834
  }
1807
1835
  });
1808
1836
  });
1809
1837
  };
1810
1838
 
1811
- return SQLiteDatabase;
1839
+ return CommonSQLiteAdapter;
1812
1840
  }();
1813
1841
 
1814
- /* harmony default export */ __webpack_exports__["default"] = (SQLiteDatabase);
1842
+
1815
1843
 
1816
1844
  /***/ }),
1817
1845
 
1818
- /***/ "./lib-esm/SQLiteAdapter/SQLiteUtils.js":
1819
- /*!**********************************************!*\
1820
- !*** ./lib-esm/SQLiteAdapter/SQLiteUtils.js ***!
1821
- \**********************************************/
1822
- /*! exports provided: generateSchemaStatements, implicitAuthFieldsForModel, modelCreateTableStatement, modelInsertStatement, modelUpdateStatement, queryByIdStatement, whereClauseFromPredicate, orderByClauseFromSort, limitClauseFromPagination, queryAllStatement, queryOneStatement, deleteByIdStatement, deleteByPredicateStatement */
1846
+ /***/ "./lib-esm/common/SQLiteUtils.js":
1847
+ /*!***************************************!*\
1848
+ !*** ./lib-esm/common/SQLiteUtils.js ***!
1849
+ \***************************************/
1850
+ /*! exports provided: getSQLiteType, generateSchemaStatements, implicitAuthFieldsForModel, modelCreateTableStatement, modelInsertStatement, modelUpdateStatement, queryByIdStatement, whereClauseFromPredicate, orderByClauseFromSort, limitClauseFromPagination, queryAllStatement, queryOneStatement, deleteByIdStatement, deleteByPredicateStatement */
1823
1851
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1824
1852
 
1825
1853
  "use strict";
1826
1854
  __webpack_require__.r(__webpack_exports__);
1855
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSQLiteType", function() { return getSQLiteType; });
1827
1856
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateSchemaStatements", function() { return generateSchemaStatements; });
1828
1857
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "implicitAuthFieldsForModel", function() { return implicitAuthFieldsForModel; });
1829
1858
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "modelCreateTableStatement", function() { return modelCreateTableStatement; });
@@ -1839,7 +1868,6 @@ __webpack_require__.r(__webpack_exports__);
1839
1868
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteByPredicateStatement", function() { return deleteByPredicateStatement; });
1840
1869
  /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @aws-amplify/datastore */ "@aws-amplify/datastore");
1841
1870
  /* harmony import */ var _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0__);
1842
- /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./lib-esm/SQLiteAdapter/types.js");
1843
1871
  function _typeof(obj) {
1844
1872
  "@babel/helpers - typeof";
1845
1873
 
@@ -1903,7 +1931,6 @@ var __values = undefined && undefined.__values || function (o) {
1903
1931
  };
1904
1932
 
1905
1933
 
1906
-
1907
1934
  var USER = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0__["utils"].USER,
1908
1935
  isNonModelConstructor = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0__["utils"].isNonModelConstructor,
1909
1936
  isModelConstructor = _aws_amplify_datastore__WEBPACK_IMPORTED_MODULE_0__["utils"].isModelConstructor;
@@ -1957,6 +1984,33 @@ function prepareValueForDML(value) {
1957
1984
  return "" + value;
1958
1985
  }
1959
1986
 
1987
+ function getSQLiteType(scalar) {
1988
+ switch (scalar) {
1989
+ case 'Boolean':
1990
+ case 'Int':
1991
+ case 'AWSTimestamp':
1992
+ return 'INTEGER';
1993
+
1994
+ case 'ID':
1995
+ case 'String':
1996
+ case 'AWSDate':
1997
+ case 'AWSTime':
1998
+ case 'AWSDateTime':
1999
+ case 'AWSEmail':
2000
+ case 'AWSJSON':
2001
+ case 'AWSURL':
2002
+ case 'AWSPhone':
2003
+ case 'AWSIPAddress':
2004
+ return 'TEXT';
2005
+
2006
+ case 'Float':
2007
+ return 'REAL';
2008
+
2009
+ default:
2010
+ var _ = scalar;
2011
+ throw new Error("unknown type " + scalar);
2012
+ }
2013
+ }
1960
2014
  function generateSchemaStatements(schema) {
1961
2015
  return Object.keys(schema.namespaces).flatMap(function (namespaceName) {
1962
2016
  var namespace = schema.namespaces[namespaceName];
@@ -2002,7 +2056,7 @@ function modelCreateTableStatement(model, userModel) {
2002
2056
  return acc + '"id" PRIMARY KEY NOT NULL';
2003
2057
  }
2004
2058
 
2005
- var columnParam_1 = "\"" + field.name + "\" " + Object(_types__WEBPACK_IMPORTED_MODULE_1__["getSQLiteType"])(field.type);
2059
+ var columnParam_1 = "\"" + field.name + "\" " + getSQLiteType(field.type);
2006
2060
 
2007
2061
  if (field.isRequired) {
2008
2062
  columnParam_1 += ' NOT NULL';
@@ -2333,43 +2387,17 @@ function deleteByPredicateStatement(tableName, predicate) {
2333
2387
 
2334
2388
  /***/ }),
2335
2389
 
2336
- /***/ "./lib-esm/SQLiteAdapter/types.js":
2337
- /*!****************************************!*\
2338
- !*** ./lib-esm/SQLiteAdapter/types.js ***!
2339
- \****************************************/
2340
- /*! exports provided: getSQLiteType */
2390
+ /***/ "./lib-esm/common/constants.js":
2391
+ /*!*************************************!*\
2392
+ !*** ./lib-esm/common/constants.js ***!
2393
+ \*************************************/
2394
+ /*! exports provided: DB_NAME */
2341
2395
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2342
2396
 
2343
2397
  "use strict";
2344
2398
  __webpack_require__.r(__webpack_exports__);
2345
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSQLiteType", function() { return getSQLiteType; });
2346
- function getSQLiteType(scalar) {
2347
- switch (scalar) {
2348
- case 'Boolean':
2349
- case 'Int':
2350
- case 'AWSTimestamp':
2351
- return 'INTEGER';
2352
-
2353
- case 'ID':
2354
- case 'String':
2355
- case 'AWSDate':
2356
- case 'AWSTime':
2357
- case 'AWSDateTime':
2358
- case 'AWSEmail':
2359
- case 'AWSJSON':
2360
- case 'AWSURL':
2361
- case 'AWSPhone':
2362
- case 'AWSIPAddress':
2363
- return 'TEXT';
2364
-
2365
- case 'Float':
2366
- return 'REAL';
2367
-
2368
- default:
2369
- var _ = scalar;
2370
- throw new Error("unknown type " + scalar);
2371
- }
2372
- }
2399
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DB_NAME", function() { return DB_NAME; });
2400
+ var DB_NAME = 'AmplifyDatastore';
2373
2401
 
2374
2402
  /***/ }),
2375
2403