@wavemaker/angular-app 11.15.0-rc.245 → 11.15.1-1.64726

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.
@@ -131288,7 +131288,7 @@ function requireDom$1 () {
131288
131288
  ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
131289
131289
  var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
131290
131290
  ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
131291
- ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
131291
+ var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
131292
131292
  ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
131293
131293
  ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
131294
131294
  var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
@@ -132369,7 +132369,22 @@ function requireDom$1 () {
132369
132369
  node.appendData(data);
132370
132370
  return node;
132371
132371
  },
132372
+ /**
132373
+ * Returns a new CDATASection node whose data is `data`.
132374
+ *
132375
+ * __This implementation differs from the specification:__
132376
+ * - calling this method on an HTML document does not throw `NotSupportedError`.
132377
+ *
132378
+ * @param {string} data
132379
+ * @returns {CDATASection}
132380
+ * @throws DOMException with code `INVALID_CHARACTER_ERR` if `data` contains `"]]>"`.
132381
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection
132382
+ * @see https://dom.spec.whatwg.org/#dom-document-createcdatasection
132383
+ */
132372
132384
  createCDATASection : function(data){
132385
+ if (data.indexOf(']]>') !== -1) {
132386
+ throw new DOMException(INVALID_CHARACTER_ERR, 'data contains "]]>"');
132387
+ }
132373
132388
  var node = new CDATASection();
132374
132389
  node.ownerDocument = this;
132375
132390
  node.appendData(data);
@@ -132627,6 +132642,20 @@ function requireDom$1 () {
132627
132642
  ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
132628
132643
  _extends(ProcessingInstruction,Node);
132629
132644
  function XMLSerializer(){}
132645
+ /**
132646
+ * Returns the result of serializing `node` to XML.
132647
+ *
132648
+ * __This implementation differs from the specification:__
132649
+ * - CDATASection nodes whose data contains `]]>` are serialized by splitting the section
132650
+ * at each `]]>` occurrence (following W3C DOM Level 3 Core `split-cdata-sections`
132651
+ * default behaviour). A configurable option is not yet implemented.
132652
+ *
132653
+ * @param {Node} node
132654
+ * @param {boolean} [isHtml]
132655
+ * @param {function} [nodeFilter]
132656
+ * @returns {string}
132657
+ * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring
132658
+ */
132630
132659
  XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){
132631
132660
  return nodeSerializeToString.call(node,isHtml,nodeFilter);
132632
132661
  };
@@ -132845,7 +132874,7 @@ function requireDom$1 () {
132845
132874
  .replace(/[<&>]/g,_xmlEncoder)
132846
132875
  );
132847
132876
  case CDATA_SECTION_NODE:
132848
- return buf.push( '<![CDATA[',node.data,']]>');
132877
+ return buf.push('<![CDATA[', node.data.replace(/]]>/g, ']]]]><![CDATA[>'), ']]>');
132849
132878
  case COMMENT_NODE:
132850
132879
  return buf.push( "<!--",node.data,"-->");
132851
132880
  case DOCUMENT_TYPE_NODE:
