@wavemaker/app-ng-runtime 11.14.1-8.6337 → 11.14.1-9.6343
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/components/base/bundles/index.umd.js +8 -77
- package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -67
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -7
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
- package/components/base/fesm2022/index.mjs +9 -78
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +1 -9
- package/components/basic/label/esm2022/label.directive.mjs +2 -10
- package/components/basic/label/fesm2022/index.mjs +1 -9
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +0 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +1 -5
- package/components/data/pagination/fesm2022/index.mjs +0 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +12 -219
- package/components/data/table/esm2022/table-cud.directive.mjs +2 -2
- package/components/data/table/esm2022/table.component.mjs +12 -219
- package/components/data/table/fesm2022/index.mjs +12 -219
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table.component.d.ts +2 -6
- package/components/navigation/menu/bundles/index.umd.js +0 -5
- package/components/navigation/menu/esm2022/menu.component.mjs +1 -6
- package/components/navigation/menu/fesm2022/index.mjs +0 -5
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +6 -6
- package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
- package/components/navigation/popover/fesm2022/index.mjs +3 -3
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +0 -6
- package/core/bundles/index.umd.js +82 -395
- package/core/esm2022/public_api.mjs +2 -2
- package/core/esm2022/utils/watcher.mjs +81 -392
- package/core/fesm2022/index.mjs +84 -395
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -1
- package/core/utils/watcher.d.ts +5 -28
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +0 -20
- package/runtime/base/esm2022/components/app-component/app.component.mjs +2 -4
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -6
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-prefab.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +2 -6
- package/runtime/base/fesm2022/index.mjs +1 -21
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +2 -34
|
@@ -1450,11 +1450,11 @@
|
|
|
1450
1450
|
}
|
|
1451
1451
|
};
|
|
1452
1452
|
|
|
1453
|
-
const $RAF = window.requestAnimationFrame;
|
|
1453
|
+
const $RAF$1 = window.requestAnimationFrame;
|
|
1454
1454
|
const $RAFQueue = [];
|
|
1455
1455
|
const invokeLater = fn => {
|
|
1456
1456
|
if (!$RAFQueue.length) {
|
|
1457
|
-
$RAF(() => {
|
|
1457
|
+
$RAF$1(() => {
|
|
1458
1458
|
$RAFQueue.forEach(f => f());
|
|
1459
1459
|
$RAFQueue.length = 0;
|
|
1460
1460
|
});
|
|
@@ -2191,89 +2191,14 @@
|
|
|
2191
2191
|
return fnExecutor(expr, ExpressionType.Action);
|
|
2192
2192
|
};
|
|
2193
2193
|
|
|
2194
|
-
// Constants
|
|
2195
|
-
const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
|
|
2196
|
-
const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
|
|
2197
|
-
const ARRAY_INDEX_PLACEHOLDER = '[$i]';
|
|
2198
|
-
const ARRAY_INDEX_ZERO = '[0]';
|
|
2199
|
-
const DEBOUNCE_WAIT = 100;
|
|
2200
|
-
const MAX_WATCH_CYCLES = 5;
|
|
2201
2194
|
const registry = new Map();
|
|
2202
2195
|
const watchIdGenerator = new IDGenerator('watch-id-');
|
|
2203
|
-
const FIRST_TIME_WATCH =
|
|
2204
|
-
|
|
2196
|
+
const FIRST_TIME_WATCH = {};
|
|
2197
|
+
Object.freeze(FIRST_TIME_WATCH);
|
|
2198
|
+
const isFirstTimeChange = v => v === FIRST_TIME_WATCH;
|
|
2205
2199
|
let muted = false;
|
|
2206
|
-
let changedByWatch = false;
|
|
2207
|
-
let skipWatchers = false;
|
|
2208
|
-
let ngZone;
|
|
2209
2200
|
let appRef;
|
|
2210
|
-
|
|
2211
|
-
* CLEANUP SCHEDULER WITH:
|
|
2212
|
-
* - Significant watcher delta trigger (+/-)
|
|
2213
|
-
* - UI stabilization delay (1–2 seconds)
|
|
2214
|
-
* - Cooldown to prevent repeated scheduling
|
|
2215
|
-
********************************************************************/
|
|
2216
|
-
const CLEANUP_TRIGGER_DELTA = 300; // watcher change threshold
|
|
2217
|
-
const CLEANUP_DELAY = 1500; // delay before running cleanup
|
|
2218
|
-
const CLEANUP_COOLDOWN = 4000; // prevent re-scheduling for 4s
|
|
2219
|
-
let lastWatcherCount = 0;
|
|
2220
|
-
let scheduledCleanup = null;
|
|
2221
|
-
let lastScheduledTime = 0;
|
|
2222
|
-
function getWatcherCount() {
|
|
2223
|
-
let count = 0;
|
|
2224
|
-
registry.forEach(bucket => count += bucket.size);
|
|
2225
|
-
return count;
|
|
2226
|
-
}
|
|
2227
|
-
const cleanupStaleWatchers = () => {
|
|
2228
|
-
// console.log(".........Cleaning up stale watchers...registry.size....", registry.size);
|
|
2229
|
-
let removed = 0;
|
|
2230
|
-
registry.forEach((bucket, widgetId) => {
|
|
2231
|
-
if (!document.querySelector(`[widget-id="${widgetId}"]`)) {
|
|
2232
|
-
for (const key in bucket) {
|
|
2233
|
-
if (bucket.hasOwnProperty(key) && key !== "scopeType" && key !== "scopeName" && typeof bucket[key] !== "function") {
|
|
2234
|
-
let watchInfo = bucket[key];
|
|
2235
|
-
if (watchInfo && watchInfo.destroyFn) {
|
|
2236
|
-
watchInfo.destroyFn();
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2239
|
-
}
|
|
2240
|
-
removed++;
|
|
2241
|
-
registry.delete(widgetId);
|
|
2242
|
-
return;
|
|
2243
|
-
}
|
|
2244
|
-
});
|
|
2245
|
-
return removed;
|
|
2246
|
-
};
|
|
2247
|
-
const scheduleThresholdCleanup = () => {
|
|
2248
|
-
const now = performance.now();
|
|
2249
|
-
let lastTriggerPeriod = now - lastScheduledTime;
|
|
2250
|
-
// If a cleanup was scheduled recently, skip scheduling
|
|
2251
|
-
if (lastTriggerPeriod < CLEANUP_COOLDOWN) {
|
|
2252
|
-
return;
|
|
2253
|
-
}
|
|
2254
|
-
const current = getWatcherCount();
|
|
2255
|
-
const delta = Math.abs(current - lastWatcherCount); // significant + or -
|
|
2256
|
-
// If change not large enough, skip scheduling
|
|
2257
|
-
if (delta <= CLEANUP_TRIGGER_DELTA) {
|
|
2258
|
-
lastWatcherCount = current;
|
|
2259
|
-
return;
|
|
2260
|
-
}
|
|
2261
|
-
// Prevent re-scheduling: set timestamp early
|
|
2262
|
-
lastScheduledTime = now;
|
|
2263
|
-
// Clear previous scheduled cleanup (if any)
|
|
2264
|
-
if (scheduledCleanup) {
|
|
2265
|
-
clearTimeout(scheduledCleanup);
|
|
2266
|
-
}
|
|
2267
|
-
// Schedule cleanup after UI stabilizes (delay prevents aggressive cleanup)
|
|
2268
|
-
scheduledCleanup = setTimeout(() => {
|
|
2269
|
-
cleanupStaleWatchers();
|
|
2270
|
-
scheduledCleanup = null;
|
|
2271
|
-
}, CLEANUP_DELAY);
|
|
2272
|
-
lastWatcherCount = current;
|
|
2273
|
-
};
|
|
2274
|
-
// Utility functions
|
|
2275
|
-
const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
|
|
2276
|
-
const debounce = (fn, wait = DEBOUNCE_WAIT) => {
|
|
2201
|
+
const debounce = (fn, wait = 50) => {
|
|
2277
2202
|
let timeout;
|
|
2278
2203
|
return (...args) => {
|
|
2279
2204
|
window['__zone_symbol__clearTimeout'](timeout);
|
|
@@ -2287,350 +2212,115 @@
|
|
|
2287
2212
|
muted = false;
|
|
2288
2213
|
triggerWatchers();
|
|
2289
2214
|
};
|
|
2290
|
-
/**
|
|
2291
|
-
* Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
|
|
2292
|
-
*/
|
|
2293
|
-
const getWidgetId = (identifier) => {
|
|
2294
|
-
if (!identifier || typeof identifier !== 'string') {
|
|
2295
|
-
return null;
|
|
2296
|
-
}
|
|
2297
|
-
const match = identifier.match(WIDGET_ID_REGEX);
|
|
2298
|
-
return match ? match[1] : null;
|
|
2299
|
-
};
|
|
2300
|
-
/**
|
|
2301
|
-
* Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
|
|
2302
|
-
*/
|
|
2303
|
-
const getPropertyName = (identifier) => {
|
|
2304
|
-
if (!identifier || typeof identifier !== 'string') {
|
|
2305
|
-
return identifier;
|
|
2306
|
-
}
|
|
2307
|
-
const match = identifier.match(WIDGET_PROPERTY_REGEX);
|
|
2308
|
-
return match ? match[1] : identifier;
|
|
2309
|
-
};
|
|
2310
|
-
/**
|
|
2311
|
-
* Array consumer wrapper for array-based expressions
|
|
2312
|
-
*/
|
|
2313
2215
|
const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2216
|
+
let data = newVal, formattedData;
|
|
2217
|
+
if (lodashEs.isArray(data)) {
|
|
2218
|
+
formattedData = data.map(function (datum) {
|
|
2219
|
+
return findValueOf(datum, restExpr);
|
|
2220
|
+
});
|
|
2221
|
+
// If resulting structure is an array of array, flatten it
|
|
2222
|
+
if (lodashEs.isArray(formattedData[0])) {
|
|
2223
|
+
formattedData = lodashEs.flatten(formattedData);
|
|
2224
|
+
}
|
|
2225
|
+
listenerFn(formattedData, oldVal);
|
|
2321
2226
|
}
|
|
2322
|
-
listenerFn(formattedData, oldVal);
|
|
2323
2227
|
};
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
const regex = /\[\$i\]/g;
|
|
2228
|
+
const getUpdatedWatcInfo = (expr, acceptsArray, listener) => {
|
|
2229
|
+
// listener doesn't accept array
|
|
2230
|
+
// replace all `[$i]` with `[0]` and return the expression
|
|
2231
|
+
let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
|
|
2329
2232
|
if (!acceptsArray) {
|
|
2330
2233
|
return {
|
|
2331
|
-
expr: expr.replace(regex,
|
|
2332
|
-
listener
|
|
2234
|
+
'expr': expr.replace(regex, $0),
|
|
2235
|
+
'listener': listener
|
|
2333
2236
|
};
|
|
2334
2237
|
}
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2238
|
+
// listener accepts array
|
|
2239
|
+
// replace all except the last `[$i]` with `[0]` and return the expression.
|
|
2240
|
+
var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
|
|
2241
|
+
if (restExpr) {
|
|
2242
|
+
arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);
|
|
2243
|
+
}
|
|
2341
2244
|
return {
|
|
2342
|
-
expr:
|
|
2343
|
-
listener: arrayConsumerFn
|
|
2245
|
+
'expr': _expr,
|
|
2246
|
+
'listener': arrayConsumerFn
|
|
2344
2247
|
};
|
|
2345
2248
|
};
|
|
2346
|
-
/**
|
|
2347
|
-
* Determines if an expression is static (doesn't need to be watched)
|
|
2348
|
-
*/
|
|
2349
|
-
const STATIC_EXPRESSION_NAMES = [
|
|
2350
|
-
"row.getProperty('investment')",
|
|
2351
|
-
"row.getProperty('factsheetLink')",
|
|
2352
|
-
"row.getProperty('isRebalanceEligible')"
|
|
2353
|
-
];
|
|
2354
|
-
const isStaticExpression = (expr) => {
|
|
2355
|
-
if (typeof expr !== 'string') {
|
|
2356
|
-
return false;
|
|
2357
|
-
}
|
|
2358
|
-
const trimmedExpr = expr.trim();
|
|
2359
|
-
// Expressions that always evaluate to localization strings
|
|
2360
|
-
// if (trimmedExpr.includes('appLocale')) {
|
|
2361
|
-
// return true;
|
|
2362
|
-
// }
|
|
2363
|
-
// Hard-coded static expression names
|
|
2364
|
-
if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
|
|
2365
|
-
return true;
|
|
2366
|
-
}
|
|
2367
|
-
return false;
|
|
2368
|
-
};
|
|
2369
|
-
/**
|
|
2370
|
-
* Gets the scope type from the scope object
|
|
2371
|
-
*/
|
|
2372
|
-
const getScopeType = ($scope) => {
|
|
2373
|
-
if (!$scope) {
|
|
2374
|
-
return null;
|
|
2375
|
-
}
|
|
2376
|
-
if ($scope.pageName)
|
|
2377
|
-
return 'Page';
|
|
2378
|
-
if ($scope.prefabName)
|
|
2379
|
-
return 'Prefab';
|
|
2380
|
-
if ($scope.partialName)
|
|
2381
|
-
return 'Partial';
|
|
2382
|
-
// Check for App scope
|
|
2383
|
-
if ($scope.Variables !== undefined &&
|
|
2384
|
-
$scope.Actions !== undefined &&
|
|
2385
|
-
!$scope.pageName &&
|
|
2386
|
-
!$scope.prefabName &&
|
|
2387
|
-
!$scope.partialName) {
|
|
2388
|
-
return 'App';
|
|
2389
|
-
}
|
|
2390
|
-
if ($scope.constructor?.name === 'AppRef') {
|
|
2391
|
-
return 'App';
|
|
2392
|
-
}
|
|
2393
|
-
return null;
|
|
2394
|
-
};
|
|
2395
|
-
/**
|
|
2396
|
-
* Gets scope name based on scope type
|
|
2397
|
-
*/
|
|
2398
|
-
const getScopeName = ($scope, scopeType) => {
|
|
2399
|
-
if (!scopeType || !$scope) {
|
|
2400
|
-
return null;
|
|
2401
|
-
}
|
|
2402
|
-
switch (scopeType) {
|
|
2403
|
-
case 'Prefab': return $scope.prefabName || null;
|
|
2404
|
-
case 'Partial': return $scope.partialName || null;
|
|
2405
|
-
case 'Page': return $scope.pageName || null;
|
|
2406
|
-
default: return null;
|
|
2407
|
-
}
|
|
2408
|
-
};
|
|
2409
|
-
/**
|
|
2410
|
-
* Main watch function
|
|
2411
|
-
*/
|
|
2412
2249
|
const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
|
|
2250
|
+
if (expr.indexOf('[$i]') !== -1) {
|
|
2251
|
+
let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);
|
|
2416
2252
|
expr = watchInfo.expr;
|
|
2417
2253
|
listener = watchInfo.listener;
|
|
2418
2254
|
}
|
|
2419
|
-
// Handle static expressions
|
|
2420
|
-
if (isStaticExpression(expr)) {
|
|
2421
|
-
try {
|
|
2422
|
-
const fn = $parseExpr(expr);
|
|
2423
|
-
const staticValue = fn($scope, $locals);
|
|
2424
|
-
listener(staticValue, FIRST_TIME_WATCH);
|
|
2425
|
-
}
|
|
2426
|
-
catch (e) {
|
|
2427
|
-
console.warn(`Error evaluating static expression '${expr}':`, e);
|
|
2428
|
-
listener(undefined, FIRST_TIME_WATCH);
|
|
2429
|
-
}
|
|
2430
|
-
return () => { }; // No-op unsubscribe
|
|
2431
|
-
}
|
|
2432
2255
|
const fn = $parseExpr(expr);
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
const destroyFn = () => $unwatch(identifier);
|
|
2436
|
-
const watchInfo = {
|
|
2437
|
-
fn: fn.bind(null, $scope, $locals),
|
|
2256
|
+
registry.set(identifier, {
|
|
2257
|
+
fn: fn.bind(expr, $scope, $locals),
|
|
2438
2258
|
listener,
|
|
2439
2259
|
expr,
|
|
2440
2260
|
last: FIRST_TIME_WATCH,
|
|
2441
2261
|
doNotClone,
|
|
2442
|
-
isMuted
|
|
2443
|
-
scopeType,
|
|
2444
|
-
scopeName,
|
|
2445
|
-
destroyFn
|
|
2446
|
-
};
|
|
2447
|
-
// Store in registry
|
|
2448
|
-
const widgetId = getWidgetId(identifier);
|
|
2449
|
-
if (widgetId) {
|
|
2450
|
-
const propertyName = getPropertyName(identifier);
|
|
2451
|
-
if (!registry.has(widgetId)) {
|
|
2452
|
-
registry.set(widgetId, {});
|
|
2453
|
-
}
|
|
2454
|
-
const widgetGroup = registry.get(widgetId);
|
|
2455
|
-
widgetGroup[propertyName] = watchInfo;
|
|
2456
|
-
}
|
|
2457
|
-
else {
|
|
2458
|
-
registry.set(identifier, watchInfo);
|
|
2459
|
-
}
|
|
2460
|
-
return destroyFn;
|
|
2461
|
-
};
|
|
2462
|
-
/**
|
|
2463
|
-
* Unwatches a single identifier
|
|
2464
|
-
*/
|
|
2465
|
-
const $unwatch = (identifier) => {
|
|
2466
|
-
const widgetId = getWidgetId(identifier);
|
|
2467
|
-
if (widgetId) {
|
|
2468
|
-
const propertyName = getPropertyName(identifier);
|
|
2469
|
-
const widgetGroup = registry.get(widgetId);
|
|
2470
|
-
//@ts-ignore
|
|
2471
|
-
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
2472
|
-
const watchInfo = widgetGroup[propertyName];
|
|
2473
|
-
if (watchInfo) {
|
|
2474
|
-
delete widgetGroup[propertyName];
|
|
2475
|
-
// Clean up empty widget groups
|
|
2476
|
-
if (Object.keys(widgetGroup).length === 0) {
|
|
2477
|
-
registry.delete(widgetId);
|
|
2478
|
-
}
|
|
2479
|
-
return true;
|
|
2480
|
-
}
|
|
2481
|
-
}
|
|
2482
|
-
}
|
|
2483
|
-
// Fallback to direct lookup
|
|
2484
|
-
if (registry.has(identifier)) {
|
|
2485
|
-
registry.delete(identifier);
|
|
2486
|
-
return true;
|
|
2487
|
-
}
|
|
2488
|
-
return false;
|
|
2489
|
-
};
|
|
2490
|
-
/**
|
|
2491
|
-
* Unwatches all watchers for a specific widget ID
|
|
2492
|
-
*/
|
|
2493
|
-
const $unwatchAll = (widgetId) => {
|
|
2494
|
-
if (!widgetId || typeof widgetId !== 'string') {
|
|
2495
|
-
return 0;
|
|
2496
|
-
}
|
|
2497
|
-
const widgetGroup = registry.get(widgetId);
|
|
2498
|
-
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
2499
|
-
const count = Object.keys(widgetGroup).length;
|
|
2500
|
-
registry.delete(widgetId);
|
|
2501
|
-
return count;
|
|
2502
|
-
}
|
|
2503
|
-
// Fallback: find all identifiers starting with this widget ID
|
|
2504
|
-
let removedCount = 0;
|
|
2505
|
-
const identifiersToRemove = [];
|
|
2506
|
-
registry.forEach((_, key) => {
|
|
2507
|
-
if (key.startsWith(widgetId + '_')) {
|
|
2508
|
-
identifiersToRemove.push(key);
|
|
2509
|
-
}
|
|
2262
|
+
isMuted: isMuted
|
|
2510
2263
|
});
|
|
2511
|
-
|
|
2512
|
-
if ($unwatch(identifier)) {
|
|
2513
|
-
removedCount++;
|
|
2514
|
-
}
|
|
2515
|
-
});
|
|
2516
|
-
return removedCount;
|
|
2517
|
-
};
|
|
2518
|
-
/**
|
|
2519
|
-
* Unwatches all watchers for a specific scope (Page, Prefab, Partial, or App)
|
|
2520
|
-
* Now works directly with the main registry instead of separate scoped registries
|
|
2521
|
-
*/
|
|
2522
|
-
const $unwatchAllByScope = (scopeType, scopeName) => {
|
|
2523
|
-
if (!scopeType) {
|
|
2524
|
-
return 0;
|
|
2525
|
-
}
|
|
2526
|
-
let removedCount = 0;
|
|
2527
|
-
const identifiersToRemove = [];
|
|
2528
|
-
registry.forEach((value, key) => {
|
|
2529
|
-
// Handle grouped structure (widget groups)
|
|
2530
|
-
if (value && typeof value === 'object' && !value.fn) {
|
|
2531
|
-
Object.entries(value).forEach(([propertyName, watchInfo]) => {
|
|
2532
|
-
if (watchInfo?.scopeType === scopeType &&
|
|
2533
|
-
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
2534
|
-
identifiersToRemove.push(`${key}_${propertyName}`);
|
|
2535
|
-
}
|
|
2536
|
-
});
|
|
2537
|
-
}
|
|
2538
|
-
else {
|
|
2539
|
-
// Direct watchInfo
|
|
2540
|
-
const watchInfo = value;
|
|
2541
|
-
if (watchInfo?.scopeType === scopeType &&
|
|
2542
|
-
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
2543
|
-
identifiersToRemove.push(key);
|
|
2544
|
-
}
|
|
2545
|
-
}
|
|
2546
|
-
});
|
|
2547
|
-
// Unwatch all collected identifiers
|
|
2548
|
-
identifiersToRemove.forEach(identifier => {
|
|
2549
|
-
if ($unwatch(identifier)) {
|
|
2550
|
-
removedCount++;
|
|
2551
|
-
}
|
|
2552
|
-
});
|
|
2553
|
-
return removedCount;
|
|
2554
|
-
};
|
|
2555
|
-
/**
|
|
2556
|
-
* Processes a single watch info during trigger cycle
|
|
2557
|
-
*/
|
|
2558
|
-
const processWatchInfo = (watchInfo) => {
|
|
2559
|
-
if (!watchInfo?.fn || (watchInfo.isMuted?.() ?? false)) {
|
|
2560
|
-
return false;
|
|
2561
|
-
}
|
|
2562
|
-
let newValue;
|
|
2563
|
-
try {
|
|
2564
|
-
newValue = watchInfo.fn();
|
|
2565
|
-
}
|
|
2566
|
-
catch (e) {
|
|
2567
|
-
console.warn(`Error executing expression: '${watchInfo.expr}'`, e);
|
|
2568
|
-
return false;
|
|
2569
|
-
}
|
|
2570
|
-
if (lodashEs.isEqual(newValue, watchInfo.last)) {
|
|
2571
|
-
return false;
|
|
2572
|
-
}
|
|
2573
|
-
// Change detected
|
|
2574
|
-
changedByWatch = true;
|
|
2575
|
-
watchInfo.last = lodashEs.isObject(newValue) && !watchInfo.doNotClone
|
|
2576
|
-
? lodashEs.clone(newValue)
|
|
2577
|
-
: newValue;
|
|
2578
|
-
watchInfo.listener(newValue, watchInfo.last === newValue ? FIRST_TIME_WATCH : watchInfo.last);
|
|
2579
|
-
changedByWatch = false;
|
|
2580
|
-
return true;
|
|
2264
|
+
return () => $unwatch(identifier);
|
|
2581
2265
|
};
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2266
|
+
const $unwatch = identifier => registry.delete(identifier);
|
|
2267
|
+
let changedByWatch = false;
|
|
2268
|
+
const $RAF = window.requestAnimationFrame;
|
|
2269
|
+
let ngZone;
|
|
2270
|
+
const triggerWatchers = (ignoreMuted) => {
|
|
2586
2271
|
if (muted && !ignoreMuted) {
|
|
2587
2272
|
return;
|
|
2588
2273
|
}
|
|
2274
|
+
const limit = 5;
|
|
2589
2275
|
let pass = 1;
|
|
2590
2276
|
let changeDetected;
|
|
2591
2277
|
do {
|
|
2592
2278
|
changeDetected = false;
|
|
2593
|
-
registry.forEach(
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
Object.values(value).forEach((watchInfo) => {
|
|
2597
|
-
if (processWatchInfo(watchInfo)) {
|
|
2598
|
-
changeDetected = true;
|
|
2599
|
-
}
|
|
2600
|
-
});
|
|
2279
|
+
registry.forEach(watchInfo => {
|
|
2280
|
+
if (watchInfo.isMuted && watchInfo.isMuted()) {
|
|
2281
|
+
return;
|
|
2601
2282
|
}
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2283
|
+
const fn = watchInfo.fn;
|
|
2284
|
+
const listener = watchInfo.listener;
|
|
2285
|
+
const ov = watchInfo.last;
|
|
2286
|
+
let nv;
|
|
2287
|
+
try {
|
|
2288
|
+
nv = fn();
|
|
2289
|
+
}
|
|
2290
|
+
catch (e) {
|
|
2291
|
+
console.warn(`error in executing expression: '${watchInfo.expr}'`);
|
|
2292
|
+
}
|
|
2293
|
+
if (!lodashEs.isEqual(nv, ov)) {
|
|
2294
|
+
changeDetected = true;
|
|
2295
|
+
changedByWatch = true;
|
|
2296
|
+
watchInfo.last = nv;
|
|
2297
|
+
// @ts-ignore
|
|
2298
|
+
if (lodashEs.isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
|
|
2299
|
+
watchInfo.last = lodashEs.clone(nv);
|
|
2606
2300
|
}
|
|
2301
|
+
listener(nv, ov);
|
|
2302
|
+
resetChangeFromWatch();
|
|
2607
2303
|
}
|
|
2608
2304
|
});
|
|
2609
2305
|
pass++;
|
|
2610
|
-
} while (changeDetected && pass <
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
if (changeDetected && pass === MAX_WATCH_CYCLES) {
|
|
2614
|
-
console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
2306
|
+
} while (changeDetected && pass < limit);
|
|
2307
|
+
if (changeDetected && pass === limit) {
|
|
2308
|
+
console.warn(`Number of watch cycles gone above set limit of: ${limit} `);
|
|
2615
2309
|
}
|
|
2616
2310
|
};
|
|
2617
|
-
|
|
2618
|
-
const
|
|
2619
|
-
ngZone = zone;
|
|
2620
|
-
};
|
|
2621
|
-
const setAppRef = (ref) => {
|
|
2311
|
+
const setNgZone = zone => ngZone = zone;
|
|
2312
|
+
const setAppRef = ref => {
|
|
2622
2313
|
appRef = ref;
|
|
2623
2314
|
};
|
|
2624
2315
|
const isChangeFromWatch = () => changedByWatch;
|
|
2625
|
-
const resetChangeFromWatch = () =>
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
// Debounced trigger
|
|
2316
|
+
const resetChangeFromWatch = () => changedByWatch = false;
|
|
2317
|
+
window.watchRegistry = registry;
|
|
2318
|
+
let skipWatchers;
|
|
2629
2319
|
const debouncedTriggerWatchers = debounce(() => {
|
|
2630
2320
|
skipWatchers = true;
|
|
2631
2321
|
ngZone.run(() => triggerWatchers());
|
|
2632
|
-
},
|
|
2633
|
-
const $invokeWatchers = (force
|
|
2322
|
+
}, 100);
|
|
2323
|
+
const $invokeWatchers = (force, ignoreMuted) => {
|
|
2634
2324
|
if (force) {
|
|
2635
2325
|
triggerWatchers(ignoreMuted);
|
|
2636
2326
|
}
|
|
@@ -2644,8 +2334,7 @@
|
|
|
2644
2334
|
};
|
|
2645
2335
|
const $appDigest = (() => {
|
|
2646
2336
|
let queued = false;
|
|
2647
|
-
|
|
2648
|
-
return (force = false) => {
|
|
2337
|
+
return (force) => {
|
|
2649
2338
|
if (!appRef) {
|
|
2650
2339
|
return;
|
|
2651
2340
|
}
|
|
@@ -2657,16 +2346,16 @@
|
|
|
2657
2346
|
if (queued) {
|
|
2658
2347
|
return;
|
|
2659
2348
|
}
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2349
|
+
else {
|
|
2350
|
+
queued = true;
|
|
2351
|
+
$RAF(() => {
|
|
2352
|
+
ngZone.run(() => appRef.tick());
|
|
2353
|
+
queued = false;
|
|
2354
|
+
});
|
|
2355
|
+
}
|
|
2665
2356
|
}
|
|
2666
2357
|
};
|
|
2667
2358
|
})();
|
|
2668
|
-
// Export registry for debugging
|
|
2669
|
-
window.watchRegistry = registry;
|
|
2670
2359
|
|
|
2671
2360
|
exports.ComponentType = void 0;
|
|
2672
2361
|
(function (ComponentType) {
|
|
@@ -5475,8 +5164,6 @@
|
|
|
5475
5164
|
exports.$parseEvent = $parseEvent;
|
|
5476
5165
|
exports.$parseExpr = $parseExpr;
|
|
5477
5166
|
exports.$unwatch = $unwatch;
|
|
5478
|
-
exports.$unwatchAll = $unwatchAll;
|
|
5479
|
-
exports.$unwatchAllByScope = $unwatchAllByScope;
|
|
5480
5167
|
exports.$watch = $watch;
|
|
5481
5168
|
exports.AbstractDialogService = AbstractDialogService;
|
|
5482
5169
|
exports.AbstractHttpService = AbstractHttpService;
|
|
@@ -8,7 +8,7 @@ export * from './enums/enums';
|
|
|
8
8
|
export * from './utils/event-notifier';
|
|
9
9
|
export { $parseExpr, $parseEvent, registerFnByExpr, setPipeProvider, getFnByExpr, getFnForBindExpr, getFnForEventExpr } from './utils/expression-parser';
|
|
10
10
|
export { isDefined, isObject, toBoolean, isIE, isAndroid, isAndroidTablet, isIphone, isIpod, isIpad, isIos, isSafari, isLargeTabletLandscape, isLargeTabletPortrait, isMobile, getAndroidVersion, isKitkatDevice, encodeUrl, encodeUrlParams, initCaps, spaceSeparate, replaceAt, periodSeparate, prettifyLabel, deHyphenate, prettifyLabels, isInsecureContentRequest, stringStartsWith, getEvaluatedExprValue, isImageFile, isAudioFile, isVideoFile, isValidImageUrl, isValidWebURL, getResourceURL, triggerFn, hasOffsetStr, getFormattedDate, getDateObj, addEventListenerOnElement, getClonedObject, getFiles, generateGUId, validateAccessRoles, getValidJSON, xmlToJson, findValueOf, extractType, isNumberType, isEmptyObject, scrollToElement, isElementInViewport, isPageable, replace, isDateTimeType, getValidDateObject, getNativeDateObject, getBlob, isEqualWithFields, loadStyleSheet, loadStyleSheets, loadScript, loadScripts, _WM_APP_PROJECT, setSessionStorageItem, getSessionStorageItem, noop, convertToBlob, AppConstants, openLink, fetchContent, toPromise, retryIfFails, getAbortableDefer, createCSSRule, getUrlParams, getMomentLocaleObject, getRouteNameFromLink, isAppleProduct, defer, executePromiseChain, isDataSourceEqual, validateDataSourceCtx, processFilterExpBindNode, extendProto, removeExtraSlashes, getDisplayDateTimeFormat, addForIdAttributes, adjustContainerPosition, adjustContainerRightEdges, setTranslation3dPosition, getWebkitTraslationMatrix, closePopover, detectChanges, triggerItemAction, getDatasourceFromExpr, extractCurrentItemExpr, findRootContainer, VALIDATOR, transformFileURI, appendScriptToHead, getAppSetting, setListClass, findParent, getNavClass, getSheetPositionClass } from './utils/utils';
|
|
11
|
-
export { FIRST_TIME_WATCH, isFirstTimeChange, debounce, muteWatchers, unMuteWatchers, $watch, $unwatch,
|
|
11
|
+
export { FIRST_TIME_WATCH, isFirstTimeChange, debounce, muteWatchers, unMuteWatchers, $watch, $unwatch, setNgZone, setAppRef, isChangeFromWatch, resetChangeFromWatch, $invokeWatchers, $appDigest } from './utils/watcher';
|
|
12
12
|
export * from './utils/id-generator';
|
|
13
13
|
export * from './types/types';
|
|
14
14
|
export { Viewport } from './services/viewport.service';
|
|
@@ -23,4 +23,4 @@ export { StatePersistence } from './services/state-persistence.service';
|
|
|
23
23
|
export { PaginationService } from './services/pagination.service';
|
|
24
24
|
export * from './utils/wm-project-properties';
|
|
25
25
|
export * from './utils/lru-cache';
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLFlBQVksRUFDWixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxxQkFBcUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFVBQVUsRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxlQUFlLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBaUIsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY29yZVxuICovXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2J1aWxkLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzL2N1cnJlbmN5LWNvbnN0YW50cyc7XG5leHBvcnQge1xuICAgIGFwcGVuZE5vZGUsXG4gICAgaW5zZXJ0QmVmb3JlLFxuICAgIGluc2VydEFmdGVyLFxuICAgIHJlbW92ZU5vZGUsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgYWRkQ2xhc3MsXG4gICAgc3dpdGNoQ2xhc3MsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgc2V0Q1NTLFxuICAgIHNldENTU0Zyb21PYmosXG4gICAgc2V0UHJvcGVydHksXG4gICAgc2V0QXR0cixcbiAgICBzZXRIdG1sLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgY3JlYXRlRWxlbWVudCxcbiAgICB0b0RpbWVuc2lvblxufSBmcm9tICcuL3V0aWxzL2RvbSc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvZXZlbnQtbm90aWZpZXInO1xuZXhwb3J0IHtcbiAgICBQYXJzZUV4cHJSZXN1bHQsXG4gICAgJHBhcnNlRXhwcixcbiAgICAkcGFyc2VFdmVudCxcbiAgICByZWdpc3RlckZuQnlFeHByLFxuICAgIHNldFBpcGVQcm92aWRlcixcbiAgICBnZXRGbkJ5RXhwcixcbiAgICBnZXRGbkZvckJpbmRFeHByLFxuICAgIGdldEZuRm9yRXZlbnRFeHByXG59IGZyb20gJy4vdXRpbHMvZXhwcmVzc2lvbi1wYXJzZXInO1xuZXhwb3J0IHtcbiAgICBFVkVOVF9MSUZFLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc09iamVjdCxcbiAgICB0b0Jvb2xlYW4sXG4gICAgaXNJRSxcbiAgICBpc0FuZHJvaWQsXG4gICAgaXNBbmRyb2lkVGFibGV0LFxuICAgIGlzSXBob25lLFxuICAgIGlzSXBvZCxcbiAgICBpc0lwYWQsXG4gICAgaXNJb3MsXG4gICAgaXNTYWZhcmksXG4gICAgaXNMYXJnZVRhYmxldExhbmRzY2FwZSxcbiAgICBpc0xhcmdlVGFibGV0UG9ydHJhaXQsXG4gICAgaXNNb2JpbGUsXG4gICAgZ2V0QW5kcm9pZFZlcnNpb24sXG4gICAgaXNLaXRrYXREZXZpY2UsXG4gICAgZW5jb2RlVXJsLFxuICAgIGVuY29kZVVybFBhcmFtcyxcbiAgICBpbml0Q2FwcyxcbiAgICBzcGFjZVNlcGFyYXRlLFxuICAgIHJlcGxhY2VBdCxcbiAgICBwZXJpb2RTZXBhcmF0ZSxcbiAgICBwcmV0dGlmeUxhYmVsLFxuICAgIGRlSHlwaGVuYXRlLFxuICAgIHByZXR0aWZ5TGFiZWxzLFxuICAgIGlzSW5zZWN1cmVDb250ZW50UmVxdWVzdCxcbiAgICBzdHJpbmdTdGFydHNXaXRoLFxuICAgIGdldEV2YWx1YXRlZEV4cHJWYWx1ZSxcbiAgICBpc0ltYWdlRmlsZSxcbiAgICBpc0F1ZGlvRmlsZSxcbiAgICBpc1ZpZGVvRmlsZSxcbiAgICBpc1ZhbGlkSW1hZ2VVcmwsXG4gICAgaXNWYWxpZFdlYlVSTCxcbiAgICBnZXRSZXNvdXJjZVVSTCxcbiAgICB0cmlnZ2VyRm4sXG4gICAgaGFzT2Zmc2V0U3RyLFxuICAgIGdldEZvcm1hdHRlZERhdGUsXG4gICAgZ2V0RGF0ZU9iaixcbiAgICBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50LFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBnZXRGaWxlcyxcbiAgICBnZW5lcmF0ZUdVSWQsXG4gICAgdmFsaWRhdGVBY2Nlc3NSb2xlcyxcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgeG1sVG9Kc29uLFxuICAgIGZpbmRWYWx1ZU9mLFxuICAgIGV4dHJhY3RUeXBlLFxuICAgIGlzTnVtYmVyVHlwZSxcbiAgICBpc0VtcHR5T2JqZWN0LFxuICAgIHNjcm9sbFRvRWxlbWVudCxcbiAgICBpc0VsZW1lbnRJblZpZXdwb3J0LFxuICAgIGlzUGFnZWFibGUsXG4gICAgcmVwbGFjZSxcbiAgICBpc0RhdGVUaW1lVHlwZSxcbiAgICBnZXRWYWxpZERhdGVPYmplY3QsXG4gICAgZ2V0TmF0aXZlRGF0ZU9iamVjdCxcbiAgICBnZXRCbG9iLFxuICAgIGlzRXF1YWxXaXRoRmllbGRzLFxuICAgIGxvYWRTdHlsZVNoZWV0LFxuICAgIGxvYWRTdHlsZVNoZWV0cyxcbiAgICBsb2FkU2NyaXB0LFxuICAgIGxvYWRTY3JpcHRzLFxuICAgIF9XTV9BUFBfUFJPSkVDVCxcbiAgICBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtLFxuICAgIG5vb3AsXG4gICAgY29udmVydFRvQmxvYixcbiAgICBBcHBDb25zdGFudHMsXG4gICAgb3BlbkxpbmssXG4gICAgZmV0Y2hDb250ZW50LFxuICAgIHRvUHJvbWlzZSxcbiAgICByZXRyeUlmRmFpbHMsXG4gICAgZ2V0QWJvcnRhYmxlRGVmZXIsXG4gICAgY3JlYXRlQ1NTUnVsZSxcbiAgICBnZXRVcmxQYXJhbXMsXG4gICAgZ2V0TW9tZW50TG9jYWxlT2JqZWN0LFxuICAgIGdldFJvdXRlTmFtZUZyb21MaW5rLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGRlZmVyLFxuICAgIGV4ZWN1dGVQcm9taXNlQ2hhaW4sXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgdmFsaWRhdGVEYXRhU291cmNlQ3R4LFxuICAgIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSxcbiAgICBleHRlbmRQcm90byxcbiAgICByZW1vdmVFeHRyYVNsYXNoZXMsXG4gICAgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LFxuICAgIGFkZEZvcklkQXR0cmlidXRlcyxcbiAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbixcbiAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzLFxuICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbixcbiAgICBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4LFxuICAgIGNsb3NlUG9wb3ZlcixcbiAgICBkZXRlY3RDaGFuZ2VzLFxuICAgIHRyaWdnZXJJdGVtQWN0aW9uLFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBleHRyYWN0Q3VycmVudEl0ZW1FeHByLFxuICAgIGZpbmRSb290Q29udGFpbmVyLFxuICAgIFZBTElEQVRPUixcbiAgICB0cmFuc2Zvcm1GaWxlVVJJLFxuICAgIGFwcGVuZFNjcmlwdFRvSGVhZCxcbiAgICBnZXRBcHBTZXR0aW5nLFxuICAgIHNldExpc3RDbGFzcyxcbiAgICBmaW5kUGFyZW50LFxuICAgIGdldE5hdkNsYXNzLFxuICAgIGdldFNoZWV0UG9zaXRpb25DbGFzc1xufSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmV4cG9ydCB7XG4gICAgRklSU1RfVElNRV9XQVRDSCxcbiAgICBpc0ZpcnN0VGltZUNoYW5nZSxcbiAgICBkZWJvdW5jZSxcbiAgICBtdXRlV2F0Y2hlcnMsXG4gICAgdW5NdXRlV2F0Y2hlcnMsXG4gICAgJHdhdGNoLFxuICAgICR1bndhdGNoLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRBcHBSZWYsXG4gICAgaXNDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnLi91dGlscy93YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvdHlwZXMnO1xuZXhwb3J0IHsgVmlld3BvcnQsIFZpZXdwb3J0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb25zdGFudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXdpZGdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXNlci1jdXN0b20tcGlwZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20taWNvbnMtbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZSB9IGZyb20gJy4vc2VydmljZXMvc3RhdGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5leHBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbHJ1LWNhY2hlJztcbiJdfQ==
|