@proteinjs/db 1.18.1 → 1.19.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 +11 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.d.ts +13 -0
- package/dist/generated/test/index.d.ts.map +1 -0
- package/dist/generated/test/index.js +91 -0
- package/dist/generated/test/index.js.map +1 -0
- 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/Columns.d.ts +10 -3
- package/dist/src/Columns.d.ts.map +1 -1
- package/dist/src/Columns.js +3 -16
- package/dist/src/Columns.js.map +1 -1
- package/dist/src/Db.d.ts +17 -0
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +201 -31
- package/dist/src/Db.js.map +1 -1
- package/dist/test/reusable/CascadeDeleteTests.d.ts +194 -0
- package/dist/test/reusable/CascadeDeleteTests.d.ts.map +1 -0
- package/dist/test/reusable/CascadeDeleteTests.js +643 -0
- package/dist/test/reusable/CascadeDeleteTests.js.map +1 -0
- package/dist/test/reusable/TableManagerTests.d.ts.map +1 -1
- package/dist/test/reusable/TableManagerTests.js.map +1 -1
- package/generated/index.ts +1 -1
- package/generated/test/index.ts +84 -0
- package/index.ts +1 -0
- package/package.json +14 -10
- package/src/Columns.ts +17 -3
- package/src/Db.ts +161 -15
- package/test/reusable/CascadeDeleteTests.ts +478 -0
|
@@ -0,0 +1,643 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.cascadeDeleteTests = exports.getCascadeDeleteTestTable = exports.TaskTable = exports.WorkerTable = exports.GroupArrRevTable = exports.MemberArrRevTable = exports.CommentTable = exports.PostTable = exports.GroupDynTable = exports.MemberDynTable = exports.GroupArrTable = exports.MemberArrTable = exports.GroupRefTable = exports.MemberRefTable = void 0;
|
|
55
|
+
var Columns_1 = require("../../src/Columns");
|
|
56
|
+
var Db_1 = require("../../src/Db");
|
|
57
|
+
var Table_1 = require("../../src/Table");
|
|
58
|
+
var Record_1 = require("../../src/Record");
|
|
59
|
+
var Reference_1 = require("../../src/reference/Reference");
|
|
60
|
+
var ReferenceArray_1 = require("../../src/reference/ReferenceArray");
|
|
61
|
+
var db_query_1 = require("@proteinjs/db-query");
|
|
62
|
+
/**
|
|
63
|
+
* ---------- Table Names ----------
|
|
64
|
+
*/
|
|
65
|
+
// Cascade (ReferenceColumn)
|
|
66
|
+
var MEMBER_REF_TABLE = 'db_test_cd_members_ref';
|
|
67
|
+
var GROUP_REF_TABLE = 'db_test_cd_groups_ref';
|
|
68
|
+
// Cascade (ReferenceArrayColumn)
|
|
69
|
+
var MEMBER_ARR_TABLE = 'db_test_cd_members_arr';
|
|
70
|
+
var GROUP_ARR_TABLE = 'db_test_cd_groups_arr';
|
|
71
|
+
// Cascade (DynamicReferenceColumn)
|
|
72
|
+
var MEMBER_DYN_TABLE = 'db_test_cd_members_dyn';
|
|
73
|
+
var GROUP_DYN_TABLE = 'db_test_cd_groups_dyn';
|
|
74
|
+
// Reverse (ReferenceColumn)
|
|
75
|
+
var POST_TABLE = 'db_test_cd_posts';
|
|
76
|
+
var COMMENT_TABLE = 'db_test_cd_comments';
|
|
77
|
+
// Reverse (ReferenceArrayColumn)
|
|
78
|
+
var MEMBER_ARR_REV_TABLE = 'db_test_cd_members_arr_rev';
|
|
79
|
+
var GROUP_ARR_REV_TABLE = 'db_test_cd_groups_arr_rev';
|
|
80
|
+
// Reverse (DynamicReferenceColumn)
|
|
81
|
+
var WORKER_TABLE = 'db_test_cd_workers';
|
|
82
|
+
var TASK_TABLE = 'db_test_cd_tasks';
|
|
83
|
+
/**
|
|
84
|
+
* ---------- Table Classes ----------
|
|
85
|
+
*/
|
|
86
|
+
// Cascade: ReferenceColumn
|
|
87
|
+
var MemberRefTable = /** @class */ (function (_super) {
|
|
88
|
+
__extends(MemberRefTable, _super);
|
|
89
|
+
function MemberRefTable() {
|
|
90
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
91
|
+
_this.name = MEMBER_REF_TABLE;
|
|
92
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
93
|
+
name: new Columns_1.StringColumn('name'),
|
|
94
|
+
});
|
|
95
|
+
return _this;
|
|
96
|
+
}
|
|
97
|
+
return MemberRefTable;
|
|
98
|
+
}(Table_1.Table));
|
|
99
|
+
exports.MemberRefTable = MemberRefTable;
|
|
100
|
+
var GroupRefTable = /** @class */ (function (_super) {
|
|
101
|
+
__extends(GroupRefTable, _super);
|
|
102
|
+
function GroupRefTable() {
|
|
103
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
104
|
+
_this.name = GROUP_REF_TABLE;
|
|
105
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
106
|
+
groupName: new Columns_1.StringColumn('group_name'),
|
|
107
|
+
memberRef: new Columns_1.ReferenceColumn('member_id', MEMBER_REF_TABLE, true // cascade: deleting GroupRef deletes the referenced MemberRef
|
|
108
|
+
),
|
|
109
|
+
});
|
|
110
|
+
return _this;
|
|
111
|
+
}
|
|
112
|
+
return GroupRefTable;
|
|
113
|
+
}(Table_1.Table));
|
|
114
|
+
exports.GroupRefTable = GroupRefTable;
|
|
115
|
+
// Cascade: ReferenceArrayColumn
|
|
116
|
+
var MemberArrTable = /** @class */ (function (_super) {
|
|
117
|
+
__extends(MemberArrTable, _super);
|
|
118
|
+
function MemberArrTable() {
|
|
119
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
120
|
+
_this.name = MEMBER_ARR_TABLE;
|
|
121
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
122
|
+
name: new Columns_1.StringColumn('name'),
|
|
123
|
+
});
|
|
124
|
+
return _this;
|
|
125
|
+
}
|
|
126
|
+
return MemberArrTable;
|
|
127
|
+
}(Table_1.Table));
|
|
128
|
+
exports.MemberArrTable = MemberArrTable;
|
|
129
|
+
var GroupArrTable = /** @class */ (function (_super) {
|
|
130
|
+
__extends(GroupArrTable, _super);
|
|
131
|
+
function GroupArrTable() {
|
|
132
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
133
|
+
_this.name = GROUP_ARR_TABLE;
|
|
134
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
135
|
+
groupName: new Columns_1.StringColumn('group_name'),
|
|
136
|
+
memberRefs: new Columns_1.ReferenceArrayColumn('member_ids', MEMBER_ARR_TABLE, true // cascade: deleting GroupArr deletes all referenced MemberArr
|
|
137
|
+
),
|
|
138
|
+
});
|
|
139
|
+
return _this;
|
|
140
|
+
}
|
|
141
|
+
return GroupArrTable;
|
|
142
|
+
}(Table_1.Table));
|
|
143
|
+
exports.GroupArrTable = GroupArrTable;
|
|
144
|
+
// Cascade: DynamicReferenceColumn
|
|
145
|
+
var MemberDynTable = /** @class */ (function (_super) {
|
|
146
|
+
__extends(MemberDynTable, _super);
|
|
147
|
+
function MemberDynTable() {
|
|
148
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
149
|
+
_this.name = MEMBER_DYN_TABLE;
|
|
150
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
151
|
+
name: new Columns_1.StringColumn('name'),
|
|
152
|
+
});
|
|
153
|
+
return _this;
|
|
154
|
+
}
|
|
155
|
+
return MemberDynTable;
|
|
156
|
+
}(Table_1.Table));
|
|
157
|
+
exports.MemberDynTable = MemberDynTable;
|
|
158
|
+
var GroupDynTable = /** @class */ (function (_super) {
|
|
159
|
+
__extends(GroupDynTable, _super);
|
|
160
|
+
function GroupDynTable() {
|
|
161
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
162
|
+
_this.name = GROUP_DYN_TABLE;
|
|
163
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
164
|
+
groupName: new Columns_1.StringColumn('group_name'),
|
|
165
|
+
memberDynTableName: new Columns_1.DynamicReferenceTableNameColumn('member_dyn_table_name', 'member_dyn_ref'),
|
|
166
|
+
memberDynRef: new Columns_1.DynamicReferenceColumn('member_dyn_ref', 'member_dyn_table_name', true // cascade: deleting GroupDyn deletes dynamically referenced MemberDyn
|
|
167
|
+
),
|
|
168
|
+
});
|
|
169
|
+
return _this;
|
|
170
|
+
}
|
|
171
|
+
return GroupDynTable;
|
|
172
|
+
}(Table_1.Table));
|
|
173
|
+
exports.GroupDynTable = GroupDynTable;
|
|
174
|
+
// Reverse: ReferenceColumn
|
|
175
|
+
var PostTable = /** @class */ (function (_super) {
|
|
176
|
+
__extends(PostTable, _super);
|
|
177
|
+
function PostTable() {
|
|
178
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
179
|
+
_this.name = POST_TABLE;
|
|
180
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
181
|
+
title: new Columns_1.StringColumn('title'),
|
|
182
|
+
});
|
|
183
|
+
return _this;
|
|
184
|
+
}
|
|
185
|
+
return PostTable;
|
|
186
|
+
}(Table_1.Table));
|
|
187
|
+
exports.PostTable = PostTable;
|
|
188
|
+
var CommentTable = /** @class */ (function (_super) {
|
|
189
|
+
__extends(CommentTable, _super);
|
|
190
|
+
function CommentTable() {
|
|
191
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
192
|
+
_this.name = COMMENT_TABLE;
|
|
193
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
194
|
+
text: new Columns_1.StringColumn('text'),
|
|
195
|
+
postRef: new Columns_1.ReferenceColumn('post_id', POST_TABLE, false, { reverseCascadeDelete: true } // reverse: deleting Post deletes Comment
|
|
196
|
+
),
|
|
197
|
+
});
|
|
198
|
+
return _this;
|
|
199
|
+
}
|
|
200
|
+
return CommentTable;
|
|
201
|
+
}(Table_1.Table));
|
|
202
|
+
exports.CommentTable = CommentTable;
|
|
203
|
+
// Reverse: ReferenceArrayColumn
|
|
204
|
+
var MemberArrRevTable = /** @class */ (function (_super) {
|
|
205
|
+
__extends(MemberArrRevTable, _super);
|
|
206
|
+
function MemberArrRevTable() {
|
|
207
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
208
|
+
_this.name = MEMBER_ARR_REV_TABLE;
|
|
209
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
210
|
+
name: new Columns_1.StringColumn('name'),
|
|
211
|
+
});
|
|
212
|
+
return _this;
|
|
213
|
+
}
|
|
214
|
+
return MemberArrRevTable;
|
|
215
|
+
}(Table_1.Table));
|
|
216
|
+
exports.MemberArrRevTable = MemberArrRevTable;
|
|
217
|
+
var GroupArrRevTable = /** @class */ (function (_super) {
|
|
218
|
+
__extends(GroupArrRevTable, _super);
|
|
219
|
+
function GroupArrRevTable() {
|
|
220
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
221
|
+
_this.name = GROUP_ARR_REV_TABLE;
|
|
222
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
223
|
+
groupName: new Columns_1.StringColumn('group_name'),
|
|
224
|
+
memberRefs: new Columns_1.ReferenceArrayColumn('member_ids', MEMBER_ARR_REV_TABLE, false, { reverseCascadeDelete: true } // reverse: deleting any MemberArrRev deletes the GroupArrRev
|
|
225
|
+
),
|
|
226
|
+
});
|
|
227
|
+
return _this;
|
|
228
|
+
}
|
|
229
|
+
return GroupArrRevTable;
|
|
230
|
+
}(Table_1.Table));
|
|
231
|
+
exports.GroupArrRevTable = GroupArrRevTable;
|
|
232
|
+
// Reverse: DynamicReferenceColumn
|
|
233
|
+
var WorkerTable = /** @class */ (function (_super) {
|
|
234
|
+
__extends(WorkerTable, _super);
|
|
235
|
+
function WorkerTable() {
|
|
236
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
237
|
+
_this.name = WORKER_TABLE;
|
|
238
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
239
|
+
name: new Columns_1.StringColumn('name'),
|
|
240
|
+
});
|
|
241
|
+
return _this;
|
|
242
|
+
}
|
|
243
|
+
return WorkerTable;
|
|
244
|
+
}(Table_1.Table));
|
|
245
|
+
exports.WorkerTable = WorkerTable;
|
|
246
|
+
var TaskTable = /** @class */ (function (_super) {
|
|
247
|
+
__extends(TaskTable, _super);
|
|
248
|
+
function TaskTable() {
|
|
249
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
250
|
+
_this.name = TASK_TABLE;
|
|
251
|
+
_this.columns = (0, Record_1.withRecordColumns)({
|
|
252
|
+
title: new Columns_1.StringColumn('title'),
|
|
253
|
+
assigneeTableName: new Columns_1.DynamicReferenceTableNameColumn('assignee_table_name', 'assignee_ref'),
|
|
254
|
+
assigneeRef: new Columns_1.DynamicReferenceColumn('assignee_ref', 'assignee_table_name', false, { reverseCascadeDelete: true } // reverse: deleting Worker deletes Task
|
|
255
|
+
),
|
|
256
|
+
});
|
|
257
|
+
return _this;
|
|
258
|
+
}
|
|
259
|
+
return TaskTable;
|
|
260
|
+
}(Table_1.Table));
|
|
261
|
+
exports.TaskTable = TaskTable;
|
|
262
|
+
/** getTable resolver for Db */
|
|
263
|
+
var getCascadeDeleteTestTable = function (tableName) {
|
|
264
|
+
switch (tableName) {
|
|
265
|
+
// Cascade
|
|
266
|
+
case MEMBER_REF_TABLE:
|
|
267
|
+
return new MemberRefTable();
|
|
268
|
+
case GROUP_REF_TABLE:
|
|
269
|
+
return new GroupRefTable();
|
|
270
|
+
case MEMBER_ARR_TABLE:
|
|
271
|
+
return new MemberArrTable();
|
|
272
|
+
case GROUP_ARR_TABLE:
|
|
273
|
+
return new GroupArrTable();
|
|
274
|
+
case MEMBER_DYN_TABLE:
|
|
275
|
+
return new MemberDynTable();
|
|
276
|
+
case GROUP_DYN_TABLE:
|
|
277
|
+
return new GroupDynTable();
|
|
278
|
+
// Reverse
|
|
279
|
+
case POST_TABLE:
|
|
280
|
+
return new PostTable();
|
|
281
|
+
case COMMENT_TABLE:
|
|
282
|
+
return new CommentTable();
|
|
283
|
+
case MEMBER_ARR_REV_TABLE:
|
|
284
|
+
return new MemberArrRevTable();
|
|
285
|
+
case GROUP_ARR_REV_TABLE:
|
|
286
|
+
return new GroupArrRevTable();
|
|
287
|
+
case WORKER_TABLE:
|
|
288
|
+
return new WorkerTable();
|
|
289
|
+
case TASK_TABLE:
|
|
290
|
+
return new TaskTable();
|
|
291
|
+
default:
|
|
292
|
+
throw new Error("Cannot find test table: ".concat(tableName));
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
exports.getCascadeDeleteTestTable = getCascadeDeleteTestTable;
|
|
296
|
+
/**
|
|
297
|
+
* Public test suite factory.
|
|
298
|
+
*/
|
|
299
|
+
var cascadeDeleteTests = function (driver, transactionContextFactory, dropTable) {
|
|
300
|
+
return function () {
|
|
301
|
+
var db = new Db_1.Db(driver, exports.getCascadeDeleteTestTable, transactionContextFactory);
|
|
302
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
303
|
+
return __generator(this, function (_a) {
|
|
304
|
+
switch (_a.label) {
|
|
305
|
+
case 0:
|
|
306
|
+
if (!driver.start) return [3 /*break*/, 2];
|
|
307
|
+
return [4 /*yield*/, driver.start()];
|
|
308
|
+
case 1:
|
|
309
|
+
_a.sent();
|
|
310
|
+
_a.label = 2;
|
|
311
|
+
case 2: return [2 /*return*/];
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
}); });
|
|
315
|
+
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
316
|
+
return __generator(this, function (_a) {
|
|
317
|
+
switch (_a.label) {
|
|
318
|
+
case 0:
|
|
319
|
+
// Ensure tables exist and are in a known state for each test
|
|
320
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new MemberRefTable())];
|
|
321
|
+
case 1:
|
|
322
|
+
// Ensure tables exist and are in a known state for each test
|
|
323
|
+
_a.sent();
|
|
324
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new GroupRefTable())];
|
|
325
|
+
case 2:
|
|
326
|
+
_a.sent();
|
|
327
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new MemberArrTable())];
|
|
328
|
+
case 3:
|
|
329
|
+
_a.sent();
|
|
330
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new GroupArrTable())];
|
|
331
|
+
case 4:
|
|
332
|
+
_a.sent();
|
|
333
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new MemberDynTable())];
|
|
334
|
+
case 5:
|
|
335
|
+
_a.sent();
|
|
336
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new GroupDynTable())];
|
|
337
|
+
case 6:
|
|
338
|
+
_a.sent();
|
|
339
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new PostTable())];
|
|
340
|
+
case 7:
|
|
341
|
+
_a.sent();
|
|
342
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new CommentTable())];
|
|
343
|
+
case 8:
|
|
344
|
+
_a.sent();
|
|
345
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new MemberArrRevTable())];
|
|
346
|
+
case 9:
|
|
347
|
+
_a.sent();
|
|
348
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new GroupArrRevTable())];
|
|
349
|
+
case 10:
|
|
350
|
+
_a.sent();
|
|
351
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new WorkerTable())];
|
|
352
|
+
case 11:
|
|
353
|
+
_a.sent();
|
|
354
|
+
return [4 /*yield*/, driver.getTableManager().loadTable(new TaskTable())];
|
|
355
|
+
case 12:
|
|
356
|
+
_a.sent();
|
|
357
|
+
return [2 /*return*/];
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
}); });
|
|
361
|
+
afterEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
362
|
+
return __generator(this, function (_a) {
|
|
363
|
+
switch (_a.label) {
|
|
364
|
+
case 0:
|
|
365
|
+
// Drop referencing tables first, then referenced
|
|
366
|
+
return [4 /*yield*/, dropTable(new GroupRefTable())];
|
|
367
|
+
case 1:
|
|
368
|
+
// Drop referencing tables first, then referenced
|
|
369
|
+
_a.sent();
|
|
370
|
+
return [4 /*yield*/, dropTable(new MemberRefTable())];
|
|
371
|
+
case 2:
|
|
372
|
+
_a.sent();
|
|
373
|
+
return [4 /*yield*/, dropTable(new GroupArrTable())];
|
|
374
|
+
case 3:
|
|
375
|
+
_a.sent();
|
|
376
|
+
return [4 /*yield*/, dropTable(new MemberArrTable())];
|
|
377
|
+
case 4:
|
|
378
|
+
_a.sent();
|
|
379
|
+
return [4 /*yield*/, dropTable(new GroupDynTable())];
|
|
380
|
+
case 5:
|
|
381
|
+
_a.sent();
|
|
382
|
+
return [4 /*yield*/, dropTable(new MemberDynTable())];
|
|
383
|
+
case 6:
|
|
384
|
+
_a.sent();
|
|
385
|
+
return [4 /*yield*/, dropTable(new CommentTable())];
|
|
386
|
+
case 7:
|
|
387
|
+
_a.sent();
|
|
388
|
+
return [4 /*yield*/, dropTable(new PostTable())];
|
|
389
|
+
case 8:
|
|
390
|
+
_a.sent();
|
|
391
|
+
return [4 /*yield*/, dropTable(new GroupArrRevTable())];
|
|
392
|
+
case 9:
|
|
393
|
+
_a.sent();
|
|
394
|
+
return [4 /*yield*/, dropTable(new MemberArrRevTable())];
|
|
395
|
+
case 10:
|
|
396
|
+
_a.sent();
|
|
397
|
+
return [4 /*yield*/, dropTable(new TaskTable())];
|
|
398
|
+
case 11:
|
|
399
|
+
_a.sent();
|
|
400
|
+
return [4 /*yield*/, dropTable(new WorkerTable())];
|
|
401
|
+
case 12:
|
|
402
|
+
_a.sent();
|
|
403
|
+
return [2 /*return*/];
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}); });
|
|
407
|
+
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
408
|
+
return __generator(this, function (_a) {
|
|
409
|
+
switch (_a.label) {
|
|
410
|
+
case 0:
|
|
411
|
+
if (!driver.stop) return [3 /*break*/, 2];
|
|
412
|
+
return [4 /*yield*/, driver.stop()];
|
|
413
|
+
case 1:
|
|
414
|
+
_a.sent();
|
|
415
|
+
_a.label = 2;
|
|
416
|
+
case 2: return [2 /*return*/];
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
}); });
|
|
420
|
+
/**
|
|
421
|
+
* -------------------- Cascade Delete (holder → referenced) --------------------
|
|
422
|
+
*/
|
|
423
|
+
describe('Cascade Delete', function () {
|
|
424
|
+
test('ReferenceColumn: deleting holder deletes referenced record', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
425
|
+
var memberTable, groupTable, m, g, delQb, deleted, remaining;
|
|
426
|
+
return __generator(this, function (_a) {
|
|
427
|
+
switch (_a.label) {
|
|
428
|
+
case 0:
|
|
429
|
+
memberTable = new MemberRefTable();
|
|
430
|
+
groupTable = new GroupRefTable();
|
|
431
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Alice' })];
|
|
432
|
+
case 1:
|
|
433
|
+
m = _a.sent();
|
|
434
|
+
return [4 /*yield*/, db.insert(groupTable, {
|
|
435
|
+
groupName: 'G-Ref',
|
|
436
|
+
memberRef: new Reference_1.Reference(memberTable.name, m.id),
|
|
437
|
+
})];
|
|
438
|
+
case 2:
|
|
439
|
+
g = _a.sent();
|
|
440
|
+
delQb = new db_query_1.QueryBuilder(groupTable.name).condition({
|
|
441
|
+
field: 'id',
|
|
442
|
+
operator: '=',
|
|
443
|
+
value: g.id,
|
|
444
|
+
});
|
|
445
|
+
return [4 /*yield*/, db.delete(groupTable, delQb)];
|
|
446
|
+
case 3:
|
|
447
|
+
deleted = _a.sent();
|
|
448
|
+
expect(deleted).toBe(1);
|
|
449
|
+
return [4 /*yield*/, db.query(memberTable, {})];
|
|
450
|
+
case 4:
|
|
451
|
+
remaining = _a.sent();
|
|
452
|
+
expect(remaining.length).toBe(0);
|
|
453
|
+
return [2 /*return*/];
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
}); });
|
|
457
|
+
test('ReferenceArrayColumn: deleting holder deletes all referenced records', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
458
|
+
var memberTable, groupTable, m1, m2, m3, g, delQb, deleted, remaining;
|
|
459
|
+
return __generator(this, function (_a) {
|
|
460
|
+
switch (_a.label) {
|
|
461
|
+
case 0:
|
|
462
|
+
memberTable = new MemberArrTable();
|
|
463
|
+
groupTable = new GroupArrTable();
|
|
464
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Bob' })];
|
|
465
|
+
case 1:
|
|
466
|
+
m1 = _a.sent();
|
|
467
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Charlie' })];
|
|
468
|
+
case 2:
|
|
469
|
+
m2 = _a.sent();
|
|
470
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Dana' })];
|
|
471
|
+
case 3:
|
|
472
|
+
m3 = _a.sent();
|
|
473
|
+
return [4 /*yield*/, db.insert(groupTable, {
|
|
474
|
+
groupName: 'G-Arr',
|
|
475
|
+
memberRefs: new ReferenceArray_1.ReferenceArray(memberTable.name, [m1.id, m2.id]),
|
|
476
|
+
})];
|
|
477
|
+
case 4:
|
|
478
|
+
g = _a.sent();
|
|
479
|
+
delQb = new db_query_1.QueryBuilder(groupTable.name).condition({
|
|
480
|
+
field: 'id',
|
|
481
|
+
operator: '=',
|
|
482
|
+
value: g.id,
|
|
483
|
+
});
|
|
484
|
+
return [4 /*yield*/, db.delete(groupTable, delQb)];
|
|
485
|
+
case 5:
|
|
486
|
+
deleted = _a.sent();
|
|
487
|
+
expect(deleted).toBe(1);
|
|
488
|
+
return [4 /*yield*/, db.query(memberTable, {})];
|
|
489
|
+
case 6:
|
|
490
|
+
remaining = _a.sent();
|
|
491
|
+
expect(remaining.length).toBe(1);
|
|
492
|
+
expect(remaining[0].id).toBe(m3.id);
|
|
493
|
+
return [2 /*return*/];
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
}); });
|
|
497
|
+
test('DynamicReferenceColumn: deleting holder deletes dynamically referenced record', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
498
|
+
var memberTable, groupTable, m, g, delQb, deleted, remaining;
|
|
499
|
+
return __generator(this, function (_a) {
|
|
500
|
+
switch (_a.label) {
|
|
501
|
+
case 0:
|
|
502
|
+
memberTable = new MemberDynTable();
|
|
503
|
+
groupTable = new GroupDynTable();
|
|
504
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Dina' })];
|
|
505
|
+
case 1:
|
|
506
|
+
m = _a.sent();
|
|
507
|
+
return [4 /*yield*/, db.insert(groupTable, {
|
|
508
|
+
groupName: 'G-Dyn',
|
|
509
|
+
memberDynTableName: memberTable.name,
|
|
510
|
+
memberDynRef: new Reference_1.Reference(memberTable.name, m.id),
|
|
511
|
+
})];
|
|
512
|
+
case 2:
|
|
513
|
+
g = _a.sent();
|
|
514
|
+
delQb = new db_query_1.QueryBuilder(groupTable.name).condition({
|
|
515
|
+
field: 'id',
|
|
516
|
+
operator: '=',
|
|
517
|
+
value: g.id,
|
|
518
|
+
});
|
|
519
|
+
return [4 /*yield*/, db.delete(groupTable, delQb)];
|
|
520
|
+
case 3:
|
|
521
|
+
deleted = _a.sent();
|
|
522
|
+
expect(deleted).toBe(1);
|
|
523
|
+
return [4 /*yield*/, db.query(memberTable, {})];
|
|
524
|
+
case 4:
|
|
525
|
+
remaining = _a.sent();
|
|
526
|
+
expect(remaining.length).toBe(0);
|
|
527
|
+
return [2 /*return*/];
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
}); });
|
|
531
|
+
});
|
|
532
|
+
/**
|
|
533
|
+
* -------------------- Reverse Cascade Delete (referenced → holder) --------------------
|
|
534
|
+
*/
|
|
535
|
+
describe('Reverse Cascade Delete', function () {
|
|
536
|
+
test('ReferenceColumn: deleting referenced record deletes the holder', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
537
|
+
var postTable, commentTable, post, delQb, deleted, remaining;
|
|
538
|
+
return __generator(this, function (_a) {
|
|
539
|
+
switch (_a.label) {
|
|
540
|
+
case 0:
|
|
541
|
+
postTable = new PostTable();
|
|
542
|
+
commentTable = new CommentTable();
|
|
543
|
+
return [4 /*yield*/, db.insert(postTable, { title: 'Hello World' })];
|
|
544
|
+
case 1:
|
|
545
|
+
post = _a.sent();
|
|
546
|
+
return [4 /*yield*/, db.insert(commentTable, {
|
|
547
|
+
text: 'Nice post!',
|
|
548
|
+
postRef: new Reference_1.Reference(postTable.name, post.id),
|
|
549
|
+
})];
|
|
550
|
+
case 2:
|
|
551
|
+
_a.sent();
|
|
552
|
+
delQb = new db_query_1.QueryBuilder(postTable.name).condition({
|
|
553
|
+
field: 'id',
|
|
554
|
+
operator: '=',
|
|
555
|
+
value: post.id,
|
|
556
|
+
});
|
|
557
|
+
return [4 /*yield*/, db.delete(postTable, delQb)];
|
|
558
|
+
case 3:
|
|
559
|
+
deleted = _a.sent();
|
|
560
|
+
expect(deleted).toBe(1);
|
|
561
|
+
return [4 /*yield*/, db.query(commentTable, {})];
|
|
562
|
+
case 4:
|
|
563
|
+
remaining = _a.sent();
|
|
564
|
+
expect(remaining.length).toBe(0);
|
|
565
|
+
return [2 /*return*/];
|
|
566
|
+
}
|
|
567
|
+
});
|
|
568
|
+
}); });
|
|
569
|
+
test('ReferenceArrayColumn: deleting a referenced record deletes the holder', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
570
|
+
var memberTable, groupTable, m1, m2, delQb, deleted, remainingGroups;
|
|
571
|
+
return __generator(this, function (_a) {
|
|
572
|
+
switch (_a.label) {
|
|
573
|
+
case 0:
|
|
574
|
+
memberTable = new MemberArrRevTable();
|
|
575
|
+
groupTable = new GroupArrRevTable();
|
|
576
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Alice' })];
|
|
577
|
+
case 1:
|
|
578
|
+
m1 = _a.sent();
|
|
579
|
+
return [4 /*yield*/, db.insert(memberTable, { name: 'Bob' })];
|
|
580
|
+
case 2:
|
|
581
|
+
m2 = _a.sent();
|
|
582
|
+
return [4 /*yield*/, db.insert(groupTable, {
|
|
583
|
+
groupName: 'G-RevArr',
|
|
584
|
+
memberRefs: new ReferenceArray_1.ReferenceArray(memberTable.name, [m1.id, m2.id]),
|
|
585
|
+
})];
|
|
586
|
+
case 3:
|
|
587
|
+
_a.sent();
|
|
588
|
+
delQb = new db_query_1.QueryBuilder(memberTable.name).condition({
|
|
589
|
+
field: 'id',
|
|
590
|
+
operator: '=',
|
|
591
|
+
value: m1.id,
|
|
592
|
+
});
|
|
593
|
+
return [4 /*yield*/, db.delete(memberTable, delQb)];
|
|
594
|
+
case 4:
|
|
595
|
+
deleted = _a.sent();
|
|
596
|
+
expect(deleted).toBe(1);
|
|
597
|
+
return [4 /*yield*/, db.query(groupTable, {})];
|
|
598
|
+
case 5:
|
|
599
|
+
remainingGroups = _a.sent();
|
|
600
|
+
expect(remainingGroups.length).toBe(0);
|
|
601
|
+
return [2 /*return*/];
|
|
602
|
+
}
|
|
603
|
+
});
|
|
604
|
+
}); });
|
|
605
|
+
test('DynamicReferenceColumn: deleting referenced record deletes the holder', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
606
|
+
var workerTable, taskTable, worker, delQb, deleted, remainingTasks;
|
|
607
|
+
return __generator(this, function (_a) {
|
|
608
|
+
switch (_a.label) {
|
|
609
|
+
case 0:
|
|
610
|
+
workerTable = new WorkerTable();
|
|
611
|
+
taskTable = new TaskTable();
|
|
612
|
+
return [4 /*yield*/, db.insert(workerTable, { name: 'Wally Worker' })];
|
|
613
|
+
case 1:
|
|
614
|
+
worker = _a.sent();
|
|
615
|
+
return [4 /*yield*/, db.insert(taskTable, {
|
|
616
|
+
title: 'Assemble Widget',
|
|
617
|
+
assigneeTableName: workerTable.name,
|
|
618
|
+
assigneeRef: new Reference_1.Reference(workerTable.name, worker.id),
|
|
619
|
+
})];
|
|
620
|
+
case 2:
|
|
621
|
+
_a.sent();
|
|
622
|
+
delQb = new db_query_1.QueryBuilder(workerTable.name).condition({
|
|
623
|
+
field: 'id',
|
|
624
|
+
operator: '=',
|
|
625
|
+
value: worker.id,
|
|
626
|
+
});
|
|
627
|
+
return [4 /*yield*/, db.delete(workerTable, delQb)];
|
|
628
|
+
case 3:
|
|
629
|
+
deleted = _a.sent();
|
|
630
|
+
expect(deleted).toBe(1);
|
|
631
|
+
return [4 /*yield*/, db.query(taskTable, {})];
|
|
632
|
+
case 4:
|
|
633
|
+
remainingTasks = _a.sent();
|
|
634
|
+
expect(remainingTasks.length).toBe(0);
|
|
635
|
+
return [2 /*return*/];
|
|
636
|
+
}
|
|
637
|
+
});
|
|
638
|
+
}); });
|
|
639
|
+
});
|
|
640
|
+
};
|
|
641
|
+
};
|
|
642
|
+
exports.cascadeDeleteTests = cascadeDeleteTests;
|
|
643
|
+
//# sourceMappingURL=CascadeDeleteTests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CascadeDeleteTests.js","sourceRoot":"","sources":["../../../test/reusable/CascadeDeleteTests.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAM2B;AAC3B,mCAA4C;AAC5C,yCAAwC;AACxC,2CAA6D;AAC7D,2DAA0D;AAC1D,qEAAoE;AACpE,gDAAmD;AAiEnD;;GAEG;AACH,4BAA4B;AAC5B,IAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,IAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,iCAAiC;AACjC,IAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,IAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,mCAAmC;AACnC,IAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,IAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,4BAA4B;AAC5B,IAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,IAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C,iCAAiC;AACjC,IAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAC1D,IAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAExD,mCAAmC;AACnC,IAAM,YAAY,GAAG,oBAAoB,CAAC;AAC1C,IAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC;;GAEG;AACH,2BAA2B;AAC3B;IAAoC,kCAAgB;IAApD;QAAA,qEAKC;QAJC,UAAI,GAAG,gBAAgB,CAAC;QACxB,aAAO,GAAG,IAAA,0BAAiB,EAAY;YACrC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;;IACL,CAAC;IAAD,qBAAC;AAAD,CAAC,AALD,CAAoC,aAAK,GAKxC;AALY,wCAAc;AAM3B;IAAmC,iCAAe;IAAlD;QAAA,qEAUC;QATC,UAAI,GAAG,eAAe,CAAC;QACvB,aAAO,GAAG,IAAA,0BAAiB,EAAW;YACpC,SAAS,EAAE,IAAI,sBAAY,CAAC,YAAY,CAAC;YACzC,SAAS,EAAE,IAAI,yBAAe,CAC5B,WAAW,EACX,gBAAgB,EAChB,IAAI,CAAC,8DAA8D;aACpE;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,oBAAC;AAAD,CAAC,AAVD,CAAmC,aAAK,GAUvC;AAVY,sCAAa;AAY1B,gCAAgC;AAChC;IAAoC,kCAAgB;IAApD;QAAA,qEAKC;QAJC,UAAI,GAAG,gBAAgB,CAAC;QACxB,aAAO,GAAG,IAAA,0BAAiB,EAAY;YACrC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;;IACL,CAAC;IAAD,qBAAC;AAAD,CAAC,AALD,CAAoC,aAAK,GAKxC;AALY,wCAAc;AAM3B;IAAmC,iCAAe;IAAlD;QAAA,qEAUC;QATC,UAAI,GAAG,eAAe,CAAC;QACvB,aAAO,GAAG,IAAA,0BAAiB,EAAW;YACpC,SAAS,EAAE,IAAI,sBAAY,CAAC,YAAY,CAAC;YACzC,UAAU,EAAE,IAAI,8BAAoB,CAClC,YAAY,EACZ,gBAAgB,EAChB,IAAI,CAAC,8DAA8D;aACpE;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,oBAAC;AAAD,CAAC,AAVD,CAAmC,aAAK,GAUvC;AAVY,sCAAa;AAY1B,kCAAkC;AAClC;IAAoC,kCAAgB;IAApD;QAAA,qEAKC;QAJC,UAAI,GAAG,gBAAgB,CAAC;QACxB,aAAO,GAAG,IAAA,0BAAiB,EAAY;YACrC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;;IACL,CAAC;IAAD,qBAAC;AAAD,CAAC,AALD,CAAoC,aAAK,GAKxC;AALY,wCAAc;AAM3B;IAAmC,iCAAe;IAAlD;QAAA,qEAWC;QAVC,UAAI,GAAG,eAAe,CAAC;QACvB,aAAO,GAAG,IAAA,0BAAiB,EAAW;YACpC,SAAS,EAAE,IAAI,sBAAY,CAAC,YAAY,CAAC;YACzC,kBAAkB,EAAE,IAAI,yCAA+B,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;YAClG,YAAY,EAAE,IAAI,gCAAsB,CACtC,gBAAgB,EAChB,uBAAuB,EACvB,IAAI,CAAC,sEAAsE;aAC5E;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,oBAAC;AAAD,CAAC,AAXD,CAAmC,aAAK,GAWvC;AAXY,sCAAa;AAa1B,2BAA2B;AAC3B;IAA+B,6BAAW;IAA1C;QAAA,qEAKC;QAJC,UAAI,GAAG,UAAU,CAAC;QAClB,aAAO,GAAG,IAAA,0BAAiB,EAAO;YAChC,KAAK,EAAE,IAAI,sBAAY,CAAC,OAAO,CAAC;SACjC,CAAC,CAAC;;IACL,CAAC;IAAD,gBAAC;AAAD,CAAC,AALD,CAA+B,aAAK,GAKnC;AALY,8BAAS;AAMtB;IAAkC,gCAAc;IAAhD;QAAA,qEAWC;QAVC,UAAI,GAAG,aAAa,CAAC;QACrB,aAAO,GAAG,IAAA,0BAAiB,EAAU;YACnC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,IAAI,yBAAe,CAC1B,SAAS,EACT,UAAU,EACV,KAAK,EACL,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,yCAAyC;aACzE;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,mBAAC;AAAD,CAAC,AAXD,CAAkC,aAAK,GAWtC;AAXY,oCAAY;AAazB,gCAAgC;AAChC;IAAuC,qCAAmB;IAA1D;QAAA,qEAKC;QAJC,UAAI,GAAG,oBAAoB,CAAC;QAC5B,aAAO,GAAG,IAAA,0BAAiB,EAAe;YACxC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;;IACL,CAAC;IAAD,wBAAC;AAAD,CAAC,AALD,CAAuC,aAAK,GAK3C;AALY,8CAAiB;AAM9B;IAAsC,oCAAkB;IAAxD;QAAA,qEAWC;QAVC,UAAI,GAAG,mBAAmB,CAAC;QAC3B,aAAO,GAAG,IAAA,0BAAiB,EAAc;YACvC,SAAS,EAAE,IAAI,sBAAY,CAAC,YAAY,CAAC;YACzC,UAAU,EAAE,IAAI,8BAAoB,CAClC,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,6DAA6D;aAC7F;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,uBAAC;AAAD,CAAC,AAXD,CAAsC,aAAK,GAW1C;AAXY,4CAAgB;AAa7B,kCAAkC;AAClC;IAAiC,+BAAa;IAA9C;QAAA,qEAKC;QAJC,UAAI,GAAG,YAAY,CAAC;QACpB,aAAO,GAAG,IAAA,0BAAiB,EAAS;YAClC,IAAI,EAAE,IAAI,sBAAY,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;;IACL,CAAC;IAAD,kBAAC;AAAD,CAAC,AALD,CAAiC,aAAK,GAKrC;AALY,kCAAW;AAMxB;IAA+B,6BAAW;IAA1C;QAAA,qEAYC;QAXC,UAAI,GAAG,UAAU,CAAC;QAClB,aAAO,GAAG,IAAA,0BAAiB,EAAO;YAChC,KAAK,EAAE,IAAI,sBAAY,CAAC,OAAO,CAAC;YAChC,iBAAiB,EAAE,IAAI,yCAA+B,CAAC,qBAAqB,EAAE,cAAc,CAAC;YAC7F,WAAW,EAAE,IAAI,gCAAsB,CACrC,cAAc,EACd,qBAAqB,EACrB,KAAK,EACL,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,wCAAwC;aACxE;SACF,CAAC,CAAC;;IACL,CAAC;IAAD,gBAAC;AAAD,CAAC,AAZD,CAA+B,aAAK,GAYnC;AAZY,8BAAS;AActB,+BAA+B;AACxB,IAAM,yBAAyB,GAAG,UAAC,SAAiB;IACzD,QAAQ,SAAS,EAAE;QACjB,UAAU;QACV,KAAK,gBAAgB;YACnB,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,eAAe;YAClB,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,gBAAgB;YACnB,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,eAAe;YAClB,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,gBAAgB;YACnB,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,eAAe;YAClB,OAAO,IAAI,aAAa,EAAE,CAAC;QAE7B,UAAU;QACV,KAAK,UAAU;YACb,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,KAAK,aAAa;YAChB,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,oBAAoB;YACvB,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,KAAK,mBAAmB;YACtB,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,YAAY;YACf,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,IAAI,SAAS,EAAE,CAAC;QAEzB;YACE,MAAM,IAAI,KAAK,CAAC,kCAA2B,SAAS,CAAE,CAAC,CAAC;KAC3D;AACH,CAAC,CAAC;AAjCW,QAAA,yBAAyB,6BAiCpC;AAEF;;GAEG;AACI,IAAM,kBAAkB,GAAG,UAChC,MAAgB,EAChB,yBAA2D,EAC3D,SAA+C;IAE/C,OAAO;QACL,IAAM,EAAE,GAAG,IAAI,OAAE,CAAC,MAAM,EAAE,iCAAyB,EAAE,yBAAyB,CAAC,CAAC;QAEhF,SAAS,CAAC;;;;6BACJ,MAAM,CAAC,KAAK,EAAZ,wBAAY;wBACd,qBAAM,MAAM,CAAC,KAAK,EAAE,EAAA;;wBAApB,SAAoB,CAAC;;;;;aAExB,CAAC,CAAC;QAEH,UAAU,CAAC;;;;oBACT,6DAA6D;oBAC7D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAD9D,6DAA6D;wBAC7D,SAA8D,CAAC;wBAC/D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;wBAE9D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAA9D,SAA8D,CAAC;wBAC/D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;wBAE9D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAA9D,SAA8D,CAAC;wBAC/D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;wBAE9D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC,EAAA;;wBAAzD,SAAyD,CAAC;wBAC1D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC,EAAA;;wBAA5D,SAA4D,CAAC;wBAE7D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAA;;wBAAjE,SAAiE,CAAC;wBAClE,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,gBAAgB,EAAE,CAAC,EAAA;;wBAAhE,SAAgE,CAAC;wBAEjE,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC,EAAA;;wBAA3D,SAA2D,CAAC;wBAC5D,qBAAM,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC,EAAA;;wBAAzD,SAAyD,CAAC;;;;aAC3D,CAAC,CAAC;QAEH,SAAS,CAAC;;;;oBACR,iDAAiD;oBACjD,qBAAM,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBADpC,iDAAiD;wBACjD,SAAoC,CAAC;wBACrC,qBAAM,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAArC,SAAqC,CAAC;wBAEtC,qBAAM,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBAApC,SAAoC,CAAC;wBACrC,qBAAM,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAArC,SAAqC,CAAC;wBAEtC,qBAAM,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,EAAA;;wBAApC,SAAoC,CAAC;wBACrC,qBAAM,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,EAAA;;wBAArC,SAAqC,CAAC;wBAEtC,qBAAM,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,qBAAM,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC,EAAA;;wBAAhC,SAAgC,CAAC;wBAEjC,qBAAM,SAAS,CAAC,IAAI,gBAAgB,EAAE,CAAC,EAAA;;wBAAvC,SAAuC,CAAC;wBACxC,qBAAM,SAAS,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAA;;wBAAxC,SAAwC,CAAC;wBAEzC,qBAAM,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC,EAAA;;wBAAhC,SAAgC,CAAC;wBACjC,qBAAM,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC,EAAA;;wBAAlC,SAAkC,CAAC;;;;aACpC,CAAC,CAAC;QAEH,QAAQ,CAAC;;;;6BACH,MAAM,CAAC,IAAI,EAAX,wBAAW;wBACb,qBAAM,MAAM,CAAC,IAAI,EAAE,EAAA;;wBAAnB,SAAmB,CAAC;;;;;aAEvB,CAAC,CAAC;QAEH;;WAEG;QACH,QAAQ,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,4DAA4D,EAAE;;;;;4BAC3D,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;4BACnC,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;4BAE7B,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAA;;4BAAnD,CAAC,GAAG,SAA+C;4BAC/C,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;oCACpC,SAAS,EAAE,OAAO;oCAClB,SAAS,EAAE,IAAI,qBAAS,CAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iCAC5D,CAAC,EAAA;;4BAHI,CAAC,GAAG,SAGR;4BAEI,KAAK,GAAG,IAAI,uBAAY,CAAW,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCAClE,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,CAAC,CAAC,EAAE;6BACZ,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,EAAA;;4BAA5C,OAAO,GAAG,SAAkC;4BAClD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEN,qBAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAA;;4BAA3C,SAAS,GAAG,SAA+B;4BACjD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;iBAClC,CAAC,CAAC;YAEH,IAAI,CAAC,sEAAsE,EAAE;;;;;4BACrE,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;4BACnC,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;4BAE5B,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAA;;4BAAlD,EAAE,GAAG,SAA6C;4BAC7C,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAA;;4BAAtD,EAAE,GAAG,SAAiD;4BACjD,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAA;;4BAAnD,EAAE,GAAG,SAA8C;4BAE/C,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;oCACpC,SAAS,EAAE,OAAO;oCAClB,UAAU,EAAE,IAAI,+BAAc,CAAY,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;iCAC5E,CAAC,EAAA;;4BAHI,CAAC,GAAG,SAGR;4BAEI,KAAK,GAAG,IAAI,uBAAY,CAAW,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCAClE,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,CAAC,CAAC,EAAE;6BACZ,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,EAAA;;4BAA5C,OAAO,GAAG,SAAkC;4BAClD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEN,qBAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAA;;4BAA3C,SAAS,GAAG,SAA+B;4BACjD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;;;iBACrC,CAAC,CAAC;YAEH,IAAI,CAAC,+EAA+E,EAAE;;;;;4BAC9E,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;4BACnC,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;4BAE7B,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAA;;4BAAlD,CAAC,GAAG,SAA8C;4BAC9C,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;oCACpC,SAAS,EAAE,OAAO;oCAClB,kBAAkB,EAAE,WAAW,CAAC,IAAI;oCACpC,YAAY,EAAE,IAAI,qBAAS,CAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iCAC/D,CAAC,EAAA;;4BAJI,CAAC,GAAG,SAIR;4BAEI,KAAK,GAAG,IAAI,uBAAY,CAAW,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCAClE,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,CAAC,CAAC,EAAE;6BACZ,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,EAAA;;4BAA5C,OAAO,GAAG,SAAkC;4BAClD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEN,qBAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAA;;4BAA3C,SAAS,GAAG,SAA+B;4BACjD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;iBAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH;;WAEG;QACH,QAAQ,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,gEAAgE,EAAE;;;;;4BAC/D,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;4BAC5B,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;4BAE3B,qBAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAA;;4BAA3D,IAAI,GAAG,SAAoD;4BACjE,qBAAM,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE;oCAC5B,IAAI,EAAE,YAAY;oCAClB,OAAO,EAAE,IAAI,qBAAS,CAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;iCACtD,CAAC,EAAA;;4BAHF,SAGE,CAAC;4BAEG,KAAK,GAAG,IAAI,uBAAY,CAAO,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCAC7D,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,IAAI,CAAC,EAAE;6BACf,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAA3C,OAAO,GAAG,SAAiC;4BACjD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEN,qBAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,EAAA;;4BAA5C,SAAS,GAAG,SAAgC;4BAClD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;iBAClC,CAAC,CAAC;YAEH,IAAI,CAAC,uEAAuE,EAAE;;;;;4BACtE,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;4BACtC,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;4BAE/B,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAA;;4BAApD,EAAE,GAAG,SAA+C;4BAC/C,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAA;;4BAAlD,EAAE,GAAG,SAA6C;4BAExD,qBAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;oCAC1B,SAAS,EAAE,UAAU;oCACrB,UAAU,EAAE,IAAI,+BAAc,CAAe,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;iCAC/E,CAAC,EAAA;;4BAHF,SAGE,CAAC;4BAEG,KAAK,GAAG,IAAI,uBAAY,CAAe,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCACvE,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,EAAE,CAAC,EAAE;6BACb,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,EAAA;;4BAA7C,OAAO,GAAG,SAAmC;4BACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEA,qBAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,EAAA;;4BAAhD,eAAe,GAAG,SAA8B;4BACtD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;iBACxC,CAAC,CAAC;YAEH,IAAI,CAAC,uEAAuE,EAAE;;;;;4BACtE,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;4BAChC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;4BAEnB,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAA;;4BAA/D,MAAM,GAAG,SAAsD;4BACrE,qBAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;oCACzB,KAAK,EAAE,iBAAiB;oCACxB,iBAAiB,EAAE,WAAW,CAAC,IAAI;oCACnC,WAAW,EAAE,IAAI,qBAAS,CAAS,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;iCAChE,CAAC,EAAA;;4BAJF,SAIE,CAAC;4BAEG,KAAK,GAAG,IAAI,uBAAY,CAAS,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gCACjE,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,GAAG;gCACb,KAAK,EAAE,MAAM,CAAC,EAAE;6BACjB,CAAC,CAAC;4BACa,qBAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,EAAA;;4BAA7C,OAAO,GAAG,SAAmC;4BACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAED,qBAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,EAAA;;4BAA9C,cAAc,GAAG,SAA6B;4BACpD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;iBACvC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AApNW,QAAA,kBAAkB,sBAoN7B"}
|