@wavemaker/angular-app 11.14.1-16.6408 → 11.14.1-16.6417
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dependencies/pipe-provider.cjs.js +378 -98
- package/dependencies/transpilation-web.cjs.js +189 -49
- package/dependency-report.html +1 -1
- package/npm-shrinkwrap.json +179 -65
- package/package-lock.json +179 -65
- package/package.json +5 -5
|
@@ -147299,11 +147299,11 @@ const CURRENCY_INFO = {
|
|
|
147299
147299
|
}
|
|
147300
147300
|
};
|
|
147301
147301
|
|
|
147302
|
-
const $RAF$1
|
|
147302
|
+
const $RAF$1 = window.requestAnimationFrame;
|
|
147303
147303
|
const $RAFQueue$1 = [];
|
|
147304
147304
|
const invokeLater$1 = fn => {
|
|
147305
147305
|
if (!$RAFQueue$1.length) {
|
|
147306
|
-
$RAF$1
|
|
147306
|
+
$RAF$1(() => {
|
|
147307
147307
|
$RAFQueue$1.forEach(f => f());
|
|
147308
147308
|
$RAFQueue$1.length = 0;
|
|
147309
147309
|
});
|
|
@@ -147845,83 +147845,223 @@ const getFnForEventExpr$1 = (expr) => {
|
|
|
147845
147845
|
return fnExecutor$1(expr, ExpressionType$2.Action);
|
|
147846
147846
|
};
|
|
147847
147847
|
|
|
147848
|
+
// Constants
|
|
147849
|
+
const WIDGET_ID_REGEX$1 = /^(widget-[^_]+)/;
|
|
147850
|
+
const WIDGET_PROPERTY_REGEX$1 = /^widget-[^_]+_(.+)$/;
|
|
147851
|
+
const ARRAY_INDEX_PLACEHOLDER$1 = '[$i]';
|
|
147852
|
+
const ARRAY_INDEX_ZERO$1 = '[0]';
|
|
147848
147853
|
const registry$1 = new Map();
|
|
147849
147854
|
const watchIdGenerator$1 = new IDGenerator$1('watch-id-');
|
|
147850
|
-
const FIRST_TIME_WATCH$1 = {};
|
|
147851
|
-
|
|
147855
|
+
const FIRST_TIME_WATCH$1 = Object.freeze({});
|
|
147856
|
+
/**
|
|
147857
|
+
* Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
|
|
147858
|
+
*/
|
|
147859
|
+
const getWidgetId$1 = (identifier) => {
|
|
147860
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
147861
|
+
return null;
|
|
147862
|
+
}
|
|
147863
|
+
const match = identifier.match(WIDGET_ID_REGEX$1);
|
|
147864
|
+
return match ? match[1] : null;
|
|
147865
|
+
};
|
|
147866
|
+
/**
|
|
147867
|
+
* Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
|
|
147868
|
+
*/
|
|
147869
|
+
const getPropertyName$1 = (identifier) => {
|
|
147870
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
147871
|
+
return identifier;
|
|
147872
|
+
}
|
|
147873
|
+
const match = identifier.match(WIDGET_PROPERTY_REGEX$1);
|
|
147874
|
+
return match ? match[1] : identifier;
|
|
147875
|
+
};
|
|
147876
|
+
/**
|
|
147877
|
+
* Array consumer wrapper for array-based expressions
|
|
147878
|
+
*/
|
|
147852
147879
|
const arrayConsumer$1 = (listenerFn, restExpr, newVal, oldVal) => {
|
|
147853
|
-
|
|
147854
|
-
|
|
147855
|
-
formattedData = data.map(function (datum) {
|
|
147856
|
-
return findValueOf$1(datum, restExpr);
|
|
147857
|
-
});
|
|
147858
|
-
// If resulting structure is an array of array, flatten it
|
|
147859
|
-
if (_.isArray(formattedData[0])) {
|
|
147860
|
-
formattedData = _.flatten(formattedData);
|
|
147861
|
-
}
|
|
147862
|
-
listenerFn(formattedData, oldVal);
|
|
147880
|
+
if (!isArray$1(newVal)) {
|
|
147881
|
+
return;
|
|
147863
147882
|
}
|
|
147883
|
+
let formattedData = newVal.map(datum => findValueOf$1(datum, restExpr));
|
|
147884
|
+
// Flatten if result is array of arrays
|
|
147885
|
+
if (isArray$1(formattedData[0])) {
|
|
147886
|
+
formattedData = flatten$2(formattedData);
|
|
147887
|
+
}
|
|
147888
|
+
listenerFn(formattedData, oldVal);
|
|
147864
147889
|
};
|
|
147865
|
-
|
|
147866
|
-
|
|
147867
|
-
|
|
147868
|
-
|
|
147890
|
+
/**
|
|
147891
|
+
* Updates watch info for array expressions
|
|
147892
|
+
*/
|
|
147893
|
+
const getUpdatedWatchInfo$1 = (expr, acceptsArray, listener) => {
|
|
147894
|
+
const regex = /\[\$i\]/g;
|
|
147869
147895
|
if (!acceptsArray) {
|
|
147870
147896
|
return {
|
|
147871
|
-
|
|
147872
|
-
|
|
147897
|
+
expr: expr.replace(regex, ARRAY_INDEX_ZERO$1),
|
|
147898
|
+
listener
|
|
147873
147899
|
};
|
|
147874
147900
|
}
|
|
147875
|
-
|
|
147876
|
-
|
|
147877
|
-
|
|
147878
|
-
|
|
147879
|
-
|
|
147880
|
-
|
|
147901
|
+
const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER$1);
|
|
147902
|
+
const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER$1, ARRAY_INDEX_ZERO$1);
|
|
147903
|
+
const restExpr = expr.substring(lastIndex + 5);
|
|
147904
|
+
const arrayConsumerFn = restExpr
|
|
147905
|
+
? arrayConsumer$1.bind(undefined, listener, restExpr)
|
|
147906
|
+
: listener;
|
|
147881
147907
|
return {
|
|
147882
|
-
|
|
147883
|
-
|
|
147908
|
+
expr: baseExpr,
|
|
147909
|
+
listener: arrayConsumerFn
|
|
147884
147910
|
};
|
|
147885
147911
|
};
|
|
147912
|
+
/**
|
|
147913
|
+
* Determines if an expression is static (doesn't need to be watched)
|
|
147914
|
+
*/
|
|
147915
|
+
const STATIC_EXPRESSION_NAMES$1 = [
|
|
147916
|
+
"row.getProperty('investment')",
|
|
147917
|
+
"row.getProperty('factsheetLink')",
|
|
147918
|
+
"row.getProperty('isRebalanceEligible')"
|
|
147919
|
+
];
|
|
147920
|
+
const isStaticExpression$1 = (expr) => {
|
|
147921
|
+
if (typeof expr !== 'string') {
|
|
147922
|
+
return false;
|
|
147923
|
+
}
|
|
147924
|
+
const trimmedExpr = expr.trim();
|
|
147925
|
+
// Expressions that always evaluate to localization strings
|
|
147926
|
+
// if (trimmedExpr.includes('appLocale')) {
|
|
147927
|
+
// return true;
|
|
147928
|
+
// }
|
|
147929
|
+
// Hard-coded static expression names
|
|
147930
|
+
if (STATIC_EXPRESSION_NAMES$1.includes(trimmedExpr)) {
|
|
147931
|
+
return true;
|
|
147932
|
+
}
|
|
147933
|
+
return false;
|
|
147934
|
+
};
|
|
147935
|
+
/**
|
|
147936
|
+
* Gets the scope type from the scope object
|
|
147937
|
+
*/
|
|
147938
|
+
const getScopeType$1 = ($scope) => {
|
|
147939
|
+
if (!$scope) {
|
|
147940
|
+
return null;
|
|
147941
|
+
}
|
|
147942
|
+
if ($scope.pageName)
|
|
147943
|
+
return 'Page';
|
|
147944
|
+
if ($scope.prefabName)
|
|
147945
|
+
return 'Prefab';
|
|
147946
|
+
if ($scope.partialName)
|
|
147947
|
+
return 'Partial';
|
|
147948
|
+
// Check for App scope
|
|
147949
|
+
if ($scope.Variables !== undefined &&
|
|
147950
|
+
$scope.Actions !== undefined &&
|
|
147951
|
+
!$scope.pageName &&
|
|
147952
|
+
!$scope.prefabName &&
|
|
147953
|
+
!$scope.partialName) {
|
|
147954
|
+
return 'App';
|
|
147955
|
+
}
|
|
147956
|
+
if ($scope.constructor?.name === 'AppRef') {
|
|
147957
|
+
return 'App';
|
|
147958
|
+
}
|
|
147959
|
+
return null;
|
|
147960
|
+
};
|
|
147961
|
+
/**
|
|
147962
|
+
* Gets scope name based on scope type
|
|
147963
|
+
*/
|
|
147964
|
+
const getScopeName$1 = ($scope, scopeType) => {
|
|
147965
|
+
if (!scopeType || !$scope) {
|
|
147966
|
+
return null;
|
|
147967
|
+
}
|
|
147968
|
+
switch (scopeType) {
|
|
147969
|
+
case 'Prefab': return $scope.prefabName || null;
|
|
147970
|
+
case 'Partial': return $scope.partialName || null;
|
|
147971
|
+
case 'Page': return $scope.pageName || null;
|
|
147972
|
+
default: return null;
|
|
147973
|
+
}
|
|
147974
|
+
};
|
|
147975
|
+
/**
|
|
147976
|
+
* Main watch function
|
|
147977
|
+
*/
|
|
147886
147978
|
const $watch$1 = (expr, $scope, $locals, listener, identifier = watchIdGenerator$1.nextUid(), doNotClone = false, config = {}, isMuted) => {
|
|
147887
|
-
|
|
147888
|
-
|
|
147979
|
+
// Handle array expressions
|
|
147980
|
+
if (expr.includes(ARRAY_INDEX_PLACEHOLDER$1)) {
|
|
147981
|
+
const watchInfo = getUpdatedWatchInfo$1(expr, config.arrayType || config.isList || false, listener);
|
|
147889
147982
|
expr = watchInfo.expr;
|
|
147890
147983
|
listener = watchInfo.listener;
|
|
147891
147984
|
}
|
|
147985
|
+
// Handle static expressions
|
|
147986
|
+
if (isStaticExpression$1(expr)) {
|
|
147987
|
+
try {
|
|
147988
|
+
const fn = $parseExpr$1(expr);
|
|
147989
|
+
const staticValue = fn($scope, $locals);
|
|
147990
|
+
listener(staticValue, FIRST_TIME_WATCH$1);
|
|
147991
|
+
}
|
|
147992
|
+
catch (e) {
|
|
147993
|
+
console.warn(`Error evaluating static expression '${expr}':`, e);
|
|
147994
|
+
listener(undefined, FIRST_TIME_WATCH$1);
|
|
147995
|
+
}
|
|
147996
|
+
return () => { }; // No-op unsubscribe
|
|
147997
|
+
}
|
|
147892
147998
|
const fn = $parseExpr$1();
|
|
147893
|
-
|
|
147894
|
-
|
|
147999
|
+
const scopeType = getScopeType$1($scope);
|
|
148000
|
+
const scopeName = getScopeName$1($scope, scopeType);
|
|
148001
|
+
const destroyFn = () => $unwatch$1(identifier);
|
|
148002
|
+
const watchInfo = {
|
|
148003
|
+
fn: fn.bind(null, $scope, $locals),
|
|
147895
148004
|
listener,
|
|
147896
148005
|
expr,
|
|
147897
148006
|
last: FIRST_TIME_WATCH$1,
|
|
147898
148007
|
doNotClone,
|
|
147899
|
-
isMuted
|
|
147900
|
-
|
|
147901
|
-
|
|
148008
|
+
isMuted,
|
|
148009
|
+
scopeType,
|
|
148010
|
+
scopeName,
|
|
148011
|
+
destroyFn
|
|
148012
|
+
};
|
|
148013
|
+
// Store in registry
|
|
148014
|
+
const widgetId = getWidgetId$1(identifier);
|
|
148015
|
+
if (widgetId) {
|
|
148016
|
+
const propertyName = getPropertyName$1(identifier);
|
|
148017
|
+
if (!registry$1.has(widgetId)) {
|
|
148018
|
+
registry$1.set(widgetId, {});
|
|
148019
|
+
}
|
|
148020
|
+
const widgetGroup = registry$1.get(widgetId);
|
|
148021
|
+
widgetGroup[propertyName] = watchInfo;
|
|
148022
|
+
}
|
|
148023
|
+
else {
|
|
148024
|
+
registry$1.set(identifier, watchInfo);
|
|
148025
|
+
}
|
|
148026
|
+
return destroyFn;
|
|
147902
148027
|
};
|
|
147903
|
-
|
|
147904
|
-
|
|
147905
|
-
|
|
147906
|
-
|
|
147907
|
-
|
|
147908
|
-
|
|
147909
|
-
|
|
147910
|
-
|
|
147911
|
-
|
|
147912
|
-
|
|
147913
|
-
|
|
148028
|
+
/**
|
|
148029
|
+
* Unwatches a single identifier
|
|
148030
|
+
*/
|
|
148031
|
+
const $unwatch$1 = (identifier) => {
|
|
148032
|
+
const widgetId = getWidgetId$1(identifier);
|
|
148033
|
+
if (widgetId) {
|
|
148034
|
+
const propertyName = getPropertyName$1(identifier);
|
|
148035
|
+
const widgetGroup = registry$1.get(widgetId);
|
|
148036
|
+
//@ts-ignore
|
|
148037
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
148038
|
+
const watchInfo = widgetGroup[propertyName];
|
|
148039
|
+
if (watchInfo) {
|
|
148040
|
+
delete widgetGroup[propertyName];
|
|
148041
|
+
// Clean up empty widget groups
|
|
148042
|
+
if (Object.keys(widgetGroup).length === 0) {
|
|
148043
|
+
registry$1.delete(widgetId);
|
|
148044
|
+
}
|
|
148045
|
+
return true;
|
|
148046
|
+
}
|
|
147914
148047
|
}
|
|
147915
|
-
debouncedTriggerWatchers();
|
|
147916
148048
|
}
|
|
147917
|
-
|
|
148049
|
+
// Fallback to direct lookup
|
|
148050
|
+
if (registry$1.has(identifier)) {
|
|
148051
|
+
registry$1.delete(identifier);
|
|
148052
|
+
return true;
|
|
148053
|
+
}
|
|
148054
|
+
return false;
|
|
148055
|
+
};
|
|
147918
148056
|
const $appDigest$1 = (() => {
|
|
147919
|
-
return (force) => {
|
|
148057
|
+
return (force = false) => {
|
|
147920
148058
|
{
|
|
147921
148059
|
return;
|
|
147922
148060
|
}
|
|
147923
148061
|
};
|
|
147924
148062
|
})();
|
|
148063
|
+
// Export registry for debugging
|
|
148064
|
+
window.watchRegistry = registry$1;
|
|
147925
148065
|
|
|
147926
148066
|
var ComponentType$1;
|
|
147927
148067
|
(function (ComponentType) {
|
|
@@ -202927,11 +203067,11 @@ var DEFAULT_FORMATS;
|
|
|
202927
203067
|
DEFAULT_FORMATS["DATE_TIME"] = "yyyy-MM-dd HH:mm:ss";
|
|
202928
203068
|
})(DEFAULT_FORMATS || (DEFAULT_FORMATS = {}));
|
|
202929
203069
|
|
|
202930
|
-
const $RAF
|
|
203070
|
+
const $RAF = window.requestAnimationFrame;
|
|
202931
203071
|
const $RAFQueue = [];
|
|
202932
203072
|
const invokeLater = fn => {
|
|
202933
203073
|
if (!$RAFQueue.length) {
|
|
202934
|
-
$RAF
|
|
203074
|
+
$RAF(() => {
|
|
202935
203075
|
$RAFQueue.forEach(f => f());
|
|
202936
203076
|
$RAFQueue.length = 0;
|
|
202937
203077
|
});
|
|
@@ -203473,83 +203613,223 @@ const getFnForEventExpr = (expr) => {
|
|
|
203473
203613
|
return fnExecutor(expr, ExpressionType.Action);
|
|
203474
203614
|
};
|
|
203475
203615
|
|
|
203616
|
+
// Constants
|
|
203617
|
+
const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
|
|
203618
|
+
const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
|
|
203619
|
+
const ARRAY_INDEX_PLACEHOLDER = '[$i]';
|
|
203620
|
+
const ARRAY_INDEX_ZERO = '[0]';
|
|
203476
203621
|
const registry = new Map();
|
|
203477
203622
|
const watchIdGenerator = new IDGenerator('watch-id-');
|
|
203478
|
-
const FIRST_TIME_WATCH = {};
|
|
203479
|
-
|
|
203623
|
+
const FIRST_TIME_WATCH = Object.freeze({});
|
|
203624
|
+
/**
|
|
203625
|
+
* Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
|
|
203626
|
+
*/
|
|
203627
|
+
const getWidgetId = (identifier) => {
|
|
203628
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
203629
|
+
return null;
|
|
203630
|
+
}
|
|
203631
|
+
const match = identifier.match(WIDGET_ID_REGEX);
|
|
203632
|
+
return match ? match[1] : null;
|
|
203633
|
+
};
|
|
203634
|
+
/**
|
|
203635
|
+
* Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
|
|
203636
|
+
*/
|
|
203637
|
+
const getPropertyName = (identifier) => {
|
|
203638
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
203639
|
+
return identifier;
|
|
203640
|
+
}
|
|
203641
|
+
const match = identifier.match(WIDGET_PROPERTY_REGEX);
|
|
203642
|
+
return match ? match[1] : identifier;
|
|
203643
|
+
};
|
|
203644
|
+
/**
|
|
203645
|
+
* Array consumer wrapper for array-based expressions
|
|
203646
|
+
*/
|
|
203480
203647
|
const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
|
|
203481
|
-
|
|
203482
|
-
|
|
203483
|
-
formattedData = data.map(function (datum) {
|
|
203484
|
-
return findValueOf(datum, restExpr);
|
|
203485
|
-
});
|
|
203486
|
-
// If resulting structure is an array of array, flatten it
|
|
203487
|
-
if (_.isArray(formattedData[0])) {
|
|
203488
|
-
formattedData = _.flatten(formattedData);
|
|
203489
|
-
}
|
|
203490
|
-
listenerFn(formattedData, oldVal);
|
|
203648
|
+
if (!isArray(newVal)) {
|
|
203649
|
+
return;
|
|
203491
203650
|
}
|
|
203651
|
+
let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
|
|
203652
|
+
// Flatten if result is array of arrays
|
|
203653
|
+
if (isArray(formattedData[0])) {
|
|
203654
|
+
formattedData = flatten(formattedData);
|
|
203655
|
+
}
|
|
203656
|
+
listenerFn(formattedData, oldVal);
|
|
203492
203657
|
};
|
|
203493
|
-
|
|
203494
|
-
|
|
203495
|
-
|
|
203496
|
-
|
|
203658
|
+
/**
|
|
203659
|
+
* Updates watch info for array expressions
|
|
203660
|
+
*/
|
|
203661
|
+
const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
|
|
203662
|
+
const regex = /\[\$i\]/g;
|
|
203497
203663
|
if (!acceptsArray) {
|
|
203498
203664
|
return {
|
|
203499
|
-
|
|
203500
|
-
|
|
203665
|
+
expr: expr.replace(regex, ARRAY_INDEX_ZERO),
|
|
203666
|
+
listener
|
|
203501
203667
|
};
|
|
203502
203668
|
}
|
|
203503
|
-
|
|
203504
|
-
|
|
203505
|
-
|
|
203506
|
-
|
|
203507
|
-
|
|
203508
|
-
|
|
203669
|
+
const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
|
|
203670
|
+
const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
|
|
203671
|
+
const restExpr = expr.substring(lastIndex + 5);
|
|
203672
|
+
const arrayConsumerFn = restExpr
|
|
203673
|
+
? arrayConsumer.bind(undefined, listener, restExpr)
|
|
203674
|
+
: listener;
|
|
203509
203675
|
return {
|
|
203510
|
-
|
|
203511
|
-
|
|
203676
|
+
expr: baseExpr,
|
|
203677
|
+
listener: arrayConsumerFn
|
|
203512
203678
|
};
|
|
203513
203679
|
};
|
|
203680
|
+
/**
|
|
203681
|
+
* Determines if an expression is static (doesn't need to be watched)
|
|
203682
|
+
*/
|
|
203683
|
+
const STATIC_EXPRESSION_NAMES = [
|
|
203684
|
+
"row.getProperty('investment')",
|
|
203685
|
+
"row.getProperty('factsheetLink')",
|
|
203686
|
+
"row.getProperty('isRebalanceEligible')"
|
|
203687
|
+
];
|
|
203688
|
+
const isStaticExpression = (expr) => {
|
|
203689
|
+
if (typeof expr !== 'string') {
|
|
203690
|
+
return false;
|
|
203691
|
+
}
|
|
203692
|
+
const trimmedExpr = expr.trim();
|
|
203693
|
+
// Expressions that always evaluate to localization strings
|
|
203694
|
+
// if (trimmedExpr.includes('appLocale')) {
|
|
203695
|
+
// return true;
|
|
203696
|
+
// }
|
|
203697
|
+
// Hard-coded static expression names
|
|
203698
|
+
if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
|
|
203699
|
+
return true;
|
|
203700
|
+
}
|
|
203701
|
+
return false;
|
|
203702
|
+
};
|
|
203703
|
+
/**
|
|
203704
|
+
* Gets the scope type from the scope object
|
|
203705
|
+
*/
|
|
203706
|
+
const getScopeType = ($scope) => {
|
|
203707
|
+
if (!$scope) {
|
|
203708
|
+
return null;
|
|
203709
|
+
}
|
|
203710
|
+
if ($scope.pageName)
|
|
203711
|
+
return 'Page';
|
|
203712
|
+
if ($scope.prefabName)
|
|
203713
|
+
return 'Prefab';
|
|
203714
|
+
if ($scope.partialName)
|
|
203715
|
+
return 'Partial';
|
|
203716
|
+
// Check for App scope
|
|
203717
|
+
if ($scope.Variables !== undefined &&
|
|
203718
|
+
$scope.Actions !== undefined &&
|
|
203719
|
+
!$scope.pageName &&
|
|
203720
|
+
!$scope.prefabName &&
|
|
203721
|
+
!$scope.partialName) {
|
|
203722
|
+
return 'App';
|
|
203723
|
+
}
|
|
203724
|
+
if ($scope.constructor?.name === 'AppRef') {
|
|
203725
|
+
return 'App';
|
|
203726
|
+
}
|
|
203727
|
+
return null;
|
|
203728
|
+
};
|
|
203729
|
+
/**
|
|
203730
|
+
* Gets scope name based on scope type
|
|
203731
|
+
*/
|
|
203732
|
+
const getScopeName = ($scope, scopeType) => {
|
|
203733
|
+
if (!scopeType || !$scope) {
|
|
203734
|
+
return null;
|
|
203735
|
+
}
|
|
203736
|
+
switch (scopeType) {
|
|
203737
|
+
case 'Prefab': return $scope.prefabName || null;
|
|
203738
|
+
case 'Partial': return $scope.partialName || null;
|
|
203739
|
+
case 'Page': return $scope.pageName || null;
|
|
203740
|
+
default: return null;
|
|
203741
|
+
}
|
|
203742
|
+
};
|
|
203743
|
+
/**
|
|
203744
|
+
* Main watch function
|
|
203745
|
+
*/
|
|
203514
203746
|
const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
|
|
203515
|
-
|
|
203516
|
-
|
|
203747
|
+
// Handle array expressions
|
|
203748
|
+
if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
|
|
203749
|
+
const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
|
|
203517
203750
|
expr = watchInfo.expr;
|
|
203518
203751
|
listener = watchInfo.listener;
|
|
203519
203752
|
}
|
|
203753
|
+
// Handle static expressions
|
|
203754
|
+
if (isStaticExpression(expr)) {
|
|
203755
|
+
try {
|
|
203756
|
+
const fn = $parseExpr(expr);
|
|
203757
|
+
const staticValue = fn($scope, $locals);
|
|
203758
|
+
listener(staticValue, FIRST_TIME_WATCH);
|
|
203759
|
+
}
|
|
203760
|
+
catch (e) {
|
|
203761
|
+
console.warn(`Error evaluating static expression '${expr}':`, e);
|
|
203762
|
+
listener(undefined, FIRST_TIME_WATCH);
|
|
203763
|
+
}
|
|
203764
|
+
return () => { }; // No-op unsubscribe
|
|
203765
|
+
}
|
|
203520
203766
|
const fn = $parseExpr();
|
|
203521
|
-
|
|
203522
|
-
|
|
203767
|
+
const scopeType = getScopeType($scope);
|
|
203768
|
+
const scopeName = getScopeName($scope, scopeType);
|
|
203769
|
+
const destroyFn = () => $unwatch(identifier);
|
|
203770
|
+
const watchInfo = {
|
|
203771
|
+
fn: fn.bind(null, $scope, $locals),
|
|
203523
203772
|
listener,
|
|
203524
203773
|
expr,
|
|
203525
203774
|
last: FIRST_TIME_WATCH,
|
|
203526
203775
|
doNotClone,
|
|
203527
|
-
isMuted
|
|
203528
|
-
|
|
203529
|
-
|
|
203776
|
+
isMuted,
|
|
203777
|
+
scopeType,
|
|
203778
|
+
scopeName,
|
|
203779
|
+
destroyFn
|
|
203780
|
+
};
|
|
203781
|
+
// Store in registry
|
|
203782
|
+
const widgetId = getWidgetId(identifier);
|
|
203783
|
+
if (widgetId) {
|
|
203784
|
+
const propertyName = getPropertyName(identifier);
|
|
203785
|
+
if (!registry.has(widgetId)) {
|
|
203786
|
+
registry.set(widgetId, {});
|
|
203787
|
+
}
|
|
203788
|
+
const widgetGroup = registry.get(widgetId);
|
|
203789
|
+
widgetGroup[propertyName] = watchInfo;
|
|
203790
|
+
}
|
|
203791
|
+
else {
|
|
203792
|
+
registry.set(identifier, watchInfo);
|
|
203793
|
+
}
|
|
203794
|
+
return destroyFn;
|
|
203530
203795
|
};
|
|
203531
|
-
|
|
203532
|
-
|
|
203533
|
-
|
|
203534
|
-
|
|
203535
|
-
|
|
203536
|
-
|
|
203537
|
-
|
|
203538
|
-
|
|
203539
|
-
|
|
203540
|
-
|
|
203541
|
-
|
|
203796
|
+
/**
|
|
203797
|
+
* Unwatches a single identifier
|
|
203798
|
+
*/
|
|
203799
|
+
const $unwatch = (identifier) => {
|
|
203800
|
+
const widgetId = getWidgetId(identifier);
|
|
203801
|
+
if (widgetId) {
|
|
203802
|
+
const propertyName = getPropertyName(identifier);
|
|
203803
|
+
const widgetGroup = registry.get(widgetId);
|
|
203804
|
+
//@ts-ignore
|
|
203805
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
203806
|
+
const watchInfo = widgetGroup[propertyName];
|
|
203807
|
+
if (watchInfo) {
|
|
203808
|
+
delete widgetGroup[propertyName];
|
|
203809
|
+
// Clean up empty widget groups
|
|
203810
|
+
if (Object.keys(widgetGroup).length === 0) {
|
|
203811
|
+
registry.delete(widgetId);
|
|
203812
|
+
}
|
|
203813
|
+
return true;
|
|
203814
|
+
}
|
|
203542
203815
|
}
|
|
203543
|
-
debouncedTriggerWatchers();
|
|
203544
203816
|
}
|
|
203545
|
-
|
|
203817
|
+
// Fallback to direct lookup
|
|
203818
|
+
if (registry.has(identifier)) {
|
|
203819
|
+
registry.delete(identifier);
|
|
203820
|
+
return true;
|
|
203821
|
+
}
|
|
203822
|
+
return false;
|
|
203823
|
+
};
|
|
203546
203824
|
const $appDigest = (() => {
|
|
203547
|
-
return (force) => {
|
|
203825
|
+
return (force = false) => {
|
|
203548
203826
|
{
|
|
203549
203827
|
return;
|
|
203550
203828
|
}
|
|
203551
203829
|
};
|
|
203552
203830
|
})();
|
|
203831
|
+
// Export registry for debugging
|
|
203832
|
+
window.watchRegistry = registry;
|
|
203553
203833
|
|
|
203554
203834
|
var ComponentType;
|
|
203555
203835
|
(function (ComponentType) {
|