cozy-pouch-link 57.5.0 → 57.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CozyPouchLink.js +221 -469
- package/dist/CozyPouchLink.spec.js +6 -147
- package/dist/PouchManager.js +43 -8
- package/dist/PouchManager.spec.js +21 -12
- package/dist/__mocks__/@op-engineering/op-sqlite.js +11 -0
- package/dist/db/dbInterface.js +190 -0
- package/dist/db/helpers.js +106 -0
- package/dist/db/pouchdb/getDocs.js +157 -0
- package/dist/db/pouchdb/getDocs.spec.js +63 -0
- package/dist/db/pouchdb/pouchdb.js +264 -0
- package/dist/db/pouchdb/pouchdb.spec.js +151 -0
- package/dist/db/sqlite/sql.js +418 -0
- package/dist/db/sqlite/sql.spec.js +363 -0
- package/dist/db/sqlite/sqliteDb.js +319 -0
- package/dist/errors.js +17 -2
- package/dist/helpers.js +21 -147
- package/dist/helpers.spec.js +1 -98
- package/dist/index.js +9 -1
- package/dist/jsonapi.js +49 -10
- package/dist/jsonapi.spec.js +105 -32
- package/dist/mango.js +146 -3
- package/dist/migrations/pouchdb.js +32 -0
- package/dist/replicateOnce.js +25 -23
- package/dist/types.js +5 -0
- package/dist/utils.js +33 -3
- package/package.json +4 -3
- package/types/CozyPouchLink.d.ts +4 -60
- package/types/PouchManager.d.ts +6 -1
- package/types/__mocks__/@op-engineering/op-sqlite.d.ts +1 -0
- package/types/db/dbInterface.d.ts +117 -0
- package/types/db/helpers.d.ts +3 -0
- package/types/db/pouchdb/getDocs.d.ts +18 -0
- package/types/db/pouchdb/pouchdb.d.ts +8 -0
- package/types/db/sqlite/sql.d.ts +45 -0
- package/types/db/sqlite/sqliteDb.d.ts +7 -0
- package/types/errors.d.ts +2 -0
- package/types/helpers.d.ts +1 -4
- package/types/index.d.ts +1 -0
- package/types/jsonapi.d.ts +2 -0
- package/types/mango.d.ts +19 -1
- package/types/migrations/pouchdb.d.ts +1 -0
- package/types/types.d.ts +2 -0
- package/types/utils.d.ts +3 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.executeSQL = exports.deleteIndex = exports.createMangoIndex = exports.makeSQLCreateDeletedIndex = exports.makeSQLCreateDocIDIndex = exports.makeSQLCreateMangoIndex = exports.makeSQLDropIndex = exports.makeSQLQueryAll = exports.makeSQLQueryForIds = exports.makeSQLQueryForId = exports.makeSQLQueryFromMango = exports.makeSortClause = exports.makeWhereClause = exports.mangoSelectorToSQL = exports.parseResults = exports.keepDocWitHighestRev = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _jsonapi = require("../../jsonapi");
|
|
15
|
+
|
|
16
|
+
var MANGO_TO_SQL_OP = {
|
|
17
|
+
$eq: '=',
|
|
18
|
+
$ne: '!=',
|
|
19
|
+
$gt: '>',
|
|
20
|
+
$gte: '>=',
|
|
21
|
+
$lt: '<',
|
|
22
|
+
$lte: '<=',
|
|
23
|
+
$in: 'IN',
|
|
24
|
+
$nin: 'NOT IN',
|
|
25
|
+
$exists: 'IS'
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var extractRevPrefix = function extractRevPrefix(rev) {
|
|
29
|
+
if (!rev) {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var prefixStr = rev.split('-')[0];
|
|
34
|
+
return prefixStr ? parseInt(prefixStr) : 0;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
var keepDocWitHighestRev = function keepDocWitHighestRev(docs) {
|
|
38
|
+
if (!docs || docs.length < 1) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
var highestDocRev = {
|
|
43
|
+
doc: docs[0],
|
|
44
|
+
revPrefix: extractRevPrefix(docs[0]._rev)
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
for (var i = 0; i < docs.length; i++) {
|
|
48
|
+
var revPrefix = extractRevPrefix(docs[i]._rev);
|
|
49
|
+
|
|
50
|
+
if (revPrefix > highestDocRev.revPrefix) {
|
|
51
|
+
highestDocRev = {
|
|
52
|
+
doc: docs[i],
|
|
53
|
+
revPrefix: revPrefix
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return highestDocRev.doc;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
exports.keepDocWitHighestRev = keepDocWitHighestRev;
|
|
62
|
+
|
|
63
|
+
var parseResults = function parseResults(client, result, doctype) {
|
|
64
|
+
var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
65
|
+
_ref$isSingleDoc = _ref.isSingleDoc,
|
|
66
|
+
isSingleDoc = _ref$isSingleDoc === void 0 ? false : _ref$isSingleDoc,
|
|
67
|
+
_ref$skip = _ref.skip,
|
|
68
|
+
skip = _ref$skip === void 0 ? 0 : _ref$skip,
|
|
69
|
+
_ref$limit = _ref.limit,
|
|
70
|
+
limit = _ref$limit === void 0 ? null : _ref$limit;
|
|
71
|
+
|
|
72
|
+
var parsedResults = [];
|
|
73
|
+
|
|
74
|
+
for (var i = 0; i < result.rows.length; i++) {
|
|
75
|
+
var item = result.rows.item(i);
|
|
76
|
+
var doc = JSON.parse(item['data']);
|
|
77
|
+
doc._id = item.doc_id;
|
|
78
|
+
doc._rev = item.rev;
|
|
79
|
+
doc._type = doctype;
|
|
80
|
+
(0, _jsonapi.normalizeDoc)(client, doctype, doc);
|
|
81
|
+
parsedResults.push(doc);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (parsedResults.length === 0) {
|
|
85
|
+
return {
|
|
86
|
+
data: []
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (isSingleDoc) {
|
|
91
|
+
if (parsedResults.length > 1) {
|
|
92
|
+
var _doc = keepDocWitHighestRev(parsedResults);
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
data: _doc
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
data: parsedResults[0]
|
|
101
|
+
};
|
|
102
|
+
} // XXX - Ideally we should have the total number of rows in the database to have a reliable
|
|
103
|
+
// next parameter, but we prefer to avoid this computation for performances.
|
|
104
|
+
// So let's rely on the total number of returned rows - if next is true, the last paginated
|
|
105
|
+
// query should have less results than the limit, thanks to the offset
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
var next = limit ? parsedResults.length >= limit : false;
|
|
109
|
+
return {
|
|
110
|
+
data: parsedResults,
|
|
111
|
+
meta: {
|
|
112
|
+
count: parsedResults.length
|
|
113
|
+
},
|
|
114
|
+
skip: skip,
|
|
115
|
+
next: next
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
exports.parseResults = parseResults;
|
|
120
|
+
|
|
121
|
+
var parseCondition = function parseCondition(field, condition) {
|
|
122
|
+
var conditions = [];
|
|
123
|
+
var sqlField = transformMangoFieldInJSONSQL(field);
|
|
124
|
+
|
|
125
|
+
if (typeof condition === 'object' && !Array.isArray(condition)) {
|
|
126
|
+
for (var operator in condition) {
|
|
127
|
+
var sqlOp = MANGO_TO_SQL_OP[operator];
|
|
128
|
+
|
|
129
|
+
if (operator === '$in' || operator === '$nin') {
|
|
130
|
+
var values = condition[operator].map(function (v) {
|
|
131
|
+
return typeof v === 'string' ? "'".concat(v, "'") : v;
|
|
132
|
+
}).join(', ');
|
|
133
|
+
conditions.push("".concat(sqlField, " ").concat(sqlOp, " (").concat(values, ")"));
|
|
134
|
+
} else if (operator === '$exists') {
|
|
135
|
+
var value = condition[operator];
|
|
136
|
+
|
|
137
|
+
if (value) {
|
|
138
|
+
sqlOp += ' NOT NULL';
|
|
139
|
+
} else {
|
|
140
|
+
sqlOp += ' NULL';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
conditions.push("".concat(sqlField, " ").concat(sqlOp));
|
|
144
|
+
} else {
|
|
145
|
+
var _value = typeof condition[operator] === 'string' ? "'".concat(condition[operator], "'") : condition[operator];
|
|
146
|
+
|
|
147
|
+
if (operator === '$gt' && _value === null) {
|
|
148
|
+
// Special case for $gt: null conditions
|
|
149
|
+
conditions.push("".concat(sqlField, " IS NOT NULL"));
|
|
150
|
+
} else {
|
|
151
|
+
conditions.push("".concat(sqlField, " ").concat(sqlOp, " ").concat(_value));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
var _value2 = typeof condition === 'string' ? "'".concat(condition, "'") : condition;
|
|
157
|
+
|
|
158
|
+
conditions.push("".concat(sqlField, " = ").concat(_value2));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return conditions.join(' AND ');
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
var parseLogicalOperator = function parseLogicalOperator(operator, conditionsArray) {
|
|
165
|
+
var sqlOperator = operator === '$and' ? 'AND' : 'OR';
|
|
166
|
+
var parsedConditions = conditionsArray.map(function (cond) {
|
|
167
|
+
return "(".concat(mangoSelectorToSQL(cond).replace(/^WHERE /, ''), ")");
|
|
168
|
+
});
|
|
169
|
+
return parsedConditions.join(" ".concat(sqlOperator, " "));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
var transformMangoFieldInJSONSQL = function transformMangoFieldInJSONSQL(field) {
|
|
173
|
+
var columnName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'data';
|
|
174
|
+
return "json_extract(".concat(columnName, ", '$.").concat(field, "')");
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
var mangoSelectorToSQL = function mangoSelectorToSQL(selector) {
|
|
178
|
+
var conditions = [];
|
|
179
|
+
|
|
180
|
+
for (var key in selector) {
|
|
181
|
+
if (key === '$and' || key === '$or') {
|
|
182
|
+
conditions.push(parseLogicalOperator(key, selector[key]));
|
|
183
|
+
} else {
|
|
184
|
+
conditions.push(parseCondition(key, selector[key]));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return conditions.length > 0 ? "".concat(conditions.join(' AND ')) : '';
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
exports.mangoSelectorToSQL = mangoSelectorToSQL;
|
|
192
|
+
|
|
193
|
+
var makeWhereClause = function makeWhereClause(selector) {
|
|
194
|
+
var baseWhere = 'DELETED = 0';
|
|
195
|
+
|
|
196
|
+
if (!selector) {
|
|
197
|
+
return baseWhere;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
var mangoWhere = mangoSelectorToSQL(selector);
|
|
201
|
+
baseWhere += " AND ".concat(mangoWhere);
|
|
202
|
+
return baseWhere;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
exports.makeWhereClause = makeWhereClause;
|
|
206
|
+
|
|
207
|
+
var makeSortClause = function makeSortClause(mangoSortBy) {
|
|
208
|
+
if (!mangoSortBy || !Array.isArray(mangoSortBy) || mangoSortBy.length < 1) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
var firstSortEntry = mangoSortBy[0];
|
|
213
|
+
var sortOrder = Object.values(firstSortEntry)[0].toUpperCase();
|
|
214
|
+
var sortFields = mangoSortBy.map(function (sort) {
|
|
215
|
+
var attribute = Object.keys(sort)[0];
|
|
216
|
+
return "json_extract(data, '$.".concat(attribute, "')");
|
|
217
|
+
}).join(', ');
|
|
218
|
+
var sortClause = "".concat(sortFields, " ").concat(sortOrder);
|
|
219
|
+
return sortClause;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
exports.makeSortClause = makeSortClause;
|
|
223
|
+
|
|
224
|
+
var makeSQLQueryFromMango = function makeSQLQueryFromMango(_ref2) {
|
|
225
|
+
var selector = _ref2.selector,
|
|
226
|
+
sort = _ref2.sort,
|
|
227
|
+
indexName = _ref2.indexName,
|
|
228
|
+
limit = _ref2.limit,
|
|
229
|
+
_ref2$skip = _ref2.skip,
|
|
230
|
+
skip = _ref2$skip === void 0 ? 0 : _ref2$skip;
|
|
231
|
+
var whereClause = makeWhereClause(selector);
|
|
232
|
+
var sortClause = makeSortClause(sort);
|
|
233
|
+
var sql = ["SELECT json AS data, doc_id, rev", "FROM 'by-sequence' INDEXED BY ".concat(indexName), "WHERE ".concat(whereClause), "LIMIT ".concat(limit)].join(' ');
|
|
234
|
+
|
|
235
|
+
if (skip > 0) {
|
|
236
|
+
sql += " OFFSET ".concat(skip);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (sortClause) {
|
|
240
|
+
sql += " ORDER BY ".concat(sortClause);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
sql += ';';
|
|
244
|
+
return sql;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
exports.makeSQLQueryFromMango = makeSQLQueryFromMango;
|
|
248
|
+
|
|
249
|
+
var makeSQLQueryForId = function makeSQLQueryForId(id) {
|
|
250
|
+
var sql = ["SELECT json AS data, doc_id, rev", "FROM 'by-sequence'", "WHERE doc_id=\"".concat(id, "\" AND deleted=0"), ";"].join(' ');
|
|
251
|
+
return sql;
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
exports.makeSQLQueryForId = makeSQLQueryForId;
|
|
255
|
+
|
|
256
|
+
var makeSQLQueryForIds = function makeSQLQueryForIds(ids) {
|
|
257
|
+
var doc_ids = ids.join(',');
|
|
258
|
+
var sql = "\n SELECT json AS data, doc_id, rev\n FROM 'by-sequence'\n WHERE doc_id IN (\"".concat(doc_ids, "\") AND deleted = 0;\n ");
|
|
259
|
+
return sql;
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
exports.makeSQLQueryForIds = makeSQLQueryForIds;
|
|
263
|
+
|
|
264
|
+
var makeSQLQueryAll = function makeSQLQueryAll() {
|
|
265
|
+
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
266
|
+
_ref3$limit = _ref3.limit,
|
|
267
|
+
limit = _ref3$limit === void 0 ? -1 : _ref3$limit,
|
|
268
|
+
_ref3$skip = _ref3.skip,
|
|
269
|
+
skip = _ref3$skip === void 0 ? 0 : _ref3$skip;
|
|
270
|
+
|
|
271
|
+
var sql = ["SELECT json AS data, doc_id, rev", "FROM 'by-sequence'", "WHERE deleted=0", "LIMIT ".concat(limit)].join(' ');
|
|
272
|
+
|
|
273
|
+
if (skip > 0) {
|
|
274
|
+
sql += " OFFSET ".concat(skip);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
sql += ';';
|
|
278
|
+
return sql;
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
exports.makeSQLQueryAll = makeSQLQueryAll;
|
|
282
|
+
|
|
283
|
+
var makeSQLDropIndex = function makeSQLDropIndex(indexName) {
|
|
284
|
+
return "DROP INDEX IF EXISTS '".concat(indexName, "';");
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
exports.makeSQLDropIndex = makeSQLDropIndex;
|
|
288
|
+
|
|
289
|
+
var makeSQLCreateMangoIndex = function makeSQLCreateMangoIndex(indexName, fieldsToIndex, _ref4) {
|
|
290
|
+
var partialFilter = _ref4.partialFilter;
|
|
291
|
+
var jsonAttributes = fieldsToIndex.map(function (field) {
|
|
292
|
+
return "json_extract(json, '$.".concat(field, "')");
|
|
293
|
+
});
|
|
294
|
+
var jsonIndex = jsonAttributes.join(',');
|
|
295
|
+
var sql = "\n CREATE INDEX IF NOT EXISTS '".concat(indexName, "'\n ON 'by-sequence'\n (").concat(jsonIndex, ")\n ");
|
|
296
|
+
|
|
297
|
+
if (partialFilter) {
|
|
298
|
+
var whereClause = makeWhereClause(partialFilter);
|
|
299
|
+
sql += " WHERE ".concat(whereClause);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
sql += ';';
|
|
303
|
+
return sql;
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
exports.makeSQLCreateMangoIndex = makeSQLCreateMangoIndex;
|
|
307
|
+
|
|
308
|
+
var makeSQLCreateDocIDIndex = function makeSQLCreateDocIDIndex() {
|
|
309
|
+
// This index is useful for docid queries
|
|
310
|
+
var sql = "\n CREATE UNIQUE INDEX IF NOT EXISTS 'by_docid_and_deleted'\n ON 'by-sequence'\n (doc_id, deleted);\n ";
|
|
311
|
+
return sql;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
exports.makeSQLCreateDocIDIndex = makeSQLCreateDocIDIndex;
|
|
315
|
+
|
|
316
|
+
var makeSQLCreateDeletedIndex = function makeSQLCreateDeletedIndex() {
|
|
317
|
+
// This index is useful for allDocs queries
|
|
318
|
+
var sql = "\n CREATE INDEX IF NOT EXISTS 'by_deleted'\n ON 'by-sequence'\n (deleted);\n ";
|
|
319
|
+
return sql;
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
exports.makeSQLCreateDeletedIndex = makeSQLCreateDeletedIndex;
|
|
323
|
+
|
|
324
|
+
var createMangoIndex = /*#__PURE__*/function () {
|
|
325
|
+
var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(db, indexName, fieldsToIndex, _ref5) {
|
|
326
|
+
var partialFilter, sql, result;
|
|
327
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
328
|
+
while (1) {
|
|
329
|
+
switch (_context.prev = _context.next) {
|
|
330
|
+
case 0:
|
|
331
|
+
partialFilter = _ref5.partialFilter;
|
|
332
|
+
sql = makeSQLCreateMangoIndex(indexName, fieldsToIndex, {
|
|
333
|
+
partialFilter: partialFilter
|
|
334
|
+
});
|
|
335
|
+
_context.next = 4;
|
|
336
|
+
return executeSQL(db, sql);
|
|
337
|
+
|
|
338
|
+
case 4:
|
|
339
|
+
result = _context.sent;
|
|
340
|
+
return _context.abrupt("return", result);
|
|
341
|
+
|
|
342
|
+
case 6:
|
|
343
|
+
case "end":
|
|
344
|
+
return _context.stop();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}, _callee);
|
|
348
|
+
}));
|
|
349
|
+
|
|
350
|
+
return function createMangoIndex(_x, _x2, _x3, _x4) {
|
|
351
|
+
return _ref6.apply(this, arguments);
|
|
352
|
+
};
|
|
353
|
+
}();
|
|
354
|
+
|
|
355
|
+
exports.createMangoIndex = createMangoIndex;
|
|
356
|
+
|
|
357
|
+
var deleteIndex = /*#__PURE__*/function () {
|
|
358
|
+
var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(db, indexName) {
|
|
359
|
+
var sql;
|
|
360
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
361
|
+
while (1) {
|
|
362
|
+
switch (_context2.prev = _context2.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
sql = makeSQLDropIndex(indexName);
|
|
365
|
+
_context2.next = 3;
|
|
366
|
+
return executeSQL(db, sql);
|
|
367
|
+
|
|
368
|
+
case 3:
|
|
369
|
+
case "end":
|
|
370
|
+
return _context2.stop();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}, _callee2);
|
|
374
|
+
}));
|
|
375
|
+
|
|
376
|
+
return function deleteIndex(_x5, _x6) {
|
|
377
|
+
return _ref7.apply(this, arguments);
|
|
378
|
+
};
|
|
379
|
+
}();
|
|
380
|
+
|
|
381
|
+
exports.deleteIndex = deleteIndex;
|
|
382
|
+
|
|
383
|
+
var executeSQL = /*#__PURE__*/function () {
|
|
384
|
+
var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(db, sql) {
|
|
385
|
+
var result;
|
|
386
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
387
|
+
while (1) {
|
|
388
|
+
switch (_context3.prev = _context3.next) {
|
|
389
|
+
case 0:
|
|
390
|
+
_context3.next = 2;
|
|
391
|
+
return new Promise(function (resolve, reject) {
|
|
392
|
+
db.transaction(function (tx) {
|
|
393
|
+
tx.executeAsync(sql).then(function (res) {
|
|
394
|
+
resolve(res);
|
|
395
|
+
}).catch(function (err) {
|
|
396
|
+
reject(err);
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
case 2:
|
|
402
|
+
result = _context3.sent;
|
|
403
|
+
return _context3.abrupt("return", result);
|
|
404
|
+
|
|
405
|
+
case 4:
|
|
406
|
+
case "end":
|
|
407
|
+
return _context3.stop();
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}, _callee3);
|
|
411
|
+
}));
|
|
412
|
+
|
|
413
|
+
return function executeSQL(_x7, _x8) {
|
|
414
|
+
return _ref8.apply(this, arguments);
|
|
415
|
+
};
|
|
416
|
+
}();
|
|
417
|
+
|
|
418
|
+
exports.executeSQL = executeSQL;
|