@proteinjs/db 1.55.1 → 1.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/generated/index.js +1 -1
  3. package/dist/generated/index.js.map +1 -1
  4. package/dist/generated/test/index.d.ts.map +1 -1
  5. package/dist/generated/test/index.js +5 -1
  6. package/dist/generated/test/index.js.map +1 -1
  7. package/dist/src/Db.d.ts +15 -6
  8. package/dist/src/Db.d.ts.map +1 -1
  9. package/dist/src/Db.js +26 -15
  10. package/dist/src/Db.js.map +1 -1
  11. package/dist/src/TableWatcher.d.ts +15 -6
  12. package/dist/src/TableWatcher.d.ts.map +1 -1
  13. package/dist/src/TableWatcher.js.map +1 -1
  14. package/dist/src/TableWatcherRunner.d.ts +14 -6
  15. package/dist/src/TableWatcherRunner.d.ts.map +1 -1
  16. package/dist/src/TableWatcherRunner.js +19 -12
  17. package/dist/src/TableWatcherRunner.js.map +1 -1
  18. package/dist/test/index.d.ts +2 -0
  19. package/dist/test/index.d.ts.map +1 -1
  20. package/dist/test/index.js +2 -0
  21. package/dist/test/index.js.map +1 -1
  22. package/dist/test/reusable/TableWatcherAuthorityTests.d.ts +13 -0
  23. package/dist/test/reusable/TableWatcherAuthorityTests.d.ts.map +1 -0
  24. package/dist/test/reusable/TableWatcherAuthorityTests.js +392 -0
  25. package/dist/test/reusable/TableWatcherAuthorityTests.js.map +1 -0
  26. package/dist/test/util/DbTestEnvironment.d.ts.map +1 -1
  27. package/dist/test/util/DbTestEnvironment.js +3 -2
  28. package/dist/test/util/DbTestEnvironment.js.map +1 -1
  29. package/dist/test/util/tables/tableWatcherAuthorityTestTables.d.ts +35 -0
  30. package/dist/test/util/tables/tableWatcherAuthorityTestTables.d.ts.map +1 -0
  31. package/dist/test/util/tables/tableWatcherAuthorityTestTables.js +113 -0
  32. package/dist/test/util/tables/tableWatcherAuthorityTestTables.js.map +1 -0
  33. package/generated/index.ts +1 -1
  34. package/generated/test/index.ts +5 -1
  35. package/package.json +2 -2
  36. package/src/Db.ts +40 -21
  37. package/src/TableWatcher.ts +17 -6
  38. package/src/TableWatcherRunner.ts +25 -12
  39. package/test/index.ts +2 -0
  40. package/test/reusable/TableWatcherAuthorityTests.ts +204 -0
  41. package/test/util/DbTestEnvironment.ts +2 -0
  42. package/test/util/tables/tableWatcherAuthorityTestTables.ts +61 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TableWatcherRunner.js","sourceRoot":"","sources":["../../src/TableWatcherRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableWatcherRunner.js","sourceRoot":"","sources":["../../src/TableWatcherRunner.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export * from './reusable/PreloadReferencesTests';
8
8
  export * from './reusable/RecordIteratorTests';
9
9
  export * from './reusable/SourceRecordSyncTests';
10
10
  export * from './reusable/StoredValueContractTests';
11
+ export * from './reusable/TableWatcherAuthorityTests';
11
12
  export * from './util/testUser';
12
13
  export * from './util/tables/cascadeDeleteTestTables';
13
14
  export * from './util/tables/columnTypesTestTables';
@@ -17,5 +18,6 @@ export * from './util/tables/recordIteratorTestTables';
17
18
  export * from './util/tables/sourceRecordSyncTestTables';
18
19
  export * from './util/tables/storedValueContractTestTables';
19
20
  export * from './util/tables/tableManagerTestTables';
21
+ export * from './util/tables/tableWatcherAuthorityTestTables';
20
22
  export * from './util/tables/transactionTestTables';
21
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qCAAqC,CAAC"}
@@ -24,6 +24,7 @@ __exportStar(require("./reusable/PreloadReferencesTests"), exports);
24
24
  __exportStar(require("./reusable/RecordIteratorTests"), exports);
25
25
  __exportStar(require("./reusable/SourceRecordSyncTests"), exports);
26
26
  __exportStar(require("./reusable/StoredValueContractTests"), exports);
