@proteinjs/db 1.30.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.d.ts.map +1 -1
- package/dist/generated/test/index.js +3 -1
- package/dist/generated/test/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/CursorWindowPager.d.ts +74 -0
- package/dist/src/CursorWindowPager.d.ts.map +1 -0
- package/dist/src/CursorWindowPager.js +178 -0
- package/dist/src/CursorWindowPager.js.map +1 -0
- package/dist/src/Db.d.ts +20 -0
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +10 -0
- package/dist/src/Db.js.map +1 -1
- package/dist/src/MigrationRunner.d.ts +58 -1
- package/dist/src/MigrationRunner.d.ts.map +1 -1
- package/dist/src/MigrationRunner.js +108 -2
- package/dist/src/MigrationRunner.js.map +1 -1
- package/dist/src/RecordIterator.d.ts +16 -6
- package/dist/src/RecordIterator.d.ts.map +1 -1
- package/dist/src/RecordIterator.js +50 -37
- package/dist/src/RecordIterator.js.map +1 -1
- package/dist/src/schema/SchemaOperations.d.ts +7 -1
- package/dist/src/schema/SchemaOperations.d.ts.map +1 -1
- package/dist/src/schema/TableManager.d.ts +8 -0
- package/dist/src/schema/TableManager.d.ts.map +1 -1
- package/dist/src/schema/TableManager.js +71 -23
- package/dist/src/schema/TableManager.js.map +1 -1
- package/dist/src/tables/MigrationTable.d.ts +10 -0
- package/dist/src/tables/MigrationTable.d.ts.map +1 -1
- package/dist/src/tables/MigrationTable.js +1 -0
- package/dist/src/tables/MigrationTable.js.map +1 -1
- package/dist/test/CursorWindowPager.test.d.ts +2 -0
- package/dist/test/CursorWindowPager.test.d.ts.map +1 -0
- package/dist/test/CursorWindowPager.test.js +213 -0
- package/dist/test/CursorWindowPager.test.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -0
- package/dist/test/index.js.map +1 -1
- package/dist/test/reusable/RecordIteratorTests.d.ts +13 -0
- package/dist/test/reusable/RecordIteratorTests.d.ts.map +1 -0
- package/dist/test/reusable/RecordIteratorTests.js +448 -0
- package/dist/test/reusable/RecordIteratorTests.js.map +1 -0
- package/dist/test/util/DbTestEnvironment.d.ts.map +1 -1
- package/dist/test/util/DbTestEnvironment.js +2 -1
- package/dist/test/util/DbTestEnvironment.js.map +1 -1
- package/dist/test/util/tables/recordIteratorTestTables.d.ts +25 -0
- package/dist/test/util/tables/recordIteratorTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/recordIteratorTestTables.js +38 -0
- package/dist/test/util/tables/recordIteratorTestTables.js.map +1 -0
- package/generated/index.ts +1 -1
- package/generated/test/index.ts +3 -1
- package/index.ts +1 -0
- package/package.json +3 -3
- package/src/CursorWindowPager.ts +153 -0
- package/src/Db.ts +18 -0
- package/src/MigrationRunner.ts +114 -2
- package/src/RecordIterator.ts +34 -24
- package/src/schema/SchemaOperations.ts +7 -1
- package/src/schema/TableManager.ts +36 -8
- package/src/tables/MigrationTable.ts +11 -1
- package/test/CursorWindowPager.test.ts +185 -0
- package/test/index.ts +2 -0
- package/test/reusable/RecordIteratorTests.ts +190 -0
- package/test/util/DbTestEnvironment.ts +2 -0
- package/test/util/tables/recordIteratorTestTables.ts +23 -0
|
@@ -42,6 +42,7 @@ var Db_1 = require("./Db");
|
|
|
42
42
|
var SourceRecordRepo_1 = require("./source/SourceRecordRepo");
|
|
43
43
|
var MigrationRunnerService_1 = require("./services/MigrationRunnerService");
|
|
44
44
|
var MigrationTable_1 = require("./tables/MigrationTable");
|
|
45
|
+
var QueryBuilderFactory_1 = require("./QueryBuilderFactory");
|
|
45
46
|
var logger_1 = require("@proteinjs/logger");
|
|
46
47
|
var getMigrationRunner = function () {
|
|
47
48
|
return typeof self === 'undefined' ? new MigrationRunner() : (0, MigrationRunnerService_1.getMigrationRunnerService)();
|
|
@@ -81,6 +82,9 @@ var MigrationRunner = /** @class */ (function () {
|
|
|
81
82
|
*
|
|
82
83
|
* 'ensure' = idempotent: a row already in 'success' status is logged and skipped. A prior
|
|
83
84
|
* 'failure' row is retried by design — a fixed migration should run on the next boot.
|
|
85
|
+
*
|
|
86
|
+
* Returns the migration with its final run state (the skipped row, or the run's outcome) —
|
|
87
|
+
* the series runner ({@link runPendingMigrations}) gates on it.
|
|
84
88
|
*/
|
|
85
89
|
MigrationRunner.prototype.ensureMigrationRun = function (id) {
|
|
86
90
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -95,13 +99,115 @@ var MigrationRunner = /** @class */ (function () {
|
|
|
95
99
|
migrationRow = _a.sent();
|
|
96
100
|
if ((migrationRow === null || migrationRow === void 0 ? void 0 : migrationRow.status) === 'success') {
|
|
97
101
|
this.logger.info({ message: "Migration (".concat(id, ") already applied, skipping") });
|
|
98
|
-
return [2 /*return
|
|
102
|
+
return [2 /*return*/, migrationRow];
|
|
99
103
|
}
|
|
100
104
|
migration = this.resolveMigration(migrationTable, id);
|
|
101
105
|
return [4 /*yield*/, this.runAndRecord(migrationTable, migration, function () { return db; })];
|
|
102
106
|
case 2:
|
|
103
107
|
_a.sent();
|
|
104
|
-
return [2 /*return
|
|
108
|
+
return [2 /*return*/, migration];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Deploy-path API (plans/POST_RELEASE_QUEUE.md 27f): the deploy pipeline's migration Job calls
|
|
115
|
+
* this AFTER `new Db().init()` (schema sync + source-record sync — every source-declared
|
|
116
|
+
* migration has a ledger row by then) and BEFORE the rollout advances. Pod boot never calls it:
|
|
117
|
+
* boot stays migration-free (the startupProbe invariant — DbInitStartupTask is schema sync and
|
|
118
|
+
* source records only).
|
|
119
|
+
*
|
|
120
|
+
* Discovery + order: the migration LEDGER (the migration table) is the authority. Rows run in
|
|
121
|
+
* SERIES, oldest-first by the row's `created` (id tiebreak) — a migration that shipped in an
|
|
122
|
+
* earlier release always runs before a later one. Never parallel.
|
|
123
|
+
*
|
|
124
|
+
* Policy:
|
|
125
|
+
* - `manual: true` (the source record's declaration) is EXCLUDED — the explicit non-automatable
|
|
126
|
+
* class keeps the Migrations-page flow ({@link Migration.manual}).
|
|
127
|
+
* - rows already in 'success' are skipped; any other status is pending — including 'running'
|
|
128
|
+
* (a crashed earlier Job): {@link ensureMigrationRun} re-runs it.
|
|
129
|
+
* - rows with no source record are history (a loader deleted after its run) — skipped,
|
|
130
|
+
* reported as `unresolved`.
|
|
131
|
+
* - the FIRST failure STOPS the series (later migrations may build on earlier ones). The
|
|
132
|
+
* caller exits non-zero, the Job fails, the rollout does not advance.
|
|
133
|
+
*
|
|
134
|
+
* EXPAND-CONTRACT INVARIANT (documented at this seam on purpose): every automated migration —
|
|
135
|
+
* and the schema sync that fronts it — must be backward-compatible with the STILL-RUNNING old
|
|
136
|
+
* release, because the old pods keep serving while this runs and keep serving indefinitely if
|
|
137
|
+
* it fails. "Roll back" = do not advance the code; DDL and applied migrations are never
|
|
138
|
+
* un-applied (Spanner DDL is not transactional-reversible). Contractions (drops, rewrites that
|
|
139
|
+
* break the old reader) belong in the `manual` class, run only after every consumer of the old
|
|
140
|
+
* shape is gone.
|
|
141
|
+
*/
|
|
142
|
+
MigrationRunner.prototype.runPendingMigrations = function () {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
144
|
+
var migrationTable, db, qb, ledger, summary, sourceRecordRepo, pending, _i, ledger_1, row, source, i, outcome;
|
|
145
|
+
return __generator(this, function (_a) {
|
|
146
|
+
switch (_a.label) {
|
|
147
|
+
case 0:
|
|
148
|
+
migrationTable = new MigrationTable_1.MigrationTable();
|
|
149
|
+
db = (0, Db_1.getDbAsSystem)();
|
|
150
|
+
qb = new QueryBuilderFactory_1.QueryBuilderFactory().createQueryBuilder(migrationTable).sort([
|
|
151
|
+
{ field: 'created', desc: false },
|
|
152
|
+
{ field: 'id', desc: false },
|
|
153
|
+
]);
|
|
154
|
+
return [4 /*yield*/, db.query(migrationTable, qb)];
|
|
155
|
+
case 1:
|
|
156
|
+
ledger = _a.sent();
|
|
157
|
+
summary = {
|
|
158
|
+
applied: [],
|
|
159
|
+
skippedManual: [],
|
|
160
|
+
alreadyApplied: [],
|
|
161
|
+
unresolved: [],
|
|
162
|
+
notAttempted: [],
|
|
163
|
+
};
|
|
164
|
+
sourceRecordRepo = new SourceRecordRepo_1.SourceRecordRepo();
|
|
165
|
+
pending = [];
|
|
166
|
+
for (_i = 0, ledger_1 = ledger; _i < ledger_1.length; _i++) {
|
|
167
|
+
row = ledger_1[_i];
|
|
168
|
+
source = sourceRecordRepo.getSourceRecord(migrationTable.name, row.id);
|
|
169
|
+
if (!source) {
|
|
170
|
+
summary.unresolved.push(row.id);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (source.manual) {
|
|
174
|
+
summary.skippedManual.push(row.id);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (row.status === 'success') {
|
|
178
|
+
summary.alreadyApplied.push(row.id);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
pending.push(row);
|
|
182
|
+
}
|
|
183
|
+
this.logger.info({
|
|
184
|
+
message: "Running ".concat(pending.length, " pending migration").concat(pending.length === 1 ? '' : 's', " in series, oldest-first"),
|
|
185
|
+
obj: { pending: pending.map(function (row) { return row.id; }), skippedManual: summary.skippedManual },
|
|
186
|
+
});
|
|
187
|
+
i = 0;
|
|
188
|
+
_a.label = 2;
|
|
189
|
+
case 2:
|
|
190
|
+
if (!(i < pending.length)) return [3 /*break*/, 5];
|
|
191
|
+
return [4 /*yield*/, this.ensureMigrationRun(pending[i].id)];
|
|
192
|
+
case 3:
|
|
193
|
+
outcome = _a.sent();
|
|
194
|
+
if (outcome.status === 'success') {
|
|
195
|
+
summary.applied.push(outcome.id);
|
|
196
|
+
return [3 /*break*/, 4];
|
|
197
|
+
}
|
|
198
|
+
summary.failed = {
|
|
199
|
+
id: outcome.id,
|
|
200
|
+
description: outcome.description,
|
|
201
|
+
failureMessage: outcome.failureMessage,
|
|
202
|
+
};
|
|
203
|
+
summary.notAttempted = pending.slice(i + 1).map(function (row) { return row.id; });
|
|
204
|
+
return [3 /*break*/, 5];
|
|
205
|
+
case 4:
|
|
206
|
+
i++;
|
|
207
|
+
return [3 /*break*/, 2];
|
|
208
|
+
case 5:
|
|
209
|
+
this.logger.info({ message: "Migration series finished", obj: summary });
|
|
210
|
+
return [2 /*return*/, summary];
|
|
105
211
|
}
|
|
106
212
|
});
|
|
107
213
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationRunner.js","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA8C;AAC9C,2BAAgD;AAEhD,8DAA6D;AAC7D,4EAAsG;AACtG,0DAAoE;
|
|
1
|
+
{"version":3,"file":"MigrationRunner.js","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,23 @@ import { Db } from './Db';
|
|
|
2
2
|
import { Table } from './Table';
|
|
3
3
|
import { Record } from './Record';
|
|
4
4
|
import { Query } from './services/DbService';
|
|
5
|
+
/**
|
|
6
|
+
* Iterate a table query in cursor-anchored windows (`CursorWindowPager`), `windowSize` rows
|
|
7
|
+
* per query. Cursor windows frame on the last row served instead of a positional offset, so
|
|
8
|
+
* rows inserted or deleted while iterating can never skip or duplicate rows — every row that
|
|
9
|
+
* exists throughout the iteration is yielded exactly once.
|
|
10
|
+
*
|
|
11
|
+
* Ordering: the sort criteria on the consumer's query builder become the cursor axes, with a
|
|
12
|
+
* unique `id` tiebreak appended (ties can't skip across window boundaries); with no sort the
|
|
13
|
+
* iteration runs in plain `id` order. Sort axes should be non-null columns — a window whose
|
|
14
|
+
* tail carries a NULL sort value ends the iteration (a null can't anchor a continuation).
|
|
15
|
+
*
|
|
16
|
+
* The caller's query builder is never mutated: every window builds on a fresh copy.
|
|
17
|
+
*/
|
|
5
18
|
export declare class RecordIterator<T extends Record> implements AsyncIterable<T> {
|
|
6
|
-
private
|
|
7
|
-
private
|
|
8
|
-
|
|
9
|
-
private pageSize;
|
|
10
|
-
private currentPage;
|
|
11
|
-
constructor(table: Table<T>, query: Query<T>, pageSize?: number, db?: Db);
|
|
19
|
+
private windowSize;
|
|
20
|
+
private pager;
|
|
21
|
+
constructor(table: Table<T>, query: Query<T>, windowSize?: number, db?: Db);
|
|
12
22
|
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
13
23
|
}
|
|
14
24
|
//# sourceMappingURL=RecordIterator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordIterator.d.ts","sourceRoot":"","sources":["../../src/RecordIterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"RecordIterator.d.ts","sourceRoot":"","sources":["../../src/RecordIterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAK7C;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAMrE,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,KAAK,CAAuB;gBAGlC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACP,UAAU,GAAE,MAAW,EAC/B,EAAE,CAAC,EAAE,EAAE;IAUF,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;CAelD"}
|
|
@@ -40,54 +40,67 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
|
|
|
40
40
|
};
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.RecordIterator = void 0;
|
|
43
|
-
var Db_1 = require("./Db");
|
|
44
43
|
var QueryBuilderFactory_1 = require("./QueryBuilderFactory");
|
|
44
|
+
var db_query_1 = require("@proteinjs/db-query");
|
|
45
|
+
var CursorWindowPager_1 = require("./CursorWindowPager");
|
|
46
|
+
/**
|
|
47
|
+
* Iterate a table query in cursor-anchored windows (`CursorWindowPager`), `windowSize` rows
|
|
48
|
+
* per query. Cursor windows frame on the last row served instead of a positional offset, so
|
|
49
|
+
* rows inserted or deleted while iterating can never skip or duplicate rows — every row that
|
|
50
|
+
* exists throughout the iteration is yielded exactly once.
|
|
51
|
+
*
|
|
52
|
+
* Ordering: the sort criteria on the consumer's query builder become the cursor axes, with a
|
|
53
|
+
* unique `id` tiebreak appended (ties can't skip across window boundaries); with no sort the
|
|
54
|
+
* iteration runs in plain `id` order. Sort axes should be non-null columns — a window whose
|
|
55
|
+
* tail carries a NULL sort value ends the iteration (a null can't anchor a continuation).
|
|
56
|
+
*
|
|
57
|
+
* The caller's query builder is never mutated: every window builds on a fresh copy.
|
|
58
|
+
*/
|
|
45
59
|
var RecordIterator = /** @class */ (function () {
|
|
46
|
-
function RecordIterator(table, query,
|
|
47
|
-
if (
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
function RecordIterator(table, query, windowSize, db) {
|
|
61
|
+
if (windowSize === void 0) { windowSize = 10; }
|
|
62
|
+
this.windowSize = windowSize;
|
|
63
|
+
// A fresh copy of the consumer's query; its sort criteria lift off the base (the pager
|
|
64
|
+
// owns ordering — cursor axes and ORDER BY have to agree) and the conditions-only base
|
|
65
|
+
// seeds every window's fresh build.
|
|
66
|
+
var base = new QueryBuilderFactory_1.QueryBuilderFactory().createQueryBuilder(table, query);
|
|
67
|
+
var sort = base.removeSortCriteria();
|
|
68
|
+
this.pager = new CursorWindowPager_1.CursorWindowPager(table, function () { return db_query_1.QueryBuilder.fromQueryBuilder(base, table.name); }, sort, { db: db });
|
|
53
69
|
}
|
|
54
70
|
RecordIterator.prototype[Symbol.asyncIterator] = function () {
|
|
55
71
|
return __asyncGenerator(this, arguments, function _a() {
|
|
56
|
-
var
|
|
57
|
-
return __generator(this, function (
|
|
58
|
-
switch (
|
|
72
|
+
var anchor, window_1, _i, _b, row;
|
|
73
|
+
return __generator(this, function (_c) {
|
|
74
|
+
switch (_c.label) {
|
|
59
75
|
case 0:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.query.paginate(pagination);
|
|
63
|
-
return [4 /*yield*/, __await(this.db.query(this.table, this.query))];
|
|
76
|
+
anchor = null;
|
|
77
|
+
_c.label = 1;
|
|
64
78
|
case 1:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
if (!true) return [3 /*break*/, 10];
|
|
80
|
+
return [4 /*yield*/, __await(this.pager.loadWindow(anchor, this.windowSize))];
|
|
81
|
+
case 2:
|
|
82
|
+
window_1 = _c.sent();
|
|
83
|
+
_i = 0, _b = window_1.rows;
|
|
84
|
+
_c.label = 3;
|
|
69
85
|
case 3:
|
|
70
|
-
_i
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
if (!(_i < _b.length)) return [3 /*break*/, 7];
|
|
87
|
+
row = _b[_i];
|
|
88
|
+
return [4 /*yield*/, __await(row)];
|
|
89
|
+
case 4: return [4 /*yield*/, _c.sent()];
|
|
90
|
+
case 5:
|
|
91
|
+
_c.sent();
|
|
92
|
+
_c.label = 6;
|
|
77
93
|
case 6:
|
|
78
|
-
_b.sent();
|
|
79
|
-
_b.label = 7;
|
|
80
|
-
case 7:
|
|
81
94
|
_i++;
|
|
82
|
-
return [3 /*break*/,
|
|
83
|
-
case
|
|
84
|
-
if (
|
|
95
|
+
return [3 /*break*/, 3];
|
|
96
|
+
case 7:
|
|
97
|
+
if (!!window_1.nextAnchor) return [3 /*break*/, 9];
|
|
85
98
|
return [4 /*yield*/, __await(void 0)];
|
|
86
|
-
case
|
|
87
|
-
case
|
|
88
|
-
|
|
89
|
-
return [3 /*break*/,
|
|
90
|
-
case
|
|
99
|
+
case 8: return [2 /*return*/, _c.sent()];
|
|
100
|
+
case 9:
|
|
101
|
+
anchor = window_1.nextAnchor;
|
|
102
|
+
return [3 /*break*/, 1];
|
|
103
|
+
case 10: return [2 /*return*/];
|
|
91
104
|
}
|
|
92
105
|
});
|
|
93
106
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordIterator.js","sourceRoot":"","sources":["../../src/RecordIterator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"RecordIterator.js","sourceRoot":"","sources":["../../src/RecordIterator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,6DAA4D;AAC5D,gDAAmD;AACnD,yDAAsE;AAEtE;;;;;;;;;;;;GAYG;AACH;IAGE,wBACE,KAAe,EACf,KAAe,EACP,UAAuB,EAC/B,EAAO;QADC,2BAAA,EAAA,eAAuB;QAAvB,eAAU,GAAV,UAAU,CAAa;QAG/B,uFAAuF;QACvF,uFAAuF;QACvF,oCAAoC;QACpC,IAAM,IAAI,GAAG,IAAI,yCAAmB,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxE,IAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,qCAAiB,CAAI,KAAK,EAAE,cAAM,OAAA,uBAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAA/C,CAA+C,EAAE,IAAI,EAAE,EAAE,EAAE,IAAA,EAAE,CAAC,CAAC;IACpH,CAAC;IAEM,yBAAC,MAAM,CAAC,aAAa,CAAC,GAA7B;;;;;;wBACM,MAAM,GAAwB,IAAI,CAAC;;;6BAChC,IAAI;wBACM,6BAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAA;;wBAA7D,WAAS,SAAoD;8BACtC,EAAX,KAAA,QAAM,CAAC,IAAI;;;6BAAX,CAAA,cAAW,CAAA;wBAAlB,GAAG;qDACN,GAAG;4BAAT,gCAAS;;wBAAT,SAAS,CAAC;;;wBADM,IAAW,CAAA;;;6BAIzB,CAAC,QAAM,CAAC,UAAU,EAAlB,wBAAkB;;4BACpB,iCAAO;;wBAGT,MAAM,GAAG,QAAM,CAAC,UAAU,CAAC;;;;;;KAE9B;IACH,qBAAC;AAAD,CAAC,AAhCD,IAgCC;AAhCY,wCAAc"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { Table } from '../Table';
|
|
2
2
|
export interface SchemaOperations {
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Create every table in `tables`, in the given order. The order is load-bearing: a table whose
|
|
5
|
+
* foreign keys reference another absent table must appear after it. Drivers that support batched
|
|
6
|
+
* DDL (Spanner) apply the whole set as ONE schema-update operation — statements inside a batch
|
|
7
|
+
* apply in order, so the ordering contract is preserved.
|
|
8
|
+
*/
|
|
9
|
+
createTables(tables: Table<any>[]): Promise<void>;
|
|
4
10
|
alterTable(table: Table<any>, changes: TableChanges): Promise<void>;
|
|
5
11
|
}
|
|
6
12
|
interface Index {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaOperations.d.ts","sourceRoot":"","sources":["../../../src/schema/SchemaOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,WAAW,gBAAgB;IAC/B,
|
|
1
|
+
{"version":3,"file":"SchemaOperations.d.ts","sourceRoot":"","sources":["../../../src/schema/SchemaOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,0JAA0J;IAC1J,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,8BAA8B,EAAE,MAAM,EAAE,CAAC;IACzC,mBAAmB,EAAE,UAAU,EAAE,CAAC;IAClC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,oCAAoC,EAAE,MAAM,EAAE,CAAC;IAC/C,kCAAkC,EAAE,MAAM,EAAE,CAAC;IAC7C,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,aAAa,EAAE,KAAK,EAAE,CAAC;CACxB"}
|
|
@@ -12,8 +12,16 @@ export declare class TableManager {
|
|
|
12
12
|
schemaMetadata: SchemaMetadata;
|
|
13
13
|
constructor(dbDriver: DbDriver, columnTypeFactory: ColumnTypeFactory, schemaOperations: SchemaOperations, schemaMetadata?: SchemaMetadata);
|
|
14
14
|
tableExists(table: Table<any>): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Reconcile every registered table with the live schema. Absent tables are created as ONE
|
|
17
|
+
* batch (a single schema-update operation on drivers that support it — the prod-boot win),
|
|
18
|
+
* preserving their registration order so foreign keys to other absent tables resolve; existing
|
|
19
|
+
* tables are altered individually after, so an alter that adds a foreign key to a
|
|
20
|
+
* just-created table sees it live.
|
|
21
|
+
*/
|
|
15
22
|
loadTables(): Promise<void>;
|
|
16
23
|
loadTable(table: Table<any>): Promise<void>;
|
|
24
|
+
private alterTableIfChanged;
|
|
17
25
|
private validateDynamicReferenceColumns;
|
|
18
26
|
private shouldAlterTable;
|
|
19
27
|
private getTableChanges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableManager.d.ts","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;CAC3C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA2F;IAClG,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;gBAGpC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,CAAC,EAAE,cAAc;IAO3B,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"TableManager.d.ts","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;CAC3C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA2F;IAClG,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;gBAGpC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,CAAC,EAAE,cAAc;IAO3B,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAInC;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAYnC,mBAAmB;IASjC,OAAO,CAAC,+BAA+B;IAwDvC,OAAO,CAAC,gBAAgB;YAgBV,eAAe;YA6Ff,kBAAkB;CA8CjC"}
|
|
@@ -60,59 +60,107 @@ var TableManager = /** @class */ (function () {
|
|
|
60
60
|
});
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Reconcile every registered table with the live schema. Absent tables are created as ONE
|
|
65
|
+
* batch (a single schema-update operation on drivers that support it — the prod-boot win),
|
|
66
|
+
* preserving their registration order so foreign keys to other absent tables resolve; existing
|
|
67
|
+
* tables are altered individually after, so an alter that adds a foreign key to a
|
|
68
|
+
* just-created table sees it live.
|
|
69
|
+
*/
|
|
63
70
|
TableManager.prototype.loadTables = function () {
|
|
64
71
|
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
-
var tables, _i, tables_1, table;
|
|
66
|
-
return __generator(this, function (
|
|
67
|
-
switch (
|
|
72
|
+
var tables, absentTables, existingTables, _i, tables_1, table, _a, existingTables_1, table;
|
|
73
|
+
return __generator(this, function (_b) {
|
|
74
|
+
switch (_b.label) {
|
|
68
75
|
case 0:
|
|
69
76
|
tables = (0, Table_1.getTables)();
|
|
77
|
+
absentTables = [];
|
|
78
|
+
existingTables = [];
|
|
70
79
|
_i = 0, tables_1 = tables;
|
|
71
|
-
|
|
80
|
+
_b.label = 1;
|
|
72
81
|
case 1:
|
|
73
82
|
if (!(_i < tables_1.length)) return [3 /*break*/, 4];
|
|
74
83
|
table = tables_1[_i];
|
|
75
|
-
|
|
84
|
+
this.validateDynamicReferenceColumns(table);
|
|
85
|
+
return [4 /*yield*/, this.tableExists(table)];
|
|
76
86
|
case 2:
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
if (_b.sent()) {
|
|
88
|
+
existingTables.push(table);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
absentTables.push(table);
|
|
92
|
+
}
|
|
93
|
+
_b.label = 3;
|
|
79
94
|
case 3:
|
|
80
95
|
_i++;
|
|
81
96
|
return [3 /*break*/, 1];
|
|
82
|
-
case 4:
|
|
97
|
+
case 4:
|
|
98
|
+
if (!(absentTables.length > 0)) return [3 /*break*/, 6];
|
|
99
|
+
this.logger.info({ message: "Creating tables: ".concat(absentTables.map(function (table) { return table.name; }).join(', ')) });
|
|
100
|
+
return [4 /*yield*/, this.schemaOperations.createTables(absentTables)];
|
|
101
|
+
case 5:
|
|
102
|
+
_b.sent();
|
|
103
|
+
this.logger.info({ message: "Finished creating ".concat(absentTables.length, " tables") });
|
|
104
|
+
_b.label = 6;
|
|
105
|
+
case 6:
|
|
106
|
+
_a = 0, existingTables_1 = existingTables;
|
|
107
|
+
_b.label = 7;
|
|
108
|
+
case 7:
|
|
109
|
+
if (!(_a < existingTables_1.length)) return [3 /*break*/, 10];
|
|
110
|
+
table = existingTables_1[_a];
|
|
111
|
+
return [4 /*yield*/, this.alterTableIfChanged(table)];
|
|
112
|
+
case 8:
|
|
113
|
+
_b.sent();
|
|
114
|
+
_b.label = 9;
|
|
115
|
+
case 9:
|
|
116
|
+
_a++;
|
|
117
|
+
return [3 /*break*/, 7];
|
|
118
|
+
case 10: return [2 /*return*/];
|
|
83
119
|
}
|
|
84
120
|
});
|
|
85
121
|
});
|
|
86
122
|
};
|
|
87
123
|
TableManager.prototype.loadTable = function (table) {
|
|
88
124
|
return __awaiter(this, void 0, void 0, function () {
|
|
89
|
-
var tableChanges;
|
|
90
125
|
return __generator(this, function (_a) {
|
|
91
126
|
switch (_a.label) {
|
|
92
127
|
case 0:
|
|
93
128
|
this.validateDynamicReferenceColumns(table);
|
|
94
129
|
return [4 /*yield*/, this.tableExists(table)];
|
|
95
130
|
case 1:
|
|
96
|
-
if (!_a.sent()) return [3 /*break*/,
|
|
97
|
-
return [4 /*yield*/, this.
|
|
131
|
+
if (!_a.sent()) return [3 /*break*/, 3];
|
|
132
|
+
return [4 /*yield*/, this.alterTableIfChanged(table)];
|
|
98
133
|
case 2:
|
|
134
|
+
_a.sent();
|
|
135
|
+
return [3 /*break*/, 5];
|
|
136
|
+
case 3:
|
|
137
|
+
this.logger.info({ message: "Creating table: ".concat(table.name) });
|
|
138
|
+
return [4 /*yield*/, this.schemaOperations.createTables([table])];
|
|
139
|
+
case 4:
|
|
140
|
+
_a.sent();
|
|
141
|
+
this.logger.info({ message: "Finished creating table: ".concat(table.name) });
|
|
142
|
+
_a.label = 5;
|
|
143
|
+
case 5: return [2 /*return*/];
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
TableManager.prototype.alterTableIfChanged = function (table) {
|
|
149
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
150
|
+
var tableChanges;
|
|
151
|
+
return __generator(this, function (_a) {
|
|
152
|
+
switch (_a.label) {
|
|
153
|
+
case 0: return [4 /*yield*/, this.getTableChanges(table)];
|
|
154
|
+
case 1:
|
|
99
155
|
tableChanges = _a.sent();
|
|
100
|
-
if (!this.shouldAlterTable(tableChanges)) return [3 /*break*/,
|
|
156
|
+
if (!this.shouldAlterTable(tableChanges)) return [3 /*break*/, 3];
|
|
101
157
|
this.logger.info({ message: "Altering table: ".concat(table.name) });
|
|
102
158
|
return [4 /*yield*/, this.schemaOperations.alterTable(table, tableChanges)];
|
|
103
|
-
case
|
|
159
|
+
case 2:
|
|
104
160
|
_a.sent();
|
|
105
161
|
this.logger.info({ message: "Finished altering table: ".concat(table.name) });
|
|
106
|
-
_a.label =
|
|
107
|
-
case
|
|
108
|
-
case 5:
|
|
109
|
-
this.logger.info({ message: "Creating table: ".concat(table.name) });
|
|
110
|
-
return [4 /*yield*/, this.schemaOperations.createTable(table)];
|
|
111
|
-
case 6:
|
|
112
|
-
_a.sent();
|
|
113
|
-
this.logger.info({ message: "Finished creating table: ".concat(table.name) });
|
|
114
|
-
_a.label = 7;
|
|
115
|
-
case 7: return [2 /*return*/];
|
|
162
|
+
_a.label = 3;
|
|
163
|
+
case 3: return [2 /*return*/];
|
|
116
164
|
}
|
|
117
165
|
});
|
|
118
166
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableManager.js","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA2C;AAC3C,kCAAoD;AAEpD,mDAAkD;AAIlD,IAAM,SAAS,GAAG,UAAC,GAAW;IAC5B,OAAA,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;AAA5E,CAA4E,CAAC;AAM/E;IAME,sBACE,QAAkB,EAClB,iBAAoC,EACpC,gBAAkC,EAClC,cAA+B;QATzB,WAAM,GAAG,IAAI,eAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAQ,EAAE,CAAC,CAAC;QAWvG,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,+BAAc,CAAC,QAAQ,CAAC,CAAC;IACvF,CAAC;IAEK,kCAAW,GAAjB,UAAkB,KAAiB;;;;4BAC1B,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;4BAAnD,sBAAO,SAA4C,EAAC;;;;KACrD;
|
|
1
|
+
{"version":3,"file":"TableManager.js","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,15 @@ import { Table } from '../Table';
|
|
|
3
3
|
import { SourceRecord } from '../source/SourceRecord';
|
|
4
4
|
export interface Migration extends SourceRecord {
|
|
5
5
|
description: string;
|
|
6
|
+
/**
|
|
7
|
+
* The explicit non-automatable class (plans/POST_RELEASE_QUEUE.md 27f): destructive
|
|
8
|
+
* contractions (column/table drops), long backfills over big tables, data-dependent one-offs.
|
|
9
|
+
* `manual: true` EXCLUDES the migration from the deploy-gated auto-run
|
|
10
|
+
* ({@link MigrationRunner.runPendingMigrations}); it keeps the Migrations-page flow
|
|
11
|
+
* (`runMigration`). Absence of the flag = automated — the invariant lives here, in the
|
|
12
|
+
* schema, not in deploy-pipeline prose.
|
|
13
|
+
*/
|
|
14
|
+
manual?: boolean;
|
|
6
15
|
status?: 'proposed' | 'running' | 'success' | 'failure';
|
|
7
16
|
failureMessage?: string;
|
|
8
17
|
failureStack?: string;
|
|
@@ -28,6 +37,7 @@ export declare class MigrationTable extends Table<Migration> {
|
|
|
28
37
|
isLoadedFromSource: import("../Table").Column<boolean | undefined, any>;
|
|
29
38
|
} & {} & {
|
|
30
39
|
description: import("../Table").Column<string, any>;
|
|
40
|
+
manual: import("../Table").Column<boolean | undefined, any>;
|
|
31
41
|
status: import("../Table").Column<"proposed" | "running" | "success" | "failure" | undefined, any>;
|
|
32
42
|
failureMessage: import("../Table").Column<string | undefined, any>;
|
|
33
43
|
failureStack: import("../Table").Column<string | undefined, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationTable.d.ts","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAA2B,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC3C,IAAI,SAAe;IAC1B;;;;;OAKG;IACI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAGnC;IACK,OAAO
|
|
1
|
+
{"version":3,"file":"MigrationTable.d.ts","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAA2B,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC3C,IAAI,SAAe;IAC1B;;;;;OAKG;IACI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAGnC;IACK,OAAO;;;;;;;;;;;;;;;;;MAUX;IACI,mBAAmB;;;;;MAKxB;CACH"}
|
|
@@ -72,6 +72,7 @@ var MigrationTable = /** @class */ (function (_super) {
|
|
|
72
72
|
};
|
|
73
73
|
_this.columns = (0, SourceRecord_1.withSourceRecordColumns)({
|
|
74
74
|
description: new Columns_1.StringColumn('description', {}, 4000),
|
|
75
|
+
manual: new Columns_1.BooleanColumn('manual'),
|
|
75
76
|
status: new Columns_1.StringColumn('status', { defaultValue: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
76
77
|
return [2 /*return*/, 'proposed'];
|
|
77
78
|
}); }); } }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationTable.js","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"MigrationTable.js","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sCAAuF;AACvF,kCAAiC;AACjC,uDAA+E;AAuB/E;IAAoC,kCAAgB;IAApD;QAAA,qEA6BC;QA5BQ,UAAI,GAAG,WAAW,CAAC;QAC1B;;;;;WAKG;QACI,UAAI,GAA6B;YACtC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;SACxC,CAAC;QACK,aAAO,GAAG,IAAA,sCAAuB,EAAY;YAClD,WAAW,EAAE,IAAI,sBAAY,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC;YACtD,MAAM,EAAE,IAAI,uBAAa,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,IAAI,sBAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE;oBAAY,sBAAA,UAAU,EAAA;yBAAA,EAAE,CAAC;YAC5E,cAAc,EAAE,IAAI,sBAAY,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC;YAC7D,YAAY,EAAE,IAAI,sBAAY,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC;YAC1D,SAAS,EAAE,IAAI,wBAAc,CAAC,YAAY,CAAC;YAC3C,OAAO,EAAE,IAAI,wBAAc,CAAC,UAAU,CAAC;YACvC,QAAQ,EAAE,IAAI,sBAAY,CAAC,UAAU,CAAC;YACtC,MAAM,EAAE,IAAI,sBAAY,CAAC,QAAQ,CAAC;SACnC,CAAC,CAAC;QACI,yBAAmB,GAAG;YAC3B,8BAA8B,EAAE,IAAI;YACpC,EAAE,EAAE;gBACF,WAAW,EAAE,IAAI;aAClB;SACF,CAAC;;IACJ,CAAC;IAAD,qBAAC;AAAD,CAAC,AA7BD,CAAoC,aAAK,GA6BxC;AA7BY,wCAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorWindowPager.test.d.ts","sourceRoot":"","sources":["../../test/CursorWindowPager.test.ts"],"names":[],"mappings":"AAaA,OAAO,oBAAoB,CAAC"}
|