@proteinjs/db 1.54.1 → 1.54.2

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 (39) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/Columns.d.ts +12 -6
  3. package/dist/src/Columns.d.ts.map +1 -1
  4. package/dist/src/Columns.js +40 -65
  5. package/dist/src/Columns.js.map +1 -1
  6. package/dist/src/Db.d.ts.map +1 -1
  7. package/dist/src/Db.js +2 -5
  8. package/dist/src/Db.js.map +1 -1
  9. package/dist/src/Record.d.ts +19 -0
  10. package/dist/src/Record.d.ts.map +1 -1
  11. package/dist/src/Record.js +127 -45
  12. package/dist/src/Record.js.map +1 -1
  13. package/dist/src/Table.d.ts +18 -1
  14. package/dist/src/Table.d.ts.map +1 -1
  15. package/dist/src/encryption/EncryptionRecordHooks.d.ts +9 -4
  16. package/dist/src/encryption/EncryptionRecordHooks.d.ts.map +1 -1
  17. package/dist/src/encryption/EncryptionRecordHooks.js +65 -42
  18. package/dist/src/encryption/EncryptionRecordHooks.js.map +1 -1
  19. package/dist/test/DateTimeFieldReadOnFirstRead.test.d.ts +2 -0
  20. package/dist/test/DateTimeFieldReadOnFirstRead.test.d.ts.map +1 -0
  21. package/dist/test/DateTimeFieldReadOnFirstRead.test.js +238 -0
  22. package/dist/test/DateTimeFieldReadOnFirstRead.test.js.map +1 -0
  23. package/dist/test/HydrationBenchmark.test.d.ts +2 -0
  24. package/dist/test/HydrationBenchmark.test.d.ts.map +1 -0
  25. package/dist/test/HydrationBenchmark.test.js +299 -0
  26. package/dist/test/HydrationBenchmark.test.js.map +1 -0
  27. package/dist/test/SyncRowHydration.test.d.ts +2 -0
  28. package/dist/test/SyncRowHydration.test.d.ts.map +1 -0
  29. package/dist/test/SyncRowHydration.test.js +344 -0
  30. package/dist/test/SyncRowHydration.test.js.map +1 -0
  31. package/package.json +2 -2
  32. package/src/Columns.ts +14 -7
  33. package/src/Db.ts +3 -4
  34. package/src/Record.ts +151 -17
  35. package/src/Table.ts +21 -1
  36. package/src/encryption/EncryptionRecordHooks.ts +48 -17
  37. package/test/DateTimeFieldReadOnFirstRead.test.ts +162 -0
  38. package/test/HydrationBenchmark.test.ts +209 -0
  39. package/test/SyncRowHydration.test.ts +249 -0
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ 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;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __importDefault = (this && this.__importDefault) || function (mod) {
65
+ return (mod && mod.__esModule) ? mod : { "default": mod };
66
+ };
67
+ Object.defineProperty(exports, "__esModule", { value: true });
68
+ /**
69
+ * A DateTime column's moment is built on the field's FIRST READ, not at hydration
70
+ * (`Column.deserializeOnFirstRead`): a row carries many such columns and most are never read, and
71
+ * every moment built at hydration was event-loop time under a large read. What a reader sees is
72
+ * unchanged — an own, enumerable field holding a moment at the stored instant, the same instance on
73
+ * every read, replaceable by a write, present to Object.keys, spread and JSON alike.
74
+ */
75
+ jest.mock('moment', function () {
76
+ var actual = jest.requireActual('moment');
77
+ var factory = jest.fn(function () {
78
+ var args = [];
79
+ for (var _i = 0; _i < arguments.length; _i++) {
80
+ args[_i] = arguments[_i];
81
+ }
82
+ return actual.apply(void 0, args);
83
+ });
84
+ Object.assign(factory, actual);
85
+ return factory;
86
+ });
87
+ require("../src/Table");
88
+ var moment_1 = __importDefault(require("moment"));
89
+ var Table_1 = require("../src/Table");
90
+ var Record_1 = require("../src/Record");
91
+ var Columns_1 = require("../src/Columns");
92
+ var momentFactory = moment_1.default;
93
+ var StampedTable = /** @class */ (function (_super) {
94
+ __extends(StampedTable, _super);
95
+ function StampedTable() {
96
+ var _this = _super !== null && _super.apply(this, arguments) || this;
97
+ _this.name = 'stamped';
98
+ _this.columns = (0, Record_1.withRecordColumns)({
99
+ title: new Columns_1.StringColumn('title'),
100
+ t0: new Columns_1.DateTimeColumn('t0'),
101
+ t1: new Columns_1.DateTimeColumn('t1'),
102
+ t2: new Columns_1.DateTimeColumn('t2'),
103
+ t3: new Columns_1.DateTimeColumn('t3'),
104
+ t4: new Columns_1.DateTimeColumn('t4'),
105
+ t5: new Columns_1.DateTimeColumn('t5'),
106
+ t6: new Columns_1.DateTimeColumn('t6'),
107
+ t7: new Columns_1.DateTimeColumn('t7'),
108
+ t8: new Columns_1.DateTimeColumn('t8'),
109
+ t9: new Columns_1.DateTimeColumn('t9'),
110
+ });
111
+ return _this;
112
+ }
113
+ return StampedTable;
114
+ }(Table_1.Table));
115
+ var stampedTable = new StampedTable();
116
+ /** What a driver hands the column: a Date (Spanner's is a Date subclass) — the instant is what the column takes. */
117
+ var stampsOf = function (row) { return Array.from({ length: 10 }, function (_, i) { return new Date(1700000000000 + row * 100 + i); }); };
118
+ var storedRows = function (count) {
119
+ return Array.from({ length: count }, function (_, row) {
120
+ var stamps = stampsOf(row);
121
+ var stored = {
122
+ id: "row-".concat(row),
123
+ created: new Date(1600000000000 + row),
124
+ updated: new Date(1600000000000 + row),
125
+ title: "title ".concat(row),
126
+ };
127
+ stamps.forEach(function (stamp, i) {
128
+ stored["t".concat(i)] = i === 9 ? null : stamp;
129
+ });
130
+ return stored;
131
+ });
132
+ };
133
+ /** Through the per-row door; the result-set door shares the hydrator (SyncRowHydration proves its one pass). */
134
+ var hydrate = function (rows) {
135
+ var serializer = new Record_1.RecordSerializer(stampedTable);
136
+ return Promise.all(rows.map(function (row) { return serializer.deserialize(row); }));
137
+ };
138
+ describe('a DateTime field builds its moment on the first read', function () {
139
+ beforeEach(function () {
140
+ momentFactory.mockClear();
141
+ });
142
+ it('hydrating rows with ten DateTime columns builds no moment', function () { return __awaiter(void 0, void 0, void 0, function () {
143
+ var records;
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0: return [4 /*yield*/, hydrate(storedRows(50))];
147
+ case 1:
148
+ records = _a.sent();
149
+ expect(records).toHaveLength(50);
150
+ expect(momentFactory).not.toHaveBeenCalled();
151
+ return [2 /*return*/];
152
+ }
153
+ });
154
+ }); });
155
+ it('the first read builds the moment at the stored instant, once; every read after returns that instance', function () { return __awaiter(void 0, void 0, void 0, function () {
156
+ var record, stamps, first;
157
+ return __generator(this, function (_a) {
158
+ switch (_a.label) {
159
+ case 0: return [4 /*yield*/, hydrate(storedRows(1))];
160
+ case 1:
161
+ record = (_a.sent())[0];
162
+ stamps = stampsOf(0);
163
+ first = record.t3;
164
+ expect(moment_1.default.isMoment(first)).toBe(true);
165
+ expect(first.valueOf()).toBe(stamps[3].getTime());
166
+ expect(momentFactory).toHaveBeenCalledTimes(1);
167
+ expect(record.t3).toBe(first);
168
+ expect(momentFactory).toHaveBeenCalledTimes(1);
169
+ expect(record.created.valueOf()).toBe(1600000000000);
170
+ expect(momentFactory).toHaveBeenCalledTimes(2);
171
+ return [2 /*return*/];
172
+ }
173
+ });
174
+ }); });
175
+ it('a stored null reads null; a write replaces the field', function () { return __awaiter(void 0, void 0, void 0, function () {
176
+ var record, assigned;
177
+ return __generator(this, function (_a) {
178
+ switch (_a.label) {
179
+ case 0: return [4 /*yield*/, hydrate(storedRows(1))];
180
+ case 1:
181
+ record = (_a.sent())[0];
182
+ expect(record.t9).toBeNull();
183
+ expect(momentFactory).not.toHaveBeenCalled();
184
+ assigned = (0, moment_1.default)(0);
185
+ record.t4 = assigned;
186
+ expect(record.t4).toBe(assigned);
187
+ expect(momentFactory).toHaveBeenCalledTimes(1);
188
+ return [2 /*return*/];
189
+ }
190
+ });
191
+ }); });
192
+ it('the record keeps its shape: own enumerable fields in column order, under spread and JSON alike', function () { return __awaiter(void 0, void 0, void 0, function () {
193
+ var record, stamps, copy, json;
194
+ return __generator(this, function (_a) {
195
+ switch (_a.label) {
196
+ case 0: return [4 /*yield*/, hydrate(storedRows(1))];
197
+ case 1:
198
+ record = (_a.sent())[0];
199
+ stamps = stampsOf(0);
200
+ expect(Object.keys(record)).toEqual([
201
+ 'id',
202
+ 'created',
203
+ 'updated',
204
+ 'title',
205
+ 't0',
206
+ 't1',
207
+ 't2',
208
+ 't3',
209
+ 't4',
210
+ 't5',
211
+ 't6',
212
+ 't7',
213
+ 't8',
214
+ 't9',
215
+ ]);
216
+ expect(Object.prototype.hasOwnProperty.call(record, 't5')).toBe(true);
217
+ expect(momentFactory).not.toHaveBeenCalled();
218
+ copy = __assign({}, record);
219
+ expect(moment_1.default.isMoment(copy.t5)).toBe(true);
220
+ expect(copy.t5).toBe(record.t5);
221
+ json = JSON.parse(JSON.stringify(record));
222
+ expect(json.t7).toBe(stamps[7].toISOString());
223
+ expect(json.t9).toBeNull();
224
+ expect(json.title).toBe('title 0');
225
+ return [2 /*return*/];
226
+ }
227
+ });
228
+ }); });
229
+ it('a column read directly still answers the moment itself', function () {
230
+ var column = stampedTable.columns.t0;
231
+ var stamp = new Date(1700000000123);
232
+ var value = column.deserialize(stamp);
233
+ expect(moment_1.default.isMoment(value)).toBe(true);
234
+ expect(value.valueOf()).toBe(1700000000123);
235
+ expect(column.deserialize(null)).toBeNull();
236
+ });
237
+ });
238
+ //# sourceMappingURL=DateTimeFieldReadOnFirstRead.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimeFieldReadOnFirstRead.test.js","sourceRoot":"","sources":["../../test/DateTimeFieldReadOnFirstRead.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=HydrationBenchmark.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydrationBenchmark.test.d.ts","sourceRoot":"","sources":["../../test/HydrationBenchmark.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ 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;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ var async_hooks_1 = require("async_hooks");
55
+ var reflection_1 = require("@proteinjs/reflection");
56
+ var Db_1 = require("../src/Db");
57
+ var TableWatcherRunner_1 = require("../src/TableWatcherRunner");
58
+ var Table_1 = require("../src/Table");
59
+ var Record_1 = require("../src/Record");
60
+ var Columns_1 = require("../src/Columns");
61
+ var WideTable = /** @class */ (function (_super) {
62
+ __extends(WideTable, _super);
63
+ function WideTable() {
64
+ var _this = _super !== null && _super.apply(this, arguments) || this;
65
+ _this.name = 'hydration_wide';
66
+ _this.columns = (0, Record_1.withRecordColumns)({
67
+ title: new Columns_1.StringColumn('title'),
68
+ body: new Columns_1.StringColumn('body', undefined, 'MAX'),
69
+ count: new Columns_1.IntegerColumn('count'),
70
+ payload: new Columns_1.ObjectColumn('payload'),
71
+ t0: new Columns_1.DateTimeColumn('t0'),
72
+ t1: new Columns_1.DateTimeColumn('t1'),
73
+ t2: new Columns_1.DateTimeColumn('t2'),
74
+ t3: new Columns_1.DateTimeColumn('t3'),
75
+ t4: new Columns_1.DateTimeColumn('t4'),
76
+ t5: new Columns_1.DateTimeColumn('t5'),
77
+ t6: new Columns_1.DateTimeColumn('t6'),
78
+ t7: new Columns_1.DateTimeColumn('t7'),
79
+ t8: new Columns_1.DateTimeColumn('t8'),
80
+ t9: new Columns_1.DateTimeColumn('t9'),
81
+ });
82
+ return _this;
83
+ }
84
+ return WideTable;
85
+ }(Table_1.Table));
86
+ var wideTable = new WideTable();
87
+ var TestTransactionContextFactory = /** @class */ (function () {
88
+ function TestTransactionContextFactory() {
89
+ this.context = {};
90
+ }
91
+ TestTransactionContextFactory.prototype.getTransactionContext = function () {
92
+ return this.context;
93
+ };
94
+ TestTransactionContextFactory.prototype.runInContext = function (context, fn) {
95
+ return __awaiter(this, void 0, void 0, function () {
96
+ var previous;
97
+ return __generator(this, function (_a) {
98
+ switch (_a.label) {
99
+ case 0:
100
+ previous = this.context;
101
+ this.context = context;
102
+ _a.label = 1;
103
+ case 1:
104
+ _a.trys.push([1, , 3, 4]);
105
+ return [4 /*yield*/, fn()];
106
+ case 2: return [2 /*return*/, _a.sent()];
107
+ case 3:
108
+ this.context = previous;
109
+ return [7 /*endfinally*/];
110
+ case 4: return [2 /*return*/];
111
+ }
112
+ });
113
+ });
114
+ };
115
+ return TestTransactionContextFactory;
116
+ }());
117
+ var RowsDriver = /** @class */ (function () {
118
+ function RowsDriver(rows) {
119
+ this.rows = rows;
120
+ }
121
+ RowsDriver.prototype.getDbName = function () {
122
+ return 'test';
123
+ };
124
+ RowsDriver.prototype.createDbIfNotExists = function () {
125
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
126
+ return [2 /*return*/];
127
+ }); });
128
+ };
129
+ RowsDriver.prototype.createDb = function () {
130
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
131
+ return [2 /*return*/];
132
+ }); });
133
+ };
134
+ RowsDriver.prototype.dropDb = function () {
135
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
136
+ return [2 /*return*/];
137
+ }); });
138
+ };
139
+ RowsDriver.prototype.getTableManager = function () {
140
+ throw new Error('not used by this measure');
141
+ };
142
+ RowsDriver.prototype.runQuery = function () {
143
+ return __awaiter(this, void 0, void 0, function () {
144
+ return __generator(this, function (_a) {
145
+ return [2 /*return*/, this.rows];
146
+ });
147
+ });
148
+ };
149
+ RowsDriver.prototype.runDml = function () {
150
+ return __awaiter(this, void 0, void 0, function () {
151
+ return __generator(this, function (_a) {
152
+ return [2 /*return*/, 0];
153
+ });
154
+ });
155
+ };
156
+ RowsDriver.prototype.runTransaction = function (fn) {
157
+ return __awaiter(this, void 0, void 0, function () {
158
+ return __generator(this, function (_a) {
159
+ switch (_a.label) {
160
+ case 0: return [4 /*yield*/, fn({ id: 'transaction' })];
161
+ case 1: return [2 /*return*/, _a.sent()];
162
+ }
163
+ });
164
+ });
165
+ };
166
+ RowsDriver.prototype.getOperationDeadlineMs = function () {
167
+ return 1000;
168
+ };
169
+ return RowsDriver;
170
+ }());
171
+ var objectCache = function () { return reflection_1.SourceRepository.get().objectCache; };
172
+ var originalWatchers;
173
+ // No reflection graph in a unit test: the watcher registry is empty by declaration.
174
+ beforeAll(function () {
175
+ originalWatchers = objectCache()['@proteinjs/db/TableWatcher'];
176
+ objectCache()['@proteinjs/db/TableWatcher'] = [];
177
+ TableWatcherRunner_1.TableWatcherRunner.tableWatcherMap = undefined;
178
+ });
179
+ afterAll(function () {
180
+ if (originalWatchers) {
181
+ objectCache()['@proteinjs/db/TableWatcher'] = originalWatchers;
182
+ }
183
+ else {
184
+ delete objectCache()['@proteinjs/db/TableWatcher'];
185
+ }
186
+ TableWatcherRunner_1.TableWatcherRunner.tableWatcherMap = undefined;
187
+ });
188
+ var storedRows = function (count) {
189
+ return Array.from({ length: count }, function (_, row) {
190
+ var stored = {
191
+ id: "row-".concat(row),
192
+ created: new Date(1600000000000 + row),
193
+ updated: new Date(1600000000000 + row),
194
+ title: "title ".concat(row),
195
+ body: 'x'.repeat(400),
196
+ count: row,
197
+ payload: JSON.stringify({ tags: ['a', 'b', 'c'], n: row }),
198
+ };
199
+ for (var i = 0; i < 10; i++) {
200
+ stored["t".concat(i)] = new Date(1700000000000 + row * 100 + i);
201
+ }
202
+ return stored;
203
+ });
204
+ };
205
+ /** Wall time, promises created and microtask rounds while `act` runs. */
206
+ var measure = function (act) { return __awaiter(void 0, void 0, void 0, function () {
207
+ var promises, hook, microtaskRounds, running, round, started, ms;
208
+ return __generator(this, function (_a) {
209
+ switch (_a.label) {
210
+ case 0:
211
+ promises = 0;
212
+ hook = (0, async_hooks_1.createHook)({
213
+ init: function (_asyncId, type) {
214
+ if (type === 'PROMISE') {
215
+ promises++;
216
+ }
217
+ },
218
+ });
219
+ microtaskRounds = 0;
220
+ running = true;
221
+ round = function () {
222
+ if (!running) {
223
+ return;
224
+ }
225
+ microtaskRounds++;
226
+ queueMicrotask(round);
227
+ };
228
+ hook.enable();
229
+ started = process.hrtime.bigint();
230
+ queueMicrotask(round);
231
+ return [4 /*yield*/, act()];
232
+ case 1:
233
+ _a.sent();
234
+ running = false;
235
+ ms = Number(process.hrtime.bigint() - started) / 1000000;
236
+ hook.disable();
237
+ return [2 /*return*/, { ms: Math.round(ms * 10) / 10, promises: promises, microtaskRounds: microtaskRounds }];
238
+ }
239
+ });
240
+ }); };
241
+ describe('hydration measure', function () {
242
+ it('reports 1,000 rows with ten DateTime columns through Db.query (wall ms, promises, microtask rounds)', function () { return __awaiter(void 0, void 0, void 0, function () {
243
+ var rows, db, passes, records, i, _a, _b, readAll;
244
+ return __generator(this, function (_c) {
245
+ switch (_c.label) {
246
+ case 0:
247
+ rows = storedRows(1000);
248
+ db = new Db_1.Db(new RowsDriver(rows), function () { return wideTable; }, new TestTransactionContextFactory(), true);
249
+ // one warm-up pass, then the measured passes
250
+ return [4 /*yield*/, db.query(wideTable, {})];
251
+ case 1:
252
+ // one warm-up pass, then the measured passes
253
+ _c.sent();
254
+ passes = [];
255
+ records = [];
256
+ i = 0;
257
+ _c.label = 2;
258
+ case 2:
259
+ if (!(i < 5)) return [3 /*break*/, 5];
260
+ _b = (_a = passes).push;
261
+ return [4 /*yield*/, measure(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
262
+ switch (_a.label) {
263
+ case 0: return [4 /*yield*/, db.query(wideTable, {})];
264
+ case 1: return [2 /*return*/, (records = _a.sent())];
265
+ }
266
+ }); }); })];
267
+ case 3:
268
+ _b.apply(_a, [_c.sent()]);
269
+ _c.label = 4;
270
+ case 4:
271
+ i++;
272
+ return [3 /*break*/, 2];
273
+ case 5: return [4 /*yield*/, measure(function () { return __awaiter(void 0, void 0, void 0, function () {
274
+ var _i, records_1, record;
275
+ return __generator(this, function (_a) {
276
+ for (_i = 0, records_1 = records; _i < records_1.length; _i++) {
277
+ record = records_1[_i];
278
+ record.t0.valueOf();
279
+ record.created.valueOf();
280
+ }
281
+ return [2 /*return*/];
282
+ });
283
+ }); })];
284
+ case 6:
285
+ readAll = _c.sent();
286
+ process.stdout.write("hydration measure \u2014 1,000 rows \u00D7 (10 DateTime + created/updated + 4 plain columns), Db.query, 5 passes:\n" +
287
+ passes
288
+ .map(function (pass, i) {
289
+ return " pass ".concat(i + 1, ": ").concat(pass.ms, " ms \u00B7 ").concat(pass.promises, " promises \u00B7 ").concat(pass.microtaskRounds, " microtask rounds");
290
+ })
291
+ .join('\n') +
292
+ "\n then reading t0 + created on every record: ".concat(readAll.ms, " ms \u00B7 ").concat(readAll.promises, " promises\n"));
293
+ expect(records).toHaveLength(1000);
294
+ return [2 /*return*/];
295
+ }
296
+ });
297
+ }); });
298
+ });
299
+ //# sourceMappingURL=HydrationBenchmark.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydrationBenchmark.test.js","sourceRoot":"","sources":["../../test/HydrationBenchmark.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAyC;AACzC,oDAAyD;AACzD,gCAAyC;AACzC,gEAA+D;AAC/D,sCAAqC;AACrC,wCAA4E;AAC5E,0CAA2F;AA4B3F;IAAwB,6BAAW;IAAnC;QAAA,qEAkBC;QAjBQ,UAAI,GAAG,gBAAgB,CAAC;QACxB,aAAO,GAAG,IAAA,0BAAiB,EAAO;YACvC,KAAK,EAAE,IAAI,sBAAY,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;YAChD,KAAK,EAAE,IAAI,uBAAa,CAAC,OAAO,CAAC;YACjC,OAAO,EAAE,IAAI,sBAAY,CAAC,SAAS,CAAC;YACpC,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,IAAI,wBAAc,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAC;;IACL,CAAC;IAAD,gBAAC;AAAD,CAAC,AAlBD,CAAwB,aAAK,GAkB5B;AAED,IAAM,SAAS,GAAG,IAAI,SAAS,EAAiB,CAAC;AAEjD;IAAA;QACU,YAAO,GAA2B,EAAE,CAAC;IAe/C,CAAC;IAbC,6DAAqB,GAArB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEK,oDAAY,GAAlB,UAAsB,OAA+B,EAAE,EAAoB;;;;;;wBACnE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;wBAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;;;wBAEd,qBAAM,EAAE,EAAE,EAAA;4BAAjB,sBAAO,SAAU,EAAC;;wBAElB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;;;;;;KAE3B;IACH,oCAAC;AAAD,CAAC,AAhBD,IAgBC;AAED;IACE,oBAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEzD,8BAAS,GAAT;QACE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEK,wCAAmB,GAAzB;;;;KAA6C;IAEvC,6BAAQ,GAAd;;;;KAAkC;IAE5B,2BAAM,GAAZ;;;;KAAgC;IAEhC,oCAAe,GAAf;QACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAEK,6BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,IAAI,EAAC;;;KAClB;IAEK,2BAAM,GAAZ;;;gBACE,sBAAO,CAAC,EAAC;;;KACV;IAEK,mCAAc,GAApB,UAAwB,EAAwC;;;;4BACvD,qBAAM,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAA;4BAAtC,sBAAO,SAA+B,EAAC;;;;KACxC;IAED,2CAAsB,GAAtB;QACE,OAAO,IAAI,CAAC;IACd,CAAC;IACH,iBAAC;AAAD,CAAC,AAhCD,IAgCC;AAID,IAAM,WAAW,GAAG,cAAM,OAAC,6BAAgB,CAAC,GAAG,EAA2C,CAAC,WAAW,EAA5E,CAA4E,CAAC;AACvG,IAAI,gBAAuC,CAAC;AAE5C,oFAAoF;AACpF,SAAS,CAAC;IACR,gBAAgB,GAAG,WAAW,EAAE,CAAC,4BAA4B,CAAC,CAAC;IAC/D,WAAW,EAAE,CAAC,4BAA4B,CAAC,GAAG,EAAE,CAAC;IAChD,uCAA2D,CAAC,eAAe,GAAG,SAAS,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC;IACP,IAAI,gBAAgB,EAAE;QACpB,WAAW,EAAE,CAAC,4BAA4B,CAAC,GAAG,gBAAgB,CAAC;KAChE;SAAM;QACL,OAAO,WAAW,EAAE,CAAC,4BAA4B,CAAC,CAAC;KACpD;IACA,uCAA2D,CAAC,eAAe,GAAG,SAAS,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAM,UAAU,GAAG,UAAC,KAAa;IAC/B,OAAA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAC,CAAC,EAAE,GAAG;QACnC,IAAM,MAAM,GAAqB;YAC/B,EAAE,EAAE,cAAO,GAAG,CAAE;YAChB,OAAO,EAAE,IAAI,IAAI,CAAC,aAAiB,GAAG,GAAG,CAAC;YAC1C,OAAO,EAAE,IAAI,IAAI,CAAC,aAAiB,GAAG,GAAG,CAAC;YAC1C,KAAK,EAAE,gBAAS,GAAG,CAAE;YACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YACrB,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;SAC3D,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,CAAC,WAAI,CAAC,CAAE,CAAC,GAAG,IAAI,IAAI,CAAC,aAAiB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;SAC/D;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AAdF,CAcE,CAAC;AAIL,yEAAyE;AACzE,IAAM,OAAO,GAAG,UAAO,GAA2B;;;;;gBAC5C,QAAQ,GAAG,CAAC,CAAC;gBACX,IAAI,GAAG,IAAA,wBAAU,EAAC;oBACtB,IAAI,YAAC,QAAQ,EAAE,IAAI;wBACjB,IAAI,IAAI,KAAK,SAAS,EAAE;4BACtB,QAAQ,EAAE,CAAC;yBACZ;oBACH,CAAC;iBACF,CAAC,CAAC;gBACC,eAAe,GAAG,CAAC,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACb,KAAK,GAAG;oBACZ,IAAI,CAAC,OAAO,EAAE;wBACZ,OAAO;qBACR;oBACD,eAAe,EAAE,CAAC;oBAClB,cAAc,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACR,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACxC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,qBAAM,GAAG,EAAE,EAAA;;gBAAX,SAAW,CAAC;gBACZ,OAAO,GAAG,KAAK,CAAC;gBACV,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,OAAS,CAAC;gBACjE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,sBAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,UAAA,EAAE,eAAe,iBAAA,EAAE,EAAC;;;KACpE,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE;IAC5B,EAAE,CAAC,qGAAqG,EAAE;;;;;oBAClG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;oBACxB,EAAE,GAAG,IAAI,OAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS,EAAE,IAAI,6BAA6B,EAAE,EAAE,IAAI,CAAC,CAAC;oBACpG,6CAA6C;oBAC7C,qBAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,EAAA;;oBAD7B,6CAA6C;oBAC7C,SAA6B,CAAC;oBAExB,MAAM,GAAc,EAAE,CAAC;oBACzB,OAAO,GAAW,EAAE,CAAC;oBAChB,CAAC,GAAG,CAAC;;;yBAAE,CAAA,CAAC,GAAG,CAAC,CAAA;oBACnB,KAAA,CAAA,KAAA,MAAM,CAAA,CAAC,IAAI,CAAA;oBAAC,qBAAM,OAAO,CAAC;;wCAAuB,qBAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,EAAA;wCAAxC,sBAAA,CAAC,OAAO,GAAG,SAA6B,CAAC,EAAA;;iCAAA,CAAC,EAAA;;oBAAhF,cAAY,SAAoE,EAAC,CAAC;;;oBAD7D,CAAC,EAAE,CAAA;;wBAGV,qBAAM,OAAO,CAAC;;;4BAC5B,WAA4B,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;gCAAnB,MAAM;gCACf,MAAM,CAAC,EAAG,CAAC,OAAO,EAAE,CAAC;gCACrB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;6BAC1B;;;yBACF,CAAC,EAAA;;oBALI,OAAO,GAAG,SAKd;oBAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qHAA2G;wBACzG,MAAM;6BACH,GAAG,CACF,UAAC,IAAI,EAAE,CAAC;4BACN,OAAA,iBAAU,CAAC,GAAG,CAAC,eAAK,IAAI,CAAC,EAAE,wBAAS,IAAI,CAAC,QAAQ,8BAAe,IAAI,CAAC,eAAe,sBAAmB;wBAAvG,CAAuG,CAC1G;6BACA,IAAI,CAAC,IAAI,CAAC;wBACb,yDAAkD,OAAO,CAAC,EAAE,wBAAS,OAAO,CAAC,QAAQ,gBAAa,CACrG,CAAC;oBACF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;;;SACpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SyncRowHydration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncRowHydration.test.d.ts","sourceRoot":"","sources":["../../test/SyncRowHydration.test.ts"],"names":[],"mappings":""}