@wavemaker/app-ng-runtime 11.14.1-18.6421 → 11.14.1-18.6428

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 (76) hide show
  1. package/components/base/bundles/index.umd.js +17 -81
  2. package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
  3. package/components/base/esm2022/utils/widget-utils.mjs +3 -3
  4. package/components/base/esm2022/widgets/common/base/base.component.mjs +6 -61
  5. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -7
  6. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
  7. package/components/base/fesm2022/index.mjs +18 -82
  8. package/components/base/fesm2022/index.mjs.map +1 -1
  9. package/components/base/pipes/custom-pipes.d.ts +5 -5
  10. package/components/basic/label/bundles/index.umd.js +1 -9
  11. package/components/basic/label/esm2022/label.directive.mjs +2 -10
  12. package/components/basic/label/fesm2022/index.mjs +1 -9
  13. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  14. package/components/chart/bundles/index.umd.js +2 -2
  15. package/components/chart/esm2022/chart.utils.mjs +3 -3
  16. package/components/chart/fesm2022/index.mjs +2 -2
  17. package/components/chart/fesm2022/index.mjs.map +1 -1
  18. package/components/containers/wizard/bundles/index.umd.js +2 -21
  19. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +1 -3
  20. package/components/containers/wizard/esm2022/wizard.component.mjs +3 -20
  21. package/components/containers/wizard/fesm2022/index.mjs +2 -21
  22. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  23. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +0 -2
  24. package/components/data/pagination/bundles/index.umd.js +0 -4
  25. package/components/data/pagination/esm2022/pagination.component.mjs +1 -5
  26. package/components/data/pagination/fesm2022/index.mjs +0 -4
  27. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  28. package/components/data/table/bundles/index.umd.js +14 -370
  29. package/components/data/table/esm2022/table-action/table-action.directive.mjs +1 -8
  30. package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -107
  31. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +1 -9
  32. package/components/data/table/esm2022/table-cud.directive.mjs +2 -8
  33. package/components/data/table/esm2022/table-filter.directive.mjs +2 -12
  34. package/components/data/table/esm2022/table-row/table-row.directive.mjs +1 -8
  35. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +1 -8
  36. package/components/data/table/esm2022/table.component.mjs +12 -219
  37. package/components/data/table/fesm2022/index.mjs +15 -371
  38. package/components/data/table/fesm2022/index.mjs.map +1 -1
  39. package/components/data/table/table-action/table-action.directive.d.ts +2 -3
  40. package/components/data/table/table-column/table-column.directive.d.ts +2 -3
  41. package/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -3
  42. package/components/data/table/table-cud.directive.d.ts +1 -3
  43. package/components/data/table/table-filter.directive.d.ts +1 -3
  44. package/components/data/table/table-row/table-row.directive.d.ts +2 -3
  45. package/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -3
  46. package/components/data/table/table.component.d.ts +2 -6
  47. package/components/navigation/menu/bundles/index.umd.js +0 -5
  48. package/components/navigation/menu/esm2022/menu.component.mjs +1 -6
  49. package/components/navigation/menu/fesm2022/index.mjs +0 -5
  50. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  51. package/components/navigation/popover/bundles/index.umd.js +6 -6
  52. package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
  53. package/components/navigation/popover/fesm2022/index.mjs +3 -3
  54. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  55. package/components/navigation/popover/popover.component.d.ts +0 -6
  56. package/core/bundles/index.umd.js +15 -120
  57. package/core/esm2022/public_api.mjs +2 -2
  58. package/core/esm2022/utils/utils.mjs +2 -6
  59. package/core/esm2022/utils/watcher.mjs +15 -118
  60. package/core/fesm2022/index.mjs +15 -124
  61. package/core/fesm2022/index.mjs.map +1 -1
  62. package/core/public_api.d.ts +1 -1
  63. package/core/utils/utils.d.ts +0 -1
  64. package/npm-shrinkwrap.json +2 -2
  65. package/package-lock.json +2 -2
  66. package/package.json +1 -1
  67. package/runtime/base/bundles/index.umd.js +2 -3
  68. package/runtime/base/esm2022/components/base-page.component.mjs +1 -2
  69. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
  70. package/runtime/base/fesm2022/index.mjs +2 -3
  71. package/runtime/base/fesm2022/index.mjs.map +1 -1
  72. package/runtime/dynamic/bundles/index.umd.js +0 -4
  73. package/runtime/dynamic/esm2022/app/app.config.mjs +2 -6
  74. package/runtime/dynamic/fesm2022/index.mjs +1 -5
  75. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  76. package/scripts/datatable/datatable.js +15 -103
@@ -186,15 +186,8 @@
186
186
  this.setDataGridOption('colDefs', i2.getClonedObject(this.fieldDefs));
187
187
  }
188
188
  // If data and colDefs are present, call on before data render event
189
- // Note: Errors in beforedatarender should not prevent table rendering
190
189
  if (!this.isdynamictable && !lodashEs.isEmpty(newValue) && gridOptions.colDefs.length) {
191
- try {
192
- this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
193
- }
194
- catch (error) {
195
- // Log error but continue with rendering - beforedatarender errors should not block table rendering
196
- console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
197
- }
190
+ this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
198
191
  }
199
192
  this.setDataGridOption('data', i2.getClonedObject(this._gridData));
200
193
  }
@@ -587,11 +580,7 @@
587
580
  this.prevData = i2.getClonedObject(row);
588
581
  },
