@wavemaker/app-ng-runtime 11.14.2-1.6424 → 11.14.2-2.6435

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.
Files changed (35) hide show
  1. package/components/base/bundles/index.umd.js +6 -12
  2. package/components/base/esm2022/widgets/common/base/base.component.mjs +8 -14
  3. package/components/base/fesm2022/index.mjs +7 -13
  4. package/components/base/fesm2022/index.mjs.map +1 -1
  5. package/components/data/table/bundles/index.umd.js +5 -5
  6. package/components/data/table/esm2022/table.component.mjs +7 -7
  7. package/components/data/table/fesm2022/index.mjs +6 -6
  8. package/components/data/table/fesm2022/index.mjs.map +1 -1
  9. package/components/prefab/bundles/index.umd.js +0 -4
  10. package/components/prefab/esm2022/prefab.directive.mjs +1 -5
  11. package/components/prefab/fesm2022/index.mjs +0 -4
  12. package/components/prefab/fesm2022/index.mjs.map +1 -1
  13. package/core/bundles/index.umd.js +187 -330
  14. package/core/esm2022/public_api.mjs +2 -2
  15. package/core/esm2022/utils/watcher.mjs +191 -327
  16. package/core/fesm2022/index.mjs +194 -330
  17. package/core/fesm2022/index.mjs.map +1 -1
  18. package/core/public_api.d.ts +1 -1
  19. package/core/utils/watcher.d.ts +5 -26
  20. package/npm-shrinkwrap.json +2 -2
  21. package/package-lock.json +2 -2
  22. package/package.json +1 -1
  23. package/runtime/base/bundles/index.umd.js +11 -171
  24. package/runtime/base/components/app-component/app.component.d.ts +0 -4
  25. package/runtime/base/esm2022/components/app-component/app.component.mjs +9 -40
  26. package/runtime/base/esm2022/components/base-page.component.mjs +3 -35
  27. package/runtime/base/esm2022/components/base-partial.component.mjs +3 -37
  28. package/runtime/base/esm2022/components/base-prefab.component.mjs +3 -32
  29. package/runtime/base/esm2022/components/base-spa-page.component.mjs +3 -37
  30. package/runtime/base/fesm2022/index.mjs +12 -172
  31. package/runtime/base/fesm2022/index.mjs.map +1 -1
  32. package/runtime/dynamic/bundles/index.umd.js +4 -0
  33. package/runtime/dynamic/esm2022/app/app.config.mjs +6 -2
  34. package/runtime/dynamic/fesm2022/index.mjs +5 -1
  35. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
@@ -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
  });
@@ -2207,25 +2207,14 @@
2207
2207
  return fnExecutor(expr, ExpressionType.Action);
2208
2208
  };
2209
2209
 
2210
- // Constants
2211
- const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
2212
- const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
2213
- const ARRAY_INDEX_PLACEHOLDER = '[$i]';
2214
- const ARRAY_INDEX_ZERO = '[0]';
2215
- const DEBOUNCE_WAIT = 100;
2216
- const MAX_WATCH_CYCLES = 5;
2217
2210
  const registry = new Map();
2218
2211
  const watchIdGenerator = new IDGenerator('watch-id-');
2219
- const FIRST_TIME_WATCH = Object.freeze({});
2220
- // State
2212
+ const FIRST_TIME_WATCH = {};
2213
+ Object.freeze(FIRST_TIME_WATCH);
2214
+ const isFirstTimeChange = v => v === FIRST_TIME_WATCH;
2221
2215
  let muted = false;
2222
- let changedByWatch = false;
2223
- let skipWatchers = false;
2224
- let ngZone;
2225
2216
  let appRef;
