/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/sinkdweller@1.0.7/dist/Sinkdweller.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,r,s){return new(r||(r=Promise))((function(a,n){function i(e){try{l(s.next(e))}catch(e){n(e)}}function o(e){try{l(s.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,o)}l((s=s.apply(e,t||[])).next())}))},__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};const child_process=__importStar(require("child_process")),path=__importStar(require("path")),os=__importStar(require("os"));class SinkdwellerError extends Error{}class Sinkdweller{constructor(e){this.DEFAULT_OPTIONS={output_file:null,meta_output_file:null,count:null,seed:null,mutations:null,patterns:null,generators:null,recursive:null,seek:null,truncate:null,delay:null,checksums:null,hash:null,use_external_radamsa:!1},this.options=Object.assign({},this.DEFAULT_OPTIONS),e&&this.setFlags(e)}fuzz(e,t){this.spawnRadamsa(e,((r,s)=>{t(r,"string"==typeof e?s.toString("utf8"):s)}))}fuzzAsync(e){return __awaiter(this,void 0,void 0,(function*(){return new Promise(((t,r)=>{this.fuzz(e,((e,s)=>{e?r(e):t(s)}))}))}))}fuzzSync(e){let t=this.spawnRadamsaSync(e);return"string"==typeof e?t.toString("utf8"):t}setFlags(e){this.options=Object.assign(this.options,e)}setSeed(e){this.options.seed=e}spawnRadamsa(e,t,r){r||(r=this.options);let s=this.generateRadamsaFlags(r),a=this.getRadamsaExecutable(r.use_external_radamsa),n=child_process.spawn(a,s);n.stdin.write(e),n.stdout.on("data",(e=>{t(null,e)})),n.on("close",(e=>{0!==e&&t(`Radamsa returned exit code ${e}`,null)})),n.on("error",(e=>{t(e,null)})),n.stdin.end()}spawnRadamsaSync(e,t){t||(t=this.options);let r=this.generateRadamsaFlags(t);r.push("-");let s=this.getRadamsaExecutable(t.use_external_radamsa),a=child_process.spawnSync(s,r,{input:e});return Buffer.from(a.stdout)}getRadamsaExecutable(e=!1){if(!0===e){let e=os.platform();switch(e){case"win32":try{return child_process.execSync("where radamsa.exe").toString("utf8").trim()}catch(e){throw new SinkdwellerError("Cannot find external radamsa")}case"linux":case"freebsd":case"openbsd":case"darwin":try{return child_process.execSync("which radamsa").toString("utf8").trim()}catch(e){throw new SinkdwellerError("Cannot find external radamsa")}default:throw new SinkdwellerError(`Sinkdweller does not support platform ${e}`)}}else{let e=os.arch();if("x64"!==e)throw new SinkdwellerError(`Sinkdweller does not support architecture ${e}`);let t=os.platform(),r=path.resolve(__dirname,"..","bin");switch(t){case"win32":case"cygwin":return path.join(r,"radamsa_windows.exe");case"linux":case"freebsd":case"openbsd":return path.join(r,"radamsa_linux_x64");case"darwin":return path.join(r,"radamsa_macos");default:throw new SinkdwellerError(`Sinkdweller does not support platform ${t}`)}}}generateRadamsaFlags(e){let t=[];return[["-o","output_file"],["-n","count"],["-s","seed"],["-m","mutations"],["-p","patterns"],["-r","recursive"],["-S","seek"],["-t","truncate"],["-d","delay"],["-C","checksums"],["-H","hash"]].forEach((r=>{let s=r[0],a=r[1];if(a in e&&null!==e[a])if("seed"===a)"function"==typeof e.seed?t.push(s,e.seed().toString()):t.push(s,e[a].toString());else t.push(s,e[a].toString())})),t}}module.exports=Sinkdweller;
//# sourceMappingURL=/sm/96a2061d72515d136ec60861f892e8f796fdf108150545fc5d3c7e2eeecb88a2.map