589
582
  afterRowUpdate: (row, e, callBack, options) => {
590
- i2.muteWatchers();
591
- this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': options.rowindex ? options.rowindex : this.prevData, 'event': e, 'callBack': callBack }));
592
- setTimeout(() => {
593
- i2.unMuteWatchers();
594
- }, 10);
583
+ this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': this.prevData, 'event': e, 'callBack': callBack }));
595
584
  },
596
585
  onBeforeRowUpdate: (row, e, options) => {
597
586
  return this.invokeEventCallback('beforerowupdate', { $event: e, $data: row, row, options: options });
@@ -1245,10 +1234,6 @@
1245
1234
  return this.actualPageSize || 5;
1246
1235
  }
1247
1236
  watchVariableDataSet(newVal) {
1248
- // Guard against component destruction
1249
- if (this.isDestroyed) {
1250
- return;
1251
- }
1252
1237
  let result;
1253
1238
  // Check for Variable filters if applied
1254
1239
  if (this.gridOptions.isNavTypeScrollOrOndemand()) {
@@ -1306,12 +1291,6 @@
1306
1291
  }
1307
1292
  /*Return if data is invalid.*/
1308
1293
  if (!this.isDataValid()) {
1309
- // If data is invalid and variableInflight is still true, clear loading state
1310
- // This prevents tables from getting stuck in loading when data is invalid
1311
- if (this.variableInflight) {
1312
- this.variableInflight = false;
1313
- this.setGridData([]);
1314
- }
1315
1294
  return;
1316
1295
  }
1317
1296
  // If value is empty or in studio mode, dont enable the navigation
@@ -1339,13 +1318,7 @@
1339
1318
  // @ts-ignore
1340
1319
  if (!lodashEs.isObject(newVal) || newVal === '' || (newVal && newVal.dataValue === '')) {
1341
1320
  if (!this.variableInflight) {
1342
- // If variable has finished loading and resultSet is empty, render empty data
1343
- this.setGridData([]);
1344
- }
1345
- else {
1346
- // If variableInflight is still true but we have invalid/empty data, clear loading state
1347
- // This handles cases where data never arrives or is invalid
1348
- this.variableInflight = false;
1321
+ // If variable has finished loading and resultSet is empty, ender empty data
1349
1322
  this.setGridData([]);
1350
1323
  }
1351
1324
  return;
@@ -1355,142 +1328,13 @@
1355
1328
  }
1356
1329
  }
1357
1330
  ngOnDestroy() {
1358
- // MEMORY LEAK FIX: Remove document click listener
1359
1331
  document.removeEventListener('click', this.documentClickBind);
1360
- // MEMORY LEAK FIX: Unsubscribe from navigator watches
1361
1332
  if (this.navigatorResultWatch) {
1362
1333
  this.navigatorResultWatch.unsubscribe();
1363
- this.navigatorResultWatch = null;
1364
1334
  }
1365
1335
  if (this.navigatorMaxResultWatch) {
1366
1336
  this.navigatorMaxResultWatch.unsubscribe();
1367
- this.navigatorMaxResultWatch = null;
1368
- }
1369
- // MEMORY LEAK FIX: Clear all ViewContainerRef embedded views
1370
- // These hold references to row data, custom expressions, and inline widgets
1371
- if (this.customExprViewRef) {
1372
- this.customExprViewRef.clear();
1373
- }
1374
- if (this.rowActionsViewRef) {
1375
- this.rowActionsViewRef.clear();
1376
- }
1377
- if (this.filterViewRef) {
1378
- this.filterViewRef.clear();
1379
- }
1380
- if (this.inlineEditViewRef) {
1381
- this.inlineEditViewRef.clear();
1382
- }
1383
- if (this.inlineEditNewViewRef) {
1384
- this.inlineEditNewViewRef.clear();
1385
- }
1386
- if (this.rowDetailViewRef) {
1387
- this.rowDetailViewRef.clear();
1388
- }
1389
- if (this.rowExpansionActionViewRef) {
1390
- this.rowExpansionActionViewRef.clear();
1391
- }
1392
- if (this.dynamicTableRef) {
1393
- this.dynamicTableRef.clear();
1394
- }
1395
- // MEMORY LEAK FIX: Clear compiled template caches
1396
- this.rowActionsCompiledTl = {};
1397
- this.rowFilterCompliedTl = {};
1398
- this.inlineCompliedTl = {};
1399
- this.inlineNewCompliedTl = {};
1400
- this.customExprCompiledTl = {};
1401
- this.customExprCompiledSummaryTl = {};
1402
- this.rowDefInstances = {};
1403
- this.rowDefMap = {};
1404
- this.rowExpansionActionTl = {};
1405
- // MEMORY LEAK FIX: Clear dynamic context
1406
- if (this._dynamicContext) {
1407
- Object.keys(this._dynamicContext).forEach(key => {
1408
- delete this._dynamicContext[key];
1409
- });
1410
- this._dynamicContext = null;
1411
1337
  }
1412
- // MEMORY LEAK FIX: Clear data arrays
1413
- this._gridData = [];
1414
- this.items = [];
1415
- this.selectedItems = [];
1416
- this.fieldDefs = [];
1417
- this.fullFieldDefs = [];
1418
- this.__fullData = null;
1419
- // MEMORY LEAK FIX: Destroy jQuery datatable widget before clearing gridOptions
1420
- if (this.datagridElement && this.datagridElement.datatable) {
1421
- try {
1422
- this.datagridElement.datatable('destroy');
1423
- }
1424
- catch (e) {
1425
- // Ignore errors during destroy
1426
- }
1427
- }
1428
- // MEMORY LEAK FIX: Clear gridOptions to release all function closures and data
1429
- // gridOptions holds many closures that capture 'this' and prevent GC
1430
- if (this.gridOptions) {
1431
- // Clear data array
1432
- if (this.gridOptions.data) {
1433
- this.gridOptions.data = [];
1434
- }
1435
- // Clear column definitions
1436
- if (this.gridOptions.colDefs) {
1437
- this.gridOptions.colDefs = [];
1438
- }
1439
- // Clear row actions
1440
- if (this.gridOptions.rowActions) {
1441
- this.gridOptions.rowActions = [];
1442
- }
1443
- // Clear header config
1444
- if (this.gridOptions.headerConfig) {
1445
- this.gridOptions.headerConfig = [];
1446
- }
1447
- // Nullify all function references to break closures
1448
- Object.keys(this.gridOptions).forEach(key => {
1449
- if (typeof this.gridOptions[key] === 'function') {
1450
- this.gridOptions[key] = null;
1451
- }
1452
- });
1453
- }
1454
- // MEMORY LEAK FIX: Clear other data structures
1455
- this.columns = {};
1456
- this.formfields = {};
1457
- this.rowFilter = {};
1458
- this.actions = [];
1459
- this._actions = { header: [], footer: [] };
1460
- this.exportOptions = [];
1461
- this.headerConfig = [];
1462
- this.rowActions = [];
1463
- // MEMORY LEAK FIX: Clear all @ContentChildren QueryLists holding template references
1464
- // These QueryLists hold TemplateRef instances that create circular references to the parent LView
1465
- if (this.rowActionTmpl) {
1466
- this.rowActionTmpl.reset([]);
1467
- }
1468
- if (this.filterTmpl) {
1469
- this.filterTmpl.reset([]);
1470
- }
1471
- if (this.inlineWidgetTmpl) {
1472
- this.inlineWidgetTmpl.reset([]);
1473
- }
1474
- if (this.inlineWidgetNewTmpl) {
1475
- this.inlineWidgetNewTmpl.reset([]);
1476
- }
1477
- if (this.customExprTmpl) {
1478
- this.customExprTmpl.reset([]);
1479
- }
1480
- if (this.rowExpansionActionTmpl) {
1481
- this.rowExpansionActionTmpl.reset([]);
1482
- }
1483
- // MEMORY LEAK FIX: Clear @ContentChild template reference
1484
- this.rowExpansionTmpl = null;
1485
- // MEMORY LEAK FIX: Complete and clear subjects
1486
- if (this.selectedItemChange) {
1487
- this.selectedItemChange.complete();
1488
- this.selectedItemChange = null;
1489
- }
1490
- // MEMORY LEAK FIX: Clear ViewChild references
1491
- this.dataNavigator = null;
1492
- this._tableElement = null;
1493
- // console.log("table component destroyed");
1494
1338
  super.ngOnDestroy();
1495
1339
  }