@@ -135825,7 +135854,7 @@ function requireSax$1 () {
135825
135854
  function parseInstruction(source,start,domBuilder){
135826
135855
  var end = source.indexOf('?>',start);
135827
135856
  if(end){
135828
- var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
135857
+ var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)$/);
135829
135858
  if(match){
135830
135859
  match[0].length;
135831
135860
  domBuilder.processingInstruction(match[1], match[2]) ;
@@ -142712,7 +142741,7 @@ function requireMomentTimezone$1 () {
142712
142741
  hasRequiredMomentTimezone$1 = 1;
142713
142742
  (function (module) {
142714
142743
  //! moment-timezone.js
142715
- //! version : 0.6.0
142744
+ //! version : 0.6.1
142716
142745
  //! Copyright (c) JS Foundation and other contributors
142717
142746
  //! license : MIT
142718
142747
  //! github.com/moment/moment-timezone
@@ -142738,7 +142767,7 @@ function requireMomentTimezone$1 () {
142738
142767
  // return moment;
142739
142768
  // }
142740
142769
 
142741
- var VERSION = "0.6.0",
142770
+ var VERSION = "0.6.1",
142742
142771
  zones = {},
142743
142772
  links = {},
142744
142773
  countries = {},
@@ -147300,11 +147329,11 @@ const CURRENCY_INFO = {
147300
147329
  }
147301
147330
  };
147302
147331
 
147303
- const $RAF$1 = window.requestAnimationFrame;
147332
+ const $RAF$1$1 = window.requestAnimationFrame;
147304
147333
  const $RAFQueue$1 = [];
147305
147334
  const invokeLater$1 = fn => {
147306
147335
  if (!$RAFQueue$1.length) {
147307
- $RAF$1(() => {
147336
+ $RAF$1$1(() => {
147308
147337
  $RAFQueue$1.forEach(f => f());
147309
147338
  $RAFQueue$1.length = 0;
147310
147339
  });
@@ -147862,223 +147891,83 @@ const getFnForEventExpr$1 = (expr) => {
147862
147891
  return fnExecutor$1(expr, ExpressionType$2.Action);
147863
147892
  };
147864
147893
 
147865
- // Constants
147866
- const WIDGET_ID_REGEX$1 = /^(widget-[^_]+)/;
147867
- const WIDGET_PROPERTY_REGEX$1 = /^widget-[^_]+_(.+)$/;
147868
- const ARRAY_INDEX_PLACEHOLDER$1 = '[$i]';
147869
- const ARRAY_INDEX_ZERO$1 = '[0]';
147870
147894
  const registry$1 = new Map();
147871
147895
  const watchIdGenerator$1 = new IDGenerator$1('watch-id-');
147872
- const FIRST_TIME_WATCH$1 = Object.freeze({});
147873
- /**
147874
- * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
147875
- */
147876
- const getWidgetId$1 = (identifier) => {
147877
- if (!identifier || typeof identifier !== 'string') {
147878
- return null;
147879
- }
147880
- const match = identifier.match(WIDGET_ID_REGEX$1);
147881
- return match ? match[1] : null;
147882
- };
147883
- /**
147884
- * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
147885
- */
147886
- const getPropertyName$1 = (identifier) => {
147887
- if (!identifier || typeof identifier !== 'string') {
147888
- return identifier;
147889
- }
147890
- const match = identifier.match(WIDGET_PROPERTY_REGEX$1);
147891
- return match ? match[1] : identifier;
147892
- };
147893
- /**
147894
- * Array consumer wrapper for array-based expressions
147895
- */
147896
+ const FIRST_TIME_WATCH$1 = {};
147897
+ Object.freeze(FIRST_TIME_WATCH$1);
147896
147898
  const arrayConsumer$1 = (listenerFn, restExpr, newVal, oldVal) => {
147897
- if (!isArray$1(newVal)) {
147898
- return;
147899
- }
147900
- let formattedData = newVal.map(datum => findValueOf$1(datum, restExpr));
147901
- // Flatten if result is array of arrays
147902
- if (isArray$1(formattedData[0])) {
147903
- formattedData = flatten$2(formattedData);
147899
+ let data = newVal, formattedData;
147900
+ if (isArray$1(data)) {
147901
+ formattedData = data.map(function (datum) {
147902
+ return findValueOf$1(datum, restExpr);
147903
+ });
147904
+ // If resulting structure is an array of array, flatten it
147905
+ if (isArray$1(formattedData[0])) {
147906
+ formattedData = flatten$2(formattedData);
147907
+ }
147908
+ listenerFn(formattedData, oldVal);
147904
147909
  }
147905
- listenerFn(formattedData, oldVal);
147906
147910
  };
147907
- /**
147908
- * Updates watch info for array expressions
147909
- */
147910
- const getUpdatedWatchInfo$1 = (expr, acceptsArray, listener) => {
147911
- const regex = /\[\$i\]/g;
147911
+ const getUpdatedWatcInfo$1 = (expr, acceptsArray, listener) => {
147912
+ // listener doesn't accept array
147913
+ // replace all `[$i]` with `[0]` and return the expression
147914
+ let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
147912
147915
  if (!acceptsArray) {
147913
147916
  return {
147914
- expr: expr.replace(regex, ARRAY_INDEX_ZERO$1),
147915
- listener
147917
+ 'expr': expr.replace(regex, $0),
147918
+ 'listener': listener
147916
147919
  };
147917
147920
  }
147918
- const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER$1);
147919
- const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER$1, ARRAY_INDEX_ZERO$1);
147920
- const restExpr = expr.substring(lastIndex + 5);
147921
- const arrayConsumerFn = restExpr
147922
- ? arrayConsumer$1.bind(undefined, listener, restExpr)
147923
- : listener;
147921
+ // listener accepts array
147922
+ // replace all except the last `[$i]` with `[0]` and return the expression.
147923
+ var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
147924
+ if (restExpr) {
147925
+ arrayConsumerFn = arrayConsumer$1.bind(undefined, listener, restExpr);
147926
+ }
147924
147927
  return {
147925
- expr: baseExpr,
147926
- listener: arrayConsumerFn
147928
+ 'expr': _expr,
147929
+ 'listener': arrayConsumerFn
147927
147930
  };
147928
147931
  };
147929
- /**
147930
- * Determines if an expression is static (doesn't need to be watched)
147931
- */
147932
- const STATIC_EXPRESSION_NAMES$1 = [
147933
- "row.getProperty('investment')",
147934
- "row.getProperty('factsheetLink')",
147935
- "row.getProperty('isRebalanceEligible')"
147936
- ];
147937
- const isStaticExpression$1 = (expr) => {
147938
- if (typeof expr !== 'string') {
147939
- return false;
147940
- }
147941
- const trimmedExpr = expr.trim();
147942
- // Expressions that always evaluate to localization strings
147943
- // if (trimmedExpr.includes('appLocale')) {
147944
- // return true;
147945
- // }
147946
- // Hard-coded static expression names
147947
- if (STATIC_EXPRESSION_NAMES$1.includes(trimmedExpr)) {
147948
- return true;
147949
- }
147950
- return false;
147951
- };
147952
- /**
147953
- * Gets the scope type from the scope object
147954
- */
147955
- const getScopeType$1 = ($scope) => {
147956
- if (!$scope) {
147957
- return null;
147958
- }
147959
- if ($scope.pageName)
147960
- return 'Page';
147961
- if ($scope.prefabName)
147962
- return 'Prefab';
147963
- if ($scope.partialName)
147964
- return 'Partial';
147965
- // Check for App scope
147966
- if ($scope.Variables !== undefined &&
147967
- $scope.Actions !== undefined &&
147968
- !$scope.pageName &&
147969
- !$scope.prefabName &&
147970
- !$scope.partialName) {
147971
- return 'App';
147972
- }
147973
- if ($scope.constructor?.name === 'AppRef') {
147974
- return 'App';
147975
- }
147976
- return null;
147977
- };
147978
- /**
147979
- * Gets scope name based on scope type
147980
- */
147981
- const getScopeName$1 = ($scope, scopeType) => {
147982
- if (!scopeType || !$scope) {
147983
- return null;
147984
- }
147985
- switch (scopeType) {
147986
- case 'Prefab': return $scope.prefabName || null;
147987
- case 'Partial': return $scope.partialName || null;
147988
- case 'Page': return $scope.pageName || null;
147989
- default: return null;
147990
- }
147991
- };
147992
- /**
147993
- * Main watch function
147994
- */
147995
147932
  const $watch$1 = (expr, $scope, $locals, listener, identifier = watchIdGenerator$1.nextUid(), doNotClone = false, config = {}, isMuted) => {
147996
- // Handle array expressions
147997
- if (expr.includes(ARRAY_INDEX_PLACEHOLDER$1)) {
147998
- const watchInfo = getUpdatedWatchInfo$1(expr, config.arrayType || config.isList || false, listener);
147933
+ if (expr.indexOf('[$i]') !== -1) {
147934
+ let watchInfo = getUpdatedWatcInfo$1(expr, config && (config.arrayType || config.isList), listener);
147999
147935
  expr = watchInfo.expr;
148000
147936
  listener = watchInfo.listener;
148001
147937
  }
148002
- // Handle static expressions
148003
- if (isStaticExpression$1(expr)) {
148004
- try {
148005
- const fn = $parseExpr$1(expr);
148006
- const staticValue = fn($scope, $locals);
148007
- listener(staticValue, FIRST_TIME_WATCH$1);
148008
- }
148009
- catch (e) {
148010
- console.warn(`Error evaluating static expression '${expr}':`, e);
148011
- listener(undefined, FIRST_TIME_WATCH$1);
148012
- }
148013
- return () => { }; // No-op unsubscribe
148014
- }
148015
147938
  const fn = $parseExpr$1();
148016
- const scopeType = getScopeType$1($scope);
148017
- const scopeName = getScopeName$1($scope, scopeType);
148018
- const destroyFn = () => $unwatch$1(identifier);
148019
- const watchInfo = {
148020
- fn: fn.bind(null, $scope, $locals),
147939
+ registry$1.set(identifier, {
147940
+ fn: fn.bind(expr, $scope, $locals),
148021
147941
  listener,
148022
147942
  expr,
148023
147943
  last: FIRST_TIME_WATCH$1,
148024
147944
  doNotClone,
148025
- isMuted,
148026
- scopeType,
148027
- scopeName,
148028
- destroyFn
148029
- };
148030
- // Store in registry
148031
- const widgetId = getWidgetId$1(identifier);
148032
- if (widgetId) {
148033
- const propertyName = getPropertyName$1(identifier);
148034
- if (!registry$1.has(widgetId)) {
148035
- registry$1.set(widgetId, {});
148036
- }
148037
- const widgetGroup = registry$1.get(widgetId);
148038
- widgetGroup[propertyName] = watchInfo;
148039
- }
148040
- else {
148041
- registry$1.set(identifier, watchInfo);
148042
- }
148043
- return destroyFn;
147945
+ isMuted: isMuted
147946
+ });
147947
+ return () => $unwatch$1(identifier);
148044
147948
  };
148045
- /**
148046
- * Unwatches a single identifier
148047
- */
148048
- const $unwatch$1 = (identifier) => {
148049
- const widgetId = getWidgetId$1(identifier);
148050
- if (widgetId) {
148051
- const propertyName = getPropertyName$1(identifier);
148052
- const widgetGroup = registry$1.get(widgetId);
148053
- //@ts-ignore
148054
- if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
148055
- const watchInfo = widgetGroup[propertyName];
148056
- if (watchInfo) {
148057
- delete widgetGroup[propertyName];
148058
- // Clean up empty widget groups
148059
- if (Object.keys(widgetGroup).length === 0) {
148060
- registry$1.delete(widgetId);
148061
- }
148062
- return true;
148063
- }
147949
+ const $unwatch$1 = identifier => registry$1.delete(identifier);
147950
+ window.watchRegistry = registry$1;
147951
+ window.__WM_DEBUG_WATCHERS__ = false;
147952
+ /*export const $invokeWatchers = (force?: boolean, ignoreMuted?: boolean) => {
147953
+ if (force) {
147954
+ triggerWatchers(ignoreMuted);
147955
+ } else {
147956
+
147957
+ if (skipWatchers) {
147958
+ skipWatchers = false;
147959
+ return;
148064
147960
  }
147961
+ debouncedTriggerWatchers();
148065
147962
  }
148066
- // Fallback to direct lookup
148067
- if (registry$1.has(identifier)) {
148068
- registry$1.delete(identifier);
148069
- return true;
148070
- }
148071
- return false;
148072
- };
147963
+ };*/
148073
147964
  const $appDigest$1 = (() => {
148074
- return (force = false) => {
147965
+ return (force) => {
148075
147966
  {
148076
147967
  return;
148077
147968
  }
148078
147969
  };
148079
147970
  })();
148080
- // Export registry for debugging
148081
- window.watchRegistry = registry$1;
148082
147971
 
148083
147972
  var ComponentType$1;
148084
147973
  (function (ComponentType) {
@@ -188158,7 +188047,7 @@ function requireDom () {
188158
188047
  ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
188159
188048
  var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
188160
188049
  ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
188161
- ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
188050
+ var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
188162
188051
  ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
188163
188052
  ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
188164
188053
  var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
@@ -189239,7 +189128,22 @@ function requireDom () {
189239
189128
  node.appendData(data);
189240
189129
  return node;
189241
189130
  },
189131
+ /**
189132
+ * Returns a new CDATASection node whose data is `data`.
189133
+ *
189134
+ * __This implementation differs from the specification:__
189135
+ * - calling this method on an HTML document does not throw `NotSupportedError`.
189136
+ *
189137
+ * @param {string} data
189138
+ * @returns {CDATASection}
189139
+ * @throws DOMException with code `INVALID_CHARACTER_ERR` if `data` contains `"]]>"`.
189140
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection
189141
+ * @see https://dom.spec.whatwg.org/#dom-document-createcdatasection
189142
+ */
189242
189143
  createCDATASection : function(data){
189144
+ if (data.indexOf(']]>') !== -1) {
189145
+ throw new DOMException(INVALID_CHARACTER_ERR, 'data contains "]]>"');
189146
+ }
189243
189147
  var node = new CDATASection();
189244
189148
  node.ownerDocument = this;
189245
189149
  node.appendData(data);
@@ -189497,6 +189401,20 @@ function requireDom () {
189497
189401
  ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
189498
189402
  _extends(ProcessingInstruction,Node);
189499
189403
  function XMLSerializer(){}
189404
+ /**
189405
+ * Returns the result of serializing `node` to XML.
189406
+ *
189407
+ * __This implementation differs from the specification:__
189408
+ * - CDATASection nodes whose data contains `]]>` are serialized by splitting the section
189409
+ * at each `]]>` occurrence (following W3C DOM Level 3 Core `split-cdata-sections`
189410
+ * default behaviour). A configurable option is not yet implemented.
189411
+ *
189412
+ * @param {Node} node
189413
+ * @param {boolean} [isHtml]
189414
+ * @param {function} [nodeFilter]
189415
+ * @returns {string}
189416
+ * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring
189417
+ */
189500
189418
  XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){
189501
189419
  return nodeSerializeToString.call(node,isHtml,nodeFilter);
189502
189420
  };
@@ -189715,7 +189633,7 @@ function requireDom () {
189715
189633
  .replace(/[<&>]/g,_xmlEncoder)
189716
189634
  );
189717
189635
  case CDATA_SECTION_NODE:
189718
- return buf.push( '<![CDATA[',node.data,']]>');
189636
+ return buf.push('<![CDATA[', node.data.replace(/]]>/g, ']]]]><![CDATA[>'), ']]>');
189719
189637
  case COMMENT_NODE:
189720
189638
  return buf.push( "<!--",node.data,"-->");
189721
189639
  case DOCUMENT_TYPE_NODE:
@@ -192695,7 +192613,7 @@ function requireSax () {
192695
192613
  function parseInstruction(source,start,domBuilder){
192696
192614
  var end = source.indexOf('?>',start);
192697
192615
  if(end){
192698
- var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
192616
+ var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)$/);
192699
192617
  if(match){
192700
192618
  match[0].length;
192701
192619
  domBuilder.processingInstruction(match[1], match[2]) ;
@@ -199582,7 +199500,7 @@ function requireMomentTimezone () {
199582
199500
  hasRequiredMomentTimezone = 1;
199583
199501
  (function (module) {
199584
199502
  //! moment-timezone.js
199585
- //! version : 0.6.0
199503
+ //! version : 0.6.1
199586
199504
  //! Copyright (c) JS Foundation and other contributors
199587
199505
  //! license : MIT
199588
199506
  //! github.com/moment/moment-timezone
@@ -199608,7 +199526,7 @@ function requireMomentTimezone () {
199608
199526
  // return moment;
199609
199527
  // }
199610
199528
 
199611
- var VERSION = "0.6.0",
199529
+ var VERSION = "0.6.1",
199612
199530
  zones = {},
199613
199531
  links = {},
199614
199532
  countries = {},
@@ -203105,11 +203023,11 @@ var DEFAULT_FORMATS;
203105
203023
  DEFAULT_FORMATS["DATE_TIME"] = "yyyy-MM-dd HH:mm:ss";
203106
203024
  })(DEFAULT_FORMATS || (DEFAULT_FORMATS = {}));
203107
203025
 
203108
- const $RAF = window.requestAnimationFrame;
203026
+ const $RAF$1 = window.requestAnimationFrame;
203109
203027
  const $RAFQueue = [];
203110
203028
  const invokeLater = fn => {
203111
203029
  if (!$RAFQueue.length) {
203112
- $RAF(() => {
203030
+ $RAF$1(() => {
203113
203031
  $RAFQueue.forEach(f => f());
203114
203032
  $RAFQueue.length = 0;
203115
203033
  });
@@ -203667,223 +203585,83 @@ const getFnForEventExpr = (expr) => {
203667
203585
  return fnExecutor(expr, ExpressionType.Action);
203668
203586
  };
203669
203587
 
203670
- // Constants
203671
- const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
203672
- const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
203673
- const ARRAY_INDEX_PLACEHOLDER = '[$i]';
203674
- const ARRAY_INDEX_ZERO = '[0]';
203675
203588
  const registry = new Map();
203676
203589
  const watchIdGenerator = new IDGenerator('watch-id-');
203677
- const FIRST_TIME_WATCH = Object.freeze({});
203678
- /**
203679
- * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
203680
- */
203681
- const getWidgetId = (identifier) => {
203682
- if (!identifier || typeof identifier !== 'string') {
203683
- return null;
203684
- }
203685
- const match = identifier.match(WIDGET_ID_REGEX);
203686
- return match ? match[1] : null;
203687
- };
203688
- /**
203689
- * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
203690
- */
203691
- const getPropertyName = (identifier) => {
203692
- if (!identifier || typeof identifier !== 'string') {
203693
- return identifier;
203694
- }
203695
- const match = identifier.match(WIDGET_PROPERTY_REGEX);
203696
- return match ? match[1] : identifier;
203697
- };
203698
- /**
203699
- * Array consumer wrapper for array-based expressions
203700
- */
203590
+ const FIRST_TIME_WATCH = {};
203591
+ Object.freeze(FIRST_TIME_WATCH);
203701
203592
  const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
203702
- if (!isArray(newVal)) {
203703
- return;
203704
- }
203705
- let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
203706
- // Flatten if result is array of arrays
203707
- if (isArray(formattedData[0])) {
203708
- formattedData = flatten(formattedData);
203593
+ let data = newVal, formattedData;
203594
+ if (isArray(data)) {
203595
+ formattedData = data.map(function (datum) {
203596
+ return findValueOf(datum, restExpr);
203597
+ });
203598
+ // If resulting structure is an array of array, flatten it
203599
+ if (isArray(formattedData[0])) {
203600
+ formattedData = flatten(formattedData);
203601
+ }
203602
+ listenerFn(formattedData, oldVal);
203709
203603
  }
203710
- listenerFn(formattedData, oldVal);
203711
203604
  };
203712
- /**
203713
- * Updates watch info for array expressions
203714
- */
203715
- const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
203716
- const regex = /\[\$i\]/g;
203605
+ const getUpdatedWatcInfo = (expr, acceptsArray, listener) => {
203606
+ // listener doesn't accept array
203607
+ // replace all `[$i]` with `[0]` and return the expression
203608
+ let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
203717
203609
  if (!acceptsArray) {
203718
203610
  return {
203719
- expr: expr.replace(regex, ARRAY_INDEX_ZERO),
203720
- listener
203611
+ 'expr': expr.replace(regex, $0),
203612
+ 'listener': listener
203721
203613
  };
203722
203614
  }
203723
- const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
203724
- const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
203725
- const restExpr = expr.substring(lastIndex + 5);
203726
- const arrayConsumerFn = restExpr
203727
- ? arrayConsumer.bind(undefined, listener, restExpr)
203728
- : listener;
203615
+ // listener accepts array
203616
+ // replace all except the last `[$i]` with `[0]` and return the expression.
203617
+ var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
203618
+ if (restExpr) {
203619
+ arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);
203620
+ }
203729
203621
  return {
203730
- expr: baseExpr,
203731
- listener: arrayConsumerFn
203622
+ 'expr': _expr,
203623
+ 'listener': arrayConsumerFn
203732
203624
  };
203733
203625
  };
203734
- /**
203735
- * Determines if an expression is static (doesn't need to be watched)
203736
- */
203737
- const STATIC_EXPRESSION_NAMES = [
203738
- "row.getProperty('investment')",
203739
- "row.getProperty('factsheetLink')",
203740
- "row.getProperty('isRebalanceEligible')"
203741
- ];
203742
- const isStaticExpression = (expr) => {
203743
- if (typeof expr !== 'string') {
203744
- return false;
203745
- }
203746
- const trimmedExpr = expr.trim();
203747
- // Expressions that always evaluate to localization strings
203748
- // if (trimmedExpr.includes('appLocale')) {
203749
- // return true;
203750
- // }
203751
- // Hard-coded static expression names
203752
- if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
203753
- return true;
203754
- }
203755
- return false;
203756
- };
203757
- /**
203758
- * Gets the scope type from the scope object
203759
- */
203760
- const getScopeType = ($scope) => {
203761
- if (!$scope) {
203762
- return null;
203763
- }
203764
- if ($scope.pageName)
203765
- return 'Page';
203766
- if ($scope.prefabName)
203767
- return 'Prefab';
203768
- if ($scope.partialName)
203769
- return 'Partial';
203770
- // Check for App scope
203771
- if ($scope.Variables !== undefined &&
203772
- $scope.Actions !== undefined &&
203773
- !$scope.pageName &&
203774
- !$scope.prefabName &&
203775
- !$scope.partialName) {
203776
- return 'App';
203777
- }
203778
- if ($scope.constructor?.name === 'AppRef') {
203779
- return 'App';
203780
- }
203781
- return null;
203782
- };
203783
- /**
203784
- * Gets scope name based on scope type
203785
- */
203786
- const getScopeName = ($scope, scopeType) => {
203787
- if (!scopeType || !$scope) {
203788
- return null;
203789
- }
203790
- switch (scopeType) {
203791
- case 'Prefab': return $scope.prefabName || null;
203792
- case 'Partial': return $scope.partialName || null;
203793
- case 'Page': return $scope.pageName || null;
203794
- default: return null;
203795
- }
203796
- };
203797
- /**
203798
- * Main watch function
203799
- */
203800
203626
  const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
203801
- // Handle array expressions
203802
- if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
203803
- const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
203627
+ if (expr.indexOf('[$i]') !== -1) {
203628
+ let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);
203804
203629
  expr = watchInfo.expr;
203805
203630
  listener = watchInfo.listener;
203806
203631
  }
203807
- // Handle static expressions
203808
- if (isStaticExpression(expr)) {
203809
- try {
203810
- const fn = $parseExpr(expr);
203811
- const staticValue = fn($scope, $locals);
203812
- listener(staticValue, FIRST_TIME_WATCH);
203813
- }
203814
- catch (e) {
203815
- console.warn(`Error evaluating static expression '${expr}':`, e);
203816
- listener(undefined, FIRST_TIME_WATCH);
203817
- }
203818
- return () => { }; // No-op unsubscribe
203819
- }
203820
203632
  const fn = $parseExpr();
203821
- const scopeType = getScopeType($scope);
203822
- const scopeName = getScopeName($scope, scopeType);
203823
- const destroyFn = () => $unwatch(identifier);
203824
- const watchInfo = {
203825
- fn: fn.bind(null, $scope, $locals),
203633
+ registry.set(identifier, {
203634
+ fn: fn.bind(expr, $scope, $locals),
203826
203635
  listener,
203827
203636
  expr,
203828
203637
  last: FIRST_TIME_WATCH,
203829
203638
  doNotClone,
203830
- isMuted,
203831
- scopeType,
203832
- scopeName,
203833
- destroyFn
203834
- };
203835
- // Store in registry
203836
- const widgetId = getWidgetId(identifier);
203837
- if (widgetId) {
203838
- const propertyName = getPropertyName(identifier);
203839
- if (!registry.has(widgetId)) {
203840
- registry.set(widgetId, {});
203841
- }
203842
- const widgetGroup = registry.get(widgetId);
203843
- widgetGroup[propertyName] = watchInfo;
203844
- }
203845
- else {
203846
- registry.set(identifier, watchInfo);
203847
- }
203848
- return destroyFn;
203639
+ isMuted: isMuted
203640
+ });
203641
+ return () => $unwatch(identifier);
203849
203642
  };
203850
- /**
203851
- * Unwatches a single identifier
203852
- */
203853
- const $unwatch = (identifier) => {
203854
- const widgetId = getWidgetId(identifier);
203855
- if (widgetId) {
203856
- const propertyName = getPropertyName(identifier);
203857
- const widgetGroup = registry.get(widgetId);
203858
- //@ts-ignore
203859
- if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
203860
- const watchInfo = widgetGroup[propertyName];
203861
- if (watchInfo) {
203862
- delete widgetGroup[propertyName];
203863
- // Clean up empty widget groups
203864
- if (Object.keys(widgetGroup).length === 0) {
203865
- registry.delete(widgetId);
203866
- }
203867
- return true;
203868
- }
203643
+ const $unwatch = identifier => registry.delete(identifier);
203644
+ window.watchRegistry = registry;
203645
+ window.__WM_DEBUG_WATCHERS__ = false;
203646
+ /*export const $invokeWatchers = (force?: boolean, ignoreMuted?: boolean) => {
203647
+ if (force) {
203648
+ triggerWatchers(ignoreMuted);
203649
+ } else {
203650
+
203651
+ if (skipWatchers) {
203652
+ skipWatchers = false;
203653
+ return;
203869
203654
  }
203655
+ debouncedTriggerWatchers();
203870
203656
  }
203871
- // Fallback to direct lookup
203872
- if (registry.has(identifier)) {
203873
- registry.delete(identifier);
203874
- return true;
203875
- }
203876
- return false;
203877
- };
203657
+ };*/
203878
203658
  const $appDigest = (() => {
203879
- return (force = false) => {
203659
+ return (force) => {
203880
203660
  {
203881
203661
  return;
203882
203662
  }
203883
203663
  };
203884
203664
  })();
203885
- // Export registry for debugging
203886
- window.watchRegistry = registry;
203887
203665
 
203888
203666
  var ComponentType;
203889
203667
  (function (ComponentType) {