27
+ __exportStar(require("./reusable/TableWatcherAuthorityTests"), exports);
27
28
  __exportStar(require("./util/testUser"), exports);
28
29
  __exportStar(require("./util/tables/cascadeDeleteTestTables"), exports);
29
30
  __exportStar(require("./util/tables/columnTypesTestTables"), exports);
@@ -33,5 +34,6 @@ __exportStar(require("./util/tables/recordIteratorTestTables"), exports);
33
34
  __exportStar(require("./util/tables/sourceRecordSyncTestTables"), exports);
34
35
  __exportStar(require("./util/tables/storedValueContractTestTables"), exports);
35
36
  __exportStar(require("./util/tables/tableManagerTestTables"), exports);
37
+ __exportStar(require("./util/tables/tableWatcherAuthorityTestTables"), exports);
36
38
  __exportStar(require("./util/tables/transactionTestTables"), exports);
37
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,uDAAqC;AACrC,8DAA4C;AAC5C,yEAAuD;AACvD,8DAA4C;AAC5C,gEAA8C;AAC9C,oEAAkD;AAClD,iEAA+C;AAC/C,mEAAiD;AACjD,sEAAoD;AAEpD,kDAAgC;AAEhC,wEAAsD;AACtD,sEAAoD;AACpD,+DAA6C;AAC7C,iFAA+D;AAC/D,yEAAuD;AACvD,2EAAyD;AACzD,8EAA4D;AAC5D,uEAAqD;AACrD,sEAAoD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,uDAAqC;AACrC,8DAA4C;AAC5C,yEAAuD;AACvD,8DAA4C;AAC5C,gEAA8C;AAC9C,oEAAkD;AAClD,iEAA+C;AAC/C,mEAAiD;AACjD,sEAAoD;AACpD,wEAAsD;AAEtD,kDAAgC;AAEhC,wEAAsD;AACtD,sEAAoD;AACpD,+DAA6C;AAC7C,iFAA+D;AAC/D,yEAAuD;AACvD,2EAAyD;AACzD,8EAA4D;AAC5D,uEAAqD;AACrD,gFAA8D;AAC9D,sEAAoD"}
@@ -0,0 +1,13 @@
1
+ import { DbDriver, Table, DefaultTransactionContextFactory } from '@proteinjs/db';
2
+ /** The watcher's refusal when a hook arrives without the write's Db — the contract's first half. */
3
+ export declare const HOOK_HANDED_NO_DB = "the hook was handed no Db";
4
+ /**
5
+ * A table watcher's hooks run with the authority of the write that fired them: the Db hands every
6
+ * hook a Db carrying its driver, tables, transaction context and system mode. Before this the
7
+ * hooks were handed nothing and each watcher opened a session-scoped Db of its own, which a system
8
+ * write in a session-less context (an account purge, a sweep) could not use — the topic links of a
9
+ * purged message and the file of a system-deleted media row stayed behind, and the activity bump
10
+ * of a system-inserted message threw.
11
+ */
12
+ export declare const tableWatcherAuthorityTests: (driver: DbDriver, transactionContextFactory: DefaultTransactionContextFactory, dropTable: (table: Table<any>) => Promise<void>) => () => void;
13
+ //# sourceMappingURL=TableWatcherAuthorityTests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableWatcherAuthorityTests.d.ts","sourceRoot":"","sources":["../../../test/reusable/TableWatcherAuthorityTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,QAAQ,EAAE,KAAK,EAAgB,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAmBpG,oGAAoG;AACpG,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AA2F7D;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,WAC7B,QAAQ,6BACW,gCAAgC,qBACxC,MAAM,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,eAiFhD,CAAC"}
@@ -0,0 +1,392 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.tableWatcherAuthorityTests = exports.HOOK_HANDED_NO_DB = void 0;
49
+ var db_1 = require("@proteinjs/db");
50
+ var reflection_1 = require("@proteinjs/reflection");
51
+ var DbTestEnvironment_1 = require("../util/DbTestEnvironment");
52
+ var TableWatcherRunner_1 = require("../../src/TableWatcherRunner");
53
+ var tableWatcherAuthorityTestTables_1 = require("../util/tables/tableWatcherAuthorityTestTables");
54
+ var objectCache = function () { return reflection_1.SourceRepository.get().objectCache; };
55
+ var resetTableWatcherMap = function () {
56
+ TableWatcherRunner_1.TableWatcherRunner.tableWatcherMap = undefined;
57
+ };
58
+ /** The watcher's refusal when a hook arrives without the write's Db — the contract's first half. */
59
+ exports.HOOK_HANDED_NO_DB = 'the hook was handed no Db';
60
+ var HOOKS = ['beforeInsert', 'afterInsert', 'beforeUpdate', 'afterUpdate', 'beforeDelete', 'afterDelete'];
61
+ /**
62
+ * Journals every hook run through the HANDED Db and nothing else — the way a watcher is written
63
+ * once the Db hands one (chat's topic watcher deleting a deleted message's topic links, the media
64
+ * watcher deleting a deleted row's file, the activity watcher bumping the chat a message landed
65
+ * in). The journal is a guarded table, so the hook's write and read succeed only with a system
66
+ * Db: the one the write made, carrying its own authority.
67
+ */
68
+ var JournalingWatcher = /** @class */ (function () {
69
+ function JournalingWatcher() {
70
+ }
71
+ JournalingWatcher.prototype.name = function () {
72
+ return 'JournalingWatcher';
73
+ };
74
+ JournalingWatcher.prototype.table = function () {
75
+ return tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables.WatchedNote;
76
+ };
77
+ JournalingWatcher.prototype.beforeInsert = function (record, db) {
78
+ return __awaiter(this, void 0, void 0, function () {
79
+ return __generator(this, function (_a) {
80
+ switch (_a.label) {
81
+ case 0: return [4 /*yield*/, this.journal(db, record.id, 'beforeInsert')];
82
+ case 1:
83
+ _a.sent();
84
+ return [2 /*return*/, record];
85
+ }
86
+ });
87
+ });
88
+ };
89
+ JournalingWatcher.prototype.afterInsert = function (record, db) {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0: return [4 /*yield*/, this.journal(db, record.id, 'afterInsert')];
94
+ case 1:
95
+ _a.sent();
96
+ return [2 /*return*/];
97
+ }
98
+ });
99
+ });
100
+ };
101
+ JournalingWatcher.prototype.beforeUpdate = function (record, qb, db) {
102
+ return __awaiter(this, void 0, void 0, function () {
103
+ var _i, _a, row;
104
+ return __generator(this, function (_b) {
105
+ switch (_b.label) {
106
+ case 0:
107
+ _i = 0;
108
+ return [4 /*yield*/, this.handed(db).query(this.table(), qb)];
109
+ case 1:
110
+ _a = _b.sent();
111
+ _b.label = 2;
112
+ case 2:
113
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
114
+ row = _a[_i];
115
+ return [4 /*yield*/, this.journal(db, row.id, 'beforeUpdate')];
116
+ case 3:
117
+ _b.sent();
118
+ _b.label = 4;
119
+ case 4:
120
+ _i++;
121
+ return [3 /*break*/, 2];
122
+ case 5: return [2 /*return*/, record];
123
+ }
124
+ });
125
+ });
126
+ };
127
+ JournalingWatcher.prototype.afterUpdate = function (recordUpdateCount, record, qb, db) {
128
+ return __awaiter(this, void 0, void 0, function () {
129
+ var _i, _a, row;
130
+ return __generator(this, function (_b) {
131
+ switch (_b.label) {
132
+ case 0:
133
+ _i = 0;
134
+ return [4 /*yield*/, this.handed(db).query(this.table(), qb)];
135
+ case 1:
136
+ _a = _b.sent();
137
+ _b.label = 2;
138
+ case 2:
139
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
140
+ row = _a[_i];
141
+ return [4 /*yield*/, this.journal(db, row.id, 'afterUpdate')];
142
+ case 3:
143
+ _b.sent();
144
+ _b.label = 4;
145
+ case 4:
146
+ _i++;
147
+ return [3 /*break*/, 2];
148
+ case 5: return [2 /*return*/];
149
+ }
150
+ });
151
+ });
152
+ };
153
+ JournalingWatcher.prototype.beforeDelete = function (recordsToDelete, _initialQb, _deleteQb, db) {
154
+ return __awaiter(this, void 0, void 0, function () {
155
+ var _i, recordsToDelete_1, row;
156
+ return __generator(this, function (_a) {
157
+ switch (_a.label) {
158
+ case 0:
159
+ _i = 0, recordsToDelete_1 = recordsToDelete;
160
+ _a.label = 1;
161
+ case 1:
162
+ if (!(_i < recordsToDelete_1.length)) return [3 /*break*/, 4];
163
+ row = recordsToDelete_1[_i];
164
+ return [4 /*yield*/, this.journal(db, row.id, 'beforeDelete')];
165
+ case 2:
166
+ _a.sent();
167
+ _a.label = 3;
168
+ case 3:
169
+ _i++;
170
+ return [3 /*break*/, 1];
171
+ case 4: return [2 /*return*/];
172
+ }
173
+ });
174
+ });
175
+ };
176
+ JournalingWatcher.prototype.afterDelete = function (_recordDeleteCount, deletedRecords, _initialQb, _deleteQb, db) {
177
+ return __awaiter(this, void 0, void 0, function () {
178
+ var _i, deletedRecords_1, row;
179
+ return __generator(this, function (_a) {
180
+ switch (_a.label) {
181
+ case 0:
182
+ _i = 0, deletedRecords_1 = deletedRecords;
183
+ _a.label = 1;
184
+ case 1:
185
+ if (!(_i < deletedRecords_1.length)) return [3 /*break*/, 5];
186
+ row = deletedRecords_1[_i];
187
+ return [4 /*yield*/, this.journal(db, row.id, 'afterDelete')];
188
+ case 2:
189
+ _a.sent();
190
+ // The read half of the contract: a query through the handed Db over the guarded table.
191
+ return [4 /*yield*/, this.handed(db).query(tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables.GuardedJournal, { note: row.id })];
192
+ case 3:
193
+ // The read half of the contract: a query through the handed Db over the guarded table.
194
+ _a.sent();
195
+ _a.label = 4;
196
+ case 4:
197
+ _i++;
198
+ return [3 /*break*/, 1];
199
+ case 5: return [2 /*return*/];
200
+ }
201
+ });
202
+ });
203
+ };
204
+ JournalingWatcher.prototype.journal = function (db, note, hook) {
205
+ return __awaiter(this, void 0, void 0, function () {
206
+ return __generator(this, function (_a) {
207
+ switch (_a.label) {
208
+ case 0: return [4 /*yield*/, this.handed(db).insert(tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables.GuardedJournal, {
209
+ note: note,
210
+ hook: hook,
211
+ principal: 'the write',
212
+ })];
213
+ case 1:
214
+ _a.sent();
215
+ return [2 /*return*/];
216
+ }
217
+ });
218
+ });
219
+ };
220
+ JournalingWatcher.prototype.handed = function (db) {
221
+ if (!db) {
222
+ throw new Error(exports.HOOK_HANDED_NO_DB);
223
+ }
224
+ return db;
225
+ };
226
+ return JournalingWatcher;
227
+ }());
228
+ /**
229
+ * A table watcher's hooks run with the authority of the write that fired them: the Db hands every
230
+ * hook a Db carrying its driver, tables, transaction context and system mode. Before this the
231
+ * hooks were handed nothing and each watcher opened a session-scoped Db of its own, which a system
232
+ * write in a session-less context (an account purge, a sweep) could not use — the topic links of a
233
+ * purged message and the file of a system-deleted media row stayed behind, and the activity bump
234
+ * of a system-inserted message threw.
235
+ */
236
+ var tableWatcherAuthorityTests = function (driver, transactionContextFactory, dropTable) {
237
+ return function () {
238
+ var testEnv = new DbTestEnvironment_1.DbTestEnvironment(driver, dropTable);
239
+ var notes = tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables.WatchedNote;
240
+ var journal = tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables.GuardedJournal;
241
+ // Constructed in beforeAll, AFTER the watcher registration below: a Db's construction builds
242
+ // the runner's static watcher map, and the map must be built from the registered watcher.
243
+ var systemDb;
244
+ var sessionDb;
245
+ var originalWatchers;
246
+ /** A fresh async hop — the shape of a background context that inherits no caller's state. */
247
+ var inFreshContext = function (fn) {
248
+ return new Promise(function (resolve, reject) {
249
+ setImmediate(function () {
250
+ fn().then(resolve, reject);
251
+ });
252
+ });
253
+ };
254
+ var journalHooksFor = function (noteId) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
255
+ switch (_a.label) {
256
+ case 0: return [4 /*yield*/, systemDb.query(journal, { note: noteId })];
257
+ case 1: return [2 /*return*/, (_a.sent()).map(function (row) { return row.hook; }).sort()];
258
+ }
259
+ }); }); };
260
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
261
+ return __generator(this, function (_a) {
262
+ switch (_a.label) {
263
+ case 0:
264
+ originalWatchers = objectCache()['@proteinjs/db/TableWatcher'];
265
+ objectCache()['@proteinjs/db/TableWatcher'] = [new JournalingWatcher()];
266
+ resetTableWatcherMap();
267
+ systemDb = new db_1.Db(driver, undefined, transactionContextFactory, true);
268
+ sessionDb = new db_1.Db(driver, undefined, transactionContextFactory);
269
+ return [4 /*yield*/, testEnv.beforeAll()];
270
+ case 1:
271
+ _a.sent();
272
+ return [2 /*return*/];
273
+ }
274
+ });
275
+ }); }, 120000);
276
+ afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
277
+ return __generator(this, function (_a) {
278
+ switch (_a.label) {
279
+ case 0: return [4 /*yield*/, testEnv.afterAll()];
280
+ case 1:
281
+ _a.sent();
282
+ if (originalWatchers) {
283
+ objectCache()['@proteinjs/db/TableWatcher'] = originalWatchers;
284
+ }
285
+ else {
286
+ delete objectCache()['@proteinjs/db/TableWatcher'];
287
+ }
288
+ resetTableWatcherMap();
289
+ return [2 /*return*/];
290
+ }
291
+ });
292
+ }); }, 120000);
293
+ beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
294
+ return __generator(this, function (_a) {
295
+ switch (_a.label) {
296
+ case 0: return [4 /*yield*/, systemDb.delete(journal, {})];
297
+ case 1:
298
+ _a.sent();
299
+ return [4 /*yield*/, systemDb.delete(notes, {})];
300
+ case 2:
301
+ _a.sent();
302
+ return [2 /*return*/];
303
+ }
304
+ });
305
+ }); });
306
+ describe('Table watchers carry the write’s authority', function () {
307
+ test('a system insert, update and delete in a session-less context: all six hooks write and read the guarded journal through the handed Db', function () { return __awaiter(void 0, void 0, void 0, function () {
308
+ var noteId, _a, _b;
309
+ return __generator(this, function (_c) {
310
+ switch (_c.label) {
311
+ case 0: return [4 /*yield*/, inFreshContext(function () { return __awaiter(void 0, void 0, void 0, function () {
312
+ var note;
313
+ return __generator(this, function (_a) {
314
+ switch (_a.label) {
315
+ case 0: return [4 /*yield*/, systemDb.insert(notes, { title: 'Kept' })];
316
+ case 1:
317
+ note = _a.sent();
318
+ return [4 /*yield*/, systemDb.update(notes, { title: 'Kept, renamed' }, { id: note.id })];
319
+ case 2:
320
+ _a.sent();
321
+ return [4 /*yield*/, systemDb.delete(notes, { id: note.id })];
322
+ case 3:
323
+ _a.sent();
324
+ return [2 /*return*/, note.id];
325
+ }
326
+ });
327
+ }); })];
328
+ case 1:
329
+ noteId = _c.sent();
330
+ _a = expect;
331
+ return [4 /*yield*/, systemDb.query(notes, { id: noteId })];
332
+ case 2:
333
+ _a.apply(void 0, [_c.sent()]).toHaveLength(0);
334
+ _b = expect;
335
+ return [4 /*yield*/, journalHooksFor(noteId)];
336
+ case 3:
337
+ _b.apply(void 0, [_c.sent()]).toEqual(__spreadArray([], HOOKS, true).sort());
338
+ return [2 /*return*/];
339
+ }
340
+ });
341
+ }); });
342
+ test('a session write’s hooks run as the session, never as system: the guarded journal refuses the first hook and the write with it', function () { return __awaiter(void 0, void 0, void 0, function () {
343
+ var _a;
344
+ return __generator(this, function (_b) {
345
+ switch (_b.label) {
346
+ case 0: return [4 /*yield*/, expect(sessionDb.insert(notes, { title: 'Refused' })).rejects.toThrow(tableWatcherAuthorityTestTables_1.WATCHER_GUARDED_REFUSAL)];
347
+ case 1:
348
+ _b.sent();
349
+ _a = expect;
350
+ return [4 /*yield*/, systemDb.query(notes, { title: 'Refused' })];
351
+ case 2:
352
+ _a.apply(void 0, [_b.sent()]).toHaveLength(0);
353
+ return [2 /*return*/];
354
+ }
355
+ });
356
+ }); });
357
+ test('the handed Db rides the write’s transaction: a rolled-back system insert leaves no journal row', function () { return __awaiter(void 0, void 0, void 0, function () {
358
+ var noteId, _a, _b;
359
+ return __generator(this, function (_c) {
360
+ switch (_c.label) {
361
+ case 0: return [4 /*yield*/, expect(systemDb.runTransaction(function () { return __awaiter(void 0, void 0, void 0, function () {
362
+ var note;
363
+ return __generator(this, function (_a) {
364
+ switch (_a.label) {
365
+ case 0: return [4 /*yield*/, systemDb.insert(notes, { title: 'Rolled back' })];
366
+ case 1:
367
+ note = _a.sent();
368
+ noteId = note.id;
369
+ throw new Error('roll back');
370
+ }
371
+ });
372
+ }); })).rejects.toThrow('roll back')];
373
+ case 1:
374
+ _c.sent();
375
+ expect(noteId).toBeDefined();
376
+ _a = expect;
377
+ return [4 /*yield*/, systemDb.query(notes, { id: noteId })];
378
+ case 2:
379
+ _a.apply(void 0, [_c.sent()]).toHaveLength(0);
380
+ _b = expect;
381
+ return [4 /*yield*/, journalHooksFor(noteId)];
382
+ case 3:
383
+ _b.apply(void 0, [_c.sent()]).toEqual([]);
384
+ return [2 /*return*/];
385
+ }
386
+ });
387
+ }); });
388
+ });
389
+ };
390
+ };
391
+ exports.tableWatcherAuthorityTests = tableWatcherAuthorityTests;
392
+ //# sourceMappingURL=TableWatcherAuthorityTests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableWatcherAuthorityTests.js","sourceRoot":"","sources":["../../../test/reusable/TableWatcherAuthorityTests.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DbTestEnvironment.d.ts","sourceRoot":"","sources":["../../../test/util/DbTestEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAyBhD;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;gBADb,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAGvD,SAAS;IAaT,QAAQ;CAUf"}
1
+ {"version":3,"file":"DbTestEnvironment.d.ts","sourceRoot":"","sources":["../../../test/util/DbTestEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA2BhD;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;gBADb,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAGvD,SAAS;IAaT,QAAQ;CAUf"}
@@ -55,11 +55,12 @@ var recordIteratorTestTables_1 = require("./tables/recordIteratorTestTables");
55
55
  var sourceRecordSyncTestTables_1 = require("./tables/sourceRecordSyncTestTables");
56
56
  var storedValueContractTestTables_1 = require("./tables/storedValueContractTestTables");
57
57
  var tableManagerTestTables_1 = require("./tables/tableManagerTestTables");
58
+ var tableWatcherAuthorityTestTables_1 = require("./tables/tableWatcherAuthorityTestTables");
58
59
  var transactionTestTables_1 = require("./tables/transactionTestTables");
59
- var TABLES = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], Object.values(cascadeDeleteTestTables_1.cascadeDeleteTestTables), true), Object.values(columnTypesTestTables_1.columnTypesTestTables), true), Object.values(crudTestTables_1.crudTestTables), true), Object.values(dynamicReferenceColumnTestTables_1.dynamicReferenceTestTables), true), Object.values(recordIteratorTestTables_1.recordIteratorTestTables), true), Object.values(sourceRecordSyncTestTables_1.sourceRecordSyncTestTables), true), [
60
+ var TABLES = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], Object.values(cascadeDeleteTestTables_1.cascadeDeleteTestTables), true), Object.values(columnTypesTestTables_1.columnTypesTestTables), true), Object.values(crudTestTables_1.crudTestTables), true), Object.values(dynamicReferenceColumnTestTables_1.dynamicReferenceTestTables), true), Object.values(recordIteratorTestTables_1.recordIteratorTestTables), true), Object.values(sourceRecordSyncTestTables_1.sourceRecordSyncTestTables), true), [
60
61
  // The member tables are the stored-value suite's own: it builds each physical column order itself.
61
62
  storedValueContractTestTables_1.storedValueContractTestTables.Mixed
62
- ], false), Object.values(tableManagerTestTables_1.tableManagerTestTables), true), Object.values(transactionTestTables_1.transactionTestTables), true);
63
+ ], false), Object.values(tableManagerTestTables_1.tableManagerTestTables), true), Object.values(tableWatcherAuthorityTestTables_1.tableWatcherAuthorityTestTables), true), Object.values(transactionTestTables_1.transactionTestTables), true);
63
64
  /**
64
65
  * Convenience functions for setting up a test environment
65
66
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DbTestEnvironment.js","sourceRoot":"","sources":["../../../test/util/DbTestEnvironment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA6D;AAC7D,4EAA2E;AAC3E,wEAAuE;AACvE,0DAAyD;AACzD,8FAAuF;AACvF,8EAA6E;AAC7E,kFAAiF;AACjF,wFAAuF;AACvF,0EAAyE;AACzE,wEAAuE;AAEvE,IAAM,MAAM,qIACP,MAAM,CAAC,MAAM,CAAC,iDAAuB,CAAC,SACtC,MAAM,CAAC,MAAM,CAAC,6CAAqB,CAAC,SACpC,MAAM,CAAC,MAAM,CAAC,+BAAc,CAAC,SAC7B,MAAM,CAAC,MAAM,CAAC,6DAA0B,CAAC,SACzC,MAAM,CAAC,MAAM,CAAC,mDAAwB,CAAC,SACvC,MAAM,CAAC,MAAM,CAAC,uDAA0B,CAAC;IAC5C,mGAAmG;IACnG,6DAA6B,CAAC,KAAK;WAChC,MAAM,CAAC,MAAM,CAAC,+CAAsB,CAAC,SACrC,MAAM,CAAC,MAAM,CAAC,6CAAqB,CAAC,OACxC,CAAC;AAEF;;GAEG;AACH;IACE,2BACU,QAAkB,EAClB,aAAmD;QADnD,aAAQ,GAAR,QAAQ,CAAU;QAClB,kBAAa,GAAb,aAAa,CAAsC;IAC1D,CAAC;IAEE,qCAAS,GAAf;;;;;;wBACE,yFAAyF;wBACzF,+CAA+C;wBAC/C,IAAA,2BAAgB,GAAE,CAAC;6BACf,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAnB,wBAAmB;wBACrB,qBAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;8BAGJ,EAAN,iBAAM;;;6BAAN,CAAA,oBAAM,CAAA;wBAAf,KAAK;wBACd,qBAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAA;;wBAAtD,SAAsD,CAAC;;;wBADrC,IAAM,CAAA;;;;;;KAG3B;IAEK,oCAAQ,GAAd;;;;;;wBACE,IAAA,wBAAa,GAAE,CAAC;8BACoB,EAAhB,KAAA,MAAM,CAAC,OAAO,EAAE;;;6BAAhB,CAAA,cAAgB,CAAA;wBAAzB,KAAK;wBACd,qBAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAA;;wBAA/B,SAA+B,CAAC;;;wBADd,IAAgB,CAAA;;;6BAIhC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAlB,wBAAkB;wBACpB,qBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAA;;wBAA1B,SAA0B,CAAC;;;;;;KAE9B;IACH,wBAAC;AAAD,CAAC,AA7BD,IA6BC;AA7BY,8CAAiB"}
1
+ {"version":3,"file":"DbTestEnvironment.js","sourceRoot":"","sources":["../../../test/util/DbTestEnvironment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA6D;AAC7D,4EAA2E;AAC3E,wEAAuE;AACvE,0DAAyD;AACzD,8FAAuF;AACvF,8EAA6E;AAC7E,kFAAiF;AACjF,wFAAuF;AACvF,0EAAyE;AACzE,4FAA2F;AAC3F,wEAAuE;AAEvE,IAAM,MAAM,mJACP,MAAM,CAAC,MAAM,CAAC,iDAAuB,CAAC,SACtC,MAAM,CAAC,MAAM,CAAC,6CAAqB,CAAC,SACpC,MAAM,CAAC,MAAM,CAAC,+BAAc,CAAC,SAC7B,MAAM,CAAC,MAAM,CAAC,6DAA0B,CAAC,SACzC,MAAM,CAAC,MAAM,CAAC,mDAAwB,CAAC,SACvC,MAAM,CAAC,MAAM,CAAC,uDAA0B,CAAC;IAC5C,mGAAmG;IACnG,6DAA6B,CAAC,KAAK;WAChC,MAAM,CAAC,MAAM,CAAC,+CAAsB,CAAC,SACrC,MAAM,CAAC,MAAM,CAAC,iEAA+B,CAAC,SAC9C,MAAM,CAAC,MAAM,CAAC,6CAAqB,CAAC,OACxC,CAAC;AAEF;;GAEG;AACH;IACE,2BACU,QAAkB,EAClB,aAAmD;QADnD,aAAQ,GAAR,QAAQ,CAAU;QAClB,kBAAa,GAAb,aAAa,CAAsC;IAC1D,CAAC;IAEE,qCAAS,GAAf;;;;;;wBACE,yFAAyF;wBACzF,+CAA+C;wBAC/C,IAAA,2BAAgB,GAAE,CAAC;6BACf,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAnB,wBAAmB;wBACrB,qBAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;8BAGJ,EAAN,iBAAM;;;6BAAN,CAAA,oBAAM,CAAA;wBAAf,KAAK;wBACd,qBAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAA;;wBAAtD,SAAsD,CAAC;;;wBADrC,IAAM,CAAA;;;;;;KAG3B;IAEK,oCAAQ,GAAd;;;;;;wBACE,IAAA,wBAAa,GAAE,CAAC;8BACoB,EAAhB,KAAA,MAAM,CAAC,OAAO,EAAE;;;6BAAhB,CAAA,cAAgB,CAAA;wBAAzB,KAAK;wBACd,qBAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAA;;wBAA/B,SAA+B,CAAC;;;wBADd,IAAgB,CAAA;;;6BAIhC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAlB,wBAAkB;wBACpB,qBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAA;;wBAA1B,SAA0B,CAAC;;;;;;KAE9B;IACH,wBAAC;AAAD,CAAC,AA7BD,IA6BC;AA7BY,8CAAiB"}
@@ -0,0 +1,35 @@
1
+ import { Table, Record } from '@proteinjs/db';
2
+ /** The watched table: a plain row whose writes fire the suite's journaling watcher. */
3
+ export interface WatchedNote extends Record {
4
+ title: string;
5
+ }
6
+ /** The watcher's journal: one row per hook run, writable and readable as system only. */
7
+ export interface GuardedJournal extends Record {
8
+ /** The watched row's id. */
9
+ note: string;
10
+ /** The hook that wrote the row (`beforeInsert` … `afterDelete`). */
11
+ hook: string;
12
+ /** The scoped-table contract in miniature — see {@link GuardedJournalTable}. */
13
+ principal: string;
14
+ }
15
+ /** The journal's refusal of a non-system write or query, by name. */
16
+ export declare const WATCHER_GUARDED_REFUSAL = "no user in scope (journal)";
17
+ export declare class WatchedNoteTable extends Table<WatchedNote> {
18
+ name: string;
19
+ columns: Table<WatchedNote>['columns'];
20
+ }
21
+ /**
22
+ * A scoped table's shape without a dependency on one: a non-system write needs the context's
23
+ * user to stamp the row with, a non-system query needs it to scope the query to — there is none
24
+ * in a session-less context, so both refuse by name. A system write supplies the principal itself
25
+ * and a system query is not scoped, exactly as `@proteinjs/user`'s ScopedRecord columns behave.
26
+ */
27
+ export declare class GuardedJournalTable extends Table<GuardedJournal> {
28
+ name: string;
29
+ columns: Table<GuardedJournal>['columns'];
30
+ }
31
+ export declare const tableWatcherAuthorityTestTables: {
32
+ WatchedNote: Table<WatchedNote>;
33
+ GuardedJournal: Table<GuardedJournal>;
34
+ };
35
+ //# sourceMappingURL=tableWatcherAuthorityTestTables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableWatcherAuthorityTestTables.d.ts","sourceRoot":"","sources":["../../../../test/util/tables/tableWatcherAuthorityTestTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAqB,MAAM,EAAE,MAAM,eAAe,CAAC;AAI/E,uFAAuF;AACvF,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yFAAyF;AACzF,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AAEpE,qBAAa,gBAAiB,SAAQ,KAAK,CAAC,WAAW,CAAC;IACtD,IAAI,SAAsB;IAC1B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAEnC;CACJ;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC;IAC5D,IAAI,SAAyB;IAC7B,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CActC;CACJ;AAED,eAAO,MAAM,+BAA+B;;;CAG3C,CAAC"}