1496
1340
  addRowIndex(row) {
@@ -1561,9 +1405,6 @@
1561
1405
  if (!key.endsWith('_filter') && ((key.endsWith('_new') && newRow) || (!key.endsWith('_new') && !newRow))) {
1562
1406
  ctrls[key].setValue('');
1563
1407
  this.resetFormControl(ctrls[key]);
1564
- // MEMORY LEAK FIX: Clear validators to release references
1565
- ctrls[key].clearValidators();
1566
- ctrls[key].clearAsyncValidators();
1567
1408
  }
1568
1409
  });
1569
1410
  }
@@ -1883,14 +1724,7 @@
1883
1724
  defaultFieldDefs.forEach(col => {
1884
1725
  this.columns[col.field] = col;
1885
1726
  });
1886
- // Note: Errors in beforedatarender should not prevent table rendering
1887
- try {
1888
- this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
1889
- }
1890
- catch (error) {
1891
- // Log error but continue with rendering - beforedatarender errors should not block table rendering
1892
- console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
1893
- }
1727
+ this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
1894
1728
  defaultFieldDefs = [];
1895
1729
  // Apply the changes made by the user
1896
1730
  lodashEs.forEach(this.columns, val => {
@@ -1929,23 +1763,19 @@
1929
1763
  return sortExp || '';
1930
1764
  }
1931
1765
  onPropertyChange(key, nv, ov) {
1932
- // Guard against property changes after component destruction
1933
- if (this.isDestroyed) {
1934
- return;
1935
- }
1936
1766
  let enableNewRow;
1937
1767
  switch (key) {
1938
1768
  case 'datasource':
1939
1769
  // Fix for [WMS-23653] when startUpdate is false (request on page load property is unchecked),
1940
1770
  // then set status msg as "No data found"
1941
- if (this.allowpagesizechange && this.datasource) {
1771
+ if (this.allowpagesizechange) {
1942
1772
  this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
1943
1773
  }
1944
- if (nv && nv.startUpdate === false) {
1774
+ if (nv.startUpdate === false) {
1945
1775
  this.variableInflight = false;
1946
1776
  this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
1947
1777
  }
1948
- if (this.datasource && lodashEs.get(this.datasource, 'category') !== 'wm.Variable') {
1778
+ if (lodashEs.get(this.datasource, 'category') !== 'wm.Variable') {
1949
1779
  this.headerselectall = false;
1950
1780
  this.setDataGridOption("headerselectall", false);
1951
1781
  }
@@ -1957,12 +1787,6 @@
1957
1787
  this.gridOptions.setIsNextPageData(false);
1958
1788
  }
1959
1789
  if (this.binddatasource && !this.datasource) {
1960
- // If datasource is not set yet, clear loading state and show no data
1961
- // This prevents tables from being stuck in loading state
1962
- if (this.variableInflight) {
1963
- this.variableInflight = false;
1964
- this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
1965
- }
1966
1790
  return;
1967
1791
  }
1968
1792
  // if table is inside list then table dataset will be set as "item.XXX" and there is no datasource.
@@ -2066,11 +1890,9 @@
2066
1890
  this.allowpagesizechange = nv;
2067
1891
  break;
2068
1892
  case 'pagesizeoptions':
2069
- this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
2070
- this.gridOptions.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
2071
- this.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
2072
- if (this.allowpagesizechange)
2073
- this.setDefaultPageSize(nv);
1893
+ this.gridOptions.pagesizeoptions = nv;
1894
+ this.pagesizeoptions = nv;
1895
+ this.setDefaultPageSize(nv);
2074
1896
  break;
2075
1897
  case 'multiselecttitle':
2076
1898
  this.setDataGridOption('multiselecttitle', nv);
@@ -2114,41 +1936,12 @@
2114
1936
  this.pagesize = nv;
2115
1937
  }
2116
1938
  this.updatedPageSize = nv;
2117
- if (this.isPageSizeOptionsChanged()) {
2118
- this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
2119
- this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
2120
- }
2121
1939
  }
2122
1940
  this.dataNavigator.options = {
2123
1941
  maxResults: nv
2124
1942
  };
2125
1943
  this.dataNavigator.widget.maxResults = nv;
2126
1944
  this.dataNavigator.maxResults = nv;
2127
- if (this.datasource) {
2128
- this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
2129
- }
2130
- }
2131
- isPageSizeOptionsChanged() {
2132
- return !lodashEs.isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
2133
- }
2134
- selectPageSize(pagesize) {
2135
- if (!this.allowpagesizechange && !pagesize)
2136
- return;
2137
- if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
2138
- || !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
2139
- pagesize = this.dataNavigator.pageSizeOptions[0];
2140
- }
2141
- this.dataNavigator.onPageSizeChange(undefined, pagesize);
2142
- }
2143
- sanitizeCommaSeparatedIntegers(input) {
2144
- if (!input)
2145
- return "";
2146
- const uniqueNumbers = Array.from(new Set(input
2147
- .split(",")
2148
- .map(v => v.trim())
2149
- .filter(v => /^-?\d+$/.test(v))
2150
- .map(v => Math.abs(parseInt(v, 10)))));
2151
- return uniqueNumbers.join(",");
2152
1945
  }
2153
1946
  onDataSourceChange() {
2154
1947
  this.fieldDefs.forEach(col => {
@@ -2674,7 +2467,7 @@
2674
2467
  this.updateVariable(response, options.callBack);
2675
2468
  }
2676
2469
  else if (!this.table.datasource.execute(i2.DataSource.Operation.IS_API_AWARE)) {
2677
- this.table.initiateSelectItem('current', response, undefined, this.table.datasource.category === 'wm.Variable', options.callBack);
2470
+ this.table.initiateSelectItem('current', response, undefined, false, options.callBack);
2678
2471
  }
2679
2472
  i2.triggerFn(options.success, response);
2680
2473
  this.table.invokeEventCallback('rowupdate', { $event: options.event, $data: response, row: response });
@@ -2924,12 +2717,6 @@
2924
2717
  this.table.callDataGridMethod('cancelEdit', $row);
2925
2718
  }
2926
2719
  }
2927
- ngOnDestroy() {
2928
- // MEMORY LEAK FIX: Clear all references
2929
- this.table = null;
2930
- this.dialogService = null;
2931
- this.app = null;
2932
- }
2933
2720
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableCUDDirective, deps: [{ token: TableComponent, self: true }, { token: i2__namespace.AbstractDialogService }, { token: i2__namespace.App }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
2934
2721
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableCUDDirective, isStandalone: true, selector: "[wmTableCUD]", ngImport: i0__namespace }); }
2935
2722
  }