2226
- // Utility functions
2227
- const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
2228
- const debounce = (fn, wait = DEBOUNCE_WAIT) => {
2217
+ const debounce = (fn, wait = 50) => {
2229
2218
  let timeout;
2230
2219
  return (...args) => {
2231
2220
  window['__zone_symbol__clearTimeout'](timeout);
@@ -2237,362 +2226,227 @@
2237
2226
  };
2238
2227
  const unMuteWatchers = () => {
2239
2228
  muted = false;
2240
- triggerWatchers();
2241
- };
2242
- /**
2243
- * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
2244
- */
2245
- const getWidgetId = (identifier) => {
2246
- if (!identifier || typeof identifier !== 'string') {
2247
- return null;
2248
- }
2249
- const match = identifier.match(WIDGET_ID_REGEX);
2250
- return match ? match[1] : null;
2229
+ $invokeWatchers(true);
2251
2230
  };
2252
- /**
2253
- * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
2254
- */
2255
- const getPropertyName = (identifier) => {
2256
- if (!identifier || typeof identifier !== 'string') {
2257
- return identifier;
2258
- }
2259
- const match = identifier.match(WIDGET_PROPERTY_REGEX);
2260
- return match ? match[1] : identifier;
2261
- };
2262
- /**
2263
- * Array consumer wrapper for array-based expressions
2264
- */
2265
2231
  const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
2266
- if (!lodashEs.isArray(newVal)) {
2267
- return;
2268
- }
2269
- let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
2270
- // Flatten if result is array of arrays
2271
- if (lodashEs.isArray(formattedData[0])) {
2272
- formattedData = lodashEs.flatten(formattedData);
2232
+ let data = newVal, formattedData;
2233
+ if (lodashEs.isArray(data)) {
2234
+ formattedData = data.map(function (datum) {
2235
+ return findValueOf(datum, restExpr);
2236
+ });
2237
+ // If resulting structure is an array of array, flatten it
2238
+ if (lodashEs.isArray(formattedData[0])) {
2239
+ formattedData = lodashEs.flatten(formattedData);
2240
+ }
2241
+ listenerFn(formattedData, oldVal);
2273
2242
  }
2274
- listenerFn(formattedData, oldVal);
2275
2243
  };
2276
- /**
2277
- * Updates watch info for array expressions
2278
- */
2279
- const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
2280
- const regex = /\[\$i\]/g;
2244
+ const getUpdatedWatcInfo = (expr, acceptsArray, listener) => {
2245
+ // listener doesn't accept array
2246
+ // replace all `[$i]` with `[0]` and return the expression
2247
+ let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
2281
2248
  if (!acceptsArray) {
2282
2249
  return {
2283
- expr: expr.replace(regex, ARRAY_INDEX_ZERO),
2284
- listener
2250
+ 'expr': expr.replace(regex, $0),
2251
+ 'listener': listener
2285
2252
  };
2286
2253
  }
2287
- const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
2288
- const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
2289
- const restExpr = expr.substring(lastIndex + 5);
2290
- const arrayConsumerFn = restExpr
2291
- ? arrayConsumer.bind(undefined, listener, restExpr)
2292
- : listener;
2254
+ // listener accepts array
2255
+ // replace all except the last `[$i]` with `[0]` and return the expression.
2256
+ var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
2257
+ if (restExpr) {
2258
+ arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);
2259
+ }
2293
2260
  return {
2294
- expr: baseExpr,
2295
- listener: arrayConsumerFn
2261
+ 'expr': _expr,
2262
+ 'listener': arrayConsumerFn
2296
2263
  };
2297
2264
  };
2298
- /**
2299
- * Determines if an expression is static (doesn't need to be watched)
2300
- */
2301
- const STATIC_EXPRESSION_NAMES = [
2302
- "row.getProperty('investment')",
2303
- "row.getProperty('factsheetLink')",
2304
- "row.getProperty('isRebalanceEligible')"
2305
- ];
2306
- const isStaticExpression = (expr) => {
2307
- if (typeof expr !== 'string') {
2308
- return false;
2309
- }
2310
- const trimmedExpr = expr.trim();
2311
- // Expressions that always evaluate to localization strings
2312
- // if (trimmedExpr.includes('appLocale')) {
2313
- // return true;
2314
- // }
2315
- // Hard-coded static expression names
2316
- if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
2317
- return true;
2318
- }
2319
- return false;
2320
- };
2321
- /**
2322
- * Gets the scope type from the scope object
2323
- */
2324
- const getScopeType = ($scope) => {
2325
- if (!$scope) {
2326
- return null;
2327
- }
2328
- if ($scope.pageName)
2329
- return 'Page';
2330
- if ($scope.prefabName)
2331
- return 'Prefab';
2332
- if ($scope.partialName)
2333
- return 'Partial';
2334
- // Check for App scope
2335
- if ($scope.Variables !== undefined &&
2336
- $scope.Actions !== undefined &&
2337
- !$scope.pageName &&
2338
- !$scope.prefabName &&
2339
- !$scope.partialName) {
2340
- return 'App';
2341
- }
2342
- if ($scope.constructor?.name === 'AppRef') {
2343
- return 'App';
2344
- }
2345
- return null;
2346
- };
2347
- /**
2348
- * Gets scope name based on scope type
2349
- */
2350
- const getScopeName = ($scope, scopeType) => {
2351
- if (!scopeType || !$scope) {
2352
- return null;
2353
- }
2354
- switch (scopeType) {
2355
- case 'Prefab': return $scope.prefabName || null;
2356
- case 'Partial': return $scope.partialName || null;
2357
- case 'Page': return $scope.pageName || null;
2358
- default: return null;
2359
- }
2360
- };
2361
- /**
2362
- * Main watch function
2363
- */
2364
2265
  const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
2365
- // Handle array expressions
2366
- if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
2367
- const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
2266
+ if (expr.indexOf('[$i]') !== -1) {
2267
+ let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);
2368
2268
  expr = watchInfo.expr;
2369
2269
  listener = watchInfo.listener;
2370
2270
  }
2371
- // Handle static expressions
2372
- if (isStaticExpression(expr)) {
2373
- try {
2374
- const fn = $parseExpr(expr);
2375
- const staticValue = fn($scope, $locals);
2376
- listener(staticValue, FIRST_TIME_WATCH);
2377
- }
2378
- catch (e) {
2379
- console.warn(`Error evaluating static expression '${expr}':`, e);
2380
- listener(undefined, FIRST_TIME_WATCH);
2381
- }
2382
- return () => { }; // No-op unsubscribe
2383
- }
2384
2271
  const fn = $parseExpr(expr);
