@xuda.io/runtime-bundle 1.0.480 → 1.0.481

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.
@@ -3320,7 +3320,7 @@ func.datasource.create = async function (
3320
3320
  }
3321
3321
  }
3322
3322
 
3323
- var datasource_changes = {
3323
+ const datasource_changes = {
3324
3324
  [dsSessionP]: {
3325
3325
  ['datasource_main']: {
3326
3326
  stat: 'idle',
@@ -9097,15 +9097,6 @@ func.UI.update_xu_ref = function (SESSION_ID, dsSessionP, ref_field_id, $elm) {
9097
9097
  SYS_GLOBAL_OBJ_REFS[ref_field_id].props = _ds.in_parameters || {};
9098
9098
 
9099
9099
  if ($elm) {
9100
- // const get_attributes = function (retry = 0) {
9101
- // if (retry > 500) return;
9102
- // $elm?.data()?.xuPanelWrapper?.panelXuAttributes ||
9103
- // $elm?.data()?.xuData?.debug_info?.attribute_stat ||
9104
- // setTimeout(() => {
9105
- // get_attributes(retry + 1);
9106
- // }, 500);
9107
- // };
9108
-
9109
9100
  const attributes = $elm?.data()?.xuData?.xuPanelProps || $elm?.data()?.xuData?.debug_info?.attribute_stat || {};
9110
9101
  SYS_GLOBAL_OBJ_REFS[ref_field_id].attributes = attributes;
9111
9102
  SYS_GLOBAL_OBJ_REFS[ref_field_id].xu_ui_id = $elm.attr('xu-ui-id');
@@ -10825,99 +10816,157 @@ func.expression.get = async function (SESSION_ID, valP, dsSessionP, sourceP, row
10825
10816
  return new_class.get();
10826
10817
  };
10827
10818
 
10819
+ // func.expression.parse = function (strP) {
10820
+ // var extract_str = function (strP, posP) {
10821
+ // if (!posP) posP = 0;
10822
+ // var clean_split_str = function (arrP) {
10823
+ // var arr = [];
10824
+ // if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
10825
+ // for (var i = 1; i <= arrP.length; i++) {
10826
+ // arr.push(arrP[i]);
10827
+ // }
10828
+ // return arr;
10829
+ // } else return arrP;
10830
+ // };
10831
+ // var nonLettersPatt = /\W/; // non letters
10832
+ // var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
10833
+ // var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
10834
+ // var validSymbols = validSymbolsNoArray;
10835
+ // var splitTmp = strP.replace(/@/g, '^^@').split('^^');
10836
+ // var split = clean_split_str(splitTmp);
10837
+ // var obj = [];
10838
+ // if (split) {
10839
+ // for (let val of split) {
10840
+ // // run on @ segments
10841
+ // if (val) {
10842
+ // var pos = strP.indexOf(val);
10843
+ // if (val && val.substr(0, 1) === '@') {
10844
+ // var tmpStr = '';
10845
+ // var word_start_pos = undefined;
10846
+ // var word_end_pos = undefined;
10847
+ // // run on @ segment string
10848
+ // for (var i = 0; i <= val.length; i++) {
10849
+ // var key1 = i;
10850
+ // var val1 = val.substr(i, 1);
10851
+ // if (
10852
+ // val1 === '.' &&
10853
+ // !word_start_pos // find first dot
10854
+ // )
10855
+ // word_start_pos = key1;
10856
+ // if (
10857
+ // word_start_pos &&
10858
+ // key1 > word_start_pos &&
10859
+ // nonLettersPatt.test(val1) // find any sign character to mark the end of word
10860
+ // )
10861
+ // word_end_pos = key1;
10862
+ // if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
10863
+ // // find the word
10864
+ // var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
10865
+ // // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
10866
+ // // compare with internal properties
10867
+ // tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
10868
+ // // }
10869
+ // if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
10870
+ // else word_start_pos = null;
10871
+ // word_end_pos = null;
10872
+ // }
10873
+ // if (val1 === '[') validSymbols = validSymbolsWithArray;
10874
+ // if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
10875
+ // tmpStr += '^^' + val1;
10876
+ // } else tmpStr += val1;
10877
+ // }
10878
+ // // });
10879
+ // if (tmpStr.indexOf('^^') > -1) {
10880
+ // var obj1 = extract_str(tmpStr, pos);
10881
+ // obj = obj.concat(obj1);
10882
+ // } else {
10883
+ // // push clean @var
10884
+ // var fieldId = undefined;
10885
+ // if (val) {
10886
+ // fieldId = val.substr(1, val.length);
10887
+ // if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
10888
+ // if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
10889
+ // //
10890
+ // // if (val.indexOf("]") > -1)
10891
+ // // fieldId = val.substr(1, val.indexOf("]") - 1);
10892
+ // }
10893
+ // obj.push({
10894
+ // value: val,
10895
+ // fieldId: fieldId,
10896
+ // pos: pos + posP,
10897
+ // });
10898
+ // }
10899
+ // } else {
10900
+ // obj.push({
10901
+ // value: val,
10902
+ // pos: pos + posP,
10903
+ // });
10904
+ // }
10905
+ // }
10906
+ // }
10907
+ // return obj;
10908
+ // }
10909
+ // };
10910
+ // var res = extract_str(strP);
10911
+ // return res;
10912
+ // };
10913
+
10828
10914
  func.expression.parse = function (strP) {
10829
- var extract_str = function (strP, posP) {
10830
- if (!posP) posP = 0;
10831
- var clean_split_str = function (arrP) {
10832
- var arr = [];
10833
- if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
10834
- for (var i = 1; i <= arrP.length; i++) {
10835
- arr.push(arrP[i]);
10836
- }
10837
- return arr;
10838
- } else return arrP;
10839
- };
10840
- var nonLettersPatt = /\W/; // non letters
10841
- var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
10842
- var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
10843
- var validSymbols = validSymbolsNoArray;
10844
- var splitTmp = strP.replace(/@/g, '^^@').split('^^');
10845
- var split = clean_split_str(splitTmp);
10846
- var obj = [];
10847
- if (split) {
10848
- for (let val of split) {
10849
- // run on @ segments
10850
- if (val) {
10851
- var pos = strP.indexOf(val);
10852
- if (val && val.substr(0, 1) === '@') {
10853
- var tmpStr = '';
10854
- var word_start_pos = undefined;
10855
- var word_end_pos = undefined;
10856
- // run on @ segment string
10857
- for (var i = 0; i <= val.length; i++) {
10858
- var key1 = i;
10859
- var val1 = val.substr(i, 1);
10860
- if (
10861
- val1 === '.' &&
10862
- !word_start_pos // find first dot
10863
- )
10864
- word_start_pos = key1;
10865
- if (
10866
- word_start_pos &&
10867
- key1 > word_start_pos &&
10868
- nonLettersPatt.test(val1) // find any sign character to mark the end of word
10869
- )
10870
- word_end_pos = key1;
10871
- if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
10872
- // find the word
10873
- var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
10874
- // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
10875
- // compare with internal properties
10876
- tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
10877
- // }
10878
- if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
10879
- else word_start_pos = null;
10880
- word_end_pos = null;
10881
- }
10882
- if (val1 === '[') validSymbols = validSymbolsWithArray;
10883
- if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
10884
- tmpStr += '^^' + val1;
10885
- } else tmpStr += val1;
10886
- }
10887
- // });
10888
- if (tmpStr.indexOf('^^') > -1) {
10889
- var obj1 = extract_str(tmpStr, pos);
10890
- obj = obj.concat(obj1);
10891
- } else {
10892
- // push clean @var
10893
- var fieldId = undefined;
10894
- if (val) {
10895
- fieldId = val.substr(1, val.length);
10896
- if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
10897
- if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
10898
- //
10899
- // if (val.indexOf("]") > -1)
10900
- // fieldId = val.substr(1, val.indexOf("]") - 1);
10901
- }
10902
- obj.push({
10903
- value: val,
10904
- fieldId: fieldId,
10905
- pos: pos + posP,
10906
- });
10907
- }
10908
- } else {
10909
- obj.push({
10910
- value: val,
10911
- pos: pos + posP,
10912
- });
10915
+ const nonLettersPatt = /\W/;
10916
+ const validSymbolsNoArray = /[^.@\[]/;
10917
+ const validSymbolsWithArray = /[^.@"'\[\]]/;
10918
+
10919
+ function extractStr(str, startPos = 0) {
10920
+ const cleanSplit = (arr) => (arr?.length > 1 && arr[0] === '' && arr[1].includes('@') ? arr.slice(1) : arr);
10921
+
10922
+ const segments = cleanSplit(str.replace(/@/g, '^^@').split('^^'));
10923
+ const result = [];
10924
+
10925
+ for (const val of segments || []) {
10926
+ if (!val) continue;
10927
+ const pos = str.indexOf(val) + startPos;
10928
+
10929
+ if (val.startsWith('@')) {
10930
+ let tmpStr = '';
10931
+ let wordStart = null;
10932
+ let wordEnd = null;
10933
+ let validSymbols = validSymbolsNoArray;
10934
+
10935
+ for (let i = 0; i < val.length; i++) {
10936
+ const char = val[i];
10937
+
10938
+ if (char === '[') validSymbols = validSymbolsWithArray;
10939
+ if (char === '.' && wordStart === null) wordStart = i;
10940
+ else if (wordStart !== null && nonLettersPatt.test(char)) wordEnd = i;
10941
+
10942
+ if (wordStart !== null && wordEnd !== null) {
10943
+ const word = val.slice(wordStart + 1, wordEnd);
10944
+ tmpStr = tmpStr.slice(0, wordStart) + '^^' + tmpStr.slice(wordStart, wordEnd);
10945
+ wordStart = char === '.' ? wordEnd : null;
10946
+ wordEnd = null;
10913
10947
  }
10948
+
10949
+ tmpStr += nonLettersPatt.test(char) && validSymbols.test(char) && !tmpStr.includes('^^') ? '^^' + char : char;
10914
10950
  }
10951
+
10952
+ if (tmpStr.includes('^^')) {
10953
+ result.push(...extractStr(tmpStr, pos));
10954
+ } else {
10955
+ const fieldIdMatch = val.match(/^@([^.\[]+)/);
10956
+ result.push({
10957
+ value: val,
10958
+ fieldId: fieldIdMatch ? fieldIdMatch[1] : undefined,
10959
+ pos,
10960
+ });
10961
+ }
10962
+ } else {
10963
+ result.push({ value: val, pos });
10915
10964
  }
10916
- return obj;
10917
10965
  }
10918
- };
10919
- var res = extract_str(strP);
10920
- return res;
10966
+ return result;
10967
+ }
10968
+
10969
+ return extractStr(strP);
10921
10970
  };
10922
10971
 
10923
10972
  func.expression.get_property = async function (valP) {
@@ -11893,31 +11942,32 @@ func.UI.screen.refresh_screen_old = async function (SESSION_ID, fields_changed_a
11893
11942
  }
11894
11943
  };
11895
11944
 
11896
- const get_params_obj = async function (SESSION_ID, prog_id, parameters_obj_inP) {
11897
- const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
11898
- if (!_prog) {
11899
- return;
11900
- }
11945
+ // const get_params_obj = async function (SESSION_ID, prog_id, parameters_obj_inP) {
11946
+ // const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
11947
+ // if (!_prog) {
11948
+ // return;
11949
+ // }
11950
+
11951
+ // // get in parameters
11952
+ // var params_obj = {};
11953
+ // if (_prog?.properties?.progParams) {
11954
+ // for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
11955
+ // if (!val.data.dir === 'in') continue;
11956
+ // if (typeof parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
11957
+ // if (parameters_obj_inP?.[val.data.parameter].fx) {
11958
+ // let ret = await func.expression.get(SESSION_ID, parameters_obj_inP?.[val.data.parameter].fx, dsSession, 'parameters');
11959
+ // params_obj[val.data.parameter] = ret.result;
11960
+ // } else {
11961
+ // params_obj[val.data.parameter] = parameters_obj_inP?.[val.data.parameter].value;
11962
+ // }
11963
+ // continue;
11964
+ // }
11965
+ // console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
11966
+ // }
11967
+ // }
11968
+ // return params_obj;
11969
+ // };
11901
11970
 
11902
- // get in parameters
11903
- var params_obj = {};
11904
- if (_prog?.properties?.progParams) {
11905
- for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
11906
- if (!val.data.dir === 'in') continue;
11907
- if (typeof parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
11908
- if (parameters_obj_inP?.[val.data.parameter].fx) {
11909
- let ret = await func.expression.get(SESSION_ID, parameters_obj_inP?.[val.data.parameter].fx, dsSession, 'parameters');
11910
- params_obj[val.data.parameter] = ret.result;
11911
- } else {
11912
- params_obj[val.data.parameter] = parameters_obj_inP?.[val.data.parameter].value;
11913
- }
11914
- continue;
11915
- }
11916
- console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
11917
- }
11918
- }
11919
- return params_obj;
11920
- };
11921
11971
  const get_params_obj_new = async function (SESSION_ID, prog_id, nodeP, dsSession) {
11922
11972
  const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
11923
11973
  if (!_prog) return;
@@ -3321,7 +3321,7 @@ func.datasource.create = async function (
3321
3321
  }
3322
3322
  }
3323
3323
 
3324
- var datasource_changes = {
3324
+ const datasource_changes = {
3325
3325
  [dsSessionP]: {
3326
3326
  ['datasource_main']: {
3327
3327
  stat: 'idle',
@@ -9098,15 +9098,6 @@ func.UI.update_xu_ref = function (SESSION_ID, dsSessionP, ref_field_id, $elm) {
9098
9098
  SYS_GLOBAL_OBJ_REFS[ref_field_id].props = _ds.in_parameters || {};
9099
9099
 
9100
9100
  if ($elm) {
9101
- // const get_attributes = function (retry = 0) {
9102
- // if (retry > 500) return;
9103
- // $elm?.data()?.xuPanelWrapper?.panelXuAttributes ||
9104
- // $elm?.data()?.xuData?.debug_info?.attribute_stat ||
9105
- // setTimeout(() => {
9106
- // get_attributes(retry + 1);
9107
- // }, 500);
9108
- // };
9109
-
9110
9101
  const attributes = $elm?.data()?.xuData?.xuPanelProps || $elm?.data()?.xuData?.debug_info?.attribute_stat || {};
9111
9102
  SYS_GLOBAL_OBJ_REFS[ref_field_id].attributes = attributes;
9112
9103
  SYS_GLOBAL_OBJ_REFS[ref_field_id].xu_ui_id = $elm.attr('xu-ui-id');
@@ -9966,31 +9957,32 @@ func.UI.screen.refresh_screen_old = async function (SESSION_ID, fields_changed_a
9966
9957
  }
9967
9958
  };
9968
9959
 
9969
- const get_params_obj = async function (SESSION_ID, prog_id, parameters_obj_inP) {
9970
- const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
9971
- if (!_prog) {
9972
- return;
9973
- }
9960
+ // const get_params_obj = async function (SESSION_ID, prog_id, parameters_obj_inP) {
9961
+ // const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
9962
+ // if (!_prog) {
9963
+ // return;
9964
+ // }
9965
+
9966
+ // // get in parameters
9967
+ // var params_obj = {};
9968
+ // if (_prog?.properties?.progParams) {
9969
+ // for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
9970
+ // if (!val.data.dir === 'in') continue;
9971
+ // if (typeof parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
9972
+ // if (parameters_obj_inP?.[val.data.parameter].fx) {
9973
+ // let ret = await func.expression.get(SESSION_ID, parameters_obj_inP?.[val.data.parameter].fx, dsSession, 'parameters');
9974
+ // params_obj[val.data.parameter] = ret.result;
9975
+ // } else {
9976
+ // params_obj[val.data.parameter] = parameters_obj_inP?.[val.data.parameter].value;
9977
+ // }
9978
+ // continue;
9979
+ // }
9980
+ // console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
9981
+ // }
9982
+ // }
9983
+ // return params_obj;
9984
+ // };
9974
9985
 
9975
- // get in parameters
9976
- var params_obj = {};
9977
- if (_prog?.properties?.progParams) {
9978
- for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
9979
- if (!val.data.dir === 'in') continue;
9980
- if (typeof parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
9981
- if (parameters_obj_inP?.[val.data.parameter].fx) {
9982
- let ret = await func.expression.get(SESSION_ID, parameters_obj_inP?.[val.data.parameter].fx, dsSession, 'parameters');
9983
- params_obj[val.data.parameter] = ret.result;
9984
- } else {
9985
- params_obj[val.data.parameter] = parameters_obj_inP?.[val.data.parameter].value;
9986
- }
9987
- continue;
9988
- }
9989
- console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
9990
- }
9991
- }
9992
- return params_obj;
9993
- };
9994
9986
  const get_params_obj_new = async function (SESSION_ID, prog_id, nodeP, dsSession) {
9995
9987
  const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
9996
9988
  if (!_prog) return;
@@ -14621,99 +14613,157 @@ func.expression.get = async function (SESSION_ID, valP, dsSessionP, sourceP, row
14621
14613
  return new_class.get();
14622
14614
  };
14623
14615
 
14616
+ // func.expression.parse = function (strP) {
14617
+ // var extract_str = function (strP, posP) {
14618
+ // if (!posP) posP = 0;
14619
+ // var clean_split_str = function (arrP) {
14620
+ // var arr = [];
14621
+ // if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
14622
+ // for (var i = 1; i <= arrP.length; i++) {
14623
+ // arr.push(arrP[i]);
14624
+ // }
14625
+ // return arr;
14626
+ // } else return arrP;
14627
+ // };
14628
+ // var nonLettersPatt = /\W/; // non letters
14629
+ // var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
14630
+ // var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
14631
+ // var validSymbols = validSymbolsNoArray;
14632
+ // var splitTmp = strP.replace(/@/g, '^^@').split('^^');
14633
+ // var split = clean_split_str(splitTmp);
14634
+ // var obj = [];
14635
+ // if (split) {
14636
+ // for (let val of split) {
14637
+ // // run on @ segments
14638
+ // if (val) {
14639
+ // var pos = strP.indexOf(val);
14640
+ // if (val && val.substr(0, 1) === '@') {
14641
+ // var tmpStr = '';
14642
+ // var word_start_pos = undefined;
14643
+ // var word_end_pos = undefined;
14644
+ // // run on @ segment string
14645
+ // for (var i = 0; i <= val.length; i++) {
14646
+ // var key1 = i;
14647
+ // var val1 = val.substr(i, 1);
14648
+ // if (
14649
+ // val1 === '.' &&
14650
+ // !word_start_pos // find first dot
14651
+ // )
14652
+ // word_start_pos = key1;
14653
+ // if (
14654
+ // word_start_pos &&
14655
+ // key1 > word_start_pos &&
14656
+ // nonLettersPatt.test(val1) // find any sign character to mark the end of word
14657
+ // )
14658
+ // word_end_pos = key1;
14659
+ // if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
14660
+ // // find the word
14661
+ // var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
14662
+ // // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
14663
+ // // compare with internal properties
14664
+ // tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
14665
+ // // }
14666
+ // if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
14667
+ // else word_start_pos = null;
14668
+ // word_end_pos = null;
14669
+ // }
14670
+ // if (val1 === '[') validSymbols = validSymbolsWithArray;
14671
+ // if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
14672
+ // tmpStr += '^^' + val1;
14673
+ // } else tmpStr += val1;
14674
+ // }
14675
+ // // });
14676
+ // if (tmpStr.indexOf('^^') > -1) {
14677
+ // var obj1 = extract_str(tmpStr, pos);
14678
+ // obj = obj.concat(obj1);
14679
+ // } else {
14680
+ // // push clean @var
14681
+ // var fieldId = undefined;
14682
+ // if (val) {
14683
+ // fieldId = val.substr(1, val.length);
14684
+ // if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
14685
+ // if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
14686
+ // //
14687
+ // // if (val.indexOf("]") > -1)
14688
+ // // fieldId = val.substr(1, val.indexOf("]") - 1);
14689
+ // }
14690
+ // obj.push({
14691
+ // value: val,
14692
+ // fieldId: fieldId,
14693
+ // pos: pos + posP,
14694
+ // });
14695
+ // }
14696
+ // } else {
14697
+ // obj.push({
14698
+ // value: val,
14699
+ // pos: pos + posP,
14700
+ // });
14701
+ // }
14702
+ // }
14703
+ // }
14704
+ // return obj;
14705
+ // }
14706
+ // };
14707
+ // var res = extract_str(strP);
14708
+ // return res;
14709
+ // };
14710
+
14624
14711
  func.expression.parse = function (strP) {
14625
- var extract_str = function (strP, posP) {
14626
- if (!posP) posP = 0;
14627
- var clean_split_str = function (arrP) {
14628
- var arr = [];
14629
- if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
14630
- for (var i = 1; i <= arrP.length; i++) {
14631
- arr.push(arrP[i]);
14632
- }
14633
- return arr;
14634
- } else return arrP;
14635
- };
14636
- var nonLettersPatt = /\W/; // non letters
14637
- var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
14638
- var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
14639
- var validSymbols = validSymbolsNoArray;
14640
- var splitTmp = strP.replace(/@/g, '^^@').split('^^');
14641
- var split = clean_split_str(splitTmp);
14642
- var obj = [];
14643
- if (split) {
14644
- for (let val of split) {
14645
- // run on @ segments
14646
- if (val) {
14647
- var pos = strP.indexOf(val);
14648
- if (val && val.substr(0, 1) === '@') {
14649
- var tmpStr = '';
14650
- var word_start_pos = undefined;
14651
- var word_end_pos = undefined;
14652
- // run on @ segment string
14653
- for (var i = 0; i <= val.length; i++) {
14654
- var key1 = i;
14655
- var val1 = val.substr(i, 1);
14656
- if (
14657
- val1 === '.' &&
14658
- !word_start_pos // find first dot
14659
- )
14660
- word_start_pos = key1;
14661
- if (
14662
- word_start_pos &&
14663
- key1 > word_start_pos &&
14664
- nonLettersPatt.test(val1) // find any sign character to mark the end of word
14665
- )
14666
- word_end_pos = key1;
14667
- if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
14668
- // find the word
14669
- var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
14670
- // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
14671
- // compare with internal properties
14672
- tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
14673
- // }
14674
- if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
14675
- else word_start_pos = null;
14676
- word_end_pos = null;
14677
- }
14678
- if (val1 === '[') validSymbols = validSymbolsWithArray;
14679
- if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
14680
- tmpStr += '^^' + val1;
14681
- } else tmpStr += val1;
14682
- }
14683
- // });
14684
- if (tmpStr.indexOf('^^') > -1) {
14685
- var obj1 = extract_str(tmpStr, pos);
14686
- obj = obj.concat(obj1);
14687
- } else {
14688
- // push clean @var
14689
- var fieldId = undefined;
14690
- if (val) {
14691
- fieldId = val.substr(1, val.length);
14692
- if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
14693
- if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
14694
- //
14695
- // if (val.indexOf("]") > -1)
14696
- // fieldId = val.substr(1, val.indexOf("]") - 1);
14697
- }
14698
- obj.push({
14699
- value: val,
14700
- fieldId: fieldId,
14701
- pos: pos + posP,
14702
- });
14703
- }
14704
- } else {
14705
- obj.push({
14706
- value: val,
14707
- pos: pos + posP,
14708
- });
14712
+ const nonLettersPatt = /\W/;
14713
+ const validSymbolsNoArray = /[^.@\[]/;
14714
+ const validSymbolsWithArray = /[^.@"'\[\]]/;
14715
+
14716
+ function extractStr(str, startPos = 0) {
14717
+ const cleanSplit = (arr) => (arr?.length > 1 && arr[0] === '' && arr[1].includes('@') ? arr.slice(1) : arr);
14718
+
14719
+ const segments = cleanSplit(str.replace(/@/g, '^^@').split('^^'));
14720
+ const result = [];
14721
+
14722
+ for (const val of segments || []) {
14723
+ if (!val) continue;
14724
+ const pos = str.indexOf(val) + startPos;
14725
+
14726
+ if (val.startsWith('@')) {
14727
+ let tmpStr = '';
14728
+ let wordStart = null;
14729
+ let wordEnd = null;
14730
+ let validSymbols = validSymbolsNoArray;
14731
+
14732
+ for (let i = 0; i < val.length; i++) {
14733
+ const char = val[i];
14734
+
14735
+ if (char === '[') validSymbols = validSymbolsWithArray;
14736
+ if (char === '.' && wordStart === null) wordStart = i;
14737
+ else if (wordStart !== null && nonLettersPatt.test(char)) wordEnd = i;
14738
+
14739
+ if (wordStart !== null && wordEnd !== null) {
14740
+ const word = val.slice(wordStart + 1, wordEnd);
14741
+ tmpStr = tmpStr.slice(0, wordStart) + '^^' + tmpStr.slice(wordStart, wordEnd);
14742
+ wordStart = char === '.' ? wordEnd : null;
14743
+ wordEnd = null;
14709
14744
  }
14745
+
14746
+ tmpStr += nonLettersPatt.test(char) && validSymbols.test(char) && !tmpStr.includes('^^') ? '^^' + char : char;
14747
+ }
14748
+
14749
+ if (tmpStr.includes('^^')) {
14750
+ result.push(...extractStr(tmpStr, pos));
14751
+ } else {
14752
+ const fieldIdMatch = val.match(/^@([^.\[]+)/);
14753
+ result.push({
14754
+ value: val,
14755
+ fieldId: fieldIdMatch ? fieldIdMatch[1] : undefined,
14756
+ pos,
14757
+ });
14710
14758
  }
14759
+ } else {
14760
+ result.push({ value: val, pos });
14711
14761
  }
14712
- return obj;
14713
14762
  }
14714
- };
14715
- var res = extract_str(strP);
14716
- return res;
14763
+ return result;
14764
+ }
14765
+
14766
+ return extractStr(strP);
14717
14767
  };
14718
14768
 
14719
14769
  func.expression.get_property = async function (valP) {