UNPKG

@xuda.io/runtime-bundle

Version:

The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform.

152 lines (147 loc) 3.59 kB
export const cast = function ( typeP, valP, report_conversion_error_callback, report_conversion_warn_callback ) { var ret = valP; const report_conversion_error = function (res) { if (report_conversion_error_callback) { report_conversion_error_callback(res, typeP, valP); } }; const report_conversion_warn = function (res) { if (report_conversion_warn_callback) { report_conversion_warn_callback(res, typeP, valP); } }; switch (typeP) { case "boolean": case "bool": const true_bool_opt = ["Y", 1, true, "TRUE", "ON", "YES", "1"]; const false_bool_opt = ["N", 0, false, "FALSE", "OFF", "NO", "0"]; if (true_bool_opt.includes(String(valP).toUpperCase())) { ret = true; break; } if (false_bool_opt.includes(String(valP).toUpperCase()) || !valP) { ret = false; } break; case "number": if ( typeof valP === "undefined" || typeof valP === "NaN" || valP === null ) { ret = 0; } else { if (typeof valP !== "number") { try { if (typeof valP === "boolean") { ret = valP ? 1 : 0; } else { ret = Number(valP); } if (!Number.isFinite(ret)) { ret = 0; report_conversion_error(0); } // normal behavior studio always store values as string // report_conversion_warn(); } catch (e) { ret = 0; report_conversion_error(0); } } else if (!Number.isFinite(valP)) { ret = 0; report_conversion_error(0); } } break; case "string": if ( typeof valP === "undefined" || typeof valP === "NaN" || valP === null ) { ret = ""; } else { if (typeof valP !== "string") { try { ret = String(valP); report_conversion_warn(); } catch (e) { ret = ""; report_conversion_error("blanc"); } } } break; case "object": if ( typeof valP === "undefined" || typeof valP === "NaN" || valP === null ) { ret = {}; } else { if (typeof valP !== "object") { try { if (valP) { ret = JSON5.parse(valP); } else { ret = {}; } } catch (e) { try { ret = JSON5.parse(valP); } catch (error) { ret = {}; report_conversion_error("{}"); } } } } break; case "array": if ( typeof valP === "undefined" || typeof valP === "NaN" || valP === null || valP === "" ) { ret = []; } else { if (!Array.isArray(valP)) { try { ret = Array.from(eval(valP)); } catch (e) { ret = []; report_conversion_error("[]"); } } } break; default: if ( typeof valP === "undefined" || typeof valP === "NaN" || valP === null ) { ret = ""; } else { if (typeof valP !== "string") { try { ret = valP.toString(); report_conversion_warn(); } catch (e) { ret = ""; report_conversion_error("blanc"); } } } break; } return ret; };