@@ -3242,12 +3029,6 @@
3242
3029
  // Function that checks if a given string is a valid date and returns the timestamp if it is, or NaN if it's not.
3243
3030
  parseDateString(dateString) {
3244
3031
  const timestamp = Date.parse(dateString);
3245
- // handling case when string starts with string and end with number
3246
- const trimmed = dateString.trim();
3247
- const monthRegex = /\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:t(?:ember)?)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b/i;
3248
- if (/^[A-Za-z]+/.test(trimmed) && /\d+$/.test(trimmed) && !monthRegex.test(trimmed)) {
3249
- return NaN;
3250
- }
3251
3032
  if (!isNaN(timestamp)) {
3252
3033
  return timestamp;
3253
3034
  }
@@ -3262,7 +3043,7 @@
3262
3043
  const fieldValue = lodashEs.get(lodashEs.find(data, sortObj.field), sortObj.field);
3263
3044
  const isValidDateString = typeof fieldValue === 'string' ? this.parseDateString(fieldValue) : NaN;
3264
3045
  if (!isNaN(isValidDateString)) { // if the field is a date string
3265
- data = lodashEs.orderBy(data, [(item) => this.parseDateString(lodashEs.get(item, sortObj.field))], [sortObj.direction]);
3046
+ data = lodashEs.orderBy(data, [(item) => this.parseDateString(item[sortObj.field])], [sortObj.direction]);
3266
3047
  }
