@xuda.io/runtime-bundle 1.0.779 → 1.0.780
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/js/xuda-runtime-bundle.js +394 -392
- package/js/xuda-runtime-bundle.min.js +3 -3
- package/js/xuda-runtime-slim.js +396 -394
- package/js/xuda-runtime-slim.min.es.js +396 -394
- package/js/xuda-runtime-slim.min.js +3 -3
- package/js/xuda-server-bundle.min.mjs +3 -3
- package/js/xuda-server-bundle.mjs +400 -398
- package/js/xuda-worker-bundle.js +400 -398
- package/js/xuda-worker-bundle.min.js +3 -3
- package/js/xuda_common-bundle.js +13 -13
- package/js/xuda_common-bundle.min.js +1 -1
- package/package.json +1 -1
package/js/xuda-runtime-slim.js
CHANGED
|
@@ -2541,19 +2541,19 @@ func.api.call_javascript = async function (prog_id, params, evaluate) {
|
|
|
2541
2541
|
return await api_utils.call_javascript(prog_id, params, evaluate);
|
|
2542
2542
|
};
|
|
2543
2543
|
|
|
2544
|
-
func.api.call_javascript = async function (prog_id, params, evaluate) {
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2544
|
+
// func.api.call_javascript = async function (prog_id, params, evaluate) {
|
|
2545
|
+
// const SESSION_ID = Object.keys(SESSION_OBJ)[0];
|
|
2546
|
+
// const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
|
|
2547
|
+
// func,
|
|
2548
|
+
// glb,
|
|
2549
|
+
// SESSION_OBJ,
|
|
2550
|
+
// SESSION_ID,
|
|
2551
|
+
// APP_OBJ,
|
|
2552
|
+
// dsSession: func.utils.get_last_datasource_no(SESSION_ID),
|
|
2553
|
+
// });
|
|
2554
2554
|
|
|
2555
|
-
|
|
2556
|
-
};
|
|
2555
|
+
// return await api_utils.call_javascript(prog_id, params, evaluate);
|
|
2556
|
+
// };
|
|
2557
2557
|
|
|
2558
2558
|
glb.rpi_request_queue_num = 0;
|
|
2559
2559
|
func.common.perform_rpi_request = async function (SESSION_ID, serviceP, opt = {}, data) {
|
|
@@ -9676,6 +9676,7 @@ func.events.execute = async function (
|
|
|
9676
9676
|
null,
|
|
9677
9677
|
null,
|
|
9678
9678
|
evt,
|
|
9679
|
+
$(containerP),
|
|
9679
9680
|
);
|
|
9680
9681
|
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
|
|
9681
9682
|
|
|
@@ -9695,6 +9696,7 @@ func.events.execute = async function (
|
|
|
9695
9696
|
null,
|
|
9696
9697
|
null,
|
|
9697
9698
|
evt,
|
|
9699
|
+
$(containerP),
|
|
9698
9700
|
);
|
|
9699
9701
|
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
|
|
9700
9702
|
|
|
@@ -10610,271 +10612,271 @@ func.expression.get = async function (SESSION_ID, valP, dsSessionP, sourceP, row
|
|
|
10610
10612
|
return new_class.get();
|
|
10611
10613
|
};
|
|
10612
10614
|
|
|
10613
|
-
func.expression.get_bad1 = async function (SESSION_ID, valP, dsSessionP, sourceP, rowIdP, sourceActionP, secondPassP, calling_fieldIdP, fieldsP = {}, debug_infoP, iterate_info, js_script_callback, jobNo, api_output_type) {
|
|
10614
|
-
|
|
10615
|
-
|
|
10616
|
-
|
|
10617
|
-
|
|
10618
|
-
|
|
10619
|
-
|
|
10620
|
-
|
|
10615
|
+
// func.expression.get_bad1 = async function (SESSION_ID, valP, dsSessionP, sourceP, rowIdP, sourceActionP, secondPassP, calling_fieldIdP, fieldsP = {}, debug_infoP, iterate_info, js_script_callback, jobNo, api_output_type) {
|
|
10616
|
+
// const evalJson = (text) => eval(`(${text})`);
|
|
10617
|
+
// const replaceQuotes = (str) => {
|
|
10618
|
+
// for (const [key, val] of Object.entries(fields)) {
|
|
10619
|
+
// if (typeof val === 'string') str = str.replace(`"${val}"`, val.replace(/"/g, ''));
|
|
10620
|
+
// }
|
|
10621
|
+
// return str;
|
|
10622
|
+
// };
|
|
10621
10623
|
|
|
10622
|
-
|
|
10623
|
-
|
|
10624
|
+
// let ret, error, warning, var_error_found;
|
|
10625
|
+
// const fields = { ...fieldsP };
|
|
10624
10626
|
|
|
10625
|
-
|
|
10626
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
10627
|
+
// // Initial value processing
|
|
10628
|
+
// if (valP === null || typeof valP === 'undefined') ret = '';
|
|
10629
|
+
// else if (typeof valP === 'boolean') ret = valP ? 'Y' : 'N';
|
|
10630
|
+
// else ret = valP.toString();
|
|
10629
10631
|
|
|
10630
|
-
|
|
10631
|
-
|
|
10632
|
+
// ret = ret.replace(/\&/g, '&');
|
|
10633
|
+
// ret = func.utils.replace_studio_drive_url(SESSION_ID, ret);
|
|
10632
10634
|
|
|
10633
|
-
|
|
10634
|
-
|
|
10635
|
-
|
|
10636
|
-
|
|
10637
|
-
|
|
10638
|
-
|
|
10639
|
-
|
|
10640
|
-
|
|
10641
|
-
|
|
10642
|
-
|
|
10643
|
-
|
|
10644
|
-
|
|
10645
|
-
|
|
10646
|
-
|
|
10647
|
-
|
|
10648
|
-
|
|
10649
|
-
|
|
10650
|
-
|
|
10651
|
-
|
|
10652
|
-
|
|
10653
|
-
|
|
10654
|
-
|
|
10655
|
-
|
|
10635
|
+
// // End results helper
|
|
10636
|
+
// const endResults = () => {
|
|
10637
|
+
// if (['update', 'javascript'].includes(sourceP) && typeof ret === 'string') {
|
|
10638
|
+
// ret = replaceQuotes(ret);
|
|
10639
|
+
// }
|
|
10640
|
+
// if ((error || warning) && SESSION_OBJ[SESSION_ID]?.DS_GLB[dsSessionP]) {
|
|
10641
|
+
// func.utils.debug.log(SESSION_ID, SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].nodeId, {
|
|
10642
|
+
// module: 'expression',
|
|
10643
|
+
// action: sourceP,
|
|
10644
|
+
// source: calling_fieldIdP,
|
|
10645
|
+
// prop: ret,
|
|
10646
|
+
// details: ret,
|
|
10647
|
+
// result: ret,
|
|
10648
|
+
// error,
|
|
10649
|
+
// warning,
|
|
10650
|
+
// fields: null,
|
|
10651
|
+
// type: 'exp',
|
|
10652
|
+
// prog_id: SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].prog_id,
|
|
10653
|
+
// debug_info: debug_infoP,
|
|
10654
|
+
// });
|
|
10655
|
+
// }
|
|
10656
|
+
// return { result: ret, fields, error, warning, req: valP, var_error_found };
|
|
10657
|
+
// };
|
|
10656
10658
|
|
|
10657
|
-
|
|
10658
|
-
|
|
10659
|
-
|
|
10660
|
-
|
|
10661
|
-
|
|
10662
|
-
|
|
10663
|
-
|
|
10664
|
-
|
|
10665
|
-
|
|
10666
|
-
|
|
10667
|
-
|
|
10668
|
-
|
|
10669
|
-
|
|
10670
|
-
|
|
10671
|
-
|
|
10672
|
-
|
|
10659
|
+
// // Handle non-variable cases
|
|
10660
|
+
// const handleNonVariable = async () => {
|
|
10661
|
+
// try {
|
|
10662
|
+
// if (sourceP !== 'arguments') {
|
|
10663
|
+
// if (ret.startsWith('_DATE_')) ret = ret.slice(6);
|
|
10664
|
+
// else if (/^\d{4}-\d{2}-\d{2}$/.test(ret) || ret === 'self') return endResults();
|
|
10665
|
+
// else ret = await func.expression.secure_eval(SESSION_ID, sourceP, ret, jobNo, dsSessionP, js_script_callback);
|
|
10666
|
+
// } else {
|
|
10667
|
+
// ret = ret.replace(/_NULL/gi, '');
|
|
10668
|
+
// }
|
|
10669
|
+
// return endResults();
|
|
10670
|
+
// } catch (err) {
|
|
10671
|
+
// error = err.message;
|
|
10672
|
+
// return endResults();
|
|
10673
|
+
// }
|
|
10674
|
+
// };
|
|
10673
10675
|
|
|
10674
|
-
|
|
10675
|
-
|
|
10676
|
-
|
|
10677
|
-
|
|
10678
|
-
|
|
10676
|
+
// // Early return for simple cases
|
|
10677
|
+
// if (!func.expression.validate_variables(valP)) return await handleNonVariable();
|
|
10678
|
+
// if (glb.emailRegex.test(await func.expression.secure_eval(SESSION_ID, sourceP, valP, jobNo, dsSessionP, js_script_callback))) {
|
|
10679
|
+
// return await handleNonVariable();
|
|
10680
|
+
// }
|
|
10679
10681
|
|
|
10680
|
-
|
|
10681
|
-
|
|
10682
|
-
|
|
10683
|
-
|
|
10684
|
-
|
|
10682
|
+
// // Parse and process variables
|
|
10683
|
+
// const split = func.expression.parse(ret) || [];
|
|
10684
|
+
// const var_Arr = await Promise.all(
|
|
10685
|
+
// split.map(async (val, key) => {
|
|
10686
|
+
// const result = { value: val.value, fieldId: val.fieldId };
|
|
10685
10687
|
|
|
10686
|
-
|
|
10688
|
+
// if (!val.fieldId) return result;
|
|
10687
10689
|
|
|
10688
|
-
|
|
10689
|
-
|
|
10690
|
-
|
|
10691
|
-
|
|
10690
|
+
// // Handle _THIS substitution
|
|
10691
|
+
// if (val.fieldId.startsWith('_THIS') && calling_fieldIdP) {
|
|
10692
|
+
// result.fieldId = val.fieldId.length === 5 ? calling_fieldIdP : calling_fieldIdP + val.fieldId.slice(5);
|
|
10693
|
+
// }
|
|
10692
10694
|
|
|
10693
|
-
|
|
10694
|
-
|
|
10695
|
-
|
|
10696
|
-
|
|
10695
|
+
// // Fetch value from datasource
|
|
10696
|
+
// const { ret: fetchedValue, fieldIdP } = await func.datasource.get_value(SESSION_ID, result.fieldId, dsSessionP, rowIdP);
|
|
10697
|
+
// result.value = fetchedValue?.value ?? (sourceP === 'exp' ? fetchedValue?.value : '""');
|
|
10698
|
+
// result.type = fetchedValue?.type;
|
|
10697
10699
|
|
|
10698
|
-
|
|
10699
|
-
|
|
10700
|
-
|
|
10701
|
-
|
|
10702
|
-
|
|
10700
|
+
// // Handle iteration
|
|
10701
|
+
// if (iterate_info) {
|
|
10702
|
+
// if (iterate_info.iterator_key === fieldIdP) result.value = iterate_info._key;
|
|
10703
|
+
// if (iterate_info.iterator_val === fieldIdP) result.value = iterate_info._val;
|
|
10704
|
+
// }
|
|
10703
10705
|
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
|
|
10706
|
+
// // Process nested properties
|
|
10707
|
+
// if (val.value.includes('[') || val.value.includes('.')) {
|
|
10708
|
+
// const { property1, property2 } = await func.expression.get_property(val.value);
|
|
10709
|
+
// const data = fetchedValue?.type === 'object' ? fetchedValue.value : fetchedValue?.prop;
|
|
10708
10710
|
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
|
|
10712
|
-
|
|
10713
|
-
|
|
10714
|
-
|
|
10715
|
-
|
|
10716
|
-
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
|
|
10711
|
+
// if (key > 0 && val.value.includes(']') && !val.value.includes('[') && split[key - 1].value) {
|
|
10712
|
+
// const prevData = split[key - 1].value;
|
|
10713
|
+
// result.value = prevData[fieldIdP];
|
|
10714
|
+
// if (val.value.includes('.') && prevData[fieldIdP]) {
|
|
10715
|
+
// result.value = prevData[fieldIdP][property2] ?? '';
|
|
10716
|
+
// }
|
|
10717
|
+
// } else if (data) {
|
|
10718
|
+
// if (property1) result.value = data[property1] ?? '';
|
|
10719
|
+
// if (property2) result.value = (property1 ? data[property1]?.[property2] : data[property2]) ?? '';
|
|
10720
|
+
// }
|
|
10721
|
+
// }
|
|
10720
10722
|
|
|
10721
|
-
|
|
10722
|
-
|
|
10723
|
-
|
|
10724
|
-
|
|
10723
|
+
// fields[fieldIdP] = result.value;
|
|
10724
|
+
// return result;
|
|
10725
|
+
// }),
|
|
10726
|
+
// );
|
|
10725
10727
|
|
|
10726
|
-
|
|
10727
|
-
|
|
10728
|
-
|
|
10729
|
-
|
|
10730
|
-
|
|
10731
|
-
|
|
10732
|
-
|
|
10733
|
-
|
|
10734
|
-
let value = val.value;
|
|
10735
|
-
if (var_Arr.length > 1) {
|
|
10736
|
-
if (!['DbQuery', 'alert', 'exp', 'api_rendered_output'].includes(sourceP) && ['string', 'date'].includes(val.type)) {
|
|
10737
|
-
value = `\`${value}\``;
|
|
10738
|
-
} else if (sourceP === 'api_rendered_output' && api_output_type === 'json' && ['string', 'date'].includes(val.type)) {
|
|
10739
|
-
value = `"${value}"`;
|
|
10740
|
-
}
|
|
10741
|
-
}
|
|
10728
|
+
// // Final evaluation
|
|
10729
|
+
// try {
|
|
10730
|
+
// const res = var_Arr.map((val, key) => {
|
|
10731
|
+
// if (sourceP === 'UI Property EXP' || sourceP === 'UI Attr EXP') {
|
|
10732
|
+
// const { changed, value } = func.utils.get_drive_url(SESSION_ID, val.value, sourceP === 'UI Attr EXP' && var_Arr.length > 1);
|
|
10733
|
+
// if (changed) return value;
|
|
10734
|
+
// }
|
|
10742
10735
|
|
|
10743
|
-
|
|
10744
|
-
|
|
10745
|
-
|
|
10746
|
-
|
|
10747
|
-
|
|
10748
|
-
|
|
10736
|
+
// let value = val.value;
|
|
10737
|
+
// if (var_Arr.length > 1) {
|
|
10738
|
+
// if (!['DbQuery', 'alert', 'exp', 'api_rendered_output'].includes(sourceP) && ['string', 'date'].includes(val.type)) {
|
|
10739
|
+
// value = `\`${value}\``;
|
|
10740
|
+
// } else if (sourceP === 'api_rendered_output' && api_output_type === 'json' && ['string', 'date'].includes(val.type)) {
|
|
10741
|
+
// value = `"${value}"`;
|
|
10742
|
+
// }
|
|
10743
|
+
// }
|
|
10749
10744
|
|
|
10750
|
-
|
|
10751
|
-
|
|
10752
|
-
|
|
10745
|
+
// if (val.fieldId && typeof value === 'string') {
|
|
10746
|
+
// if (['query', 'condition', 'range', 'sort', 'locate'].includes(sourceP)) value = value.replace(/↵|\r\n|\n|\r/g, '');
|
|
10747
|
+
// if (['init', 'update', 'virtual'].includes(sourceP)) value = value.replace(/↵|\r\n|\n|\r/g, '\\n');
|
|
10748
|
+
// if (typeof IS_PROCESS_SERVER !== 'undefined') value = value.replace(/↵|\r\n|\n|\r/g, '<br>');
|
|
10749
|
+
// fields[val.fieldId] = value;
|
|
10750
|
+
// }
|
|
10753
10751
|
|
|
10754
|
-
|
|
10755
|
-
|
|
10756
|
-
|
|
10757
|
-
return '0';
|
|
10758
|
-
}
|
|
10759
|
-
return value;
|
|
10760
|
-
});
|
|
10752
|
+
// if (typeof value === 'object' && var_Arr.length > 1) {
|
|
10753
|
+
// value = Array.isArray(value) || var_Arr[key + 1]?.value?.includes('.') ? JSON.stringify(value) : `(${JSON.stringify(value)})`;
|
|
10754
|
+
// }
|
|
10761
10755
|
|
|
10762
|
-
|
|
10763
|
-
|
|
10764
|
-
|
|
10765
|
-
|
|
10766
|
-
|
|
10767
|
-
|
|
10768
|
-
|
|
10769
|
-
} else if (sourceP === 'DbQuery') {
|
|
10770
|
-
ret = JSON.stringify(evalJson(ret));
|
|
10771
|
-
}
|
|
10756
|
+
// if (!val.type === 'exp' && sourceP !== 'exp' && typeof value === 'string' && value.startsWith('@')) {
|
|
10757
|
+
// warning = `Error encoding ${value}`;
|
|
10758
|
+
// var_error_found = true;
|
|
10759
|
+
// return '0';
|
|
10760
|
+
// }
|
|
10761
|
+
// return value;
|
|
10762
|
+
// });
|
|
10772
10763
|
|
|
10773
|
-
|
|
10774
|
-
|
|
10775
|
-
|
|
10776
|
-
|
|
10777
|
-
|
|
10778
|
-
|
|
10779
|
-
|
|
10764
|
+
// ret = res.length === 1 ? res[0] : res.join('');
|
|
10765
|
+
// if (var_Arr.some((v) => v.type === 'exp') && sourceP !== 'exp' && !secondPassP) {
|
|
10766
|
+
// const exp = await func.expression.get(SESSION_ID, ret, dsSessionP, sourceP, rowIdP, sourceActionP, true, calling_fieldIdP, fields, debug_infoP);
|
|
10767
|
+
// ret = exp.res?.[0] ?? exp.result;
|
|
10768
|
+
// Object.assign(fields, exp.fields);
|
|
10769
|
+
// } else if (!secondPassP && !['arguments', 'api_rendered_output', 'DbQuery'].includes(sourceP)) {
|
|
10770
|
+
// ret = await func.expression.secure_eval(SESSION_ID, sourceP, ret, jobNo, dsSessionP, js_script_callback);
|
|
10771
|
+
// } else if (sourceP === 'DbQuery') {
|
|
10772
|
+
// ret = JSON.stringify(evalJson(ret));
|
|
10773
|
+
// }
|
|
10780
10774
|
|
|
10781
|
-
|
|
10782
|
-
|
|
10775
|
+
// if (typeof ret === 'string' && ret.startsWith('@')) {
|
|
10776
|
+
// error = 'Error encoding @ var';
|
|
10777
|
+
// var_error_found = true;
|
|
10778
|
+
// }
|
|
10779
|
+
// } catch (err) {
|
|
10780
|
+
// error = err.message;
|
|
10781
|
+
// }
|
|
10783
10782
|
|
|
10784
|
-
|
|
10785
|
-
|
|
10786
|
-
|
|
10787
|
-
|
|
10788
|
-
|
|
10789
|
-
|
|
10790
|
-
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
|
|
10796
|
-
|
|
10797
|
-
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
|
|
10802
|
-
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
10811
|
-
|
|
10812
|
-
|
|
10813
|
-
|
|
10814
|
-
|
|
10815
|
-
|
|
10816
|
-
|
|
10817
|
-
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
|
|
10821
|
-
|
|
10822
|
-
|
|
10823
|
-
|
|
10824
|
-
|
|
10825
|
-
|
|
10826
|
-
|
|
10827
|
-
|
|
10828
|
-
|
|
10829
|
-
|
|
10830
|
-
|
|
10831
|
-
|
|
10832
|
-
|
|
10833
|
-
|
|
10834
|
-
|
|
10835
|
-
|
|
10836
|
-
|
|
10837
|
-
|
|
10838
|
-
|
|
10839
|
-
|
|
10840
|
-
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
|
|
10844
|
-
|
|
10845
|
-
|
|
10846
|
-
|
|
10847
|
-
|
|
10848
|
-
|
|
10849
|
-
|
|
10850
|
-
|
|
10851
|
-
|
|
10852
|
-
|
|
10853
|
-
|
|
10854
|
-
|
|
10855
|
-
|
|
10856
|
-
|
|
10857
|
-
|
|
10858
|
-
|
|
10859
|
-
|
|
10860
|
-
|
|
10861
|
-
|
|
10862
|
-
|
|
10863
|
-
|
|
10864
|
-
|
|
10865
|
-
|
|
10866
|
-
|
|
10867
|
-
|
|
10868
|
-
|
|
10869
|
-
|
|
10870
|
-
|
|
10871
|
-
|
|
10872
|
-
|
|
10873
|
-
|
|
10874
|
-
|
|
10875
|
-
|
|
10876
|
-
|
|
10877
|
-
};
|
|
10783
|
+
// return endResults();
|
|
10784
|
+
// };
|
|
10785
|
+
|
|
10786
|
+
// func.expression.parse_org = function (strP) {
|
|
10787
|
+
// var extract_str = function (strP, posP) {
|
|
10788
|
+
// if (!posP) posP = 0;
|
|
10789
|
+
// var clean_split_str = function (arrP) {
|
|
10790
|
+
// var arr = [];
|
|
10791
|
+
// if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
|
|
10792
|
+
// for (var i = 1; i <= arrP.length; i++) {
|
|
10793
|
+
// arr.push(arrP[i]);
|
|
10794
|
+
// }
|
|
10795
|
+
// return arr;
|
|
10796
|
+
// } else return arrP;
|
|
10797
|
+
// };
|
|
10798
|
+
// var nonLettersPatt = /\W/; // non letters
|
|
10799
|
+
// var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
|
|
10800
|
+
// var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
|
|
10801
|
+
// var validSymbols = validSymbolsNoArray;
|
|
10802
|
+
// var splitTmp = strP.replace(/@/g, '^^@').split('^^');
|
|
10803
|
+
// var split = clean_split_str(splitTmp);
|
|
10804
|
+
// var obj = [];
|
|
10805
|
+
// if (split) {
|
|
10806
|
+
// for (let val of split) {
|
|
10807
|
+
// // run on @ segments
|
|
10808
|
+
// if (val) {
|
|
10809
|
+
// var pos = strP.indexOf(val);
|
|
10810
|
+
// if (val && val.substr(0, 1) === '@') {
|
|
10811
|
+
// var tmpStr = '';
|
|
10812
|
+
// var word_start_pos = undefined;
|
|
10813
|
+
// var word_end_pos = undefined;
|
|
10814
|
+
// // run on @ segment string
|
|
10815
|
+
// for (var i = 0; i <= val.length; i++) {
|
|
10816
|
+
// var key1 = i;
|
|
10817
|
+
// var val1 = val.substr(i, 1);
|
|
10818
|
+
// if (
|
|
10819
|
+
// val1 === '.' &&
|
|
10820
|
+
// !word_start_pos // find first dot
|
|
10821
|
+
// )
|
|
10822
|
+
// word_start_pos = key1;
|
|
10823
|
+
// if (
|
|
10824
|
+
// word_start_pos &&
|
|
10825
|
+
// key1 > word_start_pos &&
|
|
10826
|
+
// nonLettersPatt.test(val1) // find any sign character to mark the end of word
|
|
10827
|
+
// )
|
|
10828
|
+
// word_end_pos = key1;
|
|
10829
|
+
// if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
|
|
10830
|
+
// // find the word
|
|
10831
|
+
// var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
|
|
10832
|
+
// // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
|
|
10833
|
+
// // compare with internal properties
|
|
10834
|
+
// tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
|
|
10835
|
+
// // }
|
|
10836
|
+
// if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
|
|
10837
|
+
// else word_start_pos = null;
|
|
10838
|
+
// word_end_pos = null;
|
|
10839
|
+
// }
|
|
10840
|
+
// if (val1 === '[') validSymbols = validSymbolsWithArray;
|
|
10841
|
+
// if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
|
|
10842
|
+
// tmpStr += '^^' + val1;
|
|
10843
|
+
// } else tmpStr += val1;
|
|
10844
|
+
// }
|
|
10845
|
+
// // });
|
|
10846
|
+
// if (tmpStr.indexOf('^^') > -1) {
|
|
10847
|
+
// var obj1 = extract_str(tmpStr, pos);
|
|
10848
|
+
// obj = obj.concat(obj1);
|
|
10849
|
+
// } else {
|
|
10850
|
+
// // push clean @var
|
|
10851
|
+
// var fieldId = undefined;
|
|
10852
|
+
// if (val) {
|
|
10853
|
+
// fieldId = val.substr(1, val.length);
|
|
10854
|
+
// if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
|
|
10855
|
+
// if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
|
|
10856
|
+
// //
|
|
10857
|
+
// // if (val.indexOf("]") > -1)
|
|
10858
|
+
// // fieldId = val.substr(1, val.indexOf("]") - 1);
|
|
10859
|
+
// }
|
|
10860
|
+
// obj.push({
|
|
10861
|
+
// value: val,
|
|
10862
|
+
// fieldId: fieldId,
|
|
10863
|
+
// pos: pos + posP,
|
|
10864
|
+
// });
|
|
10865
|
+
// }
|
|
10866
|
+
// } else {
|
|
10867
|
+
// obj.push({
|
|
10868
|
+
// value: val,
|
|
10869
|
+
// pos: pos + posP,
|
|
10870
|
+
// });
|
|
10871
|
+
// }
|
|
10872
|
+
// }
|
|
10873
|
+
// }
|
|
10874
|
+
// return obj;
|
|
10875
|
+
// }
|
|
10876
|
+
// };
|
|
10877
|
+
// var res = extract_str(strP);
|
|
10878
|
+
// return res;
|
|
10879
|
+
// };
|
|
10878
10880
|
|
|
10879
10881
|
func.expression.parse = function (input) {
|
|
10880
10882
|
if (typeof input !== 'string') return [];
|
|
@@ -10943,50 +10945,50 @@ func.expression.get_property = async function (valP) {
|
|
|
10943
10945
|
};
|
|
10944
10946
|
};
|
|
10945
10947
|
|
|
10946
|
-
func.expression.get_property_bad = async function (valP) {
|
|
10947
|
-
|
|
10948
|
+
// func.expression.get_property_bad = async function (valP) {
|
|
10949
|
+
// if (typeof valP !== 'string') return { property1: undefined, property2: undefined };
|
|
10948
10950
|
|
|
10949
|
-
|
|
10950
|
-
|
|
10951
|
-
|
|
10952
|
-
|
|
10953
|
-
|
|
10954
|
-
|
|
10955
|
-
|
|
10956
|
-
|
|
10957
|
-
|
|
10958
|
-
|
|
10959
|
-
|
|
10960
|
-
|
|
10961
|
-
|
|
10962
|
-
|
|
10963
|
-
|
|
10964
|
-
|
|
10965
|
-
|
|
10966
|
-
|
|
10967
|
-
|
|
10968
|
-
|
|
10969
|
-
|
|
10970
|
-
|
|
10971
|
-
|
|
10972
|
-
|
|
10951
|
+
// const secureEval = async (expr) => {
|
|
10952
|
+
// if (typeof IS_PROCESS_SERVER === 'undefined') {
|
|
10953
|
+
// try {
|
|
10954
|
+
// return eval(expr);
|
|
10955
|
+
// } catch (err) {
|
|
10956
|
+
// console.error(err);
|
|
10957
|
+
// return undefined;
|
|
10958
|
+
// }
|
|
10959
|
+
// }
|
|
10960
|
+
// try {
|
|
10961
|
+
// const vm = new VM.VM({
|
|
10962
|
+
// sandbox: {
|
|
10963
|
+
// func,
|
|
10964
|
+
// SESSION_ID,
|
|
10965
|
+
// SESSION_OBJ: { [SESSION_ID]: SESSION_OBJ[SESSION_ID] },
|
|
10966
|
+
// },
|
|
10967
|
+
// timeout: 1000,
|
|
10968
|
+
// allowAsync: false,
|
|
10969
|
+
// });
|
|
10970
|
+
// return await vm.run(expr);
|
|
10971
|
+
// } catch {
|
|
10972
|
+
// return undefined; // Simplified error handling
|
|
10973
|
+
// }
|
|
10974
|
+
// };
|
|
10973
10975
|
|
|
10974
|
-
|
|
10975
|
-
|
|
10976
|
-
|
|
10976
|
+
// let property1, property2;
|
|
10977
|
+
// const bracketStart = valP.indexOf('[');
|
|
10978
|
+
// const bracketEnd = valP.indexOf(']');
|
|
10977
10979
|
|
|
10978
|
-
|
|
10979
|
-
|
|
10980
|
-
|
|
10981
|
-
|
|
10980
|
+
// if (bracketStart > -1 && bracketEnd > bracketStart) {
|
|
10981
|
+
// const expr = valP.slice(bracketStart + 1, bracketEnd);
|
|
10982
|
+
// property1 = await secureEval(expr);
|
|
10983
|
+
// }
|
|
10982
10984
|
|
|
10983
|
-
|
|
10984
|
-
|
|
10985
|
-
|
|
10986
|
-
|
|
10985
|
+
// const dotIndex = valP.indexOf('.');
|
|
10986
|
+
// if (dotIndex > -1) {
|
|
10987
|
+
// property2 = valP.slice(dotIndex + 1);
|
|
10988
|
+
// }
|
|
10987
10989
|
|
|
10988
|
-
|
|
10989
|
-
};
|
|
10990
|
+
// return { property1, property2 };
|
|
10991
|
+
// };
|
|
10990
10992
|
|
|
10991
10993
|
func.expression.validate_constant = function (valP) {
|
|
10992
10994
|
var patt = /["']/;
|
|
@@ -11014,107 +11016,107 @@ func.expression.remove_quotes = function (valP) {
|
|
|
11014
11016
|
// func.expression.validate_constant(valP) && typeof valP === 'string' ? valP.slice(1, -1) : valP;
|
|
11015
11017
|
// };
|
|
11016
11018
|
|
|
11017
|
-
func.expression.secure_eval_org = async function (SESSION_ID, sourceP, val, job_id, dsSessionP, js_script_callback, evt) {
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11021
|
-
|
|
11022
|
-
|
|
11023
|
-
|
|
11024
|
-
|
|
11025
|
-
|
|
11026
|
-
|
|
11027
|
-
|
|
11028
|
-
const xu = api_utils;
|
|
11029
|
-
|
|
11030
|
-
if (typeof IS_PROCESS_SERVER === 'undefined' && typeof IS_DOCKER === 'undefined') {
|
|
11031
|
-
try {
|
|
11032
|
-
return eval(val);
|
|
11033
|
-
} catch (err) {
|
|
11034
|
-
try {
|
|
11035
|
-
return JSON5.parse(val);
|
|
11036
|
-
} catch (err) {
|
|
11037
|
-
// console.error(err);
|
|
11038
|
-
return val;
|
|
11039
|
-
}
|
|
11040
|
-
}
|
|
11041
|
-
}
|
|
11042
|
-
// server side execution
|
|
11043
|
-
if (sourceP === 'javascript') {
|
|
11044
|
-
process.on('uncaughtException', (err) => {
|
|
11045
|
-
console.error('Asynchronous error caught.', err);
|
|
11046
|
-
|
|
11047
|
-
func.events.delete_job(SESSION_ID, job_id);
|
|
11048
|
-
if (typeof IS_PROCESS_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined') {
|
|
11049
|
-
if (SESSION_OBJ[SESSION_ID].crawler) return;
|
|
11050
|
-
return __.rpi.write_log(SESSION_OBJ[SESSION_ID].app_id, 'error', 'worker', 'vm error', err, null, val, 'func.expression.get.secure_eval');
|
|
11051
|
-
}
|
|
11052
|
-
});
|
|
11053
|
-
try {
|
|
11054
|
-
const dir = path.join(_conf.studio_drive_path, SESSION_OBJ[SESSION_ID].app_id, 'node_modules', '/');
|
|
11055
|
-
const script = new VM.VMScript(`try{${val}}catch(e){func.api.error(SESSION_ID, "nodejs error", e); console.error(e); func.events.delete_job(SESSION_ID, job_id);}`, { filename: dir, dirname: dir });
|
|
11056
|
-
let vm = new VM.NodeVM({
|
|
11057
|
-
require: {
|
|
11058
|
-
external: true,
|
|
11059
|
-
},
|
|
11060
|
-
sandbox: {
|
|
11061
|
-
func,
|
|
11062
|
-
xu,
|
|
11063
|
-
SESSION_ID,
|
|
11064
|
-
SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
|
|
11065
|
-
callback: js_script_callback,
|
|
11066
|
-
job_id,
|
|
11067
|
-
axios,
|
|
11068
|
-
got,
|
|
11069
|
-
FormData,
|
|
11070
|
-
},
|
|
11071
|
-
timeout: 60000,
|
|
11072
|
-
});
|
|
11073
|
-
return await vm.run(script, {
|
|
11074
|
-
filename: dir,
|
|
11075
|
-
dirname: dir,
|
|
11076
|
-
});
|
|
11077
|
-
} catch (err) {
|
|
11078
|
-
console.error('Failed to execute script.', err);
|
|
11019
|
+
// func.expression.secure_eval_org = async function (SESSION_ID, sourceP, val, job_id, dsSessionP, js_script_callback, evt) {
|
|
11020
|
+
// const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
|
|
11021
|
+
// func,
|
|
11022
|
+
// glb,
|
|
11023
|
+
// SESSION_OBJ,
|
|
11024
|
+
// SESSION_ID,
|
|
11025
|
+
// APP_OBJ,
|
|
11026
|
+
// dsSession: dsSessionP,
|
|
11027
|
+
// job_id,
|
|
11028
|
+
// });
|
|
11079
11029
|
|
|
11080
|
-
|
|
11081
|
-
|
|
11082
|
-
|
|
11083
|
-
|
|
11084
|
-
|
|
11085
|
-
|
|
11086
|
-
|
|
11087
|
-
|
|
11088
|
-
|
|
11089
|
-
|
|
11090
|
-
|
|
11091
|
-
|
|
11092
|
-
|
|
11093
|
-
|
|
11094
|
-
|
|
11095
|
-
|
|
11096
|
-
|
|
11097
|
-
|
|
11098
|
-
|
|
11099
|
-
|
|
11100
|
-
|
|
11101
|
-
|
|
11102
|
-
|
|
11103
|
-
|
|
11104
|
-
|
|
11105
|
-
|
|
11106
|
-
|
|
11107
|
-
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11112
|
-
|
|
11113
|
-
|
|
11114
|
-
|
|
11115
|
-
|
|
11116
|
-
|
|
11117
|
-
|
|
11030
|
+
// const xu = api_utils;
|
|
11031
|
+
|
|
11032
|
+
// if (typeof IS_PROCESS_SERVER === 'undefined' && typeof IS_DOCKER === 'undefined') {
|
|
11033
|
+
// try {
|
|
11034
|
+
// return eval(val);
|
|
11035
|
+
// } catch (err) {
|
|
11036
|
+
// try {
|
|
11037
|
+
// return JSON5.parse(val);
|
|
11038
|
+
// } catch (err) {
|
|
11039
|
+
// // console.error(err);
|
|
11040
|
+
// return val;
|
|
11041
|
+
// }
|
|
11042
|
+
// }
|
|
11043
|
+
// }
|
|
11044
|
+
// // server side execution
|
|
11045
|
+
// if (sourceP === 'javascript') {
|
|
11046
|
+
// process.on('uncaughtException', (err) => {
|
|
11047
|
+
// console.error('Asynchronous error caught.', err);
|
|
11048
|
+
|
|
11049
|
+
// func.events.delete_job(SESSION_ID, job_id);
|
|
11050
|
+
// if (typeof IS_PROCESS_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined') {
|
|
11051
|
+
// if (SESSION_OBJ[SESSION_ID].crawler) return;
|
|
11052
|
+
// return __.rpi.write_log(SESSION_OBJ[SESSION_ID].app_id, 'error', 'worker', 'vm error', err, null, val, 'func.expression.get.secure_eval');
|
|
11053
|
+
// }
|
|
11054
|
+
// });
|
|
11055
|
+
// try {
|
|
11056
|
+
// const dir = path.join(_conf.studio_drive_path, SESSION_OBJ[SESSION_ID].app_id, 'node_modules', '/');
|
|
11057
|
+
// const script = new VM.VMScript(`try{${val}}catch(e){func.api.error(SESSION_ID, "nodejs error", e); console.error(e); func.events.delete_job(SESSION_ID, job_id);}`, { filename: dir, dirname: dir });
|
|
11058
|
+
// let vm = new VM.NodeVM({
|
|
11059
|
+
// require: {
|
|
11060
|
+
// external: true,
|
|
11061
|
+
// },
|
|
11062
|
+
// sandbox: {
|
|
11063
|
+
// func,
|
|
11064
|
+
// xu,
|
|
11065
|
+
// SESSION_ID,
|
|
11066
|
+
// SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
|
|
11067
|
+
// callback: js_script_callback,
|
|
11068
|
+
// job_id,
|
|
11069
|
+
// axios,
|
|
11070
|
+
// got,
|
|
11071
|
+
// FormData,
|
|
11072
|
+
// },
|
|
11073
|
+
// timeout: 60000,
|
|
11074
|
+
// });
|
|
11075
|
+
// return await vm.run(script, {
|
|
11076
|
+
// filename: dir,
|
|
11077
|
+
// dirname: dir,
|
|
11078
|
+
// });
|
|
11079
|
+
// } catch (err) {
|
|
11080
|
+
// console.error('Failed to execute script.', err);
|
|
11081
|
+
|
|
11082
|
+
// if (typeof IS_PROCESS_SERVER !== 'undefined') {
|
|
11083
|
+
// func.events.delete_job(SESSION_ID, jobNo);
|
|
11084
|
+
// return __.db.add_error_log(SESSION_OBJ[SESSION_ID].app_id, 'api', err);
|
|
11085
|
+
// }
|
|
11086
|
+
// }
|
|
11087
|
+
// } else {
|
|
11088
|
+
// try {
|
|
11089
|
+
// try {
|
|
11090
|
+
// let vm = new VM.VM({
|
|
11091
|
+
// sandbox: {
|
|
11092
|
+
// xu,
|
|
11093
|
+
// func,
|
|
11094
|
+
// SESSION_ID,
|
|
11095
|
+
// SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
|
|
11096
|
+
// callback: js_script_callback,
|
|
11097
|
+
// job_id,
|
|
11098
|
+
// },
|
|
11099
|
+
// timeout: 1000,
|
|
11100
|
+
// allowAsync: false,
|
|
11101
|
+
// });
|
|
11102
|
+
// let ret = val;
|
|
11103
|
+
// if (typeof val === 'string') {
|
|
11104
|
+
// ret = await vm.run(val);
|
|
11105
|
+
// }
|
|
11106
|
+
// return ret;
|
|
11107
|
+
// } catch (err) {
|
|
11108
|
+
// throw '';
|
|
11109
|
+
// }
|
|
11110
|
+
// } catch (err) {
|
|
11111
|
+
// try {
|
|
11112
|
+
// return JSON5.parse(val);
|
|
11113
|
+
// } catch (err) {
|
|
11114
|
+
// // console.error(err);
|
|
11115
|
+
// return val;
|
|
11116
|
+
// }
|
|
11117
|
+
// }
|
|
11118
|
+
// }
|
|
11119
|
+
// };
|
|
11118
11120
|
|
|
11119
11121
|
func.expression.secure_eval = async function (SESSION_ID, sourceP, val, job_id, dsSessionP, js_script_callback, evt) {
|
|
11120
11122
|
if (typeof val !== 'string') return val;
|