-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
3 lines (3 loc) · 946 Bytes
/
utils.js
File metadata and controls
3 lines (3 loc) · 946 Bytes
1
2
3
//credit to zee
function e(e,t){const r=null===t[0];let o=new RegExp("");null!==t[0]&&(o="string"==typeof t[0]?new RegExp(t[0].replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"):t[0],o.test(e)||console.warn("Nothing to inject."));const n=/(\)[^{]*{)/,c=/(}?)$/;switch(t[2]){case"before":e=r?e.replace(n,`$1${t[1]}`):e.replace(o,`${t[1]}${t[0]}`);break;case"replace":e=r?t[1]:e.replace(o,t[1]);break;case"after":e=r?e.replace(c,`${t[1]}$1`):e.replace(o,`${t[0]}${t[1]}`);break;default:throw new Error('where Parameter must be "before", "replace" or "after"')}return e}function injectCode(t,r,o,n,c={}){const a=Function(...Object.keys(c),`return (${e(t.toString(),[r,o,n])})`)(...Object.values(c));return a.prototype=t.prototype,a}function injectCodes(t,r,o={}){let n=t.toString();for(const t of r)n=e(n,t);const c=Function(...Object.keys(o),`return (${n})`)(...Object.values(o));return c.prototype=t.prototype,c}
export { injectCode, injectCodes }