3267
3048
  else if (sortObj.sortBy ? this.table.columns[sortObj.sortBy]?.caseinsensitive : this.table.columns[sortObj.field]?.caseinsensitive) {
3268
3049
  //Fix for [WMS-27505]: Added case-insensitive sorting so that uppercase and lowercase letters are treated the same when sorting.
@@ -3624,10 +3405,6 @@
3624
3405
  condition: logicalOp
3625
3406
  });
3626
3407
  }
3627
- ngOnDestroy() {
3628
- // MEMORY LEAK FIX: Clear table reference
3629
- this.table = null;
3630
- }
3631
3408
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableFilterSortDirective, deps: [{ token: TableComponent, self: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
3632
3409
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableFilterSortDirective, isStandalone: true, selector: "[wmTableFilterSort]", ngImport: i0__namespace }); }
3633
3410
  }
@@ -3714,13 +3491,6 @@
3714
3491
  this.buttonDef[key] = nv;
3715
3492
  }
3716
3493
  }
3717
- ngOnDestroy() {
3718
- // MEMORY LEAK FIX: Clear table and buttonDef references
3719
- this.table = null;
3720
- this.buttonDef = null;
3721
- // Call parent ngOnDestroy (BaseComponent has cleanup)
3722
- super.ngOnDestroy();
3723
- }
3724
3494
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableActionDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
3725
3495
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableActionDirective, isStandalone: true, selector: "[wmTableAction]", providers: [
3726
3496
  i4.provideAsWidgetRef(TableActionDirective)
@@ -3885,14 +3655,6 @@
3885
3655
  const fieldName = this.group && this.group.name;
3886
3656
  i4.setHeaderConfigForTable(this.table.headerConfig, this.config, fieldName, fieldName ? colIndex : headerIndex);
3887
3657
  }