2385
- const scopeType = getScopeType($scope);
2386
- const scopeName = getScopeName($scope, scopeType);
2387
- const watchInfo = {
2388
- fn: fn.bind(null, $scope, $locals),
2272
+ registry.set(identifier, {
2273
+ fn: fn.bind(expr, $scope, $locals),
2389
2274
  listener,
2390
2275
  expr,
2391
2276
  last: FIRST_TIME_WATCH,
2392
2277
  doNotClone,
2393
- isMuted,
2394
- scopeType,
2395
- scopeName
2396
- };
2397
- // Store in registry
2398
- const widgetId = getWidgetId(identifier);
2399
- if (widgetId) {
2400
- const propertyName = getPropertyName(identifier);
2401
- if (!registry.has(widgetId)) {
2402
- registry.set(widgetId, {});
2403
- }
2404
- const widgetGroup = registry.get(widgetId);
2405
- widgetGroup[propertyName] = watchInfo;
2406
- }
2407
- else {
2408
- registry.set(identifier, watchInfo);
2409
- }
2410
- return () => $unwatch(identifier);
2411
- };
2412
- /**
2413
- * Unwatches a single identifier
2414
- */
2415
- const $unwatch = (identifier) => {
2416
- const widgetId = getWidgetId(identifier);
2417
- if (widgetId) {
2418
- const propertyName = getPropertyName(identifier);
2419
- const widgetGroup = registry.get(widgetId);
2420
- if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
2421
- const watchInfo = widgetGroup[propertyName];
2422
- if (watchInfo) {
2423
- delete widgetGroup[propertyName];
2424
- // Clean up empty widget groups
2425
- if (Object.keys(widgetGroup).length === 0) {
2426
- registry.delete(widgetId);
2427
- }
2428
- return true;
2429
- }
2430
- }
2431
- }
2432
- // Fallback to direct lookup
2433
- if (registry.has(identifier)) {
2434
- registry.delete(identifier);
2435
- return true;
2436
- }
2437
- return false;
2438
- };
2439
- /**
2440
- * Unwatches all watchers for a specific widget ID
2441
- */
2442
- const $unwatchAll = (widgetId) => {
2443
- if (!widgetId || typeof widgetId !== 'string') {
2444
- return 0;
2445
- }
2446
- const widgetGroup = registry.get(widgetId);
2447
- if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
2448
- const count = Object.keys(widgetGroup).length;
2449
- registry.delete(widgetId);
2450
- return count;
2451
- }
2452
- // Fallback: find all identifiers starting with this widget ID
2453
- let removedCount = 0;
2454
- const identifiersToRemove = [];
2455
- registry.forEach((_, key) => {
2456
- if (key.startsWith(widgetId + '_')) {
2457
- identifiersToRemove.push(key);
2458
- }
2459
- });
2460
- identifiersToRemove.forEach(identifier => {
2461
- if ($unwatch(identifier)) {
2462
- removedCount++;
2463
- }
2464
- });
2465
- return removedCount;
2466
- };
2467
- /**
2468
- * Unwatches all watchers for a specific scope (Page, Prefab, Partial, or App)
2469
- * Now works directly with the main registry instead of separate scoped registries
2470
- */
2471
- const $unwatchAllByScope = (scopeType, scopeName) => {
2472
- if (!scopeType) {
2473
- return 0;
2474
- }
2475
- let removedCount = 0;
2476
- const identifiersToRemove = [];
2477
- registry.forEach((value, key) => {
2478
- // Handle grouped structure (widget groups)
2479
- if (value && typeof value === 'object' && !value.fn) {
2480
- Object.entries(value).forEach(([propertyName, watchInfo]) => {
2481
- if (watchInfo?.scopeType === scopeType &&
2482
- (!scopeName || watchInfo.scopeName === scopeName)) {
2483
- identifiersToRemove.push(`${key}_${propertyName}`);
2484
- }
2485
- });
2486
- }
2487
- else {
2488
- // Direct watchInfo
2489
- const watchInfo = value;
2490
- if (watchInfo?.scopeType === scopeType &&
2491
- (!scopeName || watchInfo.scopeName === scopeName)) {
2492
- identifiersToRemove.push(key);
2493
- }
2494
- }
2278
+ isMuted: isMuted
2495
2279
  });
2496
- // Unwatch all collected identifiers
2497
- identifiersToRemove.forEach(identifier => {
2498
- if ($unwatch(identifier)) {
2499
- removedCount++;
2500
- }
2501
- });
2502
- return removedCount;
2503
- };
2504
- /**
2505
- * Processes a single watch info during trigger cycle
2506
- */
2507
- const processWatchInfo = (watchInfo) => {
2508
- if (!watchInfo?.fn || (watchInfo.isMuted?.() ?? false)) {
2509
- return false;
2510
- }
2511
- let newValue;
2512
- try {
2513
- newValue = watchInfo.fn();
2514
- }
2515
- catch (e) {
2516
- console.warn(`Error executing expression: '${watchInfo.expr}'`, e);
2517
- return false;
2518
- }
2519
- if (lodashEs.isEqual(newValue, watchInfo.last)) {
2520
- return false;
2521
- }
2522
- // Change detected
2523
- changedByWatch = true;
2524
- watchInfo.last = lodashEs.isObject(newValue) && !watchInfo.doNotClone
2525
- ? lodashEs.clone(newValue)
2526
- : newValue;
2527
- watchInfo.listener(newValue, watchInfo.last === newValue ? FIRST_TIME_WATCH : watchInfo.last);
2528
- changedByWatch = false;
2529
- return true;
2280
+ return () => $unwatch(identifier);
2530
2281
  };
