-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathexample.js
More file actions
1 lines (1 loc) · 2.82 KB
/
example.js
File metadata and controls
1 lines (1 loc) · 2.82 KB
1
function getOSLType(e){return null==e?null:Array.isArray(e)?"array":typeof e}const clone=function(e){try{if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>clone(e));if(e instanceof RegExp)return new RegExp(e);{let r={};for(let t in e)e.hasOwnProperty(t)&&(r[t]=clone(e[t]));return r}}return e}catch{return JSON.parse(JSON.stringify(e))}},merge=function(e,r){if(null===t||null===r)return null;function t(e){return e&&"object"==typeof e&&!Array.isArray(e)}const n={};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);const o=[{target:n,source:r}];for(;o.length;){const{target:e,source:r}=o.pop();for(const n in r)if(Object.prototype.hasOwnProperty.call(r,n)){const s=r[n];t(s)?(t(e[n])||(e[n]={}),o.push({target:e[n],source:s})):e[n]=s}}return n},isPrime=function(e){if(e<=1)return!1;if(e<=3)return!0;if(e%2==0||e%3==0)return!1;for(let r=5;r*r<=e;r+=6)if(e%r===0||e%(r+2)===0)return!1;return!0};function osl_maths(e,r,t){const n=typeof e,o=typeof t;if("number"===n&&"number"===o)switch(r){case"+":return e+t;case"-":return e-t;case"*":return e*t;case"/":return e/t;case"%":return e%t;case"^":return e**t;case"++":return`${e}${t}`}else if("string"===n||"string"===o)switch(r){case"+":return`${e} ${t}`;case"-":return String(e).replaceAll(String(t),"");case"++":return`${e}${t}`}switch(r){case"+":return(+e||0)+(+t||0);case"-":return(+e||0)-(+t||0);case"*":return(+e||0)*(+t||0);case"/":return(+e||0)/(+t||0);case"%":return(+e||0)%(+t||0);case"++":return"object"===n&&"object"===o?Array.isArray(e)&&Array.isArray(t)?e.concat(t):Object.merge(e,t):`${e}${t}`;case"??":return e??t;case"to":return Array.from({length:Math.abs(t-e)+1},(r,n)=>e<t?e+n:e-n);default:throw new Error("Unknown math operator: "+r)}}function setVar(e,r){void 0!==inner[e=`${e}`]?inner[e]=r:scope[e.toLowerCase()]=r}function getVar(e){return void 0!==inner[e=`${e}`]?inner[e]:scope[e.toLowerCase()]}const scope={};let inner=scope;const reverse=e=>Array.isArray(e)?e.slice().reverse():String(e).split("").reverse().join(""),getCtx=e=>Object.hasOwn(inner,e)?inner:scope;{const e="message";getCtx(e)[e]=clone("Hello from OSL!")}console.log(getVar("message"));{const e="numbers";getCtx(e)[e]=clone([3,1,4,1,5,9,2,6])}console.log("Original numbers:"),console.log(getVar("numbers"));{const e="numbers";{const r=getVar("numbers").slice().sort();""!==(r??"")&&(getCtx(e)[e]="object"==typeof r&&null!==r?clone(r):r)}}console.log("Sorted numbers:"),console.log(getVar("numbers"));{const e="text";getCtx(e)[e]=clone("Hello World")}console.log("Original text:"),console.log(getVar("text"));{const e="reversed";getCtx(e)[e]=clone(reverse(getVar("text")))}console.log("Reversed text:"),console.log(getVar("reversed"));{const e="x";getCtx(e)[e]=clone(42)}console.log(osl_maths(osl_maths(osl_maths("Square root of ","++",getVar("x")),"++"," is "),"++",Math.sqrt(+getVar("x")||0)));