3888
- ngOnDestroy() {
3889
- // MEMORY LEAK FIX: Clear table, group, and config references
3890
- this.table = null;
3891
- this.group = null;
3892
- this.config = null;
3893
- // Call parent ngOnDestroy (BaseComponent has cleanup)
3894
- super.ngOnDestroy();
3895
- }
3896
3658
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableColumnGroupDirective, deps: [{ token: i0__namespace.Injector }, { token: TableColumnGroupDirective, optional: true, skipSelf: true }, { token: TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
3897
3659
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableColumnGroupDirective, isStandalone: true, selector: "[wmTableColumnGroup]", providers: [
3898
3660
  i4.provideAsWidgetRef(TableColumnGroupDirective)
@@ -4087,10 +3849,6 @@
4087
3849
  }
4088
3850
  // Remove validators for the inline widget and set form to untouched
4089
3851
  removeValidations() {
4090
- // Guard against component destruction or table/ngform being null
4091
- if (this.isDestroyed || !this.table || !this.table.ngform) {
4092
- return;
4093
- }
4094
3852
  this.table.ngform.markAsUntouched();
4095
3853
  const control = this.getFormControl();
4096
3854
  if (!control) {
@@ -4102,10 +3860,6 @@
4102
3860
  }
4103
3861
  // Apply default|sync|async|prop validators for QuickEdit new row form control
4104
3862
  applyNewRowValidations() {
4105
- // Guard against component destruction or table/ngform being null
4106
- if (this.isDestroyed || !this.table || !this.table.ngform) {
4107
- return;
4108
- }
4109
3863
  if (!this._checkNewEditableRowControl()) {
4110
3864
  return;
4111
3865
  }
@@ -4122,37 +3876,22 @@
4122
3876
  }
4123
3877
  // Remove validators for the QuickEdit new row widget and set form to untouched
4124
3878
  removeNewRowValidations() {
4125
- // Guard against component destruction or table/ngform being null
4126
- if (this.isDestroyed || !this.table || !this.table.ngform) {
4127
- return;
4128
- }
4129
3879
  this.table.ngform.markAsUntouched();
4130
3880
  if (!this._checkNewEditableRowControl()) {
4131
3881
  return;
4132
3882
  }
4133
3883
  const control = this.getFormControl('_new');
4134
- if (!control) {
4135
- return;
4136
- }
4137
3884
  control.clearValidators();
4138
3885
  control.clearAsyncValidators();
4139
3886
  control.updateValueAndValidity();
4140
3887
  }
4141
3888
  addFormControl(suffix) {
4142
- // Guard against component destruction or table/ngform being null
4143
- if (this.isDestroyed || !this.table || !this.table.ngform) {
4144
- return;
4145
- }
4146
3889
  const ctrlName = suffix ? (this.binding + suffix) : this.binding;
4147
3890
  this.table.ngform.addControl(ctrlName, this.table.fb.control(''));
4148
3891
  }
4149
3892
  getFormControl(suffix) {
4150
- // Guard against component destruction or table/ngform being null
4151
- if (this.isDestroyed || !this.table || !this.table.ngform) {
4152
- return null;
4153
- }
4154
3893
  const ctrlName = suffix ? (this.binding + suffix) : this.binding;
4155
- return this.table.ngform.controls[ctrlName] || null;
3894
+ return this.table.ngform.controls[ctrlName];
4156
3895
  }
4157
3896
  _checkNewEditableRowControl() {
4158
3897
  return this._isNewEditableRow && this.getFormControl('_new');
@@ -4226,16 +3965,12 @@
4226
3965
  }
4227
3966
  // On field value change, apply cascading filter and set validation message
4228
3967
  onValueChange(val, widget) {
4229
- // Guard against component destruction or table being null
4230
- if (this.isDestroyed || !this.table) {
4231
- return;
4232
- }
4233
3968
  if (val !== null) {
4234
3969
  i4.applyFilterOnField(this.table.datasource, this.widget, this.table.fieldDefs, val, {
4235
3970
  widget: 'edit-widget-type'
4236
3971
  });
4237
3972
  }
4238
- if (this.table.ngform && this.table.ngform.touched) {
3973
+ if (this.table.ngform.touched) {
4239
3974
  this.activeControlType = widget;
4240
3975
  if (widget === 'inlineInstance') {
4241
3976
  this.notifyChanges();
@@ -4526,83 +4261,6 @@
4526
4261
  this.table.redraw(true);
4527
4262
  }
4528
4263
  }
4529
- ngOnDestroy() {
4530
- // MEMORY LEAK FIX: Clear ContentChildren QueryLists
4531
- if (this._filterInstances) {
4532
- try {
4533
- this._filterInstances.reset([]);
4534
- }
4535
- catch (e) {
4536
- // Silently handle cleanup errors - QueryList might already be destroyed
4537
- }
4538
- }
4539
- if (this._inlineInstances) {
4540
- try {
4541
- this._inlineInstances.reset([]);
4542
- }
4543
- catch (e) {
4544
- // Silently handle cleanup errors - QueryList might already be destroyed
4545
- }
4546
- }
4547
- if (this._inlineInstancesNew) {
4548
- try {
4549
- this._inlineInstancesNew.reset([]);
4550
- }
4551
- catch (e) {
4552
- // Silently handle cleanup errors - QueryList might already be destroyed
4553
- }
4554
- }
4555
- // MEMORY LEAK FIX: Clear all widget instance references
4556
- this.filterInstance = null;
4557
- this.inlineInstance = null;
4558
- this.inlineInstanceNew = null;
4559
- // MEMORY LEAK FIX: Clear template references
4560
- this.customExprTmpl = null;
4561
- this.inlineWidthTempRef = null;
4562
- this.filterTemplateRef = null;
4563
- // MEMORY LEAK FIX: Clear dataset references
4564
- this._filterDataSet = null;
4565
- this.dataset = null;
4566
- this._dataoptions = null;
4567
- this._datasource = null;
4568
- // MEMORY LEAK FIX: Clear validation objects
4569
- if (this.fieldValidations) {
4570
- try {
4571
- this.fieldValidations.destroy();
4572
- }
4573
- catch (e) {
4574
- // Silently handle cleanup errors
4575
- }
4576
- this.fieldValidations = null;
4577
- }
4578
- if (this.fieldValidations_new) {
4579
- try {
4580
- this.fieldValidations_new.destroy();
4581
- }
4582
- catch (e) {
4583
- // Silently handle cleanup errors
4584
- }
4585
- this.fieldValidations_new = null;
4586
- }
4587
- this.syncValidators = [];
4588
- this.asyncValidators = [];
4589
- // MEMORY LEAK FIX: Clear filter control reference
4590
- this.filterControl = null;
4591
- // MEMORY LEAK FIX: Clear notify fields array
4592
- if (this.notifyForFields) {
4593
- this.notifyForFields = [];
4594
- }
4595
- // MEMORY LEAK FIX: Clear observe fields array
4596
- if (this.observeOnFields) {
4597
- this.observeOnFields = [];
4598
- }
4599
- // MEMORY LEAK FIX: Clear table and group references
4600
- // Note: These are injected dependencies, but clearing helps GC
4601
- this.table = null;
4602
- this.group = null;
4603
- // Call parent ngOnDestroy
4604
- super.ngOnDestroy();
4605
- }
4606
4264
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableColumnDirective, deps: [{ token: i0__namespace.Injector }, { token: i2__namespace.AppDefaults }, { token: TableComponent, optional: true }, { token: TableColumnGroupDirective, optional: true }, { token: 'filterdataset.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
4607
4265
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableColumnDirective, isStandalone: true, selector: "[wmTableColumn]", providers: [
4608
4266
  i4.provideAsWidgetRef(TableColumnDirective)
@@ -4697,13 +4355,6 @@
4697
4355
  this.config.content = this.content;
4698
4356
  }
4699
4357
  }
4700
- ngOnDestroy() {
4701
- // MEMORY LEAK FIX: Clear table and config references
4702
- this.table = null;
4703
- this.config = null;
4704
- // Call parent ngOnDestroy (BaseComponent has cleanup)
4705
- super.ngOnDestroy();
4706
- }
4707
4358
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableRowDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true, skipSelf: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
4708
4359
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableRowDirective, isStandalone: true, selector: "[wmTableRow]", providers: [
4709
4360
  i4.provideAsWidgetRef(TableRowDirective)
@@ -4785,13 +4436,6 @@
4785
4436
  this.populateAction();
4786
4437
  this.table.registerRowActions(this.buttonDef);
4787
4438
  }
4788
- ngOnDestroy() {
4789
- // MEMORY LEAK FIX: Clear table reference and button definition
4790
- this.table = null;
4791
- this.buttonDef = null;
4792
- // Call parent ngOnDestroy (BaseComponent has cleanup)
4793
- super.ngOnDestroy();
4794
- }
4795
4439
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableRowActionDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true }, { token: i4.Context, self: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
4796
4440
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableRowActionDirective, isStandalone: true, selector: "[wmTableRowAction]", providers: [
4797
4441
  i4.provideAsWidgetRef(TableRowActionDirective),
@@ -51,13 +51,6 @@ export class TableActionDirective extends BaseComponent {
51
51
  this.buttonDef[key] = nv;
52
52
  }
53
53
  }
54
- ngOnDestroy() {
55
- // MEMORY LEAK FIX: Clear table and buttonDef references
56
- this.table = null;
57
- this.buttonDef = null;
58
- // Call parent ngOnDestroy (BaseComponent has cleanup)
59
- super.ngOnDestroy();
60
- }
61
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableActionDirective, deps: [{ token: i0.Injector }, { token: i1.TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
62
55
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableActionDirective, isStandalone: true, selector: "[wmTableAction]", providers: [
63
56
  provideAsWidgetRef(TableActionDirective)
@@ -80,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
80
73
  }, {
81
74
  type: Optional
82
75
  }] }] });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1hY3Rpb24vdGFibGUtYWN0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7QUFFdEMsTUFBTSxhQUFhLEdBQUcsRUFBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBQyxDQUFDO0FBU3JFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxhQUFhO2FBQzVDLG9CQUFlLEdBQUcsYUFBYSxFQUFFLEFBQWxCLENBQW1CO0lBd0J6QyxZQUFZLEdBQWEsRUFBcUIsS0FBcUIsRUFBMEMsZUFBb0I7UUFDN0gsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFERCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtJQUVuRSxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRTtZQUN2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDL0IsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUMxRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtZQUN6QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRTtZQUM3QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRTtTQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsc0RBQXNEO1FBQ3RELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTlFUSxvQkFBb0Isd0ZBeUJnRCxrQkFBa0I7bUdBekJ0RixvQkFBb0IsOERBSmxCO1lBQ1Asa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7U0FDM0M7OzRGQUVRLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1Asa0JBQWtCLHNCQUFzQjtxQkFDM0M7aUJBQ0o7OzBCQTBCK0IsUUFBUTs7MEJBQWtDLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIHByb3ZpZGVBc1dpZGdldFJlZiB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJsZS1hY3Rpb24ucHJvcHMnO1xuaW1wb3J0IHsgVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1VuZGVmaW5lZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS10YWJsZS1hY3Rpb24nLCBob3N0Q2xhc3M6ICcnfTtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZUFjdGlvbl0nLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFibGVBY3Rpb25EaXJlY3RpdmUpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUFjdGlvbkRpcmVjdGl2ZSBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIGFjY2Vzc3JvbGVzO1xuICAgIGFjdGlvbjtcbiAgICBjYXB0aW9uO1xuICAgIGNsYXNzO1xuICAgIGRpc2FibGVkO1xuICAgIGRpc3BsYXlOYW1lO1xuICAgIGljb247XG4gICAgaWNvbmNsYXNzO1xuICAgIHBvc2l0aW9uO1xuICAgIHNob3J0Y3V0a2V5O1xuICAgIHNob3c7XG4gICAgdGFiaW5kZXg7XG4gICAgdGl0bGU7XG4gICAga2V5O1xuICAgIGh5cGVybGluaztcbiAgICB0YXJnZXQ7XG4gICAgYnV0dG9uRGVmO1xuICAgIGNvbmRpdGlvbmFsY2xhc3M7XG4gICAgY29uZGl0aW9uYWxzdHlsZTtcblxuICAgIHByaXZhdGUgX3Byb3BzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBwdWJsaWMgdGFibGU6IFRhYmxlQ29tcG9uZW50LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlQWN0aW9uKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkRlZiA9IHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpc1snZGlzcGxheS1uYW1lJ10gfHwgdGhpcy5jYXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc2hvdzogdGhpcy5zaG93LFxuICAgICAgICAgICAgY2xhc3M6IHRoaXMuY2xhc3MgfHwgJycsXG4gICAgICAgICAgICBpY29uY2xhc3M6IHRoaXMuaWNvbmNsYXNzIHx8ICcnLFxuICAgICAgICAgICAgdGl0bGU6IGlzVW5kZWZpbmVkKHRoaXMudGl0bGUpID8gKHRoaXNbJ2Rpc3BsYXktbmFtZSddIHx8ICcnKSA6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgICAgICAgYWNjZXNzcm9sZXM6IHRoaXMuYWNjZXNzcm9sZXMsXG4gICAgICAgICAgICBzaG9ydGN1dGtleTogdGhpcy5zaG9ydGN1dGtleSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgdGFiaW5kZXg6IHRoaXMudGFiaW5kZXgsXG4gICAgICAgICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgICAgICAgIHdpZGdldFR5cGU6IHRoaXNbJ3dpZGdldC10eXBlJ10sXG4gICAgICAgICAgICBoeXBlcmxpbms6IHRoaXMuaHlwZXJsaW5rLFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCB8fCAnJyxcbiAgICAgICAgICAgIGNvbmRpdGlvbmFsY2xhc3M6IHRoaXMuY29uZGl0aW9uYWxjbGFzcyB8fCAnJyxcbiAgICAgICAgICAgIGNvbmRpdGlvbmFsc3R5bGU6IHRoaXMuY29uZGl0aW9uYWxzdHlsZSB8fCB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9wcm9wc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFjdGlvbigpO1xuICAgICAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyQWN0aW9ucyh0aGlzLmJ1dHRvbkRlZik7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52KSB7XG4gICAgICAgIGlmICghdGhpcy5fcHJvcHNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXktbmFtZScpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGVmLmRpc3BsYXlOYW1lID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkRlZltrZXldID0gbnY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciB0YWJsZSBhbmQgYnV0dG9uRGVmIHJlZmVyZW5jZXNcbiAgICAgICAgdGhpcy50YWJsZSA9IG51bGw7XG4gICAgICAgIHRoaXMuYnV0dG9uRGVmID0gbnVsbDtcblxuICAgICAgICAvLyBDYWxsIHBhcmVudCBuZ09uRGVzdHJveSAoQmFzZUNvbXBvbmVudCBoYXMgY2xlYW51cClcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59Il19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1hY3Rpb24vdGFibGUtYWN0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7OztBQUV0QyxNQUFNLGFBQWEsR0FBRyxFQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUM7QUFTckUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7YUFDNUMsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUF3QnpDLFlBQVksR0FBYSxFQUFxQixLQUFxQixFQUEwQyxlQUFvQjtRQUM3SCxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQURELFVBQUssR0FBTCxLQUFLLENBQWdCO0lBRW5FLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ3ZELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtZQUMvQixLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1lBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1NBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksR0FBRyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDOytHQXJFUSxvQkFBb0Isd0ZBeUJnRCxrQkFBa0I7bUdBekJ0RixvQkFBb0IsOERBSmxCO1lBQ1Asa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7U0FDM0M7OzRGQUVRLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1Asa0JBQWtCLHNCQUFzQjtxQkFDM0M7aUJBQ0o7OzBCQTBCK0IsUUFBUTs7MEJBQWtDLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBwcm92aWRlQXNXaWRnZXRSZWYgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vdGFibGUtYWN0aW9uLnByb3BzJztcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUtYWN0aW9uJywgaG9zdENsYXNzOiAnJ307XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtVGFibGVBY3Rpb25dJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRhYmxlQWN0aW9uRGlyZWN0aXZlKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBY3Rpb25EaXJlY3RpdmUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgYWNjZXNzcm9sZXM7XG4gICAgYWN0aW9uO1xuICAgIGNhcHRpb247XG4gICAgY2xhc3M7XG4gICAgZGlzYWJsZWQ7XG4gICAgZGlzcGxheU5hbWU7XG4gICAgaWNvbjtcbiAgICBpY29uY2xhc3M7XG4gICAgcG9zaXRpb247XG4gICAgc2hvcnRjdXRrZXk7XG4gICAgc2hvdztcbiAgICB0YWJpbmRleDtcbiAgICB0aXRsZTtcbiAgICBrZXk7XG4gICAgaHlwZXJsaW5rO1xuICAgIHRhcmdldDtcbiAgICBidXR0b25EZWY7XG4gICAgY29uZGl0aW9uYWxjbGFzcztcbiAgICBjb25kaXRpb25hbHN0eWxlO1xuXG4gICAgcHJpdmF0ZSBfcHJvcHNJbml0aWFsaXplZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBPcHRpb25hbCgpIHB1YmxpYyB0YWJsZTogVGFibGVDb21wb25lbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVBY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uRGVmID0ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzWydkaXNwbGF5LW5hbWUnXSB8fCB0aGlzLmNhcHRpb24gfHwgJycsXG4gICAgICAgICAgICBzaG93OiB0aGlzLnNob3csXG4gICAgICAgICAgICBjbGFzczogdGhpcy5jbGFzcyB8fCAnJyxcbiAgICAgICAgICAgIGljb25jbGFzczogdGhpcy5pY29uY2xhc3MgfHwgJycsXG4gICAgICAgICAgICB0aXRsZTogaXNVbmRlZmluZWQodGhpcy50aXRsZSkgPyAodGhpc1snZGlzcGxheS1uYW1lJ10gfHwgJycpIDogdGhpcy50aXRsZSxcbiAgICAgICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG4gICAgICAgICAgICBhY2Nlc3Nyb2xlczogdGhpcy5hY2Nlc3Nyb2xlcyxcbiAgICAgICAgICAgIHNob3J0Y3V0a2V5OiB0aGlzLnNob3J0Y3V0a2V5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICB0YWJpbmRleDogdGhpcy50YWJpbmRleCxcbiAgICAgICAgICAgIGljb246IHRoaXMuaWNvbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkZ2V0VHlwZTogdGhpc1snd2lkZ2V0LXR5cGUnXSxcbiAgICAgICAgICAgIGh5cGVybGluazogdGhpcy5oeXBlcmxpbmssXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMudGFyZ2V0IHx8ICcnLFxuICAgICAgICAgICAgY29uZGl0aW9uYWxjbGFzczogdGhpcy5jb25kaXRpb25hbGNsYXNzIHx8ICcnLFxuICAgICAgICAgICAgY29uZGl0aW9uYWxzdHlsZTogdGhpcy5jb25kaXRpb25hbHN0eWxlIHx8IHt9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3Byb3BzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9uKCk7XG4gICAgICAgIHRoaXMudGFibGUucmVnaXN0ZXJBY3Rpb25zKHRoaXMuYnV0dG9uRGVmKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbnYpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9wc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheS1uYW1lJykge1xuICAgICAgICAgICAgdGhpcy5idXR0b25EZWYuZGlzcGxheU5hbWUgPSBudjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGVmW2tleV0gPSBudjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==