2531
- /**
2532
- * Triggers all watchers
2533
- */
2534
- const triggerWatchers = (ignoreMuted = false) => {
2282
+ const $unwatch = identifier => registry.delete(identifier);
2283
+ let changedByWatch = false;
2284
+ const $RAF = window.requestAnimationFrame;
2285
+ let ngZone;
2286
+ const triggerWatchers = (ignoreMuted) => {
2535
2287
  if (muted && !ignoreMuted) {
2536
2288
  return;
2537
2289
  }
2290
+ log(".......................triggerWatchers.................................");
2291
+ const limit = 5;
2538
2292
  let pass = 1;
2539
2293
  let changeDetected;
2540
2294
  do {
2541
2295
  changeDetected = false;
2542
- registry.forEach((value) => {
2543
- // Handle grouped structure
2544
- if (value && typeof value === 'object' && !value.fn) {
2545
- Object.values(value).forEach((watchInfo) => {
2546
- if (processWatchInfo(watchInfo)) {
2547
- changeDetected = true;
2548
- }
2549
- });
2296
+ registry.forEach(watchInfo => {
2297
+ if (watchInfo.isMuted && watchInfo.isMuted()) {
2298
+ return;
2550
2299
  }
2551
- else {
2552
- // Direct watchInfo
2553
- if (processWatchInfo(value)) {
2554
- changeDetected = true;
2300
+ const fn = watchInfo.fn;
2301
+ const listener = watchInfo.listener;
2302
+ const ov = watchInfo.last;
2303
+ let nv;
2304
+ try {
2305
+ nv = fn();
2306
+ }
2307
+ catch (e) {
2308
+ console.warn(`error in executing expression: '${watchInfo.expr}'`);
2309
+ }
2310
+ if (!lodashEs.isEqual(nv, ov)) {
2311
+ changeDetected = true;
2312
+ changedByWatch = true;
2313
+ watchInfo.last = nv;
2314
+ // @ts-ignore
2315
+ if (lodashEs.isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
2316
+ watchInfo.last = lodashEs.clone(nv);
2555
2317
  }
2318
+ listener(nv, ov);
2319
+ resetChangeFromWatch();
2556
2320
  }
2557
2321
  });
2558
2322
  pass++;
2559
- } while (changeDetected && pass < MAX_WATCH_CYCLES);
2560
- if (changeDetected && pass === MAX_WATCH_CYCLES) {
2561
- console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
2323
+ } while (changeDetected && pass < limit);
2324
+ if (changeDetected && pass === limit) {
2325
+ console.warn(`Number of watch cycles gone above set limit of: ${limit} `);
2562
2326
  }
2563
2327
  };
2564
- // Angular zone integration
2565
- const setNgZone = (zone) => {
2566
- ngZone = zone;
2567
- };
2568
- const setAppRef = (ref) => {
2328
+ const setNgZone = zone => ngZone = zone;
2329
+ const setAppRef = ref => {
2569
2330
  appRef = ref;
2570
2331
  };
2571
2332
  const isChangeFromWatch = () => changedByWatch;
2572
- const resetChangeFromWatch = () => {
2573
- changedByWatch = false;
2574
- };
2575
- // Debounced trigger
2576
- const debouncedTriggerWatchers = debounce(() => {
2577
- skipWatchers = true;
2578
- ngZone.run(() => triggerWatchers());
2579
- }, DEBOUNCE_WAIT);
2333
+ const resetChangeFromWatch = () => changedByWatch = false;
2334
+ window.watchRegistry = registry;
2335
+ let scheduled = false, rerunRequested = false, isRunning = false, consecutiveReruns = 0;
2336
+ const MAX_PASSES = 5, DEBOUNCE_TIME = 200, MAX_CONSECUTIVE_RERUNS = 3;
2337
+ window.__WM_DEBUG_WATCHERS__ = false;
2580
2338
  const $invokeWatchers = (force = false, ignoreMuted = false) => {
2581
2339
  if (force) {
2582
2340
  triggerWatchers(ignoreMuted);
2583
2341
  }
2584
2342
  else {
2343
+ scheduleExecution(ignoreMuted);
2344
+ }
2345
+ };
2346
+ function scheduleExecution(ignoreMuted) {
2347
+ if (scheduled) {
2348
+ rerunRequested = true;
2349
+ return;
2350
+ }
2351
+ scheduled = true;
2352
+ // Reset consecutive rerun counter when scheduling from outside
2353
+ // (not from within executeWatchers rerun logic)
2354
+ if (!isRunning) {
2355
+ consecutiveReruns = 0;
2356
+ }
2357
+ debouncedExecute(ignoreMuted);
2358
+ }
2359
+ const debouncedExecute = debounce((ignoreMuted) => {
2360
+ scheduled = false;
2361
+ executeWatchers(ignoreMuted);
2362
+ }, DEBOUNCE_TIME);
2363
+ function executeWatchers(ignoreMuted) {
2364
+ if (isRunning) {
2365
+ rerunRequested = true;
2366
+ return;
2367
+ }
2368
+ isRunning = true;
2369
+ let actuallyChanged = false;
2370
+ ngZone.runOutsideAngular(() => {
2371
+ let pass = 1;
2372
+ let changeDetected;
2373
+ do {
2374
+ changeDetected = false;
2375
+ log(`-------executeWatchers (run #${consecutiveReruns + 1})--------- `);
2376
+ registry.forEach(watchInfo => {
2377
+ if (watchInfo.isMuted && watchInfo.isMuted()) {
2378
+ return;
2379
+ }
2380
+ const fn = watchInfo.fn;
2381
+ const listener = watchInfo.listener;
2382
+ const ov = watchInfo.last;
2383
+ let nv;
2384
+ try {
2385
+ nv = fn();
2386
+ }
2387
+ catch (e) {
2388
+ console.warn(`error in executing expression: '${watchInfo.expr}'`);
2389
+ }
2390
+ if (!lodashEs.isEqual(nv, ov)) {
2391
+ changeDetected = true;
2392
+ actuallyChanged = true;
2393
+ changedByWatch = true;
2394
+ watchInfo.last = nv;
2395
+ // @ts-ignore
2396
+ if (lodashEs.isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
2397
+ watchInfo.last = lodashEs.clone(nv);
2398
+ }
2399
+ listener(nv, ov);
2400
+ resetChangeFromWatch();
2401
+ }
2402
+ });
2403
+ pass++;
2404
+ } while (changeDetected && pass < MAX_PASSES);
2405
+ });
2406
+ isRunning = false;
2407
+ // Trigger Angular change detection if watchers actually changed values
2408
+ if (actuallyChanged) {
2409
+ ngZone.run(() => {
2410
+ log(`-------DONE (changes detected)--------- `);
2411
+ });
2412
+ }
2413
+ else {
2414
+ log(`-------DONE (no changes)--------- `);
2415
+ }
2416
+ // 🔥 collapse ALL mid-run triggers into ONE rerun
2417
+ // BUT limit consecutive reruns to prevent infinite loops
2418
+ if (rerunRequested) {
2419
+ rerunRequested = false;
2420
+ if (consecutiveReruns < MAX_CONSECUTIVE_RERUNS) {
2421
+ consecutiveReruns++;
2422
+ log(`[Watcher] Scheduling rerun #${consecutiveReruns} (requested during execution)`);
2423
+ scheduleExecution(ignoreMuted);
2424
+ }
2425
+ else {
2426
+ consecutiveReruns = 0;
2427
+ log(`[Watcher] ⚠️ Stopped infinite loop! Max consecutive reruns (${MAX_CONSECUTIVE_RERUNS}) reached. This usually means watcher listeners are triggering more change detection.`);
2428
+ }
2429
+ }
2430
+ else {
2431
+ // No rerun requested - reset counter
2432
+ consecutiveReruns = 0;
2433
+ }
2434
+ }
2435
+ /*export const $invokeWatchers = (force?: boolean, ignoreMuted?: boolean) => {
2436
+ if (force) {
2437
+ triggerWatchers(ignoreMuted);
2438
+ } else {
2439
+
2585
2440
  if (skipWatchers) {
2586
2441
  skipWatchers = false;
2587
2442
  return;
2588
2443
  }
2589
2444
  debouncedTriggerWatchers();
2590
2445
  }
2591
- };
2446
+ };*/
2592
2447
  const $appDigest = (() => {
2593
2448
  let queued = false;
2594
- const $RAF = window.requestAnimationFrame;
2595
- return (force = false) => {
2449
+ return (force) => {
2596
2450
  if (!appRef) {
2597
2451
  return;
2598
2452
  }
@@ -2604,16 +2458,21 @@
2604
2458
  if (queued) {
2605
2459
  return;
2606
2460
  }
2607
- queued = true;
2608
- $RAF(() => {
2609
- ngZone.run(() => appRef.tick());
2610
- queued = false;
2611
- });
2461
+ else {
2462
+ queued = true;
2463
+ $RAF(() => {
2464
+ ngZone.run(() => appRef.tick());
2465
+ queued = false;
2466
+ });
2467
+ }
2612
2468
  }
2613
2469
  };
2614
2470
  })();
2615
- // Export registry for debugging
2616
- window.watchRegistry = registry;
2471
+ function log(message) {
2472
+ if (window.__WM_DEBUG_WATCHERS__) {
2473
+ console.log(message);
2474
+ }
2475
+ }
2617
2476
 
2618
2477
  exports.ComponentType = void 0;
2619
2478
  (function (ComponentType) {
@@ -5453,8 +5312,6 @@
5453
5312
  exports.$parseEvent = $parseEvent;
5454
5313
  exports.$parseExpr = $parseExpr;
5455
5314
  exports.$unwatch = $unwatch;
5456
- exports.$unwatchAll = $unwatchAll;
5457
- exports.$unwatchAllByScope = $unwatchAllByScope;
5458
5315
  exports.$watch = $watch;
5459
5316
  exports.AbstractDialogService = AbstractDialogService;
5460
5317
  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, $unwatchAll, $unwatchAllByScope, setNgZone, setAppRef, isChangeFromWatch, resetChangeFromWatch, $invokeWatchers, $appDigest } from './utils/watcher';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLFlBQVksRUFDWixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxxQkFBcUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb3JlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvYnVpbGQtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvY3VycmVuY3ktY29uc3RhbnRzJztcbmV4cG9ydCB7XG4gICAgYXBwZW5kTm9kZSxcbiAgICBpbnNlcnRCZWZvcmUsXG4gICAgaW5zZXJ0QWZ0ZXIsXG4gICAgcmVtb3ZlTm9kZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBhZGRDbGFzcyxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICBzZXRDU1MsXG4gICAgc2V0Q1NTRnJvbU9iaixcbiAgICBzZXRQcm9wZXJ0eSxcbiAgICBzZXRBdHRyLFxuICAgIHNldEh0bWwsXG4gICAgcmVtb3ZlQXR0cixcbiAgICBjcmVhdGVFbGVtZW50LFxuICAgIHRvRGltZW5zaW9uXG59IGZyb20gJy4vdXRpbHMvZG9tJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9ldmVudC1ub3RpZmllcic7XG5leHBvcnQge1xuICAgIFBhcnNlRXhwclJlc3VsdCxcbiAgICAkcGFyc2VFeHByLFxuICAgICRwYXJzZUV2ZW50LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHIsXG4gICAgc2V0UGlwZVByb3ZpZGVyLFxuICAgIGdldEZuQnlFeHByLFxuICAgIGdldEZuRm9yQmluZEV4cHIsXG4gICAgZ2V0Rm5Gb3JFdmVudEV4cHJcbn0gZnJvbSAnLi91dGlscy9leHByZXNzaW9uLXBhcnNlcic7XG5leHBvcnQge1xuICAgIEVWRU5UX0xJRkUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzT2JqZWN0LFxuICAgIHRvQm9vbGVhbixcbiAgICBpc0lFLFxuICAgIGlzQW5kcm9pZCxcbiAgICBpc0FuZHJvaWRUYWJsZXQsXG4gICAgaXNJcGhvbmUsXG4gICAgaXNJcG9kLFxuICAgIGlzSXBhZCxcbiAgICBpc0lvcyxcbiAgICBpc1NhZmFyaSxcbiAgICBpc0xhcmdlVGFibGV0TGFuZHNjYXBlLFxuICAgIGlzTGFyZ2VUYWJsZXRQb3J0cmFpdCxcbiAgICBpc01vYmlsZSxcbiAgICBnZXRBbmRyb2lkVmVyc2lvbixcbiAgICBpc0tpdGthdERldmljZSxcbiAgICBlbmNvZGVVcmwsXG4gICAgZW5jb2RlVXJsUGFyYW1zLFxuICAgIGluaXRDYXBzLFxuICAgIHNwYWNlU2VwYXJhdGUsXG4gICAgcmVwbGFjZUF0LFxuICAgIHBlcmlvZFNlcGFyYXRlLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0LFxuICAgIHN0cmluZ1N0YXJ0c1dpdGgsXG4gICAgZ2V0RXZhbHVhdGVkRXhwclZhbHVlLFxuICAgIGlzSW1hZ2VGaWxlLFxuICAgIGlzQXVkaW9GaWxlLFxuICAgIGlzVmlkZW9GaWxlLFxuICAgIGlzVmFsaWRJbWFnZVVybCxcbiAgICBpc1ZhbGlkV2ViVVJMLFxuICAgIGdldFJlc291cmNlVVJMLFxuICAgIHRyaWdnZXJGbixcbiAgICBoYXNPZmZzZXRTdHIsXG4gICAgZ2V0Rm9ybWF0dGVkRGF0ZSxcbiAgICBnZXREYXRlT2JqLFxuICAgIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldEZpbGVzLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICB2YWxpZGF0ZUFjY2Vzc1JvbGVzLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICB4bWxUb0pzb24sXG4gICAgZmluZFZhbHVlT2YsXG4gICAgZXh0cmFjdFR5cGUsXG4gICAgaXNOdW1iZXJUeXBlLFxuICAgIGlzRW1wdHlPYmplY3QsXG4gICAgc2Nyb2xsVG9FbGVtZW50LFxuICAgIGlzRWxlbWVudEluVmlld3BvcnQsXG4gICAgaXNQYWdlYWJsZSxcbiAgICByZXBsYWNlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGdldFZhbGlkRGF0ZU9iamVjdCxcbiAgICBnZXROYXRpdmVEYXRlT2JqZWN0LFxuICAgIGdldEJsb2IsXG4gICAgaXNFcXVhbFdpdGhGaWVsZHMsXG4gICAgbG9hZFN0eWxlU2hlZXQsXG4gICAgbG9hZFN0eWxlU2hlZXRzLFxuICAgIGxvYWRTY3JpcHQsXG4gICAgbG9hZFNjcmlwdHMsXG4gICAgX1dNX0FQUF9QUk9KRUNULFxuICAgIHNldFNlc3Npb25TdG9yYWdlSXRlbSxcbiAgICBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgbm9vcCxcbiAgICBjb252ZXJ0VG9CbG9iLFxuICAgIEFwcENvbnN0YW50cyxcbiAgICBvcGVuTGluayxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgdG9Qcm9taXNlLFxuICAgIHJldHJ5SWZGYWlscyxcbiAgICBnZXRBYm9ydGFibGVEZWZlcixcbiAgICBjcmVhdGVDU1NSdWxlLFxuICAgIGdldFVybFBhcmFtcyxcbiAgICBnZXRNb21lbnRMb2NhbGVPYmplY3QsXG4gICAgZ2V0Um91dGVOYW1lRnJvbUxpbmssXG4gICAgaXNBcHBsZVByb2R1Y3QsXG4gICAgZGVmZXIsXG4gICAgZXhlY3V0ZVByb21pc2VDaGFpbixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICB2YWxpZGF0ZURhdGFTb3VyY2VDdHgsXG4gICAgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlLFxuICAgIGV4dGVuZFByb3RvLFxuICAgIHJlbW92ZUV4dHJhU2xhc2hlcyxcbiAgICBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQsXG4gICAgYWRkRm9ySWRBdHRyaWJ1dGVzLFxuICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLFxuICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMsXG4gICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uLFxuICAgIGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgsXG4gICAgY2xvc2VQb3BvdmVyLFxuICAgIGRldGVjdENoYW5nZXMsXG4gICAgdHJpZ2dlckl0ZW1BY3Rpb24sXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgVkFMSURBVE9SLFxuICAgIHRyYW5zZm9ybUZpbGVVUkksXG4gICAgYXBwZW5kU2NyaXB0VG9IZWFkLFxuICAgIGdldEFwcFNldHRpbmcsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIGZpbmRQYXJlbnQsXG4gICAgZ2V0TmF2Q2xhc3MsXG4gICAgZ2V0U2hlZXRQb3NpdGlvbkNsYXNzXG59IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IHtcbiAgICBGSVJTVF9USU1FX1dBVENILFxuICAgIGlzRmlyc3RUaW1lQ2hhbmdlLFxuICAgIGRlYm91bmNlLFxuICAgIG11dGVXYXRjaGVycyxcbiAgICB1bk11dGVXYXRjaGVycyxcbiAgICAkd2F0Y2gsXG4gICAgJHVud2F0Y2gsXG4gICAgJHVud2F0Y2hBbGwsXG4gICAgJHVud2F0Y2hBbGxCeVNjb3BlLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRBcHBSZWYsXG4gICAgaXNDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnLi91dGlscy93YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvdHlwZXMnO1xuZXhwb3J0IHsgVmlld3BvcnQsIFZpZXdwb3J0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb25zdGFudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXdpZGdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXNlci1jdXN0b20tcGlwZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20taWNvbnMtbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZSB9IGZyb20gJy4vc2VydmljZXMvc3RhdGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5leHBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbHJ1LWNhY2hlJztcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLFlBQVksRUFDWixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxxQkFBcUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFVBQVUsRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxlQUFlLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBaUIsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY29yZVxuICovXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2J1aWxkLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzL2N1cnJlbmN5LWNvbnN0YW50cyc7XG5leHBvcnQge1xuICAgIGFwcGVuZE5vZGUsXG4gICAgaW5zZXJ0QmVmb3JlLFxuICAgIGluc2VydEFmdGVyLFxuICAgIHJlbW92ZU5vZGUsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgYWRkQ2xhc3MsXG4gICAgc3dpdGNoQ2xhc3MsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgc2V0Q1NTLFxuICAgIHNldENTU0Zyb21PYmosXG4gICAgc2V0UHJvcGVydHksXG4gICAgc2V0QXR0cixcbiAgICBzZXRIdG1sLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgY3JlYXRlRWxlbWVudCxcbiAgICB0b0RpbWVuc2lvblxufSBmcm9tICcuL3V0aWxzL2RvbSc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvZXZlbnQtbm90aWZpZXInO1xuZXhwb3J0IHtcbiAgICBQYXJzZUV4cHJSZXN1bHQsXG4gICAgJHBhcnNlRXhwcixcbiAgICAkcGFyc2VFdmVudCxcbiAgICByZWdpc3RlckZuQnlFeHByLFxuICAgIHNldFBpcGVQcm92aWRlcixcbiAgICBnZXRGbkJ5RXhwcixcbiAgICBnZXRGbkZvckJpbmRFeHByLFxuICAgIGdldEZuRm9yRXZlbnRFeHByXG59IGZyb20gJy4vdXRpbHMvZXhwcmVzc2lvbi1wYXJzZXInO1xuZXhwb3J0IHtcbiAgICBFVkVOVF9MSUZFLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc09iamVjdCxcbiAgICB0b0Jvb2xlYW4sXG4gICAgaXNJRSxcbiAgICBpc0FuZHJvaWQsXG4gICAgaXNBbmRyb2lkVGFibGV0LFxuICAgIGlzSXBob25lLFxuICAgIGlzSXBvZCxcbiAgICBpc0lwYWQsXG4gICAgaXNJb3MsXG4gICAgaXNTYWZhcmksXG4gICAgaXNMYXJnZVRhYmxldExhbmRzY2FwZSxcbiAgICBpc0xhcmdlVGFibGV0UG9ydHJhaXQsXG4gICAgaXNNb2JpbGUsXG4gICAgZ2V0QW5kcm9pZFZlcnNpb24sXG4gICAgaXNLaXRrYXREZXZpY2UsXG4gICAgZW5jb2RlVXJsLFxuICAgIGVuY29kZVVybFBhcmFtcyxcbiAgICBpbml0Q2FwcyxcbiAgICBzcGFjZVNlcGFyYXRlLFxuICAgIHJlcGxhY2VBdCxcbiAgICBwZXJpb2RTZXBhcmF0ZSxcbiAgICBwcmV0dGlmeUxhYmVsLFxuICAgIGRlSHlwaGVuYXRlLFxuICAgIHByZXR0aWZ5TGFiZWxzLFxuICAgIGlzSW5zZWN1cmVDb250ZW50UmVxdWVzdCxcbiAgICBzdHJpbmdTdGFydHNXaXRoLFxuICAgIGdldEV2YWx1YXRlZEV4cHJWYWx1ZSxcbiAgICBpc0ltYWdlRmlsZSxcbiAgICBpc0F1ZGlvRmlsZSxcbiAgICBpc1ZpZGVvRmlsZSxcbiAgICBpc1ZhbGlkSW1hZ2VVcmwsXG4gICAgaXNWYWxpZFdlYlVSTCxcbiAgICBnZXRSZXNvdXJjZVVSTCxcbiAgICB0cmlnZ2VyRm4sXG4gICAgaGFzT2Zmc2V0U3RyLFxuICAgIGdldEZvcm1hdHRlZERhdGUsXG4gICAgZ2V0RGF0ZU9iaixcbiAgICBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50LFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBnZXRGaWxlcyxcbiAgICBnZW5lcmF0ZUdVSWQsXG4gICAgdmFsaWRhdGVBY2Nlc3NSb2xlcyxcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgeG1sVG9Kc29uLFxuICAgIGZpbmRWYWx1ZU9mLFxuICAgIGV4dHJhY3RUeXBlLFxuICAgIGlzTnVtYmVyVHlwZSxcbiAgICBpc0VtcHR5T2JqZWN0LFxuICAgIHNjcm9sbFRvRWxlbWVudCxcbiAgICBpc0VsZW1lbnRJblZpZXdwb3J0LFxuICAgIGlzUGFnZWFibGUsXG4gICAgcmVwbGFjZSxcbiAgICBpc0RhdGVUaW1lVHlwZSxcbiAgICBnZXRWYWxpZERhdGVPYmplY3QsXG4gICAgZ2V0TmF0aXZlRGF0ZU9iamVjdCxcbiAgICBnZXRCbG9iLFxuICAgIGlzRXF1YWxXaXRoRmllbGRzLFxuICAgIGxvYWRTdHlsZVNoZWV0LFxuICAgIGxvYWRTdHlsZVNoZWV0cyxcbiAgICBsb2FkU2NyaXB0LFxuICAgIGxvYWRTY3JpcHRzLFxuICAgIF9XTV9BUFBfUFJPSkVDVCxcbiAgICBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtLFxuICAgIG5vb3AsXG4gICAgY29udmVydFRvQmxvYixcbiAgICBBcHBDb25zdGFudHMsXG4gICAgb3BlbkxpbmssXG4gICAgZmV0Y2hDb250ZW50LFxuICAgIHRvUHJvbWlzZSxcbiAgICByZXRyeUlmRmFpbHMsXG4gICAgZ2V0QWJvcnRhYmxlRGVmZXIsXG4gICAgY3JlYXRlQ1NTUnVsZSxcbiAgICBnZXRVcmxQYXJhbXMsXG4gICAgZ2V0TW9tZW50TG9jYWxlT2JqZWN0LFxuICAgIGdldFJvdXRlTmFtZUZyb21MaW5rLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGRlZmVyLFxuICAgIGV4ZWN1dGVQcm9taXNlQ2hhaW4sXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgdmFsaWRhdGVEYXRhU291cmNlQ3R4LFxuICAgIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSxcbiAgICBleHRlbmRQcm90byxcbiAgICByZW1vdmVFeHRyYVNsYXNoZXMsXG4gICAgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LFxuICAgIGFkZEZvcklkQXR0cmlidXRlcyxcbiAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbixcbiAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzLFxuICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbixcbiAgICBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4LFxuICAgIGNsb3NlUG9wb3ZlcixcbiAgICBkZXRlY3RDaGFuZ2VzLFxuICAgIHRyaWdnZXJJdGVtQWN0aW9uLFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBleHRyYWN0Q3VycmVudEl0ZW1FeHByLFxuICAgIGZpbmRSb290Q29udGFpbmVyLFxuICAgIFZBTElEQVRPUixcbiAgICB0cmFuc2Zvcm1GaWxlVVJJLFxuICAgIGFwcGVuZFNjcmlwdFRvSGVhZCxcbiAgICBnZXRBcHBTZXR0aW5nLFxuICAgIHNldExpc3RDbGFzcyxcbiAgICBmaW5kUGFyZW50LFxuICAgIGdldE5hdkNsYXNzLFxuICAgIGdldFNoZWV0UG9zaXRpb25DbGFzc1xufSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmV4cG9ydCB7XG4gICAgRklSU1RfVElNRV9XQVRDSCxcbiAgICBpc0ZpcnN0VGltZUNoYW5nZSxcbiAgICBkZWJvdW5jZSxcbiAgICBtdXRlV2F0Y2hlcnMsXG4gICAgdW5NdXRlV2F0Y2hlcnMsXG4gICAgJHdhdGNoLFxuICAgICR1bndhdGNoLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRBcHBSZWYsXG4gICAgaXNDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnLi91dGlscy93YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvdHlwZXMnO1xuZXhwb3J0IHsgVmlld3BvcnQsIFZpZXdwb3J0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb25zdGFudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXdpZGdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXNlci1jdXN0b20tcGlwZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20taWNvbnMtbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZSB9IGZyb20gJy4vc2VydmljZXMvc3RhdGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5leHBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbHJ1LWNhY2hlJztcbiJdfQ==