@proteinjs/db 1.6.0 → 1.8.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/CHANGELOG.md +22 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +3 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/src/Db.d.ts +30 -4
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +66 -75
- package/dist/src/Db.js.map +1 -1
- package/dist/src/Table.d.ts +4 -0
- package/dist/src/Table.d.ts.map +1 -1
- package/dist/src/Table.js +104 -1
- package/dist/src/Table.js.map +1 -1
- package/dist/src/reference/Reference.d.ts +1 -0
- package/dist/src/reference/Reference.d.ts.map +1 -1
- package/dist/src/reference/Reference.js +3 -0
- package/dist/src/reference/Reference.js.map +1 -1
- package/dist/src/services/TransactionRunnerService.d.ts +7 -0
- package/dist/src/services/TransactionRunnerService.d.ts.map +1 -0
- package/dist/src/services/TransactionRunnerService.js +6 -0
- package/dist/src/services/TransactionRunnerService.js.map +1 -0
- package/dist/src/transaction/Transaction.d.ts +69 -0
- package/dist/src/transaction/Transaction.d.ts.map +1 -0
- package/dist/src/transaction/Transaction.js +255 -0
- package/dist/src/transaction/Transaction.js.map +1 -0
- package/dist/src/transaction/TransactionRunner.d.ts +7 -0
- package/dist/src/transaction/TransactionRunner.d.ts.map +1 -0
- package/dist/src/transaction/TransactionRunner.js +88 -0
- package/dist/src/transaction/TransactionRunner.js.map +1 -0
- package/dist/test/TransactionDb.test.d.ts +2 -0
- package/dist/test/TransactionDb.test.d.ts.map +1 -0
- package/dist/test/TransactionDb.test.js +404 -0
- package/dist/test/TransactionDb.test.js.map +1 -0
- package/dist/test/reusable/TransactionTests.d.ts +52 -0
- package/dist/test/reusable/TransactionTests.d.ts.map +1 -0
- package/dist/test/reusable/TransactionTests.js +396 -0
- package/dist/test/reusable/TransactionTests.js.map +1 -0
- package/generated/index.ts +3 -1
- package/index.ts +5 -2
- package/package.json +2 -2
- package/src/Db.ts +63 -28
- package/src/Table.ts +23 -0
- package/src/reference/Reference.ts +4 -0
- package/src/services/TransactionRunnerService.ts +10 -0
- package/src/transaction/Transaction.ts +186 -0
- package/src/transaction/TransactionRunner.ts +18 -0
- package/test/TransactionDb.test.ts +335 -0
- package/test/reusable/TransactionTests.ts +234 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
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;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.Transaction = void 0;
|
|
51
|
+
var TransactionRunner_1 = require("./TransactionRunner");
|
|
52
|
+
var Table_1 = require("../Table");
|
|
53
|
+
var util_1 = require("@proteinjs/util");
|
|
54
|
+
var db_query_1 = require("@proteinjs/db-query");
|
|
55
|
+
var hasAllProperties = function (a, b) { return Object.entries(b).every(function (_a) {
|
|
56
|
+
var key = _a[0], val = _a[1];
|
|
57
|
+
return a[key] === val;
|
|
58
|
+
}); };
|
|
59
|
+
/**
|
|
60
|
+
* A queue of db write operations that are executed sequentially (not batched) as a single transaction when `run` is called.
|
|
61
|
+
*
|
|
62
|
+
* Intended to be used on the client to decrease network calls when performing an atomic unit of db write operations.
|
|
63
|
+
*
|
|
64
|
+
* A more robust server-side transaction api is available via `Db.runTransaction`.
|
|
65
|
+
*/
|
|
66
|
+
var Transaction = /** @class */ (function () {
|
|
67
|
+
function Transaction(onInsert, onUpdate, onDelete) {
|
|
68
|
+
this.onInsert = onInsert;
|
|
69
|
+
this.onUpdate = onUpdate;
|
|
70
|
+
this.onDelete = onDelete;
|
|
71
|
+
/** Operations to be run in sequence in a transaction when `run` is called. */
|
|
72
|
+
this.ops = [];
|
|
73
|
+
/**
|
|
74
|
+
* Local cache of tables.
|
|
75
|
+
*
|
|
76
|
+
* Data will be updated as operations are queued.
|
|
77
|
+
*/
|
|
78
|
+
this.db = {};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @returns locally cached records for table
|
|
82
|
+
*/
|
|
83
|
+
Transaction.prototype.recordMap = function (table) {
|
|
84
|
+
if (!this.db[table]) {
|
|
85
|
+
this.db[table] = {};
|
|
86
|
+
}
|
|
87
|
+
return this.db[table];
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Queue an insert.
|
|
91
|
+
*/
|
|
92
|
+
Transaction.prototype.insert = function () {
|
|
93
|
+
var args = [];
|
|
94
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
95
|
+
args[_i] = arguments[_i];
|
|
96
|
+
}
|
|
97
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
98
|
+
var table, record, recordCopy, recordMap;
|
|
99
|
+
return __generator(this, function (_a) {
|
|
100
|
+
switch (_a.label) {
|
|
101
|
+
case 0:
|
|
102
|
+
table = args[0], record = args[1];
|
|
103
|
+
recordCopy = Object.assign({}, record);
|
|
104
|
+
return [4 /*yield*/, (0, Table_1.addDefaultFieldValues)(table, recordCopy)];
|
|
105
|
+
case 1:
|
|
106
|
+
_a.sent();
|
|
107
|
+
recordMap = this.recordMap(table.name);
|
|
108
|
+
if (recordMap[recordCopy.id]) {
|
|
109
|
+
throw new Error("Attempting to insert with duplicate id: ".concat(recordCopy.id, ", record already exists"));
|
|
110
|
+
}
|
|
111
|
+
recordMap[recordCopy.id] = recordCopy;
|
|
112
|
+
if (this.onInsert) {
|
|
113
|
+
this.onInsert(table, recordCopy);
|
|
114
|
+
}
|
|
115
|
+
this.ops.push({ name: 'insert', args: [table, recordCopy] });
|
|
116
|
+
return [2 /*return*/, recordCopy];
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Queue an update.
|
|
123
|
+
*
|
|
124
|
+
* Updates are performed in-place on the existing object to ensure all references
|
|
125
|
+
* receive the changes.
|
|
126
|
+
*
|
|
127
|
+
* If a `QueryBuilder` is passed in for `query`, changes will not be made to the cached `db`.
|
|
128
|
+
* Passing in an `ObjectQuery` will update the cached `db`.
|
|
129
|
+
*/
|
|
130
|
+
Transaction.prototype.update = function () {
|
|
131
|
+
var args = [];
|
|
132
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
133
|
+
args[_i] = arguments[_i];
|
|
134
|
+
}
|
|
135
|
+
var table = args[0], record = args[1], query = args[2];
|
|
136
|
+
if (!query && !record.id) {
|
|
137
|
+
throw new Error("Update must be called with either a Query or a record with an id property");
|
|
138
|
+
}
|
|
139
|
+
if (record.id) {
|
|
140
|
+
var recordMap = this.recordMap(table.name);
|
|
141
|
+
var existingRecord_1 = recordMap[record.id];
|
|
142
|
+
var prevRecord = __assign({}, existingRecord_1);
|
|
143
|
+
if (existingRecord_1) {
|
|
144
|
+
Object.keys(record).forEach(function (key) {
|
|
145
|
+
if (key !== 'id') {
|
|
146
|
+
existingRecord_1[key] = record[key];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (this.onUpdate) {
|
|
150
|
+
this.onUpdate(table, prevRecord, existingRecord_1);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
throw new Error("Attempting to update record not in the cached db");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (query && !(0, util_1.isInstanceOf)(query, db_query_1.QueryBuilder)) {
|
|
158
|
+
var objectQuery = query;
|
|
159
|
+
var recordMap = this.recordMap(table.name);
|
|
160
|
+
if (objectQuery.id && recordMap[objectQuery.id]) {
|
|
161
|
+
var existingRecord_2 = recordMap[objectQuery.id];
|
|
162
|
+
var prevRecord = __assign({}, existingRecord_2);
|
|
163
|
+
Object.keys(record).forEach(function (key) {
|
|
164
|
+
if (key !== 'id') {
|
|
165
|
+
existingRecord_2[key] = record[key];
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
if (this.onUpdate) {
|
|
169
|
+
this.onUpdate(table, prevRecord, existingRecord_2);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
var _loop_1 = function (existingRecord) {
|
|
174
|
+
if (hasAllProperties(existingRecord, objectQuery)) {
|
|
175
|
+
var prevRecord = __assign({}, existingRecord);
|
|
176
|
+
Object.keys(record).forEach(function (key) {
|
|
177
|
+
if (key !== 'id') {
|
|
178
|
+
existingRecord[key] = record[key];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (this_1.onUpdate) {
|
|
182
|
+
this_1.onUpdate(table, prevRecord, existingRecord);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
var this_1 = this;
|
|
187
|
+
for (var _a = 0, _b = Object.values(recordMap); _a < _b.length; _a++) {
|
|
188
|
+
var existingRecord = _b[_a];
|
|
189
|
+
_loop_1(existingRecord);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
this.ops.push({ name: 'update', args: args });
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Queue a delete.
|
|
197
|
+
*
|
|
198
|
+
* If a `QueryBuilder` is passed in for `query`, changes will not be made to the cached `db`.
|
|
199
|
+
* Passing in an `ObjectQuery` will update the cached `db`.
|
|
200
|
+
*/
|
|
201
|
+
Transaction.prototype.delete = function () {
|
|
202
|
+
var args = [];
|
|
203
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
204
|
+
args[_i] = arguments[_i];
|
|
205
|
+
}
|
|
206
|
+
var table = args[0], query = args[1];
|
|
207
|
+
if (!(0, util_1.isInstanceOf)(query, db_query_1.QueryBuilder)) {
|
|
208
|
+
var objectQuery = query;
|
|
209
|
+
var recordMap = this.recordMap(table.name);
|
|
210
|
+
if (objectQuery.id) {
|
|
211
|
+
if (this.onDelete && recordMap[objectQuery.id]) {
|
|
212
|
+
this.onDelete(table, recordMap[objectQuery.id]);
|
|
213
|
+
}
|
|
214
|
+
delete recordMap[objectQuery.id];
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
for (var _a = 0, _b = Object.values(recordMap); _a < _b.length; _a++) {
|
|
218
|
+
var record = _b[_a];
|
|
219
|
+
if (hasAllProperties(record, objectQuery)) {
|
|
220
|
+
if (this.onDelete && recordMap[record.id]) {
|
|
221
|
+
this.onDelete(table, recordMap[record.id]);
|
|
222
|
+
}
|
|
223
|
+
delete recordMap[record.id];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
this.ops.push({ name: 'delete', args: args });
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Run the operations in order (not a batch), as a single transaction.
|
|
232
|
+
*/
|
|
233
|
+
Transaction.prototype.run = function () {
|
|
234
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
235
|
+
var runner;
|
|
236
|
+
return __generator(this, function (_a) {
|
|
237
|
+
switch (_a.label) {
|
|
238
|
+
case 0:
|
|
239
|
+
if (this.ops.length === 0) {
|
|
240
|
+
return [2 /*return*/];
|
|
241
|
+
}
|
|
242
|
+
runner = (0, TransactionRunner_1.getTransactionRunner)();
|
|
243
|
+
return [4 /*yield*/, runner.run(this.ops)];
|
|
244
|
+
case 1:
|
|
245
|
+
_a.sent();
|
|
246
|
+
this.ops = [];
|
|
247
|
+
return [2 /*return*/];
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
return Transaction;
|
|
253
|
+
}());
|
|
254
|
+
exports.Transaction = Transaction;
|
|
255
|
+
//# sourceMappingURL=Transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../../src/transaction/Transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TransactionRunnerService } from '../services/TransactionRunnerService';
|
|
2
|
+
import { Operation } from './Transaction';
|
|
3
|
+
export declare const getTransactionRunner: () => TransactionRunner;
|
|
4
|
+
export declare class TransactionRunner implements TransactionRunnerService {
|
|
5
|
+
run(ops: Operation<any>[]): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=TransactionRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionRunner.d.ts","sourceRoot":"","sources":["../../../src/transaction/TransactionRunner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA+B,MAAM,sCAAsC,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAO,MAAM,oBAAoB,yBAC6E,CAAC;AAE/G,qBAAa,iBAAkB,YAAW,wBAAwB;IAC1D,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAShD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
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;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.TransactionRunner = exports.getTransactionRunner = void 0;
|
|
40
|
+
var Db_1 = require("../Db");
|
|
41
|
+
var TransactionRunnerService_1 = require("../services/TransactionRunnerService");
|
|
42
|
+
var getTransactionRunner = function () {
|
|
43
|
+
return typeof self === 'undefined' ? new TransactionRunner() : (0, TransactionRunnerService_1.getTransactionRunnerService)();
|
|
44
|
+
};
|
|
45
|
+
exports.getTransactionRunner = getTransactionRunner;
|
|
46
|
+
var TransactionRunner = /** @class */ (function () {
|
|
47
|
+
function TransactionRunner() {
|
|
48
|
+
}
|
|
49
|
+
TransactionRunner.prototype.run = function (ops) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
51
|
+
var db;
|
|
52
|
+
var _this = this;
|
|
53
|
+
return __generator(this, function (_a) {
|
|
54
|
+
switch (_a.label) {
|
|
55
|
+
case 0:
|
|
56
|
+
db = (0, Db_1.getDb)();
|
|
57
|
+
return [4 /*yield*/, db.runTransaction(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
58
|
+
var _i, ops_1, op;
|
|
59
|
+
return __generator(this, function (_a) {
|
|
60
|
+
switch (_a.label) {
|
|
61
|
+
case 0:
|
|
62
|
+
_i = 0, ops_1 = ops;
|
|
63
|
+
_a.label = 1;
|
|
64
|
+
case 1:
|
|
65
|
+
if (!(_i < ops_1.length)) return [3 /*break*/, 4];
|
|
66
|
+
op = ops_1[_i];
|
|
67
|
+
return [4 /*yield*/, db[op.name].apply(db, op.args)];
|
|
68
|
+
case 2:
|
|
69
|
+
_a.sent();
|
|
70
|
+
_a.label = 3;
|
|
71
|
+
case 3:
|
|
72
|
+
_i++;
|
|
73
|
+
return [3 /*break*/, 1];
|
|
74
|
+
case 4: return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}); })];
|
|
78
|
+
case 1:
|
|
79
|
+
_a.sent();
|
|
80
|
+
return [2 /*return*/];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
return TransactionRunner;
|
|
86
|
+
}());
|
|
87
|
+
exports.TransactionRunner = TransactionRunner;
|
|
88
|
+
//# sourceMappingURL=TransactionRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionRunner.js","sourceRoot":"","sources":["../../../src/transaction/TransactionRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAA8B;AAC9B,iFAA6G;AAGtG,IAAM,oBAAoB,GAAG;IAClC,OAAA,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAE,IAAA,sDAA2B,GAAwB;AAA5G,CAA4G,CAAC;AADlG,QAAA,oBAAoB,wBAC8E;AAE/G;IAAA;IAUA,CAAC;IATO,+BAAG,GAAT,UAAU,GAAqB;;;;;;;wBACvB,EAAE,GAAG,IAAA,UAAK,GAAE,CAAC;wBAEnB,qBAAM,EAAE,CAAC,cAAc,CAAC;;;;;kDACF,EAAH,WAAG;;;iDAAH,CAAA,iBAAG,CAAA;4CAAT,EAAE;4CACX,qBAAO,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAX,EAAE,EAA0B,EAAE,CAAC,IAAI,GAAC;;4CAA3C,SAA2C,CAAC;;;4CAD7B,IAAG,CAAA;;;;;iCAGrB,CAAC,EAAA;;wBAJF,SAIE,CAAC;;;;;KACJ;IACH,wBAAC;AAAD,CAAC,AAVD,IAUC;AAVY,8CAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionDb.test.d.ts","sourceRoot":"","sources":["../../test/TransactionDb.test.ts"],"names":[],"mappings":""}
|