@memberjunction/external-change-detection 5.5.0 → 5.6.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/dist/ChangeDetector.d.ts +17 -41
- package/dist/ChangeDetector.d.ts.map +1 -1
- package/dist/ChangeDetector.js +232 -354
- package/dist/ChangeDetector.js.map +1 -1
- package/package.json +6 -5
package/dist/ChangeDetector.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BaseEngine, BaseEntity, CompositeKey,
|
|
2
|
-
import {
|
|
1
|
+
import { BaseEngine, BaseEntity, CompositeKey, EntityFieldTSType, EntityInfo, IMetadataProvider, Metadata, UserInfo } from "@memberjunction/core";
|
|
2
|
+
import { MJRecordChangeReplayRunEntity } from "@memberjunction/core-entities";
|
|
3
3
|
/**
|
|
4
4
|
* Represents a change to a single field in a record
|
|
5
5
|
*/
|
|
@@ -39,6 +39,7 @@ export declare class ChangeDetectionResult {
|
|
|
39
39
|
* This is a server only package
|
|
40
40
|
*/
|
|
41
41
|
export declare class ExternalChangeDetectorEngine extends BaseEngine<ExternalChangeDetectorEngine> {
|
|
42
|
+
private _dialect;
|
|
42
43
|
Config(forceRefresh?: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
|
|
43
44
|
static get Instance(): ExternalChangeDetectorEngine;
|
|
44
45
|
private _IneligibleEntities;
|
|
@@ -77,62 +78,37 @@ export declare class ExternalChangeDetectorEngine extends BaseEngine<ExternalCha
|
|
|
77
78
|
changes: FieldChange[];
|
|
78
79
|
latestRecord: BaseEntity;
|
|
79
80
|
}>;
|
|
80
|
-
protected DoValuesDiffer(
|
|
81
|
+
protected DoValuesDiffer(tsType: EntityFieldTSType, value1: any, value2: any): {
|
|
81
82
|
differ: boolean;
|
|
82
83
|
castValue1: any;
|
|
83
84
|
castValue2: any;
|
|
84
85
|
};
|
|
85
|
-
protected GetLatestRecordChangesDataForEntityRecord(change: ChangeDetectionItem): Promise<any>;
|
|
86
|
-
protected GetLatestDatabaseRecord(md: Metadata, change: ChangeDetectionItem): Promise<BaseEntity>;
|
|
87
86
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* into each item in the changes array for you.
|
|
91
|
-
* @param md
|
|
92
|
-
* @param changes
|
|
93
|
-
* @returns
|
|
87
|
+
* Casts a value to a boolean, properly handling string representations like 'false' and '0'
|
|
88
|
+
* which are truthy in JavaScript but should be treated as false.
|
|
94
89
|
*/
|
|
90
|
+
protected CastToBoolean(value: unknown): boolean;
|
|
91
|
+
protected GetLatestRecordChangesDataForEntityRecord(change: ChangeDetectionItem): Promise<any>;
|
|
95
92
|
protected GetLatestDatabaseRecords(md: Metadata, changes: ChangeDetectionItem[]): Promise<boolean>;
|
|
93
|
+
protected GetLatestDatabaseRecord(md: Metadata, change: ChangeDetectionItem): Promise<BaseEntity>;
|
|
96
94
|
protected getPrimaryKeyString(entity: EntityInfo, tablePrefix: string): string;
|
|
97
|
-
protected generateDetectUpdatesQuery(entity: EntityInfo): string;
|
|
98
|
-
protected generateDetectCreationsQuery(entity: EntityInfo): string;
|
|
99
|
-
protected generateDetectDeletionsQuery(entity: EntityInfo): string;
|
|
100
95
|
/**
|
|
101
96
|
* Detects changes across all of the entities specified
|
|
97
|
+
* @param entities Array of entities to process
|
|
98
|
+
* @param entityBatchSize Optional, defines how many entities to process in parallel. Defaults to 10.
|
|
102
99
|
* @returns
|
|
103
100
|
*/
|
|
104
|
-
DetectChangesForEntities(entities: EntityInfo[]): Promise<ChangeDetectionResult>;
|
|
105
|
-
|
|
106
|
-
* This method will detect changes for all eligible entities as defined by the EligibleEntities property
|
|
107
|
-
*/
|
|
108
|
-
DetectChangesForAllEligibleEntities(): Promise<ChangeDetectionResult>;
|
|
101
|
+
DetectChangesForEntities(entities: EntityInfo[], entityBatchSize?: number): Promise<ChangeDetectionResult>;
|
|
102
|
+
DetectChangesForAllEligibleEntities(entityBatchSize?: number): Promise<ChangeDetectionResult>;
|
|
109
103
|
/**
|
|
110
104
|
* This method will replay all of the items in the changes array
|
|
111
105
|
* @param changes Array of changes to replay.
|
|
112
106
|
* @param batchSize Optional, defines the # of concurrent changes to replay at once. If you want to replay changes serially, set this to 1
|
|
107
|
+
* @param staleTimeoutHours Optional, defines how many hours a run can be in progress before it is considered stale. Defaults to 24.
|
|
113
108
|
* @returns {Promise<boolean>} - Returns true if all changes are successfully replayed, otherwise false.
|
|
114
109
|
*/
|
|
115
|
-
ReplayChanges(changes: ChangeDetectionItem[], batchSize?: number): Promise<boolean>;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
*/
|
|
119
|
-
protected StartRun(): Promise<MJRecordChangeReplayRunEntity>;
|
|
120
|
-
/**
|
|
121
|
-
* Replays a single change item within a given run. This method will:
|
|
122
|
-
* 1) Create a new Record Change record for the replay item
|
|
123
|
-
* 2) Load a BaseEntity derived class for the entity in question and call either Save() or Delete() and pass in the Replay Only option
|
|
124
|
-
* 3) Record the result in the Record Change record, updating status and if appropriate, the error message
|
|
125
|
-
* @param change
|
|
126
|
-
*/
|
|
127
|
-
protected ReplaySingleChange(md: Metadata, run: MJRecordChangeReplayRunEntity, change: ChangeDetectionItem): Promise<boolean>;
|
|
128
|
-
/**
|
|
129
|
-
* This method will attempt to update the RecordChange record and return true if succesful, false otherwise.
|
|
130
|
-
*/
|
|
131
|
-
protected FinishRecordChangeRecord(rc: MJRecordChangeEntity, code: 'error' | 'success', errorMessage: string): Promise<boolean>;
|
|
132
|
-
/**
|
|
133
|
-
* Creates a new record change record for the start of the replay process.
|
|
134
|
-
* @param change
|
|
135
|
-
*/
|
|
136
|
-
protected CreateRecordChangeRecord(md: Metadata, run: MJRecordChangeReplayRunEntity, change: ChangeDetectionItem): Promise<MJRecordChangeEntity>;
|
|
110
|
+
ReplayChanges(changes: ChangeDetectionItem[], batchSize?: number, staleTimeoutHours?: number): Promise<boolean>;
|
|
111
|
+
protected ReplayChange(md: Metadata, change: ChangeDetectionItem): Promise<boolean>;
|
|
112
|
+
protected StartRun(staleTimeoutHours?: number): Promise<MJRecordChangeReplayRunEntity>;
|
|
137
113
|
}
|
|
138
114
|
//# sourceMappingURL=ChangeDetector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeDetector.d.ts","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,UAAU,EAAE,YAAY,EAAgB,
|
|
1
|
+
{"version":3,"file":"ChangeDetector.d.ts","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"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"}
|
package/dist/ChangeDetector.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BaseEngine, CompositeKey, ConsoleColor, EntityFieldTSType, EntityInfo, LogError, LogStatus, Metadata, RunView, UpdateCurrentConsoleLine, UpdateCurrentConsoleProgress } from "@memberjunction/core";
|
|
1
|
+
import { BaseEngine, CompositeKey, ConsoleColor, EntityFieldTSType, EntityInfo, LogError, LogStatus, Metadata, RunQuery, RunView, UpdateCurrentConsoleLine, UpdateCurrentConsoleProgress } from "@memberjunction/core";
|
|
2
2
|
import { UUIDsEqual } from "@memberjunction/global";
|
|
3
|
+
import { PostgreSQLDialect, SQLServerDialect } from "@memberjunction/sql-dialect";
|
|
3
4
|
/**
|
|
4
5
|
* Represents a change to a single field in a record
|
|
5
6
|
*/
|
|
@@ -31,6 +32,9 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
31
32
|
}
|
|
32
33
|
async Config(forceRefresh, contextUser, provider) {
|
|
33
34
|
const p = (provider || Metadata.Provider);
|
|
35
|
+
// Initialize dialect
|
|
36
|
+
const platform = p.DatabasePlatform || 'sqlserver';
|
|
37
|
+
this._dialect = platform === 'postgresql' ? new PostgreSQLDialect() : new SQLServerDialect();
|
|
34
38
|
const c = [
|
|
35
39
|
{
|
|
36
40
|
EntityName: "MJ: Entities",
|
|
@@ -84,17 +88,28 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
84
88
|
throw new Error(`Entity ${entity.Name} is not eligible for external change detection. Refer to the documentation on the EligibleEntities and IneligibleEntities properties for more information.`);
|
|
85
89
|
}
|
|
86
90
|
const md = new Metadata();
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
const rq = new RunQuery();
|
|
92
|
+
const commonParams = {
|
|
93
|
+
EntityID: entity.ID,
|
|
94
|
+
SchemaName: entity.SchemaName,
|
|
95
|
+
BaseView: entity.BaseView,
|
|
96
|
+
ColumnList: entity.PrimaryKeys.map(pk => `ot.${this._dialect.QuoteIdentifier(pk.Name)}`).join(', '),
|
|
97
|
+
PrimaryKeyJoin: this.getPrimaryKeyString(entity, 'ot'),
|
|
98
|
+
CreatedAtField: EntityInfo.CreatedAtFieldName,
|
|
99
|
+
UpdatedAtField: EntityInfo.UpdatedAtFieldName
|
|
100
|
+
};
|
|
101
|
+
const [createResult, updateResult, deleteResult] = await rq.RunQueries([
|
|
102
|
+
{ QueryName: 'ExternalChangeDetection_DetectCreations', Parameters: commonParams },
|
|
103
|
+
{ QueryName: 'ExternalChangeDetection_DetectUpdates', Parameters: commonParams },
|
|
104
|
+
{ QueryName: 'ExternalChangeDetection_DetectDeletions', Parameters: {
|
|
105
|
+
...commonParams,
|
|
106
|
+
PrimaryKeyIsNull: entity.PrimaryKeys.map(pk => `ot.${this._dialect.QuoteIdentifier(pk.Name)} IS NULL`).join(' AND ')
|
|
107
|
+
} }
|
|
108
|
+
], this.ContextUser);
|
|
94
109
|
// we have the results for all of the queries, now we need to convert them into ChangeDetectionItems
|
|
95
110
|
const changes = [];
|
|
96
|
-
if (createResult && createResult.length > 0) {
|
|
97
|
-
for (const row of createResult) {
|
|
111
|
+
if (createResult && createResult.Success && createResult.Results.length > 0) {
|
|
112
|
+
for (const row of createResult.Results) {
|
|
98
113
|
const item = new ChangeDetectionItem();
|
|
99
114
|
item.Entity = entity;
|
|
100
115
|
item.PrimaryKey = new CompositeKey(entity.PrimaryKeys.map(pk => {
|
|
@@ -109,8 +124,8 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
109
124
|
changes.push(item);
|
|
110
125
|
}
|
|
111
126
|
}
|
|
112
|
-
if (updateResult && updateResult.length > 0) {
|
|
113
|
-
for (const row of updateResult) {
|
|
127
|
+
if (updateResult && updateResult.Success && updateResult.Results.length > 0) {
|
|
128
|
+
for (const row of updateResult.Results) {
|
|
114
129
|
const item = new ChangeDetectionItem();
|
|
115
130
|
item.Entity = entity;
|
|
116
131
|
item.PrimaryKey = new CompositeKey(entity.PrimaryKeys.map(pk => {
|
|
@@ -128,8 +143,8 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
128
143
|
}
|
|
129
144
|
}
|
|
130
145
|
}
|
|
131
|
-
if (deleteResult && deleteResult.length > 0) {
|
|
132
|
-
deleteResult.forEach(row => {
|
|
146
|
+
if (deleteResult && deleteResult.Success && deleteResult.Results.length > 0) {
|
|
147
|
+
deleteResult.Results.forEach(row => {
|
|
133
148
|
const item = new ChangeDetectionItem();
|
|
134
149
|
item.Entity = entity;
|
|
135
150
|
const ck = new CompositeKey();
|
|
@@ -193,7 +208,7 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
193
208
|
const changes = [];
|
|
194
209
|
for (const field of record.Fields) {
|
|
195
210
|
if (!field.IsPrimaryKey) {
|
|
196
|
-
const differResult = this.DoValuesDiffer(field, field.Value, json[field.Name]);
|
|
211
|
+
const differResult = this.DoValuesDiffer(field.FieldType, field.Value, json[field.Name]);
|
|
197
212
|
if (differResult.differ) {
|
|
198
213
|
changes.push({
|
|
199
214
|
FieldName: field.Name,
|
|
@@ -210,105 +225,102 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
210
225
|
return { changes: [], latestRecord: record };
|
|
211
226
|
}
|
|
212
227
|
}
|
|
213
|
-
else
|
|
214
|
-
|
|
228
|
+
else {
|
|
229
|
+
// record not found in database, this could happen if it was deleted between detection and replay
|
|
230
|
+
return { changes: [], latestRecord: null };
|
|
231
|
+
}
|
|
215
232
|
}
|
|
216
233
|
catch (e) {
|
|
217
234
|
LogError(e);
|
|
218
235
|
return { changes: [], latestRecord: null };
|
|
219
236
|
}
|
|
220
237
|
}
|
|
221
|
-
DoValuesDiffer(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
switch (field.EntityFieldInfo.TSType) {
|
|
226
|
-
case EntityFieldTSType.Boolean:
|
|
227
|
-
// check to see if value1 and value2 are both boolean, if not, convert them to boolean
|
|
228
|
-
const v1 = typeof value1 === 'boolean' ? value1 : value1 === 'true' ? true : false;
|
|
229
|
-
const v2 = typeof value2 === 'boolean' ? value2 : value2 === 'true' ? true : false;
|
|
230
|
-
return { differ: v1 !== v2, castValue1: v1, castValue2: v2 };
|
|
238
|
+
DoValuesDiffer(tsType, value1, value2) {
|
|
239
|
+
let castValue1 = value1;
|
|
240
|
+
let castValue2 = value2;
|
|
241
|
+
switch (tsType) {
|
|
231
242
|
case EntityFieldTSType.Date:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
243
|
+
castValue1 = value1 ? new Date(value1) : null;
|
|
244
|
+
castValue2 = value2 ? new Date(value2) : null;
|
|
245
|
+
if (castValue1 && castValue2) {
|
|
246
|
+
// check both to see if they're the same - up to 3 digits of precision
|
|
247
|
+
// because when we get the values back into JavaScript objects, Date objects only have 3 digits of precision
|
|
248
|
+
const d1 = castValue1.getTime();
|
|
249
|
+
const d2 = castValue2.getTime();
|
|
250
|
+
return { differ: d1 !== d2, castValue1, castValue2 };
|
|
251
|
+
}
|
|
252
|
+
else
|
|
253
|
+
return { differ: castValue1 !== castValue2, castValue1, castValue2 };
|
|
236
254
|
case EntityFieldTSType.Number:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
const s2 = typeof value2 === 'string' || !value2 ? value2 : value2.toString();
|
|
245
|
-
return { differ: s1 !== s2, castValue1: s1, castValue2: s2 };
|
|
255
|
+
castValue1 = value1 ? parseFloat(value1) : 0;
|
|
256
|
+
castValue2 = value2 ? parseFloat(value2) : 0;
|
|
257
|
+
return { differ: castValue1 !== castValue2, castValue1, castValue2 };
|
|
258
|
+
case EntityFieldTSType.Boolean:
|
|
259
|
+
castValue1 = this.CastToBoolean(value1);
|
|
260
|
+
castValue2 = this.CastToBoolean(value2);
|
|
261
|
+
return { differ: castValue1 !== castValue2, castValue1, castValue2 };
|
|
246
262
|
default:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
return { differ:
|
|
263
|
+
castValue1 = value1 ? value1.toString().trim() : '';
|
|
264
|
+
castValue2 = value2 ? value2.toString().trim() : '';
|
|
265
|
+
return { differ: castValue1 !== castValue2, castValue1, castValue2 };
|
|
250
266
|
}
|
|
251
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Casts a value to a boolean, properly handling string representations like 'false' and '0'
|
|
270
|
+
* which are truthy in JavaScript but should be treated as false.
|
|
271
|
+
*/
|
|
272
|
+
CastToBoolean(value) {
|
|
273
|
+
if (typeof value === 'string') {
|
|
274
|
+
const lower = value.toLowerCase().trim();
|
|
275
|
+
return lower === 'true' || lower === '1';
|
|
276
|
+
}
|
|
277
|
+
return !!value;
|
|
278
|
+
}
|
|
252
279
|
async GetLatestRecordChangesDataForEntityRecord(change) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
280
|
+
try {
|
|
281
|
+
const rv = new RunView();
|
|
282
|
+
const result = await rv.RunView({
|
|
283
|
+
EntityName: "MJ: Record Changes",
|
|
284
|
+
ExtraFilter: `EntityID = '${change.Entity.ID}' AND RecordID = '${change.PrimaryKey.ToConcatenatedString()}' AND Type IN ('Update', 'Create')`,
|
|
285
|
+
OrderBy: "ChangedAt DESC"
|
|
286
|
+
}, this.ContextUser);
|
|
287
|
+
if (result && result.Success && result.Results.length > 0) {
|
|
288
|
+
return result.Results[0];
|
|
289
|
+
}
|
|
290
|
+
else
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
LogError(e);
|
|
268
295
|
return null;
|
|
269
|
-
}
|
|
270
|
-
async GetLatestDatabaseRecord(md, change) {
|
|
271
|
-
const record = await md.GetEntityObject(change.Entity.Name, this.ContextUser);
|
|
272
|
-
if (await record.InnerLoad(change.PrimaryKey)) {
|
|
273
|
-
return record;
|
|
274
296
|
}
|
|
275
|
-
else
|
|
276
|
-
throw new Error(`Failed to load record: ${change.Entity.Name}: ${change.PrimaryKey}`);
|
|
277
297
|
}
|
|
278
|
-
/**
|
|
279
|
-
* Get all of the latest database records together in grouped queries for each entity that has records we need instead
|
|
280
|
-
* of one at a time like GetLatestDatabaseRecord does. This method will return true/false and will place the LatestRecord
|
|
281
|
-
* into each item in the changes array for you.
|
|
282
|
-
* @param md
|
|
283
|
-
* @param changes
|
|
284
|
-
* @returns
|
|
285
|
-
*/
|
|
286
298
|
async GetLatestDatabaseRecords(md, changes) {
|
|
287
299
|
try {
|
|
288
|
-
|
|
300
|
+
const provider = Metadata.Provider;
|
|
301
|
+
// distinct list of entities
|
|
289
302
|
const entities = [];
|
|
290
|
-
const provider = this.ProviderToUse;
|
|
291
303
|
for (const c of changes) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
entity: c.Entity,
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
e.keys.push(c.PrimaryKey);
|
|
304
|
+
if (c.Type === 'Update' || c.Type === 'Create') {
|
|
305
|
+
let entry = entities.find(e => UUIDsEqual(e.entity.ID, c.Entity.ID));
|
|
306
|
+
if (!entry) {
|
|
307
|
+
entry = { entity: c.Entity, keys: [] };
|
|
308
|
+
entities.push(entry);
|
|
309
|
+
}
|
|
310
|
+
entry.keys.push(c.PrimaryKey);
|
|
302
311
|
}
|
|
303
312
|
}
|
|
304
313
|
// now we have a distinct list of entities and all of the pkeys for each one, so we can run a single
|
|
305
314
|
// select statement for each entity
|
|
306
315
|
for (const e of entities) {
|
|
307
|
-
const
|
|
316
|
+
const quotedTable = this._dialect.QuoteSchema(e.entity.SchemaName, e.entity.BaseView);
|
|
317
|
+
const sql = `SELECT * FROM ${quotedTable}
|
|
308
318
|
WHERE ${e.keys.map(k => `(${k.KeyValuePairs.map(kvp => {
|
|
309
319
|
const f = e.entity.Fields.find(f => kvp.FieldName.trim().toLowerCase() === f.Name);
|
|
310
320
|
const quotes = f?.NeedsQuotes ? "'" : "";
|
|
311
|
-
|
|
321
|
+
const quotedField = this._dialect.QuoteIdentifier(kvp.FieldName);
|
|
322
|
+
const escapedValue = typeof kvp.Value === 'string' ? kvp.Value.replace(/'/g, "''") : kvp.Value;
|
|
323
|
+
return `${quotedField}=${quotes}${escapedValue}${quotes}`;
|
|
312
324
|
}).join(' AND ')})`).join(' OR ')} `;
|
|
313
325
|
const result = await provider.ExecuteSQL(sql);
|
|
314
326
|
if (result) {
|
|
@@ -338,77 +350,34 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
338
350
|
return false;
|
|
339
351
|
}
|
|
340
352
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
FROM
|
|
355
|
-
__mj.vwRecordChanges
|
|
356
|
-
WHERE
|
|
357
|
-
Type IN ('Update', 'Create') AND EntityID = '${entity.ID}'
|
|
358
|
-
GROUP BY
|
|
359
|
-
RecordID
|
|
360
|
-
) rc ON ${primaryKeyString} = rc.RecordID
|
|
361
|
-
WHERE
|
|
362
|
-
FORMAT(ot.${EntityInfo.UpdatedAtFieldName}, 'yyyy-MM-dd HH:mm:ss.fff') > COALESCE(FORMAT(rc.last_change_time, 'yyyy-MM-dd HH:mm:ss.fff'), '1900-01-01 00:00:00.000');`;
|
|
363
|
-
// use up to 3 digits of precision because when we get the values back into JavaScript objects, Date objects only have 3 digits of precision
|
|
364
|
-
}
|
|
365
|
-
generateDetectCreationsQuery(entity) {
|
|
366
|
-
const primaryKeyString = this.getPrimaryKeyString(entity, 'ot');
|
|
367
|
-
return `
|
|
368
|
-
SELECT
|
|
369
|
-
${entity.PrimaryKeys.map(pk => `ot.[${pk.Name}]`).join(', ')}, ot.${EntityInfo.CreatedAtFieldName} AS CreatedAt, ot.${EntityInfo.UpdatedAtFieldName} AS UpdatedAt
|
|
370
|
-
FROM
|
|
371
|
-
[${entity.SchemaName}].[${entity.BaseView}] ot
|
|
372
|
-
LEFT JOIN
|
|
373
|
-
__mj.vwRecordChanges rc
|
|
374
|
-
ON
|
|
375
|
-
(${primaryKeyString} = rc.RecordID) AND
|
|
376
|
-
rc.Type = 'Create' AND
|
|
377
|
-
rc.EntityID = '${entity.ID}'
|
|
378
|
-
WHERE
|
|
379
|
-
rc.RecordID IS NULL;
|
|
380
|
-
`;
|
|
353
|
+
async GetLatestDatabaseRecord(md, change) {
|
|
354
|
+
try {
|
|
355
|
+
const record = await md.GetEntityObject(change.Entity.Name, this.ContextUser);
|
|
356
|
+
if (await record.InnerLoad(change.PrimaryKey)) {
|
|
357
|
+
return record;
|
|
358
|
+
}
|
|
359
|
+
else
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
catch (e) {
|
|
363
|
+
LogError(e);
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
381
366
|
}
|
|
382
|
-
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
__mj.vwRecordChanges rc
|
|
389
|
-
LEFT JOIN
|
|
390
|
-
[${entity.SchemaName}].[${entity.BaseView}] ot
|
|
391
|
-
ON
|
|
392
|
-
rc.RecordID = ${primaryKeyString}
|
|
393
|
-
WHERE
|
|
394
|
-
${entity.PrimaryKeys.map(pk => `ot.[${pk.Name}] IS NULL`).join(' AND ')}
|
|
395
|
-
AND
|
|
396
|
-
rc.EntityID = '${entity.ID}'
|
|
397
|
-
AND
|
|
398
|
-
NOT EXISTS
|
|
399
|
-
(
|
|
400
|
-
SELECT rc2.ID FROM __mj.vwRecordChanges rc2 WHERE
|
|
401
|
-
rc2.RecordID = rc.RecordID AND rc2.EntityID=rc.EntityID AND rc2.Type='Delete'
|
|
402
|
-
)
|
|
403
|
-
GROUP BY
|
|
404
|
-
rc.RecordID
|
|
405
|
-
`; // last part of above query makes sure we don't include records already deleted in Record Changes
|
|
367
|
+
getPrimaryKeyString(entity, tablePrefix) {
|
|
368
|
+
const concatOp = this._dialect.ConcatOperator();
|
|
369
|
+
const castToText = (expr) => this._dialect.CastToText(expr);
|
|
370
|
+
const quote = (id) => this._dialect.QuoteIdentifier(id);
|
|
371
|
+
const table = quote(tablePrefix);
|
|
372
|
+
return entity.PrimaryKeys.map(pk => `'${pk.Name}${CompositeKey.DefaultValueDelimiter}' ${concatOp} ${castToText(`${table}.${quote(pk.Name)}`)}`).join(` ${concatOp} '${CompositeKey.DefaultFieldDelimiter}' ${concatOp} `);
|
|
406
373
|
}
|
|
407
374
|
/**
|
|
408
375
|
* Detects changes across all of the entities specified
|
|
376
|
+
* @param entities Array of entities to process
|
|
377
|
+
* @param entityBatchSize Optional, defines how many entities to process in parallel. Defaults to 10.
|
|
409
378
|
* @returns
|
|
410
379
|
*/
|
|
411
|
-
async DetectChangesForEntities(entities) {
|
|
380
|
+
async DetectChangesForEntities(entities, entityBatchSize = 10) {
|
|
412
381
|
try {
|
|
413
382
|
if (!entities)
|
|
414
383
|
throw new Error("entities parameter is required");
|
|
@@ -417,23 +386,28 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
417
386
|
const result = new ChangeDetectionResult();
|
|
418
387
|
result.Success = true;
|
|
419
388
|
result.Changes = [];
|
|
420
|
-
|
|
421
|
-
//
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
promises.push(p);
|
|
428
|
-
p.then(entityResult => {
|
|
429
|
-
UpdateCurrentConsoleProgress(` Finished change detection changes for ${e.Name}`, ++numFinished, entities.length, entityResult.Success ? ConsoleColor.cyan : ConsoleColor.crimson);
|
|
430
|
-
result.Changes = result.Changes.concat(entityResult.Changes);
|
|
431
|
-
result.Success = result.Success && entityResult.Success;
|
|
389
|
+
LogStatus(`Detecting changes for ${entities.length} entities in batches of ${entityBatchSize}`);
|
|
390
|
+
// process entities in batches
|
|
391
|
+
for (let i = 0; i < entities.length; i += entityBatchSize) {
|
|
392
|
+
const batch = entities.slice(i, i + entityBatchSize);
|
|
393
|
+
const batchPromises = batch.map(e => {
|
|
394
|
+
UpdateCurrentConsoleLine(` Starting change detection changes for ${e.Name}`, ConsoleColor.gray);
|
|
395
|
+
return this.DetectChangesForEntity(e);
|
|
432
396
|
});
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
397
|
+
const batchResults = await Promise.all(batchPromises);
|
|
398
|
+
for (let j = 0; j < batch.length; j++) {
|
|
399
|
+
const r = batchResults[j];
|
|
400
|
+
const e = batch[j];
|
|
401
|
+
if (r.Success) {
|
|
402
|
+
result.Changes.push(...r.Changes);
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
result.Success = false;
|
|
406
|
+
result.ErrorMessage = (result.ErrorMessage ? result.ErrorMessage + "\n" : "") + `Error detecting changes for ${e.Name}: ` + r.ErrorMessage;
|
|
407
|
+
}
|
|
408
|
+
UpdateCurrentConsoleProgress(` Finished change detection changes for ${e.Name}`, i + j + 1, entities.length, r.Success ? ConsoleColor.cyan : ConsoleColor.crimson);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
437
411
|
return result;
|
|
438
412
|
}
|
|
439
413
|
catch (e) {
|
|
@@ -445,237 +419,141 @@ export class ExternalChangeDetectorEngine extends BaseEngine {
|
|
|
445
419
|
};
|
|
446
420
|
}
|
|
447
421
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
*/
|
|
451
|
-
async DetectChangesForAllEligibleEntities() {
|
|
452
|
-
return await this.DetectChangesForEntities(this.EligibleEntities);
|
|
422
|
+
async DetectChangesForAllEligibleEntities(entityBatchSize = 10) {
|
|
423
|
+
return await this.DetectChangesForEntities(this.EligibleEntities, entityBatchSize);
|
|
453
424
|
}
|
|
454
425
|
/**
|
|
455
426
|
* This method will replay all of the items in the changes array
|
|
456
427
|
* @param changes Array of changes to replay.
|
|
457
428
|
* @param batchSize Optional, defines the # of concurrent changes to replay at once. If you want to replay changes serially, set this to 1
|
|
429
|
+
* @param staleTimeoutHours Optional, defines how many hours a run can be in progress before it is considered stale. Defaults to 24.
|
|
458
430
|
* @returns {Promise<boolean>} - Returns true if all changes are successfully replayed, otherwise false.
|
|
459
431
|
*/
|
|
460
|
-
async ReplayChanges(changes, batchSize = 20) {
|
|
432
|
+
async ReplayChanges(changes, batchSize = 20, staleTimeoutHours = 24) {
|
|
461
433
|
let run; // delcare outside of try block so we have access to it in the catch block
|
|
462
434
|
try {
|
|
463
435
|
if (changes && changes.length > 0) {
|
|
464
436
|
const md = new Metadata();
|
|
465
437
|
const results = [];
|
|
466
|
-
run = await this.StartRun();
|
|
438
|
+
run = await this.StartRun(staleTimeoutHours);
|
|
467
439
|
LogStatus(`Replaying ${changes.length} changes`);
|
|
468
440
|
let numProcessed = 0;
|
|
469
441
|
for (let i = 0; i < changes.length; i += batchSize) {
|
|
470
442
|
const batch = changes.slice(i, i + batchSize);
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
return
|
|
443
|
+
const batchPromises = batch.map(async (c) => {
|
|
444
|
+
const result = await this.ReplayChange(md, c);
|
|
445
|
+
numProcessed++;
|
|
446
|
+
UpdateCurrentConsoleProgress(` Replayed ${numProcessed} of ${changes.length} changes`, numProcessed, changes.length);
|
|
447
|
+
return result;
|
|
476
448
|
});
|
|
477
|
-
// Wait for all promises in the current batch to complete
|
|
478
449
|
const batchResults = await Promise.all(batchPromises);
|
|
479
450
|
results.push(...batchResults);
|
|
480
451
|
}
|
|
481
|
-
//
|
|
482
|
-
|
|
483
|
-
// const result = await this.ReplaySingleChange(md, run, change);
|
|
484
|
-
// results.push({Success: result, change: change});
|
|
485
|
-
// }
|
|
452
|
+
// finalize the run record
|
|
453
|
+
run.Status = 'Complete';
|
|
486
454
|
run.EndedAt = new Date();
|
|
487
|
-
run.
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
throw new Error("Failed to save run");
|
|
493
|
-
}
|
|
455
|
+
await run.Save();
|
|
456
|
+
return results.every(r => r === true);
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
return true; // no changes to replay
|
|
494
460
|
}
|
|
495
|
-
else
|
|
496
|
-
return true; // no changes to process
|
|
497
461
|
}
|
|
498
462
|
catch (e) {
|
|
499
463
|
LogError(e);
|
|
500
464
|
if (run) {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
run.EndedAt = new Date();
|
|
505
|
-
await run.Save(); // dont' care about return value here, we've already tried to save it and the return value will be false anyway and message is the original root cause of the first exception
|
|
506
|
-
}
|
|
507
|
-
catch (innerError) {
|
|
508
|
-
LogError('Attempted to mark run as error failed, make sure you update the database for future runs to be allowed.');
|
|
509
|
-
LogError(innerError);
|
|
510
|
-
return false; // couldn't get it done
|
|
511
|
-
}
|
|
465
|
+
run.Status = 'Error';
|
|
466
|
+
run.EndedAt = new Date();
|
|
467
|
+
await run.Save();
|
|
512
468
|
}
|
|
513
469
|
return false;
|
|
514
470
|
}
|
|
515
471
|
}
|
|
516
|
-
|
|
517
|
-
* Method creates a new Record Change Replay Run and returns the object for the run
|
|
518
|
-
*/
|
|
519
|
-
async StartRun() {
|
|
520
|
-
// first make sure an existing run isn't in progress
|
|
521
|
-
const rv = new RunView();
|
|
522
|
-
const existingRun = await rv.RunView({
|
|
523
|
-
EntityName: "MJ: Record Change Replay Runs",
|
|
524
|
-
ExtraFilter: "Status NOT IN('Complete', 'Error')"
|
|
525
|
-
}, this.ContextUser);
|
|
526
|
-
if (existingRun && existingRun.Success) {
|
|
527
|
-
if (existingRun.Results.length > 0)
|
|
528
|
-
throw new Error(`Existing Record Change Replay Run ${existingRun.Results[0].ID} is not complete or marked as error, cannot start a new run.`);
|
|
529
|
-
else {
|
|
530
|
-
const md = new Metadata();
|
|
531
|
-
const run = await md.GetEntityObject("MJ: Record Change Replay Runs", this.ContextUser);
|
|
532
|
-
run.StartedAt = new Date();
|
|
533
|
-
run.UserID = this.ContextUser.ID;
|
|
534
|
-
run.Status = 'In Progress';
|
|
535
|
-
if (await run.Save()) {
|
|
536
|
-
return run;
|
|
537
|
-
}
|
|
538
|
-
else
|
|
539
|
-
throw new Error("Failed to start run");
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
else {
|
|
543
|
-
// failed to run the view
|
|
544
|
-
throw new Error("Failed to check for existing run: " + existingRun.ErrorMessage);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
/**
|
|
548
|
-
* Replays a single change item within a given run. This method will:
|
|
549
|
-
* 1) Create a new Record Change record for the replay item
|
|
550
|
-
* 2) Load a BaseEntity derived class for the entity in question and call either Save() or Delete() and pass in the Replay Only option
|
|
551
|
-
* 3) Record the result in the Record Change record, updating status and if appropriate, the error message
|
|
552
|
-
* @param change
|
|
553
|
-
*/
|
|
554
|
-
async ReplaySingleChange(md, run, change) {
|
|
472
|
+
async ReplayChange(md, change) {
|
|
555
473
|
try {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
474
|
+
switch (change.Type) {
|
|
475
|
+
case 'Create':
|
|
476
|
+
case 'Update':
|
|
477
|
+
// for creates and updates we have the latest record already loaded
|
|
478
|
+
// and we have the list of changes, so we just need to save the record
|
|
479
|
+
if (change.LatestRecord) {
|
|
480
|
+
return await change.LatestRecord.Save();
|
|
481
|
+
}
|
|
482
|
+
else
|
|
483
|
+
return false;
|
|
484
|
+
case 'Delete':
|
|
485
|
+
// for deletes we need to load the record and then delete it
|
|
486
|
+
const record = await md.GetEntityObject(change.Entity.Name, this.ContextUser);
|
|
487
|
+
if (await record.InnerLoad(change.PrimaryKey)) {
|
|
488
|
+
return await record.Delete();
|
|
567
489
|
}
|
|
568
490
|
else {
|
|
569
|
-
//
|
|
570
|
-
return
|
|
491
|
+
// if we can't load it, it's already gone, so we're good
|
|
492
|
+
return true;
|
|
571
493
|
}
|
|
572
|
-
}
|
|
573
|
-
// if we get here, entityObject is now all set to go for replay!
|
|
574
|
-
if (change.Type === 'Delete') {
|
|
575
|
-
const result = await entityObject.Delete({
|
|
576
|
-
ReplayOnly: true
|
|
577
|
-
});
|
|
578
|
-
return this.FinishRecordChangeRecord(rc, result ? 'success' : 'error', entityObject.LatestResult?.CompleteMessage);
|
|
579
|
-
}
|
|
580
|
-
else {
|
|
581
|
-
// for updates and creates we just call Save() with the ReplayOnly option
|
|
582
|
-
const result = await entityObject.Save({
|
|
583
|
-
ReplayOnly: true,
|
|
584
|
-
IgnoreDirtyState: false //not relevant for replay
|
|
585
|
-
});
|
|
586
|
-
return this.FinishRecordChangeRecord(rc, result ? 'success' : 'error', entityObject.LatestResult?.CompleteMessage);
|
|
587
|
-
}
|
|
588
494
|
}
|
|
589
|
-
else {
|
|
590
|
-
throw new Error("Failed to create Record Change record");
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
catch (e) {
|
|
594
|
-
LogError(e);
|
|
595
|
-
return false;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
/**
|
|
599
|
-
* This method will attempt to update the RecordChange record and return true if succesful, false otherwise.
|
|
600
|
-
*/
|
|
601
|
-
async FinishRecordChangeRecord(rc, code, errorMessage) {
|
|
602
|
-
try {
|
|
603
|
-
rc.Status = code === 'error' ? 'Error' : 'Complete';
|
|
604
|
-
rc.ErrorLog = errorMessage;
|
|
605
|
-
if (await rc.Save())
|
|
606
|
-
return true;
|
|
607
|
-
else
|
|
608
|
-
return false;
|
|
609
495
|
}
|
|
610
496
|
catch (e) {
|
|
611
497
|
LogError(e);
|
|
612
498
|
return false;
|
|
613
499
|
}
|
|
614
500
|
}
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
if (
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
oldValue: field.OldValue,
|
|
644
|
-
newValue: field.NewValue
|
|
645
|
-
};
|
|
501
|
+
async StartRun(staleTimeoutHours = 24) {
|
|
502
|
+
// first make sure an existing run isn't in progress
|
|
503
|
+
const rv = new RunView();
|
|
504
|
+
const existingRun = await rv.RunView({
|
|
505
|
+
EntityName: "MJ: Record Change Replay Runs",
|
|
506
|
+
ExtraFilter: "Status NOT IN('Complete', 'Error')"
|
|
507
|
+
}, this.ContextUser);
|
|
508
|
+
if (existingRun && existingRun.Success) {
|
|
509
|
+
if (existingRun.Results.length > 0) {
|
|
510
|
+
// we have an existing run, check to see if it is "stale"
|
|
511
|
+
const runData = existingRun.Results[0];
|
|
512
|
+
const startedAt = new Date(runData.StartedAt);
|
|
513
|
+
const now = new Date();
|
|
514
|
+
const diff = now.getTime() - startedAt.getTime();
|
|
515
|
+
const hours = diff / (1000 * 60 * 60);
|
|
516
|
+
if (hours > staleTimeoutHours) {
|
|
517
|
+
// this is a stale run, so mark it as error and allow a new run to proceed
|
|
518
|
+
const md = new Metadata();
|
|
519
|
+
const staleRun = await md.GetEntityObject("MJ: Record Change Replay Runs", this.ContextUser);
|
|
520
|
+
await staleRun.InnerLoad(runData.ID);
|
|
521
|
+
staleRun.Status = 'Error';
|
|
522
|
+
staleRun.EndedAt = new Date();
|
|
523
|
+
await staleRun.Save();
|
|
524
|
+
LogStatus(`Marked stale Record Change Replay Run ${runData.ID} as Error (Started: ${startedAt.toISOString()})`);
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
throw new Error(`Existing Record Change Replay Run ${runData.ID} is not complete or marked as error, cannot start a new run. It started at ${startedAt.toISOString()}.`);
|
|
528
|
+
}
|
|
646
529
|
}
|
|
647
|
-
if
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
530
|
+
// if we get here, either there was no existing run, or we just marked a stale run as error
|
|
531
|
+
const md = new Metadata();
|
|
532
|
+
const run = await md.GetEntityObject("MJ: Record Change Replay Runs", this.ContextUser);
|
|
533
|
+
run.StartedAt = new Date();
|
|
534
|
+
run.UserID = this.ContextUser.ID;
|
|
535
|
+
run.Status = 'In Progress';
|
|
536
|
+
if (await run.Save()) {
|
|
537
|
+
// Mitigate race conditions: double-check that no other process started a run at the exact same time
|
|
538
|
+
const doubleCheck = await rv.RunView({
|
|
539
|
+
EntityName: "MJ: Record Change Replay Runs",
|
|
540
|
+
ExtraFilter: `Status = 'In Progress' AND ID <> '${run.ID}'`
|
|
541
|
+
}, this.ContextUser);
|
|
542
|
+
if (doubleCheck && doubleCheck.Success && doubleCheck.Results.length > 0) {
|
|
543
|
+
// Another run snuck in! Back out to prevent duplicate processing.
|
|
544
|
+
run.Status = 'Error';
|
|
545
|
+
run.EndedAt = new Date();
|
|
546
|
+
await run.Save(); // Mark it as an error rather than deleting it to keep an audit trail
|
|
547
|
+
throw new Error("Another process started a run concurrently. Aborting this run to prevent duplicate work.");
|
|
548
|
+
}
|
|
549
|
+
return run;
|
|
657
550
|
}
|
|
658
551
|
else
|
|
659
|
-
|
|
660
|
-
const provider = this.ProviderToUse;
|
|
661
|
-
if (change.Type === 'Update')
|
|
662
|
-
rc.ChangesDescription = provider.CreateUserDescriptionOfChanges(changesObject);
|
|
663
|
-
else if (change.Type === 'Create')
|
|
664
|
-
rc.ChangesDescription = 'New Record';
|
|
665
|
-
else
|
|
666
|
-
rc.ChangesDescription = 'Record Deleted';
|
|
667
|
-
rc.ReplayRunID = run.ID;
|
|
668
|
-
rc.UserID = this.ContextUser.ID;
|
|
669
|
-
if (await rc.Save()) {
|
|
670
|
-
return rc;
|
|
671
|
-
}
|
|
672
|
-
else {
|
|
673
|
-
throw new Error("Failed to save Record Change record: " + rc.LatestResult?.CompleteMessage);
|
|
674
|
-
}
|
|
552
|
+
throw new Error("Failed to start run");
|
|
675
553
|
}
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
554
|
+
else {
|
|
555
|
+
// failed to run the view
|
|
556
|
+
throw new Error("Failed to check for existing run: " + existingRun.ErrorMessage);
|
|
679
557
|
}
|
|
680
558
|
}
|
|
681
559
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeDetector.js","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwC,YAAY,EAAE,YAAY,EAAe,iBAAiB,EAAE,UAAU,EAAmC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAY,MAAM,sBAAsB,CAAC;AAE3S,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD;;GAEG;AACH,MAAM,OAAO,WAAW;CAIvB;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAAhC;QAWW,cAAS,GAAa,KAAK,CAAC,CAAC,iFAAiF;IAEzH,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,OAAO,qBAAqB;CAIjC;AAED;;;;;GAKG;AACH,MAAM,OAAO,4BAA6B,SAAQ,UAAwC;IAA1F;;QAoBY,wBAAmB,GAAa,EAAE,CAAC,CAAA,wKAAwK;IAwrBvN,CAAC;IA3sBU,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAA2B,CAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAE,CAAC;QAEpE,MAAM,CAAC,GAA6C;YAChD;gBACI,UAAU,EAAE,cAAc;gBAC1B,YAAY,EAAE,mBAAmB;gBACjC,MAAM,EAAE,yBAAyB,CAAC,CAAC,gBAAgB,wCAAwC,EAAE,2IAA2I;gBACxO,UAAU,EAAE,IAAI;aACnB;SACJ,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAEM,MAAM,KAAK,QAAQ;QACtB,OAAO,KAAK,CAAC,WAAW,EAAgC,CAAC;IAC7D,CAAC;IAID;;;;;;;;;OASG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAID;;;;;;;;OAQG;IACH,IAAW,gBAAgB;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxJ,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,sBAAsB,CAAC,MAAkB;QAClD,IAAI,CAAC;YACD,6DAA6D;YAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACpD,CAAC;iBACI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,4JAA4J,CAAC,CAAC;YACvM,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAiC,CAAC;YAE5D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAE3D,oGAAoG;YACpG,MAAM,OAAO,GAA0B,EAAE,CAAC;YAC1C,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;oBACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBAC3D,OAAO;4BACH,SAAS,EAAE,EAAE,CAAC,IAAI;4BAClB,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;yBACtB,CAAA;oBACL,CAAC,CAAC,CAAC,CAAC;oBACJ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACrB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;oBAChF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,uCAAuC;oBAE1D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACL,CAAC;YAED,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;oBACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBAC3D,OAAO;4BACH,SAAS,EAAE,EAAE,CAAC,IAAI;4BAClB,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;yBACtB,CAAA;oBACL,CAAC,CAAC,CAAC,CAAC;oBACJ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACrB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;oBAE/B,8EAA8E;oBAC9E,6DAA6D;oBAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;wBAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACvB,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;oBACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC9B,2GAA2G;oBAC3G,8GAA8G;oBAC9G,kHAAkH;oBAClH,4FAA4F;oBAC5F,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAClE,uEAAuE;wBACvE,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,iDAAiD;wBAC1H,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC;oBACvC,CAAC;;wBAEG,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,8DAA8D;oBAE/G,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACrB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;oBAC/B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,8CAA8C;oBACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACP,CAAC;YAED,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,gDAAgD;YAElG,gGAAgG;YAChG,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC/D,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;gBACtC,CAAC;YACL,CAAC;YAED,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,OAAO;aACnB,CAAC;QACN,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC,CAAC,OAAO;gBACvB,OAAO,EAAE,EAAE;aACd,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,sBAAsB,CAAC,EAAY,EAAE,MAA2B;QACzE,IAAI,CAAC;YACD,+EAA+E;YAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC1G,IAAI,MAAM,EAAE,CAAC;gBACT,0FAA0F;gBAC1F,8GAA8G;gBAC9G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yCAAyC,CAAC,MAAM,CAAC,CAAC;gBAC5E,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtE,4EAA4E;oBAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC/C,8EAA8E;oBAC9E,MAAM,OAAO,GAAkB,EAAE,CAAC;oBAClC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;4BACtB,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;4BAC9E,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gCACtB,OAAO,CAAC,IAAI,CAAC;oCACT,SAAS,EAAE,KAAK,CAAC,IAAI;oCACrB,QAAQ,EAAE,YAAY,CAAC,UAAU,EAAE,qDAAqD;oCACxF,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAE,qDAAqD;iCAC3F,CAAC,CAAC;4BACP,CAAC;wBACL,CAAC;oBACL,CAAC;oBACD,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC;gBAC3C,CAAC;qBACI,CAAC;oBACF,SAAS,CAAC,sFAAsF,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;oBACnK,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC;gBAC/C,CAAC;YACL,CAAC;;gBAEG,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAES,cAAc,CAAC,KAAkB,EAAE,MAAW,EAAE,MAAW;QACjE,4BAA4B;QAC5B,4HAA4H;QAC5H,oEAAoE;QACpE,QAAQ,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,iBAAiB,CAAC,OAAO;gBAC1B,sFAAsF;gBACtF,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnF,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnF,OAAO,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC,CAAC;YAC/D,KAAK,iBAAiB,CAAC,IAAI;gBACvB,kFAAkF;gBAClF,MAAM,EAAE,GAAG,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9D,MAAM,EAAE,GAAG,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9D,OAAO,EAAC,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC,CAAC;YACnF,KAAK,iBAAiB,CAAC,MAAM;gBACzB,sFAAsF;gBACtF,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtF,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtF,OAAO,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC,CAAC;YAC/D,KAAK,iBAAiB,CAAC,MAAM;gBACzB,sFAAsF;gBACtF,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9E,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9E,OAAO,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC,CAAC;YAC/D;gBACI,qFAAqF;gBACrF,iFAAiF;gBACjF,OAAO,EAAC,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAES,KAAK,CAAC,yCAAyC,CAAC,MAA2B;QACjF,MAAM,QAAQ,GAA0B,IAAI,CAAC,aAAa,CAAC;QAE3D,MAAM,GAAG,GAAG;;;0BAGM,QAAQ,CAAC,gBAAgB;;sCAEb,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE;0CACpC,MAAM,CAAC,MAAM,CAAC,EAAE;;;uCAGnB,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAC3B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;;YAEjB,OAAO,IAAI,CAAC;IACpB,CAAC;IAES,KAAK,CAAC,uBAAuB,CAAC,EAAY,EAAE,MAA2B;QAC7E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9E,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,CAAC;YAC7C,OAAO,MAAM,CAAC;QAClB,CAAC;;YAEG,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED;;;;;;;OAOG;IACO,KAAK,CAAC,wBAAwB,CAAC,EAAY,EAAE,OAA8B;QACjF,IAAI,CAAC;YACD,gFAAgF;YAChF,MAAM,QAAQ,GAAiD,EAAE,CAAC;YAClE,MAAM,QAAQ,GAA0B,IAAI,CAAC,aAAa,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC/D,IAAI,CAAC,CAAC,EAAE,CAAC;oBACL,CAAC,GAAG;wBACA,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;qBACvB,CAAC;oBACF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;qBACI,CAAC;oBACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;YACL,CAAC;YAED,oGAAoG;YACpG,mCAAmC;YACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ;oCACpD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnF,MAAM,MAAM,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,OAAO,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAA;gBAC9D,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;gBACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACT,yGAAyG;oBACzG,wCAAwC;oBACxC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;wBACrB,MAAM,GAAG,GAAmB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;4BACtD,OAAO;gCACH,SAAS,EAAE,EAAE,CAAC,IAAI;gCAClB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;6BACpB,CAAA;wBACL,CAAC,CAAC,CAAA;wBACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;wBAC7F,IAAI,UAAU,EAAE,CAAC;4BACb,wCAAwC;4BACxC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;4BAClF,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;4BAC7B,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC;wBACrC,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAGS,mBAAmB,CAAC,MAAkB,EAAE,WAAmB;QACjE,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC,qBAAqB,YAAY,WAAW,KAAK,EAAE,CAAC,IAAI,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,qBAAqB,MAAM,CAAC,CAAC;IACxM,CAAC;IAES,0BAA0B,CAAC,MAAkB;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAE/D,OAAO;;kBAEG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,kBAAkB;;mBAE/F,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ;;;;;;;mEAOU,MAAM,CAAC,EAAE;;;sBAGtD,gBAAgB;;4BAEV,UAAU,CAAC,kBAAkB,6HAA6H,CAAC;QACvK,4IAA4I;IACxJ,CAAC;IAES,4BAA4B,CAAC,MAAkB;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEhE,OAAO;;kBAEG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,kBAAkB,qBAAqB,UAAU,CAAC,kBAAkB;;mBAEhJ,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ;;;;mBAItC,gBAAgB;;iCAEF,MAAM,CAAC,EAAE;;;SAGjC,CAAC;IACN,CAAC;IAES,4BAA4B,CAAC,MAAkB;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEhE,OAAO;;;;;;mBAMI,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ;;gCAEzB,gBAAgB;;kBAE9B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;;qCAElD,MAAM,CAAC,EAAE;;;;;;;;;SASrC,CAAC,CAAC,iGAAiG;IACxG,CAAC;IAID;;;OAGG;IACI,KAAK,CAAC,wBAAwB,CAAC,QAAsB;QACxD,IAAI,CAAC;YACD,IAAI,CAAC,QAAQ;gBACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;iBACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAE9E,MAAM,MAAM,GAA0B,IAAI,qBAAqB,EAAE,CAAC;YAClE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YAEpB,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,gCAAgC;YAChC,SAAS,CAAC,yBAAyB,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAA;YAC9D,IAAI,WAAW,GAAW,CAAC,CAAC;YAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,wBAAwB,CAAC,4CAA4C,CAAC,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClG,MAAM,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;gBACrD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBAClB,4BAA4B,CAAC,4CAA4C,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACpL,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC7D,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC;gBAC5D,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,6CAA6C;YAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5B,4BAA4B,CAAC,qCAAqC,QAAQ,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAExL,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC,CAAC,OAAO;gBACvB,OAAO,EAAE,EAAE;aACd,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mCAAmC;QAC5C,OAAO,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CAAC,OAA8B,EAAE,YAAoB,EAAE;QAC7E,IAAI,GAAG,CAAC,CAAC,0EAA0E;QACnF,IAAI,CAAC;YACD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5B,SAAS,CAAC,aAAa,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;gBAEjD,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;oBACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;oBAE9C,4BAA4B;oBAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;wBAC7C,4BAA4B,CACxB,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,EAC/F,EAAE,YAAY,EACd,OAAO,CAAC,MAAM,EACd,YAAY,CAAC,IAAI,CACpB,CAAC;wBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;wBAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;oBAC/C,CAAC,CAAC,CAAC;oBAEH,yDAAyD;oBACzD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACtD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;gBAClC,CAAC;gBAED,kCAAkC;gBAClC,iMAAiM;gBACjM,qEAAqE;gBACrE,uDAAuD;gBACvD,IAAI;gBAEJ,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;gBAClE,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACzC,CAAC;qBACI,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;;gBAEG,OAAO,IAAI,CAAC,CAAC,wBAAwB;QAC7C,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,GAAG,EAAE,CAAC;gBACN,mCAAmC;gBACnC,IAAI,CAAC;oBACD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;oBACrB,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,6KAA6K;gBACnM,CAAC;gBACD,OAAO,UAAU,EAAE,CAAC;oBAChB,QAAQ,CAAC,yGAAyG,CAAC,CAAC;oBACpH,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACrB,OAAO,KAAK,CAAC,CAAC,uBAAuB;gBACzC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,QAAQ;QACpB,oDAAoD;QACpD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;YACjC,UAAU,EAAE,+BAA+B;YAC3C,WAAW,EAAE,oCAAoC;SACpD,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,8DAA8D,CAAC,CAAC;iBAC7I,CAAC;gBACF,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,eAAe,CAAgC,+BAA+B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;gBACtH,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;gBAC3B,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACf,CAAC;;oBAEG,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC;aACI,CAAC;YACF,yBAAyB;YACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QACrF,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,kBAAkB,CAAC,EAAY,EAAE,GAAkC,EAAE,MAA2B;QAC5G,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,EAAE,EAAE,CAAC;gBACL,8CAA8C;gBAC9C,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,+CAA+C;gBACvF,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,iHAAiH;oBACjH,YAAY,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC9E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,yCAAyC,CAAC,MAAM,CAAC,CAAC;oBAClF,IAAI,YAAY,IAAI,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBACpD,MAAM,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,4DAA4D;oBACtG,CAAC;yBACI,CAAC;wBACF,sJAAsJ;wBACtJ,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,OAAO,EAAE,4GAA4G,CAAC,CAAC;oBACpK,CAAC;gBACL,CAAC;gBACD,gEAAgE;gBAChE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;wBACrC,UAAU,EAAE,IAAI;qBACnB,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBACvH,CAAC;qBACI,CAAC;oBACF,yEAAyE;oBACzE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC;wBACnC,UAAU,EAAE,IAAI;wBAChB,gBAAgB,EAAE,KAAK,CAAC,yBAAyB;qBACpD,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBACvH,CAAC;YACL,CAAC;iBACI,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,wBAAwB,CAAC,EAAwB,EAAE,IAAyB,EAAE,YAAoB;QAC9G,IAAI,CAAC;YACD,EAAE,CAAC,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACpD,EAAE,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC3B,IAAG,MAAM,EAAE,CAAC,IAAI,EAAE;gBACd,OAAO,IAAI,CAAC;;gBAEZ,OAAO,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,wBAAwB,CAAC,EAAY,EAAE,GAAkC,EAAE,MAA2B;QAClH,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAAuB,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAClG,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAE/B,IAAI,MAAM,CAAC,SAAS;gBAChB,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,wHAAwH;;gBAE7J,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAE3D,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;YACvB,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS;gBAChB,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;iBAC/B,CAAC;gBACF,kFAAkF;gBAClF,qFAAqF;gBACrF,gBAAgB;gBAChB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,EAAE,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,aAAa,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;oBAC7B,KAAK,EAAE,KAAK,CAAC,SAAS;oBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBAC3B,CAAC;YACN,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxB,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;;gBAE/C,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,WAAW;YAEpC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAC1C,IAAI,GAAG;oBACH,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;;oBAExC,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,mBAAmB;YACnD,CAAC;;gBAEG,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,mBAAmB;YAE/C,MAAM,QAAQ,GAA0B,IAAI,CAAC,aAAa,CAAC;YAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxB,EAAE,CAAC,kBAAkB,GAAG,QAAQ,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC;iBAC9E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC7B,EAAE,CAAC,kBAAkB,GAAG,YAAY,CAAC;;gBAErC,EAAE,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;YAE7C,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;YACd,CAAC;iBACI,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YAChG,CAAC;QACL,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"ChangeDetector.js","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/external-change-detection",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.6.0",
|
|
5
5
|
"description": "Library used by server side applications to determine if changes have been made to entities by external systems/integrations",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -20,10 +20,11 @@
|
|
|
20
20
|
"typescript": "^5.9.3"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@memberjunction/core": "5.
|
|
24
|
-
"@memberjunction/core-entities": "5.
|
|
25
|
-
"@memberjunction/global": "5.
|
|
26
|
-
"@memberjunction/
|
|
23
|
+
"@memberjunction/core": "5.6.0",
|
|
24
|
+
"@memberjunction/core-entities": "5.6.0",
|
|
25
|
+
"@memberjunction/global": "5.6.0",
|
|
26
|
+
"@memberjunction/sql-dialect": "5.6.0",
|
|
27
|
+
"@memberjunction/sqlserver-dataprovider": "5.6.0"
|
|
27
28
|
},
|
|
28
29
|
"repository": {
|
|
29
30
|
"type": "git",
|