@wavemaker/app-ng-runtime 11.14.1-1.6289 → 11.14.1-3.6306
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 +87 -17
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +7 -3
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/fesm2022/index.mjs +88 -18
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/basic/label/bundles/index.umd.js +9 -1
- package/components/basic/label/esm2022/label.directive.mjs +10 -2
- package/components/basic/label/fesm2022/index.mjs +9 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +218 -11
- package/components/data/table/esm2022/table.component.mjs +219 -12
- package/components/data/table/fesm2022/index.mjs +218 -11
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table.component.d.ts +6 -2
- package/components/navigation/menu/bundles/index.umd.js +5 -0
- package/components/navigation/menu/esm2022/menu.component.mjs +6 -1
- package/components/navigation/menu/fesm2022/index.mjs +5 -0
- 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 +6 -0
- package/core/bundles/index.umd.js +332 -82
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +331 -84
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +37 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +7 -2
- package/runtime/base/esm2022/components/base-page.component.mjs +9 -2
- package/runtime/base/esm2022/components/base-partial.component.mjs +10 -2
- package/runtime/base/esm2022/components/base-prefab.component.mjs +10 -2
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +9 -2
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
- package/runtime/base/fesm2022/index.mjs +38 -3
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +19 -2
|
@@ -1450,11 +1450,11 @@
|
|
|
1450
1450
|
}
|
|
1451
1451
|
};
|
|
1452
1452
|
|
|
1453
|
-
const $RAF
|
|
1453
|
+
const $RAF = window.requestAnimationFrame;
|
|
1454
1454
|
const $RAFQueue = [];
|
|
1455
1455
|
const invokeLater = fn => {
|
|
1456
1456
|
if (!$RAFQueue.length) {
|
|
1457
|
-
$RAF
|
|
1457
|
+
$RAF(() => {
|
|
1458
1458
|
$RAFQueue.forEach(f => f());
|
|
1459
1459
|
$RAFQueue.length = 0;
|
|
1460
1460
|
});
|
|
@@ -2191,14 +2191,25 @@
|
|
|
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;
|
|
2194
2201
|
const registry = new Map();
|
|
2195
2202
|
const watchIdGenerator = new IDGenerator('watch-id-');
|
|
2196
|
-
const FIRST_TIME_WATCH = {};
|
|
2197
|
-
|
|
2198
|
-
const isFirstTimeChange = v => v === FIRST_TIME_WATCH;
|
|
2203
|
+
const FIRST_TIME_WATCH = Object.freeze({});
|
|
2204
|
+
// State
|
|
2199
2205
|
let muted = false;
|
|
2206
|
+
let changedByWatch = false;
|
|
2207
|
+
let skipWatchers = false;
|
|
2208
|
+
let ngZone;
|
|
2200
2209
|
let appRef;
|
|
2201
|
-
|
|
2210
|
+
// Utility functions
|
|
2211
|
+
const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
|
|
2212
|
+
const debounce = (fn, wait = DEBOUNCE_WAIT) => {
|
|
2202
2213
|
let timeout;
|
|
2203
2214
|
return (...args) => {
|
|
2204
2215
|
window['__zone_symbol__clearTimeout'](timeout);
|
|
@@ -2212,115 +2223,345 @@
|
|
|
2212
2223
|
muted = false;
|
|
2213
2224
|
triggerWatchers();
|
|
2214
2225
|
};
|
|
2226
|
+
/**
|
|
2227
|
+
* Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
|
|
2228
|
+
*/
|
|
2229
|
+
const getWidgetId = (identifier) => {
|
|
2230
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
2231
|
+
return null;
|
|
2232
|
+
}
|
|
2233
|
+
const match = identifier.match(WIDGET_ID_REGEX);
|
|
2234
|
+
return match ? match[1] : null;
|
|
2235
|
+
};
|
|
2236
|
+
/**
|
|
2237
|
+
* Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
|
|
2238
|
+
*/
|
|
2239
|
+
const getPropertyName = (identifier) => {
|
|
2240
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
2241
|
+
return identifier;
|
|
2242
|
+
}
|
|
2243
|
+
const match = identifier.match(WIDGET_PROPERTY_REGEX);
|
|
2244
|
+
return match ? match[1] : identifier;
|
|
2245
|
+
};
|
|
2246
|
+
/**
|
|
2247
|
+
* Array consumer wrapper for array-based expressions
|
|
2248
|
+
*/
|
|
2215
2249
|
const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
|
|
2216
|
-
|
|
2217
|
-
|
|
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);
|
|
2250
|
+
if (!lodashEs.isArray(newVal)) {
|
|
2251
|
+
return;
|
|
2226
2252
|
}
|
|
2253
|
+
let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
|
|
2254
|
+
// Flatten if result is array of arrays
|
|
2255
|
+
if (lodashEs.isArray(formattedData[0])) {
|
|
2256
|
+
formattedData = lodashEs.flatten(formattedData);
|
|
2257
|
+
}
|
|
2258
|
+
listenerFn(formattedData, oldVal);
|
|
2227
2259
|
};
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2260
|
+
/**
|
|
2261
|
+
* Updates watch info for array expressions
|
|
2262
|
+
*/
|
|
2263
|
+
const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
|
|
2264
|
+
const regex = /\[\$i\]/g;
|
|
2232
2265
|
if (!acceptsArray) {
|
|
2233
2266
|
return {
|
|
2234
|
-
|
|
2235
|
-
|
|
2267
|
+
expr: expr.replace(regex, ARRAY_INDEX_ZERO),
|
|
2268
|
+
listener
|
|
2236
2269
|
};
|
|
2237
2270
|
}
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2271
|
+
const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
|
|
2272
|
+
const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
|
|
2273
|
+
const restExpr = expr.substring(lastIndex + ARRAY_INDEX_PLACEHOLDER.length);
|
|
2274
|
+
const arrayConsumerFn = restExpr
|
|
2275
|
+
? arrayConsumer.bind(undefined, listener, restExpr)
|
|
2276
|
+
: listener;
|
|
2244
2277
|
return {
|
|
2245
|
-
|
|
2246
|
-
|
|
2278
|
+
expr: baseExpr,
|
|
2279
|
+
listener: arrayConsumerFn
|
|
2247
2280
|
};
|
|
2248
2281
|
};
|
|
2282
|
+
/**
|
|
2283
|
+
* Determines if an expression is static (doesn't need to be watched)
|
|
2284
|
+
*/
|
|
2285
|
+
const STATIC_EXPRESSION_NAMES = [
|
|
2286
|
+
"row.getProperty('investment')",
|
|
2287
|
+
"row.getProperty('factsheetLink')",
|
|
2288
|
+
"row.getProperty('isRebalanceEligible')"
|
|
2289
|
+
];
|
|
2290
|
+
const isStaticExpression = (expr) => {
|
|
2291
|
+
if (typeof expr !== 'string') {
|
|
2292
|
+
return false;
|
|
2293
|
+
}
|
|
2294
|
+
const trimmedExpr = expr.trim();
|
|
2295
|
+
// Expressions that always evaluate to localization strings
|
|
2296
|
+
if (trimmedExpr.includes('appLocale')) {
|
|
2297
|
+
return true;
|
|
2298
|
+
}
|
|
2299
|
+
// Hard-coded static expression names
|
|
2300
|
+
if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
|
|
2301
|
+
return true;
|
|
2302
|
+
}
|
|
2303
|
+
return false;
|
|
2304
|
+
};
|
|
2305
|
+
/**
|
|
2306
|
+
* Gets the scope type from the scope object
|
|
2307
|
+
*/
|
|
2308
|
+
const getScopeType = ($scope) => {
|
|
2309
|
+
if (!$scope) {
|
|
2310
|
+
return null;
|
|
2311
|
+
}
|
|
2312
|
+
if ($scope.pageName)
|
|
2313
|
+
return 'Page';
|
|
2314
|
+
if ($scope.prefabName)
|
|
2315
|
+
return 'Prefab';
|
|
2316
|
+
if ($scope.partialName)
|
|
2317
|
+
return 'Partial';
|
|
2318
|
+
// Check for App scope
|
|
2319
|
+
if ($scope.Variables !== undefined &&
|
|
2320
|
+
$scope.Actions !== undefined &&
|
|
2321
|
+
!$scope.pageName &&
|
|
2322
|
+
!$scope.prefabName &&
|
|
2323
|
+
!$scope.partialName) {
|
|
2324
|
+
return 'App';
|
|
2325
|
+
}
|
|
2326
|
+
if ($scope.constructor?.name === 'AppRef') {
|
|
2327
|
+
return 'App';
|
|
2328
|
+
}
|
|
2329
|
+
return null;
|
|
2330
|
+
};
|
|
2331
|
+
/**
|
|
2332
|
+
* Gets scope name based on scope type
|
|
2333
|
+
*/
|
|
2334
|
+
const getScopeName = ($scope, scopeType) => {
|
|
2335
|
+
if (!scopeType || !$scope) {
|
|
2336
|
+
return null;
|
|
2337
|
+
}
|
|
2338
|
+
switch (scopeType) {
|
|
2339
|
+
case 'Prefab': return $scope.prefabName || null;
|
|
2340
|
+
case 'Partial': return $scope.partialName || null;
|
|
2341
|
+
case 'Page': return $scope.pageName || null;
|
|
2342
|
+
default: return null;
|
|
2343
|
+
}
|
|
2344
|
+
};
|
|
2345
|
+
/**
|
|
2346
|
+
* Main watch function
|
|
2347
|
+
*/
|
|
2249
2348
|
const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
|
|
2250
|
-
|
|
2251
|
-
|
|
2349
|
+
// Handle array expressions
|
|
2350
|
+
if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
|
|
2351
|
+
const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
|
|
2252
2352
|
expr = watchInfo.expr;
|
|
2253
2353
|
listener = watchInfo.listener;
|
|
2254
2354
|
}
|
|
2355
|
+
// Handle static expressions
|
|
2356
|
+
if (isStaticExpression(expr)) {
|
|
2357
|
+
try {
|
|
2358
|
+
const fn = $parseExpr(expr);
|
|
2359
|
+
const staticValue = fn($scope, $locals);
|
|
2360
|
+
listener(staticValue, FIRST_TIME_WATCH);
|
|
2361
|
+
}
|
|
2362
|
+
catch (e) {
|
|
2363
|
+
console.warn(`Error evaluating static expression '${expr}':`, e);
|
|
2364
|
+
listener(undefined, FIRST_TIME_WATCH);
|
|
2365
|
+
}
|
|
2366
|
+
return () => { }; // No-op unsubscribe
|
|
2367
|
+
}
|
|
2255
2368
|
const fn = $parseExpr(expr);
|
|
2256
|
-
|
|
2257
|
-
|
|
2369
|
+
const scopeType = getScopeType($scope);
|
|
2370
|
+
const scopeName = getScopeName($scope, scopeType);
|
|
2371
|
+
const watchInfo = {
|
|
2372
|
+
fn: fn.bind(null, $scope, $locals),
|
|
2258
2373
|
listener,
|
|
2259
2374
|
expr,
|
|
2260
2375
|
last: FIRST_TIME_WATCH,
|
|
2261
2376
|
doNotClone,
|
|
2262
|
-
isMuted
|
|
2263
|
-
|
|
2377
|
+
isMuted,
|
|
2378
|
+
scopeType,
|
|
2379
|
+
scopeName
|
|
2380
|
+
};
|
|
2381
|
+
// Store in registry
|
|
2382
|
+
const widgetId = getWidgetId(identifier);
|
|
2383
|
+
if (widgetId) {
|
|
2384
|
+
const propertyName = getPropertyName(identifier);
|
|
2385
|
+
if (!registry.has(widgetId)) {
|
|
2386
|
+
registry.set(widgetId, {});
|
|
2387
|
+
}
|
|
2388
|
+
const widgetGroup = registry.get(widgetId);
|
|
2389
|
+
widgetGroup[propertyName] = watchInfo;
|
|
2390
|
+
}
|
|
2391
|
+
else {
|
|
2392
|
+
registry.set(identifier, watchInfo);
|
|
2393
|
+
}
|
|
2264
2394
|
return () => $unwatch(identifier);
|
|
2265
2395
|
};
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2396
|
+
/**
|
|
2397
|
+
* Unwatches a single identifier
|
|
2398
|
+
*/
|
|
2399
|
+
const $unwatch = (identifier) => {
|
|
2400
|
+
const widgetId = getWidgetId(identifier);
|
|
2401
|
+
if (widgetId) {
|
|
2402
|
+
const propertyName = getPropertyName(identifier);
|
|
2403
|
+
const widgetGroup = registry.get(widgetId);
|
|
2404
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
2405
|
+
const watchInfo = widgetGroup[propertyName];
|
|
2406
|
+
if (watchInfo) {
|
|
2407
|
+
delete widgetGroup[propertyName];
|
|
2408
|
+
// Clean up empty widget groups
|
|
2409
|
+
if (Object.keys(widgetGroup).length === 0) {
|
|
2410
|
+
registry.delete(widgetId);
|
|
2411
|
+
}
|
|
2412
|
+
return true;
|
|
2413
|
+
}
|
|
2414
|
+
}
|
|
2415
|
+
}
|
|
2416
|
+
// Fallback to direct lookup
|
|
2417
|
+
if (registry.has(identifier)) {
|
|
2418
|
+
registry.delete(identifier);
|
|
2419
|
+
return true;
|
|
2420
|
+
}
|
|
2421
|
+
return false;
|
|
2422
|
+
};
|
|
2423
|
+
/**
|
|
2424
|
+
* Unwatches all watchers for a specific widget ID
|
|
2425
|
+
*/
|
|
2426
|
+
const $unwatchAll = (widgetId) => {
|
|
2427
|
+
if (!widgetId || typeof widgetId !== 'string') {
|
|
2428
|
+
return 0;
|
|
2429
|
+
}
|
|
2430
|
+
const widgetGroup = registry.get(widgetId);
|
|
2431
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
2432
|
+
const count = Object.keys(widgetGroup).length;
|
|
2433
|
+
registry.delete(widgetId);
|
|
2434
|
+
return count;
|
|
2435
|
+
}
|
|
2436
|
+
// Fallback: find all identifiers starting with this widget ID
|
|
2437
|
+
let removedCount = 0;
|
|
2438
|
+
const identifiersToRemove = [];
|
|
2439
|
+
registry.forEach((_, key) => {
|
|
2440
|
+
if (key.startsWith(widgetId + '_')) {
|
|
2441
|
+
identifiersToRemove.push(key);
|
|
2442
|
+
}
|
|
2443
|
+
});
|
|
2444
|
+
identifiersToRemove.forEach(identifier => {
|
|
2445
|
+
if ($unwatch(identifier)) {
|
|
2446
|
+
removedCount++;
|
|
2447
|
+
}
|
|
2448
|
+
});
|
|
2449
|
+
return removedCount;
|
|
2450
|
+
};
|
|
2451
|
+
/**
|
|
2452
|
+
* Unwatches all watchers for a specific scope (Page, Prefab, Partial, or App)
|
|
2453
|
+
* Now works directly with the main registry instead of separate scoped registries
|
|
2454
|
+
*/
|
|
2455
|
+
const $unwatchAllByScope = (scopeType, scopeName) => {
|
|
2456
|
+
if (!scopeType) {
|
|
2457
|
+
return 0;
|
|
2458
|
+
}
|
|
2459
|
+
let removedCount = 0;
|
|
2460
|
+
const identifiersToRemove = [];
|
|
2461
|
+
registry.forEach((value, key) => {
|
|
2462
|
+
// Handle grouped structure (widget groups)
|
|
2463
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
2464
|
+
Object.entries(value).forEach(([propertyName, watchInfo]) => {
|
|
2465
|
+
if (watchInfo?.scopeType === scopeType &&
|
|
2466
|
+
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
2467
|
+
identifiersToRemove.push(`${key}_${propertyName}`);
|
|
2468
|
+
}
|
|
2469
|
+
});
|
|
2470
|
+
}
|
|
2471
|
+
else {
|
|
2472
|
+
// Direct watchInfo
|
|
2473
|
+
const watchInfo = value;
|
|
2474
|
+
if (watchInfo?.scopeType === scopeType &&
|
|
2475
|
+
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
2476
|
+
identifiersToRemove.push(key);
|
|
2477
|
+
}
|
|
2478
|
+
}
|
|
2479
|
+
});
|
|
2480
|
+
// Unwatch all collected identifiers
|
|
2481
|
+
identifiersToRemove.forEach(identifier => {
|
|
2482
|
+
if ($unwatch(identifier)) {
|
|
2483
|
+
removedCount++;
|
|
2484
|
+
}
|
|
2485
|
+
});
|
|
2486
|
+
return removedCount;
|
|
2487
|
+
};
|
|
2488
|
+
/**
|
|
2489
|
+
* Processes a single watch info during trigger cycle
|
|
2490
|
+
*/
|
|
2491
|
+
const processWatchInfo = (watchInfo) => {
|
|
2492
|
+
if (!watchInfo?.fn || (watchInfo.isMuted?.() ?? false)) {
|
|
2493
|
+
return false;
|
|
2494
|
+
}
|
|
2495
|
+
let newValue;
|
|
2496
|
+
try {
|
|
2497
|
+
newValue = watchInfo.fn();
|
|
2498
|
+
}
|
|
2499
|
+
catch (e) {
|
|
2500
|
+
console.warn(`Error executing expression: '${watchInfo.expr}'`, e);
|
|
2501
|
+
return false;
|
|
2502
|
+
}
|
|
2503
|
+
if (lodashEs.isEqual(newValue, watchInfo.last)) {
|
|
2504
|
+
return false;
|
|
2505
|
+
}
|
|
2506
|
+
// Change detected
|
|
2507
|
+
changedByWatch = true;
|
|
2508
|
+
watchInfo.last = lodashEs.isObject(newValue) && !watchInfo.doNotClone
|
|
2509
|
+
? lodashEs.clone(newValue)
|
|
2510
|
+
: newValue;
|
|
2511
|
+
watchInfo.listener(newValue, watchInfo.last === newValue ? FIRST_TIME_WATCH : watchInfo.last);
|
|
2512
|
+
changedByWatch = false;
|
|
2513
|
+
return true;
|
|
2514
|
+
};
|
|
2515
|
+
/**
|
|
2516
|
+
* Triggers all watchers
|
|
2517
|
+
*/
|
|
2518
|
+
const triggerWatchers = (ignoreMuted = false) => {
|
|
2271
2519
|
if (muted && !ignoreMuted) {
|
|
2272
2520
|
return;
|
|
2273
2521
|
}
|
|
2274
|
-
const limit = 5;
|
|
2275
2522
|
let pass = 1;
|
|
2276
2523
|
let changeDetected;
|
|
2277
2524
|
do {
|
|
2278
2525
|
changeDetected = false;
|
|
2279
|
-
registry.forEach(
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
try {
|
|
2288
|
-
nv = fn();
|
|
2289
|
-
}
|
|
2290
|
-
catch (e) {
|
|
2291
|
-
console.warn(`error in executing expression: '${watchInfo.expr}'`);
|
|
2526
|
+
registry.forEach((value) => {
|
|
2527
|
+
// Handle grouped structure
|
|
2528
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
2529
|
+
Object.values(value).forEach((watchInfo) => {
|
|
2530
|
+
if (processWatchInfo(watchInfo)) {
|
|
2531
|
+
changeDetected = true;
|
|
2532
|
+
}
|
|
2533
|
+
});
|
|
2292
2534
|
}
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
// @ts-ignore
|
|
2298
|
-
if (lodashEs.isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
|
|
2299
|
-
watchInfo.last = lodashEs.clone(nv);
|
|
2535
|
+
else {
|
|
2536
|
+
// Direct watchInfo
|
|
2537
|
+
if (processWatchInfo(value)) {
|
|
2538
|
+
changeDetected = true;
|
|
2300
2539
|
}
|
|
2301
|
-
listener(nv, ov);
|
|
2302
|
-
resetChangeFromWatch();
|
|
2303
2540
|
}
|
|
2304
2541
|
});
|
|
2305
2542
|
pass++;
|
|
2306
|
-
} while (changeDetected && pass <
|
|
2307
|
-
if (changeDetected && pass ===
|
|
2308
|
-
console.warn(`
|
|
2543
|
+
} while (changeDetected && pass < MAX_WATCH_CYCLES);
|
|
2544
|
+
if (changeDetected && pass === MAX_WATCH_CYCLES) {
|
|
2545
|
+
console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
2309
2546
|
}
|
|
2310
2547
|
};
|
|
2311
|
-
|
|
2312
|
-
const
|
|
2548
|
+
// Angular zone integration
|
|
2549
|
+
const setNgZone = (zone) => {
|
|
2550
|
+
ngZone = zone;
|
|
2551
|
+
};
|
|
2552
|
+
const setAppRef = (ref) => {
|
|
2313
2553
|
appRef = ref;
|
|
2314
2554
|
};
|
|
2315
2555
|
const isChangeFromWatch = () => changedByWatch;
|
|
2316
|
-
const resetChangeFromWatch = () =>
|
|
2317
|
-
|
|
2318
|
-
|
|
2556
|
+
const resetChangeFromWatch = () => {
|
|
2557
|
+
changedByWatch = false;
|
|
2558
|
+
};
|
|
2559
|
+
// Debounced trigger
|
|
2319
2560
|
const debouncedTriggerWatchers = debounce(() => {
|
|
2320
2561
|
skipWatchers = true;
|
|
2321
2562
|
ngZone.run(() => triggerWatchers());
|
|
2322
|
-
},
|
|
2323
|
-
const $invokeWatchers = (force, ignoreMuted) => {
|
|
2563
|
+
}, DEBOUNCE_WAIT);
|
|
2564
|
+
const $invokeWatchers = (force = false, ignoreMuted = false) => {
|
|
2324
2565
|
if (force) {
|
|
2325
2566
|
triggerWatchers(ignoreMuted);
|
|
2326
2567
|
}
|
|
@@ -2334,7 +2575,8 @@
|
|
|
2334
2575
|
};
|
|
2335
2576
|
const $appDigest = (() => {
|
|
2336
2577
|
let queued = false;
|
|
2337
|
-
|
|
2578
|
+
const $RAF = window.requestAnimationFrame;
|
|
2579
|
+
return (force = false) => {
|
|
2338
2580
|
if (!appRef) {
|
|
2339
2581
|
return;
|
|
2340
2582
|
}
|
|
@@ -2346,16 +2588,16 @@
|
|
|
2346
2588
|
if (queued) {
|
|
2347
2589
|
return;
|
|
2348
2590
|
}
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
});
|
|
2355
|
-
}
|
|
2591
|
+
queued = true;
|
|
2592
|
+
$RAF(() => {
|
|
2593
|
+
ngZone.run(() => appRef.tick());
|
|
2594
|
+
queued = false;
|
|
2595
|
+
});
|
|
2356
2596
|
}
|
|
2357
2597
|
};
|
|
2358
2598
|
})();
|
|
2599
|
+
// Export registry for debugging
|
|
2600
|
+
// (window as any).watchRegistry = registry;
|
|
2359
2601
|
|
|
2360
2602
|
exports.ComponentType = void 0;
|
|
2361
2603
|
(function (ComponentType) {
|
|
@@ -2452,6 +2694,7 @@
|
|
|
2452
2694
|
SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
|
|
2453
2695
|
SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
|
|
2454
2696
|
VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
|
|
2697
|
+
VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
|
|
2455
2698
|
REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
|
|
2456
2699
|
DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
|
|
2457
2700
|
ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
|
|
@@ -2674,6 +2917,9 @@
|
|
|
2674
2917
|
const isValidWebURL = (url) => {
|
|
2675
2918
|
return (REGEX.VALID_WEB_URL).test(url);
|
|
2676
2919
|
};
|
|
2920
|
+
const isValidImageUrl = (url) => {
|
|
2921
|
+
return (REGEX.VALID_IMAGE_URL).test(url?.trim());
|
|
2922
|
+
};
|
|
2677
2923
|
/*This function returns the url to the resource after checking the validity of url*/
|
|
2678
2924
|
const getResourceURL = (urlString) => {
|
|
2679
2925
|
return urlString;
|
|
@@ -3927,6 +4173,7 @@
|
|
|
3927
4173
|
isPageable: isPageable,
|
|
3928
4174
|
isSafari: isSafari,
|
|
3929
4175
|
isTablet: isTablet,
|
|
4176
|
+
isValidImageUrl: isValidImageUrl,
|
|
3930
4177
|
isValidWebURL: isValidWebURL,
|
|
3931
4178
|
isVideoFile: isVideoFile,
|
|
3932
4179
|
loadScript: loadScript,
|
|
@@ -5159,6 +5406,8 @@
|
|
|
5159
5406
|
exports.$parseEvent = $parseEvent;
|
|
5160
5407
|
exports.$parseExpr = $parseExpr;
|
|
5161
5408
|
exports.$unwatch = $unwatch;
|
|
5409
|
+
exports.$unwatchAll = $unwatchAll;
|
|
5410
|
+
exports.$unwatchAllByScope = $unwatchAllByScope;
|
|
5162
5411
|
exports.$watch = $watch;
|
|
5163
5412
|
exports.AbstractDialogService = AbstractDialogService;
|
|
5164
5413
|
exports.AbstractHttpService = AbstractHttpService;
|
|
@@ -5282,6 +5531,7 @@
|
|
|
5282
5531
|
exports.isObject = isObject;
|
|
5283
5532
|
exports.isPageable = isPageable;
|
|
5284
5533
|
exports.isSafari = isSafari;
|
|
5534
|
+
exports.isValidImageUrl = isValidImageUrl;
|
|
5285
5535
|
exports.isValidWebURL = isValidWebURL;
|
|
5286
5536
|
exports.isVideoFile = isVideoFile;
|
|
5287
5537
|
exports.loadScript = loadScript;
|
|
@@ -7,8 +7,8 @@ export { appendNode, insertBefore, insertAfter, removeNode, removeClass, addClas
|
|
|
7
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
|
-
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, 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, setNgZone, setAppRef, isChangeFromWatch, resetChangeFromWatch, $invokeWatchers, $appDigest } from './utils/watcher';
|
|
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, $unwatchAll, $unwatchAllByScope, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLFlBQVksRUFDWixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxxQkFBcUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb3JlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvYnVpbGQtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvY3VycmVuY3ktY29uc3RhbnRzJztcbmV4cG9ydCB7XG4gICAgYXBwZW5kTm9kZSxcbiAgICBpbnNlcnRCZWZvcmUsXG4gICAgaW5zZXJ0QWZ0ZXIsXG4gICAgcmVtb3ZlTm9kZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBhZGRDbGFzcyxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICBzZXRDU1MsXG4gICAgc2V0Q1NTRnJvbU9iaixcbiAgICBzZXRQcm9wZXJ0eSxcbiAgICBzZXRBdHRyLFxuICAgIHNldEh0bWwsXG4gICAgcmVtb3ZlQXR0cixcbiAgICBjcmVhdGVFbGVtZW50LFxuICAgIHRvRGltZW5zaW9uXG59IGZyb20gJy4vdXRpbHMvZG9tJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9ldmVudC1ub3RpZmllcic7XG5leHBvcnQge1xuICAgIFBhcnNlRXhwclJlc3VsdCxcbiAgICAkcGFyc2VFeHByLFxuICAgICRwYXJzZUV2ZW50LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHIsXG4gICAgc2V0UGlwZVByb3ZpZGVyLFxuICAgIGdldEZuQnlFeHByLFxuICAgIGdldEZuRm9yQmluZEV4cHIsXG4gICAgZ2V0Rm5Gb3JFdmVudEV4cHJcbn0gZnJvbSAnLi91dGlscy9leHByZXNzaW9uLXBhcnNlcic7XG5leHBvcnQge1xuICAgIEVWRU5UX0xJRkUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzT2JqZWN0LFxuICAgIHRvQm9vbGVhbixcbiAgICBpc0lFLFxuICAgIGlzQW5kcm9pZCxcbiAgICBpc0FuZHJvaWRUYWJsZXQsXG4gICAgaXNJcGhvbmUsXG4gICAgaXNJcG9kLFxuICAgIGlzSXBhZCxcbiAgICBpc0lvcyxcbiAgICBpc1NhZmFyaSxcbiAgICBpc0xhcmdlVGFibGV0TGFuZHNjYXBlLFxuICAgIGlzTGFyZ2VUYWJsZXRQb3J0cmFpdCxcbiAgICBpc01vYmlsZSxcbiAgICBnZXRBbmRyb2lkVmVyc2lvbixcbiAgICBpc0tpdGthdERldmljZSxcbiAgICBlbmNvZGVVcmwsXG4gICAgZW5jb2RlVXJsUGFyYW1zLFxuICAgIGluaXRDYXBzLFxuICAgIHNwYWNlU2VwYXJhdGUsXG4gICAgcmVwbGFjZUF0LFxuICAgIHBlcmlvZFNlcGFyYXRlLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0LFxuICAgIHN0cmluZ1N0YXJ0c1dpdGgsXG4gICAgZ2V0RXZhbHVhdGVkRXhwclZhbHVlLFxuICAgIGlzSW1hZ2VGaWxlLFxuICAgIGlzQXVkaW9GaWxlLFxuICAgIGlzVmlkZW9GaWxlLFxuICAgIGlzVmFsaWRJbWFnZVVybCxcbiAgICBpc1ZhbGlkV2ViVVJMLFxuICAgIGdldFJlc291cmNlVVJMLFxuICAgIHRyaWdnZXJGbixcbiAgICBoYXNPZmZzZXRTdHIsXG4gICAgZ2V0Rm9ybWF0dGVkRGF0ZSxcbiAgICBnZXREYXRlT2JqLFxuICAgIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldEZpbGVzLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICB2YWxpZGF0ZUFjY2Vzc1JvbGVzLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICB4bWxUb0pzb24sXG4gICAgZmluZFZhbHVlT2YsXG4gICAgZXh0cmFjdFR5cGUsXG4gICAgaXNOdW1iZXJUeXBlLFxuICAgIGlzRW1wdHlPYmplY3QsXG4gICAgc2Nyb2xsVG9FbGVtZW50LFxuICAgIGlzRWxlbWVudEluVmlld3BvcnQsXG4gICAgaXNQYWdlYWJsZSxcbiAgICByZXBsYWNlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGdldFZhbGlkRGF0ZU9iamVjdCxcbiAgICBnZXROYXRpdmVEYXRlT2JqZWN0LFxuICAgIGdldEJsb2IsXG4gICAgaXNFcXVhbFdpdGhGaWVsZHMsXG4gICAgbG9hZFN0eWxlU2hlZXQsXG4gICAgbG9hZFN0eWxlU2hlZXRzLFxuICAgIGxvYWRTY3JpcHQsXG4gICAgbG9hZFNjcmlwdHMsXG4gICAgX1dNX0FQUF9QUk9KRUNULFxuICAgIHNldFNlc3Npb25TdG9yYWdlSXRlbSxcbiAgICBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgbm9vcCxcbiAgICBjb252ZXJ0VG9CbG9iLFxuICAgIEFwcENvbnN0YW50cyxcbiAgICBvcGVuTGluayxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgdG9Qcm9taXNlLFxuICAgIHJldHJ5SWZGYWlscyxcbiAgICBnZXRBYm9ydGFibGVEZWZlcixcbiAgICBjcmVhdGVDU1NSdWxlLFxuICAgIGdldFVybFBhcmFtcyxcbiAgICBnZXRNb21lbnRMb2NhbGVPYmplY3QsXG4gICAgZ2V0Um91dGVOYW1lRnJvbUxpbmssXG4gICAgaXNBcHBsZVByb2R1Y3QsXG4gICAgZGVmZXIsXG4gICAgZXhlY3V0ZVByb21pc2VDaGFpbixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICB2YWxpZGF0ZURhdGFTb3VyY2VDdHgsXG4gICAgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlLFxuICAgIGV4dGVuZFByb3RvLFxuICAgIHJlbW92ZUV4dHJhU2xhc2hlcyxcbiAgICBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQsXG4gICAgYWRkRm9ySWRBdHRyaWJ1dGVzLFxuICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLFxuICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMsXG4gICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uLFxuICAgIGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgsXG4gICAgY2xvc2VQb3BvdmVyLFxuICAgIGRldGVjdENoYW5nZXMsXG4gICAgdHJpZ2dlckl0ZW1BY3Rpb24sXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgVkFMSURBVE9SLFxuICAgIHRyYW5zZm9ybUZpbGVVUkksXG4gICAgYXBwZW5kU2NyaXB0VG9IZWFkLFxuICAgIGdldEFwcFNldHRpbmcsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIGZpbmRQYXJlbnQsXG4gICAgZ2V0TmF2Q2xhc3MsXG4gICAgZ2V0U2hlZXRQb3NpdGlvbkNsYXNzXG59IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IHtcbiAgICBGSVJTVF9USU1FX1dBVENILFxuICAgIGlzRmlyc3RUaW1lQ2hhbmdlLFxuICAgIGRlYm91bmNlLFxuICAgIG11dGVXYXRjaGVycyxcbiAgICB1bk11dGVXYXRjaGVycyxcbiAgICAkd2F0Y2gsXG4gICAgJHVud2F0Y2gsXG4gICAgJHVud2F0Y2hBbGwsXG4gICAgJHVud2F0Y2hBbGxCeVNjb3BlLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRBcHBSZWYsXG4gICAgaXNDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnLi91dGlscy93YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvdHlwZXMnO1xuZXhwb3J0IHsgVmlld3BvcnQsIFZpZXdwb3J0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb25zdGFudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXdpZGdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXNlci1jdXN0b20tcGlwZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20taWNvbnMtbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZSB9IGZyb20gJy4vc2VydmljZXMvc3RhdGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5leHBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbHJ1LWNhY2hlJztcbiJdfQ==
|