@proteinjs/db 1.47.3 → 1.49.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/.eslintrc.js +1 -1
- package/.prettierignore +2 -1
- package/CHANGELOG.md +37 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +1 -3
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.d.ts.map +1 -1
- package/dist/generated/test/index.js +1 -3
- package/dist/generated/test/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/src/Db.d.ts +9 -0
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +2 -2
- package/dist/src/Db.js.map +1 -1
- package/dist/src/MigrationRunner.js +2 -2
- package/dist/src/MigrationRunner.js.map +1 -1
- package/dist/src/Table.d.ts +16 -1
- package/dist/src/Table.d.ts.map +1 -1
- package/dist/src/Table.js +14 -0
- package/dist/src/Table.js.map +1 -1
- package/dist/src/auth/TableAuth.d.ts +4 -0
- package/dist/src/auth/TableAuth.d.ts.map +1 -1
- package/dist/src/auth/TableAuth.js +12 -0
- package/dist/src/auth/TableAuth.js.map +1 -1
- package/dist/src/auth/TableServiceAuth.d.ts.map +1 -1
- package/dist/src/auth/TableServiceAuth.js +5 -0
- package/dist/src/auth/TableServiceAuth.js.map +1 -1
- package/dist/src/schema/SchemaOperations.d.ts +4 -3
- package/dist/src/schema/SchemaOperations.d.ts.map +1 -1
- package/dist/src/schema/TableManager.d.ts +24 -6
- package/dist/src/schema/TableManager.d.ts.map +1 -1
- package/dist/src/schema/TableManager.js +93 -26
- package/dist/src/schema/TableManager.js.map +1 -1
- package/dist/src/services/TransactionRunnerService.d.ts +20 -1
- package/dist/src/services/TransactionRunnerService.d.ts.map +1 -1
- package/dist/src/source/SourceRecord.d.ts +2 -2
- package/dist/src/source/{SourceRecordLoader.d.ts → SourceRecordSyncRunner.d.ts} +15 -7
- package/dist/src/source/SourceRecordSyncRunner.d.ts.map +1 -0
- package/dist/src/source/{SourceRecordLoader.js → SourceRecordSyncRunner.js} +46 -31
- package/dist/src/source/SourceRecordSyncRunner.js.map +1 -0
- package/dist/src/tables/MigrationTable.d.ts +10 -2
- package/dist/src/tables/MigrationTable.d.ts.map +1 -1
- package/dist/src/tables/MigrationTable.js +12 -4
- package/dist/src/tables/MigrationTable.js.map +1 -1
- package/dist/src/transaction/Transaction.d.ts +6 -1
- package/dist/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/src/transaction/Transaction.js +13 -2
- package/dist/src/transaction/Transaction.js.map +1 -1
- package/dist/src/transaction/TransactionRunner.d.ts +45 -2
- package/dist/src/transaction/TransactionRunner.d.ts.map +1 -1
- package/dist/src/transaction/TransactionRunner.js +227 -26
- package/dist/src/transaction/TransactionRunner.js.map +1 -1
- package/dist/test/DurableTable.test.d.ts +2 -0
- package/dist/test/DurableTable.test.d.ts.map +1 -0
- package/dist/test/DurableTable.test.js +172 -0
- package/dist/test/DurableTable.test.js.map +1 -0
- package/dist/test/MigrationAuth.test.js +12 -9
- package/dist/test/MigrationAuth.test.js.map +1 -1
- package/dist/test/SchemaReconcileLines.test.d.ts +2 -0
- package/dist/test/SchemaReconcileLines.test.d.ts.map +1 -0
- package/dist/test/SchemaReconcileLines.test.js +176 -0
- package/dist/test/SchemaReconcileLines.test.js.map +1 -0
- package/dist/test/SourceRecordLoaderQualifiedName.test.d.ts +2 -0
- package/dist/test/SourceRecordLoaderQualifiedName.test.d.ts.map +1 -0
- package/dist/test/SourceRecordLoaderQualifiedName.test.js +79 -0
- package/dist/test/SourceRecordLoaderQualifiedName.test.js.map +1 -0
- package/dist/test/SourceRecordSyncRunner.test.d.ts +2 -0
- package/dist/test/SourceRecordSyncRunner.test.d.ts.map +1 -0
- package/dist/test/{SourceRecordLoader.test.js → SourceRecordSyncRunner.test.js} +63 -7
- package/dist/test/SourceRecordSyncRunner.test.js.map +1 -0
- package/dist/test/TableManagerCreateOrder.test.d.ts +2 -0
- package/dist/test/TableManagerCreateOrder.test.d.ts.map +1 -0
- package/dist/test/TableManagerCreateOrder.test.js +66 -0
- package/dist/test/TableManagerCreateOrder.test.js.map +1 -0
- package/dist/test/reusable/SourceRecordSyncTests.d.ts.map +1 -1
- package/dist/test/reusable/SourceRecordSyncTests.js +3 -5
- package/dist/test/reusable/SourceRecordSyncTests.js.map +1 -1
- package/dist/test/reusable/TableManagerTests.d.ts.map +1 -1
- package/dist/test/reusable/TableManagerTests.js +180 -0
- package/dist/test/reusable/TableManagerTests.js.map +1 -1
- package/generated/index.ts +20 -19
- package/generated/test/index.ts +54 -53
- package/index.ts +3 -4
- package/package.json +4 -4
- package/src/Db.ts +11 -2
- package/src/MigrationRunner.ts +2 -2
- package/src/Table.ts +16 -1
- package/src/auth/TableAuth.ts +14 -0
- package/src/auth/TableServiceAuth.ts +6 -1
- package/src/schema/SchemaOperations.ts +4 -3
- package/src/schema/TableManager.ts +84 -26
- package/src/services/TransactionRunnerService.ts +21 -1
- package/src/source/SourceRecord.ts +2 -2
- package/src/source/{SourceRecordLoader.ts → SourceRecordSyncRunner.ts} +31 -13
- package/src/tables/MigrationTable.ts +12 -4
- package/src/transaction/Transaction.ts +11 -2
- package/src/transaction/TransactionRunner.ts +174 -3
- package/test/DurableTable.test.ts +156 -0
- package/test/MigrationAuth.test.ts +7 -5
- package/test/SchemaReconcileLines.test.ts +127 -0
- package/test/SourceRecordLoaderQualifiedName.test.ts +63 -0
- package/test/{SourceRecordLoader.test.ts → SourceRecordSyncRunner.test.ts} +75 -8
- package/test/TableManagerCreateOrder.test.ts +78 -0
- package/test/reusable/SourceRecordSyncTests.ts +3 -5
- package/test/reusable/TableManagerTests.ts +95 -0
- package/dist/src/source/SourceRecordLoader.d.ts.map +0 -1
- package/dist/src/source/SourceRecordLoader.js.map +0 -1
- package/dist/test/SourceRecordLoader.test.d.ts +0 -2
- package/dist/test/SourceRecordLoader.test.d.ts.map +0 -1
- package/dist/test/SourceRecordLoader.test.js.map +0 -1
|
@@ -0,0 +1,176 @@
|
|
|
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
|
+
var util_1 = require("util");
|
|
51
|
+
var logger_1 = require("@proteinjs/logger");
|
|
52
|
+
var TableManager_1 = require("../src/schema/TableManager");
|
|
53
|
+
/**
|
|
54
|
+
* The schema-reconcile WARN lines (`TableManager.reconcileConcurrentSchemaChange`) carry the
|
|
55
|
+
* error a driver rejected with — never text copied out of it.
|
|
56
|
+
*
|
|
57
|
+
* A backend words a schema error itself and can quote row data in it (a unique index whose
|
|
58
|
+
* backfill meets duplicate rows names the duplicate key). A driver marks such an error so the
|
|
59
|
+
* logger prints its status and the driver's sentence in its place (`LogLineErrors`) — which the
|
|
60
|
+
* logger can only do for the error OBJECT. These lines used to interpolate the error's `details`
|
|
61
|
+
* / `message` into their own message, where nothing can recognize it.
|
|
62
|
+
*
|
|
63
|
+
* Judged at the log WRITER, as the text a writer would print, for each of the three outcomes
|
|
64
|
+
* that log: tolerated, still absent, a genuine conflict.
|
|
65
|
+
*/
|
|
66
|
+
// A fixture value shaped like row content (not a real credential).
|
|
67
|
+
var VALUE = 'rst_reconcile_5d41402abc4b2a76b9719d911017c592';
|
|
68
|
+
var SENTENCE = 'Failed when executing schema update (ALREADY_EXISTS, code 6): what the statement creates already exists';
|
|
69
|
+
var noChanges = function () {
|
|
70
|
+
return ({
|
|
71
|
+
columnsToCreate: [],
|
|
72
|
+
columnsToRename: [],
|
|
73
|
+
columnsToAlter: [],
|
|
74
|
+
columnsWithForeignKeysToDrop: [],
|
|
75
|
+
columnsWithUniqueConstraintsToDrop: [],
|
|
76
|
+
indexesToCreate: [],
|
|
77
|
+
indexesToDrop: [],
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
/** What a driver rejects with when the backend refuses a schema change — marked, as a driver marks it. */
|
|
81
|
+
var backendError = function () {
|
|
82
|
+
var message = "6 ALREADY_EXISTS: Duplicate name in schema: ledger_by_email. duplicate key: {String(\"".concat(VALUE, "\")}");
|
|
83
|
+
var error = Object.assign(new Error(message), { code: 6, details: message });
|
|
84
|
+
logger_1.LogLineErrors.mark(error, function () { return ({ code: 6, sentence: SENTENCE, facts: { status: 'ALREADY_EXISTS' } }); });
|
|
85
|
+
return error;
|
|
86
|
+
};
|
|
87
|
+
var printedLine = function (log) { var _a, _b; return [(_a = log.message) !== null && _a !== void 0 ? _a : '', (0, util_1.inspect)(log.obj, { depth: 10, maxStringLength: null }), (_b = JSON.stringify(log.obj)) !== null && _b !== void 0 ? _b : ''].join('\n'); };
|
|
88
|
+
describe('the schema-reconcile lines carry the error itself, never its text', function () {
|
|
89
|
+
var table = { name: 'ledger' };
|
|
90
|
+
var captured;
|
|
91
|
+
var managerWhere = function (live) {
|
|
92
|
+
var manager = new TableManager_1.TableManager({}, {}, { isAlreadyExistsError: function () { return true; } }, { tableExists: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
93
|
+
return [2 /*return*/, live.exists];
|
|
94
|
+
}); }); } });
|
|
95
|
+
var internals = manager;
|
|
96
|
+
internals.logger = new logger_1.Logger({
|
|
97
|
+
name: 'TableManager',
|
|
98
|
+
logWriter: { write: function (log) { return captured.push(log); } },
|
|
99
|
+
});
|
|
100
|
+
internals.getTableChanges = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
101
|
+
return [2 /*return*/, live.changes];
|
|
102
|
+
}); }); };
|
|
103
|
+
internals.delay = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
104
|
+
return [2 /*return*/, undefined];
|
|
105
|
+
}); }); };
|
|
106
|
+
return internals;
|
|
107
|
+
};
|
|
108
|
+
beforeEach(function () {
|
|
109
|
+
captured = [];
|
|
110
|
+
});
|
|
111
|
+
var expectTheErrorNotItsText = function (line, error) {
|
|
112
|
+
expect(error.message).toContain(VALUE);
|
|
113
|
+
expect(printedLine(line)).not.toContain(VALUE);
|
|
114
|
+
expect(printedLine(line)).not.toContain('Duplicate name in schema');
|
|
115
|
+
expect(line.obj.error).toBeInstanceOf(Error);
|
|
116
|
+
expect(line.obj.error.message).toBe(SENTENCE);
|
|
117
|
+
expect(line.message).toContain('ledger');
|
|
118
|
+
};
|
|
119
|
+
test('tolerated: the table is there with the intended definition', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
120
|
+
var error;
|
|
121
|
+
return __generator(this, function (_a) {
|
|
122
|
+
switch (_a.label) {
|
|
123
|
+
case 0:
|
|
124
|
+
error = backendError();
|
|
125
|
+
return [4 /*yield*/, managerWhere({ exists: true, changes: noChanges() }).reconcileConcurrentSchemaChange([table], error)];
|
|
126
|
+
case 1:
|
|
127
|
+
_a.sent();
|
|
128
|
+
expect(captured).toHaveLength(1);
|
|
129
|
+
expect(captured[0].message).toContain('tolerated concurrent ALREADY_EXISTS');
|
|
130
|
+
expectTheErrorNotItsText(captured[0], error);
|
|
131
|
+
return [2 /*return*/];
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}); });
|
|
135
|
+
test('still absent after every re-read: the original error is thrown as it is', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
136
|
+
var error, thrown;
|
|
137
|
+
return __generator(this, function (_a) {
|
|
138
|
+
switch (_a.label) {
|
|
139
|
+
case 0:
|
|
140
|
+
error = backendError();
|
|
141
|
+
return [4 /*yield*/, managerWhere({ exists: false, changes: noChanges() })
|
|
142
|
+
.reconcileConcurrentSchemaChange([table], error)
|
|
143
|
+
.catch(function (each) { return each; })];
|
|
144
|
+
case 1:
|
|
145
|
+
thrown = _a.sent();
|
|
146
|
+
expect(thrown).toBe(error);
|
|
147
|
+
expect(captured).toHaveLength(1);
|
|
148
|
+
expect(captured[0].message).toContain('still absent');
|
|
149
|
+
expectTheErrorNotItsText(captured[0], error);
|
|
150
|
+
return [2 /*return*/];
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}); });
|
|
154
|
+
test('a genuine conflict: the live schema differs from the intended definition', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
155
|
+
var error, changes, thrown;
|
|
156
|
+
return __generator(this, function (_a) {
|
|
157
|
+
switch (_a.label) {
|
|
158
|
+
case 0:
|
|
159
|
+
error = backendError();
|
|
160
|
+
changes = __assign(__assign({}, noChanges()), { columnsToCreate: ['email'] });
|
|
161
|
+
return [4 /*yield*/, managerWhere({ exists: true, changes: changes })
|
|
162
|
+
.reconcileConcurrentSchemaChange([table], error)
|
|
163
|
+
.catch(function (each) { return each; })];
|
|
164
|
+
case 1:
|
|
165
|
+
thrown = _a.sent();
|
|
166
|
+
expect(thrown).toBe(error);
|
|
167
|
+
expect(captured).toHaveLength(1);
|
|
168
|
+
expect(captured[0].message).toContain('genuine conflict');
|
|
169
|
+
expect(captured[0].obj.remainingChanges).toEqual(changes);
|
|
170
|
+
expectTheErrorNotItsText(captured[0], error);
|
|
171
|
+
return [2 /*return*/];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}); });
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=SchemaReconcileLines.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaReconcileLines.test.js","sourceRoot":"","sources":["../../test/SchemaReconcileLines.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceRecordLoaderQualifiedName.test.d.ts","sourceRoot":"","sources":["../../test/SourceRecordLoaderQualifiedName.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
var fs = __importStar(require("fs"));
|
|
27
|
+
var path = __importStar(require("path"));
|
|
28
|
+
var reflection_1 = require("@proteinjs/reflection");
|
|
29
|
+
var util_1 = require("@proteinjs/util");
|
|
30
|
+
/**
|
|
31
|
+
* `@proteinjs/db/SourceRecordLoader` is the qualified name every source-record declaration
|
|
32
|
+
* implements (`class X implements SourceRecordLoader<T>`) and the name `getSourceRecordLoaders`
|
|
33
|
+
* resolves through the reflection registry. The generated index keeps ONE node per qualified
|
|
34
|
+
* name, so a second declaration of the name anywhere in the package's reflected sources leaves
|
|
35
|
+
* which one the artifact records to the build's file order — and the loser disappears without
|
|
36
|
+
* a trace. These tests read the artifacts the build wrote (`generated/index.ts` for the package
|
|
37
|
+
* entry, `generated/test/index.ts` for the `./test` subpath, both built from `src/`) and assert
|
|
38
|
+
* the name holds the declaration interface, not some other declaration that shares it.
|
|
39
|
+
*/
|
|
40
|
+
var QUALIFIED_NAME = '@proteinjs/db/SourceRecordLoader';
|
|
41
|
+
var ARTIFACTS = ['generated/index.ts', 'generated/test/index.ts'];
|
|
42
|
+
var readArtifact = function (relativePath) { return fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8'); };
|
|
43
|
+
/** The source graph exactly as the generated index hands it to `SourceRepository.merge`. */
|
|
44
|
+
var emittedGraph = function (artifact) {
|
|
45
|
+
var literal = artifact.match(/^const sourceGraph = (".*");$/m);
|
|
46
|
+
if (!literal) {
|
|
47
|
+
throw new Error('generated index carries no serialized source graph');
|
|
48
|
+
}
|
|
49
|
+
var serialized = JSON.parse(literal[1]);
|
|
50
|
+
return util_1.graphSerializer.deserialize(serialized.replace(/\\'/g, "'"));
|
|
51
|
+
};
|
|
52
|
+
describe.each(ARTIFACTS)('the qualified name SourceRecordLoader in %s', function (relativePath) {
|
|
53
|
+
var artifact = readArtifact(relativePath);
|
|
54
|
+
var graph = emittedGraph(artifact);
|
|
55
|
+
it('names exactly one declaration of this package: the interface declarations implement', function () {
|
|
56
|
+
var _a;
|
|
57
|
+
var qualifiedNames = graph.nodes();
|
|
58
|
+
var declarations = qualifiedNames
|
|
59
|
+
.map(function (qualifiedName) { return graph.node(qualifiedName); })
|
|
60
|
+
.filter(function (node) { return (node === null || node === void 0 ? void 0 : node.packageName) === '@proteinjs/db' && node.name === 'SourceRecordLoader'; });
|
|
61
|
+
expect(declarations).toHaveLength(1);
|
|
62
|
+
expect(declarations[0]).toMatchObject({
|
|
63
|
+
qualifiedName: QUALIFIED_NAME,
|
|
64
|
+
sourceType: reflection_1.SourceType.interface,
|
|
65
|
+
filePath: 'src/source/SourceRecord.ts',
|
|
66
|
+
});
|
|
67
|
+
var parents = (_a = graph.outEdges(QUALIFIED_NAME)) !== null && _a !== void 0 ? _a : [];
|
|
68
|
+
expect(parents.map(function (edge) { return [edge.w, graph.edge(edge)]; })).toEqual([
|
|
69
|
+
['@proteinjs/reflection/Loadable', 'extends interface'],
|
|
70
|
+
]);
|
|
71
|
+
});
|
|
72
|
+
it('links no runtime value under the name (an interface has none)', function () {
|
|
73
|
+
var _a;
|
|
74
|
+
var linkedNames = ((_a = artifact.match(/^\t'[^']+': /gm)) !== null && _a !== void 0 ? _a : []).map(function (line) { return line.slice(2, -3); });
|
|
75
|
+
expect(linkedNames).toContain('@proteinjs/db/MigrationRunner');
|
|
76
|
+
expect(linkedNames).not.toContain(QUALIFIED_NAME);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=SourceRecordLoaderQualifiedName.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceRecordLoaderQualifiedName.test.js","sourceRoot":"","sources":["../../test/SourceRecordLoaderQualifiedName.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceRecordSyncRunner.test.d.ts","sourceRoot":"","sources":["../../test/SourceRecordSyncRunner.test.ts"],"names":[],"mappings":""}
|
|
@@ -47,9 +47,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
var
|
|
51
|
-
var internals = function () { return new
|
|
52
|
-
describe('
|
|
50
|
+
var SourceRecordSyncRunner_1 = require("../src/source/SourceRecordSyncRunner");
|
|
51
|
+
var internals = function () { return new SourceRecordSyncRunner_1.SourceRecordSyncRunner(); };
|
|
52
|
+
describe('SourceRecordSyncRunner.canonicalStringify', function () {
|
|
53
53
|
it('produces the same string for objects with different key orders', function () {
|
|
54
54
|
var loader = internals();
|
|
55
55
|
var a = { foo: 1, bar: 2, baz: 3 };
|
|
@@ -73,7 +73,7 @@ describe('SourceRecordLoader.canonicalStringify', function () {
|
|
|
73
73
|
expect(loader.canonicalStringify(null)).toBe('null');
|
|
74
74
|
});
|
|
75
75
|
});
|
|
76
|
-
describe('
|
|
76
|
+
describe('SourceRecordSyncRunner.findMismatchPath', function () {
|
|
77
77
|
describe('object comparison', function () {
|
|
78
78
|
it('returns null for identical objects', function () {
|
|
79
79
|
var loader = internals();
|
|
@@ -170,12 +170,12 @@ describe('SourceRecordLoader.findMismatchPath', function () {
|
|
|
170
170
|
* rewrites a row (bumping `updated`). The ownership stamps ride the declared record, so the
|
|
171
171
|
* comparison must know which of them mean "the definition changed" and which are bookkeeping.
|
|
172
172
|
*/
|
|
173
|
-
describe('
|
|
173
|
+
describe('SourceRecordSyncRunner.hasChanges — stamp hygiene on the migration ledger', function () {
|
|
174
174
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
175
175
|
var MigrationTable = require('../src/tables/MigrationTable').MigrationTable;
|
|
176
176
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
177
177
|
var moment = require('moment');
|
|
178
|
-
var loader = function () { return new
|
|
178
|
+
var loader = function () { return new SourceRecordSyncRunner_1.SourceRecordSyncRunner(); };
|
|
179
179
|
var table = new MigrationTable();
|
|
180
180
|
/** What a build declares for a migration (the run function rides along, as it does at boot). */
|
|
181
181
|
var declared = function (overrides) {
|
|
@@ -269,4 +269,60 @@ describe('getSourceRecordLoaders — declaration identity', function () {
|
|
|
269
269
|
});
|
|
270
270
|
});
|
|
271
271
|
});
|
|
272
|
-
|
|
272
|
+
/**
|
|
273
|
+
* The version a booting server stamps on the records its OWN package declares. The loader
|
|
274
|
+
* resolves each declaring package by name from the process cwd — cwd's node_modules chain — and
|
|
275
|
+
* the package cwd IS never sits in that chain, so the server's own records used to sync with no
|
|
276
|
+
* version (and between two builds sharing a database, the last to boot won). The fixture is a
|
|
277
|
+
* server package in its own folder with no `exports` field, booted from that folder.
|
|
278
|
+
*/
|
|
279
|
+
describe("SourceRecordSyncRunner.resolveSourceVersion — the booting package's own version", function () {
|
|
280
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
281
|
+
var fs = require('fs');
|
|
282
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
283
|
+
var os = require('os');
|
|
284
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
285
|
+
var path = require('path');
|
|
286
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
287
|
+
var Logger = require('@proteinjs/logger').Logger;
|
|
288
|
+
var resolveSourceVersion = function (source) {
|
|
289
|
+
return new SourceRecordSyncRunner_1.SourceRecordSyncRunner().resolveSourceVersion(source);
|
|
290
|
+
};
|
|
291
|
+
var writePackage = function (directory, packageJson) {
|
|
292
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
293
|
+
fs.writeFileSync(path.join(directory, 'package.json'), JSON.stringify(packageJson));
|
|
294
|
+
fs.writeFileSync(path.join(directory, 'index.js'), 'module.exports = {};\n');
|
|
295
|
+
};
|
|
296
|
+
var serverDirectory;
|
|
297
|
+
var bootDirectory;
|
|
298
|
+
beforeEach(function () {
|
|
299
|
+
serverDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'source-version-server-'));
|
|
300
|
+
writePackage(serverDirectory, { name: '@fixture-scope/booting-server', version: '4.5.6', main: 'index.js' });
|
|
301
|
+
writePackage(path.join(serverDirectory, 'node_modules', '@fixture-scope', 'declaring-dependency'), {
|
|
302
|
+
name: '@fixture-scope/declaring-dependency',
|
|
303
|
+
version: '7.8.9',
|
|
304
|
+
main: 'index.js',
|
|
305
|
+
});
|
|
306
|
+
bootDirectory = process.cwd();
|
|
307
|
+
process.chdir(serverDirectory);
|
|
308
|
+
});
|
|
309
|
+
afterEach(function () {
|
|
310
|
+
process.chdir(bootDirectory);
|
|
311
|
+
fs.rmSync(serverDirectory, { recursive: true, force: true });
|
|
312
|
+
jest.restoreAllMocks();
|
|
313
|
+
});
|
|
314
|
+
it('stamps the booting package with the version in its own package.json', function () {
|
|
315
|
+
var warn = jest.spyOn(Logger.prototype, 'warn');
|
|
316
|
+
expect(resolveSourceVersion('@fixture-scope/booting-server')).toBe('4.5.6');
|
|
317
|
+
expect(warn).not.toHaveBeenCalled();
|
|
318
|
+
});
|
|
319
|
+
it("resolves other packages from cwd's dependencies, and warns when neither road resolves", function () {
|
|
320
|
+
var warn = jest.spyOn(Logger.prototype, 'warn');
|
|
321
|
+
expect(resolveSourceVersion('@fixture-scope/declaring-dependency')).toBe('7.8.9');
|
|
322
|
+
expect(warn).not.toHaveBeenCalled();
|
|
323
|
+
expect(resolveSourceVersion('@fixture-scope/not-installed')).toBeUndefined();
|
|
324
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
325
|
+
expect(warn.mock.calls[0][0].message).toContain("Could not resolve a version for source package '@fixture-scope/not-installed'");
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
//# sourceMappingURL=SourceRecordSyncRunner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceRecordSyncRunner.test.js","sourceRoot":"","sources":["../../test/SourceRecordSyncRunner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableManagerCreateOrder.test.d.ts","sourceRoot":"","sources":["../../test/TableManagerCreateOrder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// TableManager first: it loads the Table/Record/Columns module cycle from its settled entry point.
|
|
4
|
+
var TableManager_1 = require("../src/schema/TableManager");
|
|
5
|
+
var Columns_1 = require("../src/Columns");
|
|
6
|
+
var tableManager = function () {
|
|
7
|
+
return new TableManager_1.TableManager({}, {}, {}, {});
|
|
8
|
+
};
|
|
9
|
+
/** A table named `name` with one foreign-key column per entry in `references`. */
|
|
10
|
+
var table = function (name) {
|
|
11
|
+
var references = [];
|
|
12
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
13
|
+
references[_i - 1] = arguments[_i];
|
|
14
|
+
}
|
|
15
|
+
var columns = { id: new Columns_1.StringColumn('id') };
|
|
16
|
+
references.forEach(function (referencedTable, index) {
|
|
17
|
+
columns["ref".concat(index)] = new Columns_1.StringColumn("ref_".concat(index), { references: { table: referencedTable } });
|
|
18
|
+
});
|
|
19
|
+
return { name: name, columns: columns, indexes: [] };
|
|
20
|
+
};
|
|
21
|
+
var names = function (tables) { return tables.map(function (each) { return each.name; }); };
|
|
22
|
+
describe('TableManager — the order absent tables are created in', function () {
|
|
23
|
+
it('creates a referenced table before the table enumerated ahead of it that references it', function () {
|
|
24
|
+
expect(names(tableManager().orderByReferences([table('child', 'parent'), table('parent')]))).toEqual([
|
|
25
|
+
'parent',
|
|
26
|
+
'child',
|
|
27
|
+
]);
|
|
28
|
+
});
|
|
29
|
+
it('groups by rank and keeps the given order within a rank, so the output is deterministic', function () {
|
|
30
|
+
var ordered = tableManager().orderByReferences([
|
|
31
|
+
table('comment', 'post', 'account'),
|
|
32
|
+
table('post', 'account'),
|
|
33
|
+
table('reaction', 'account'),
|
|
34
|
+
table('account'),
|
|
35
|
+
table('tag'),
|
|
36
|
+
]);
|
|
37
|
+
// rank 0: account, tag (given order) · rank 1: post, reaction (given order) · rank 2: comment
|
|
38
|
+
expect(names(ordered)).toEqual(['account', 'tag', 'post', 'reaction', 'comment']);
|
|
39
|
+
});
|
|
40
|
+
it('allows a table to reference itself', function () {
|
|
41
|
+
expect(names(tableManager().orderByReferences([table('node', 'node'), table('leaf', 'node')]))).toEqual([
|
|
42
|
+
'node',
|
|
43
|
+
'leaf',
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
it('ignores a reference to a table outside the set (already created, or not registered)', function () {
|
|
47
|
+
expect(names(tableManager().orderByReferences([table('late', 'existing'), table('early')]))).toEqual([
|
|
48
|
+
'late',
|
|
49
|
+
'early',
|
|
50
|
+
]);
|
|
51
|
+
});
|
|
52
|
+
it('refuses a reference cycle, naming the cycle and every table it blocks', function () {
|
|
53
|
+
var cyclic = function () {
|
|
54
|
+
return tableManager().orderByReferences([
|
|
55
|
+
table('free'),
|
|
56
|
+
table('downstream', 'second'),
|
|
57
|
+
table('first', 'third'),
|
|
58
|
+
table('second', 'first'),
|
|
59
|
+
table('third', 'second'),
|
|
60
|
+
]);
|
|
61
|
+
};
|
|
62
|
+
expect(cyclic).toThrow('foreign keys form a cycle: second -> first -> third -> second');
|
|
63
|
+
expect(cyclic).toThrow('Tables it blocks: downstream, first, second, third');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=TableManagerCreateOrder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableManagerCreateOrder.test.js","sourceRoot":"","sources":["../../test/TableManagerCreateOrder.test.ts"],"names":[],"mappings":";;AAAA,mGAAmG;AACnG,2DAA0D;AAE1D,0CAA8C;AAY9C,IAAM,YAAY,GAAG;IACnB,OAAA,IAAI,2BAAY,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS,EAAE,EAAS,CAAoC;AAA/F,CAA+F,CAAC;AAElG,kFAAkF;AAClF,IAAM,KAAK,GAAG,UAAC,IAAY;IAAE,oBAAuB;SAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;QAAvB,mCAAuB;;IAClD,IAAM,OAAO,GAAyC,EAAE,EAAE,EAAE,IAAI,sBAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACrF,UAAU,CAAC,OAAO,CAAC,UAAC,eAAe,EAAE,KAAK;QACxC,OAAO,CAAC,aAAM,KAAK,CAAE,CAAC,GAAG,IAAI,sBAAY,CAAC,cAAO,KAAK,CAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAE,EAA2B,CAAC;AACjE,CAAC,CAAC;AAEF,IAAM,KAAK,GAAG,UAAC,MAAoB,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,IAAI,EAAT,CAAS,CAAC,EAA/B,CAA+B,CAAC;AAExE,QAAQ,CAAC,uDAAuD,EAAE;IAChE,EAAE,CAAC,uFAAuF,EAAE;QAC1F,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACnG,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE;QAC3F,IAAM,OAAO,GAAG,YAAY,EAAE,CAAC,iBAAiB,CAAC;YAC/C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;YACnC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;YACxB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;YAC5B,KAAK,CAAC,SAAS,CAAC;YAChB,KAAK,CAAC,KAAK,CAAC;SACb,CAAC,CAAC;QAEH,8FAA8F;QAC9F,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACtG,MAAM;YACN,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE;QACxF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACnG,MAAM;YACN,OAAO;SACR,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE;QAC1E,IAAM,MAAM,GAAG;YACb,OAAA,YAAY,EAAE,CAAC,iBAAiB,CAAC;gBAC/B,KAAK,CAAC,MAAM,CAAC;gBACb,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;gBAC7B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;gBACvB,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACxB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;aACzB,CAAC;QANF,CAME,CAAC;QAEL,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceRecordSyncTests.d.ts","sourceRoot":"","sources":["../../../test/reusable/SourceRecordSyncTests.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,QAAQ,EAKR,KAAK,EAKN,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"SourceRecordSyncTests.d.ts","sourceRoot":"","sources":["../../../test/reusable/SourceRecordSyncTests.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,QAAQ,EAKR,KAAK,EAKN,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAoCtE;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,WACxB,QAAQ,6BACW,gCAAgC,qBACxC,MAAM,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,eA27BhD,CAAC"}
|
|
@@ -65,9 +65,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
65
65
|
exports.sourceRecordSyncTests = void 0;
|
|
66
66
|
var reflection_1 = require("@proteinjs/reflection");
|
|
67
67
|
var db_1 = require("@proteinjs/db");
|
|
68
|
-
|
|
69
|
-
// interface exported from the package index, so it is not index-exported.
|
|
70
|
-
var SourceRecordLoader_1 = require("../../src/source/SourceRecordLoader");
|
|
68
|
+
var SourceRecordSyncRunner_1 = require("../../src/source/SourceRecordSyncRunner");
|
|
71
69
|
var TableWatcherRunner_1 = require("../../src/TableWatcherRunner");
|
|
72
70
|
var DbTestEnvironment_1 = require("../util/DbTestEnvironment");
|
|
73
71
|
var sourceRecordSyncTestTables_1 = require("../util/tables/sourceRecordSyncTestTables");
|
|
@@ -129,7 +127,7 @@ var sourceRecordSyncTests = function (driver, transactionContextFactory, dropTab
|
|
|
129
127
|
packageName: declaration.source,
|
|
130
128
|
object: { table: declaration.table, record: declaration.record },
|
|
131
129
|
}); });
|
|
132
|
-
loader = new
|
|
130
|
+
loader = new SourceRecordSyncRunner_1.SourceRecordSyncRunner();
|
|
133
131
|
loader.resolveSourceVersion = function (source) {
|
|
134
132
|
return Object.prototype.hasOwnProperty.call(versions, source) ? versions[source] : undefined;
|
|
135
133
|
};
|
|
@@ -1443,7 +1441,7 @@ var sourceRecordSyncTests = function (driver, transactionContextFactory, dropTab
|
|
|
1443
1441
|
test("the version resolver reads the declaring package's real package.json", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
1444
1442
|
var internals;
|
|
1445
1443
|
return __generator(this, function (_a) {
|
|
1446
|
-
internals = new
|
|
1444
|
+
internals = new SourceRecordSyncRunner_1.SourceRecordSyncRunner();
|
|
1447
1445
|
// A real dependency of this build resolves to its actual version (entry resolution +
|
|
1448
1446
|
// walk-up works for exports-mapped packages, where `<pkg>/package.json` is not requireable).
|
|
1449
1447
|
expect(internals.resolveSourceVersion('@proteinjs/db-query')).toMatch(/^\d+\.\d+\.\d+/);
|