@scandit/web-datacapture-barcode
Version:
Scandit Data Capture SDK for the Web
6 lines • 3.1 kB
JavaScript
function e(e){return(e=>/^[$A-Z_a-z][\w$]*\s*\(.*\)\s*\{/.test(e)&&!e.startsWith(`function`))(e)?`function ${e}`:e}const t=[`fetch`,`XMLHttpRequest`,`eval`,`Function`,`self`,`globalThis`,`Module`,`importScripts`,`this`,`console`,`window`,`document`,`import`,`Worker`,`ServiceWorker`,`with`,`Reflect`,`Proxy`],n=[`constructor`,`__proto__`];function r(e,t){let n=t+2,r=e.length;for(;n<r&&!(e[n]===`*`&&n+1<r&&e[n+1]===`/`);)n++;return Math.min(r,n+2)}function i(e,t){let n=t+2,r=e.length;for(;n<r&&e[n]!==`
`&&e[n]!==`\r`;)n++;return n}function a(e,t,n){let r=t+1,i=e.length;for(;r<i&&e[r]!==n&&e[r]!==`
`&&e[r]!==`\r`;)r+=e[r]===`\\`&&r+1<i?2:1;return r<i&&e[r]===n?r+1:r}function o(e){let t=``,n=0,o=e.length;for(;n<o;){let c=e[n],l=n+1<o?e[n+1]:``;if(c===`/`&&l===`*`){n=r(e,n);continue}if(c===`/`&&l===`/`){n=i(e,n);continue}if(c===`'`||c===`"`){t+=c+c,n=a(e,n,c);continue}if(c==="`"){let r=s(e,n);t+=r.text,n=r.next;continue}t+=c,n++}return t}function s(e,t){let n=t+1,r=e.length,i=[];for(;n<r&&e[n]!=="`";){if(e[n]===`\\`&&n+1<r){n+=2;continue}if(e[n]===`$`&&n+1<r&&e[n+1]===`{`){let t=n+2,r=c(e,t);i.push(e.substring(t,r)),n=r+1;continue}n++}return{text:i.length===0?"``":`\`\`+(${i.join(`)+(`)})`,next:Math.min(r,n+1)}}function c(e,t){let n=1,r=t,i=e.length;for(;r<i&&n>0;){let t=e[r];if(t===`{`)n++,r++;else if(t===`}`){if(n--,n===0)return r;r++}else t===`'`||t===`"`?r=a(e,r,t):t==="`"?r=s(e,r).next:t===`\\`&&r+1<i?r+=2:r++}return Math.min(i,r)}const l=/(['"`])((?:\\.|(?!\1).)*)\1\s*\+\s*(['"`])((?:\\.|(?!\3).)*)\3/g;function u(e){let t,n=e;do t=n,n=t.replace(l,(e,t,n,r,i)=>`'${n}${i}'`);while(n!==t);return n}const d=[`getPrototypeOf`],f=/^[$A-Z_a-z][\w$]*$/,p=/^-?\d+(?:\.\d+)?$/,m=/^(?:""|''|``(?:\+\([^()]*\))*)$/,h=new Set([`return`,`throw`,`typeof`,`void`,`delete`,`new`,`in`,`of`,`instanceof`,`await`,`yield`,`case`]);function g(e,t){let n=t-1;for(;n>=0&&/\s/.test(e[n]);)n--;if(n<0)return!1;let r=e[n];if(r===`)`||r===`]`)return!0;if(!/[\w$]/.test(r))return!1;let i=n+1;for(;n>=0&&/[\w$]/.test(e[n]);)n--;let a=e.substring(n+1,i);return!h.has(a)}function _(e,t){let n=e.length,r=1,i=t+1;for(;i<n&&r>0;)e[i]===`[`?r++:e[i]===`]`&&r--,r>0&&i++;return i}function v(e){return e===``||f.test(e)||p.test(e)||m.test(e)}function y(e){let t=e.length,n=0;for(;n<t;){if(e[n]!==`[`||!g(e,n)){n++;continue}let t=_(e,n);if(!v(e.substring(n+1,t).trim()))return!0;n=t+1}return!1}function b(e){let r=u(e),i=o(r);for(let e of t)if(RegExp(`\\b${e}\\b`).test(i))return!0;for(let e of[...t,...n])if(RegExp(`\\[\\s*(['"\`])${e}\\1\\s*\\]`).test(r))return!0;for(let e of n)if(RegExp(`\\.\\s*${e}\\b`).test(i))return!0;for(let e of d)if(RegExp(`\\.\\s*${e}\\b`).test(i))return!0;return!!y(i)}function x(n){if(n==null)return null;let r=e(n);if(b(r))throw Error(`Function should be pure. Shouldn't introduce side effects, or rely on global scope`);let i=new Set([`eval`,`this`,`import`,`with`]),a=`'use strict';
return (function (${t.filter(e=>!i.has(e)).join(`,`)}) {
return (${r});
})();`;try{return Function(a)()}catch{return null}}export{x as createSandBoxedFunctionFromString};