@ranchhandrobotics/babylon_ros 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -4
- package/dist/openscad-wasm-build/dist/openscad.fonts.js +1 -0
- package/dist/openscad-wasm-build/dist/openscad.js +1 -0
- package/dist/openscad-wasm-build/dist/openscad.wasm +0 -0
- package/dist/openscad-wasm-build/dist/openscad.wasm.js +1 -0
- package/dist/openscad.js +2 -0
- package/dist/openscad.js.map +1 -0
- package/dist/ros.js +1 -1
- package/dist/ros.js.map +1 -1
- package/dist/workers/openscadWorker.js +2 -0
- package/dist/workers/openscadWorker.js.map +1 -0
- package/dist/workers/openscadWorker.node.js +2 -0
- package/dist/workers/openscadWorker.node.js.map +1 -0
- package/package.json +24 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let wasmModule;async function OpenSCAD(t){if(!wasmModule){const t=new URL("./openscad.wasm.js",import.meta.url).href,a=await fetch(t);wasmModule="data:text/javascript;base64,"+btoa(await a.text())}const a={noInitialRun:!0,locateFile:t=>new URL(`./${t}`,import.meta.url).href,...t},e=new Promise((t,e)=>{a.onRuntimeInitialized=()=>t(),a.onAbort=t=>{e(new Error(`OpenSCAD runtime aborted: ${String(t)}`))}}),n=await import(wasmModule+`#${Math.random()}`);return await n.default(a),await e,a}export{OpenSCAD as default};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var OpenSCAD=async function(r={}){var t,e,n=r,o="object"==typeof window,a="undefined"!=typeof WorkerGlobalScope,i=("object"==typeof process&&process.versions?.node&&process.type,[]),s="./this.program",c=(r,t)=>{throw t},u=import.meta.url,f="";if(o||a){try{f=new URL(".",u).href}catch{}a&&(e=r=>{var t=new XMLHttpRequest;return t.open("GET",r,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),t=async r=>{var t=await fetch(r,{credentials:"same-origin"});if(t.ok)return t.arrayBuffer();throw new Error(t.status+" : "+t.url)}}var h,d,l,m,w,v,p,E,y,g,b,k=console.log.bind(console),_=console.error.bind(console),S=!1,D=!1;function N(){var r=w.buffer;v=new Int8Array(r),E=new Int16Array(r),p=new Uint8Array(r),new Uint16Array(r),y=new Int32Array(r),g=new Uint32Array(r),new Float32Array(r),new Float64Array(r),b=new BigInt64Array(r),new BigUint64Array(r)}var O=0,A=null;function T(r){O++,n.monitorRunDependencies?.(O)}function F(r){if(O--,n.monitorRunDependencies?.(O),0==O&&A){var t=A;A=null,t()}}function P(r){n.onAbort?.(r),_(r="Aborted("+r+")"),S=!0,r+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(r);throw m?.(t),t}var R,M=0;function C(r){return(...t)=>{if(S)throw"program has already aborted!";M++;try{return r(...t)}catch(r){if(S||M>1||r===1/0||"unwind"===r)throw r;P("unhandled exception: "+[r,r.stack])}finally{M--}}}async function L(r,n,o){if(!r&&"function"==typeof WebAssembly.instantiateStreaming)try{var a=fetch(n,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(a,o)}catch(r){_(`wasm streaming compile failed: ${r}`),_("falling back to ArrayBuffer instantiation")}return async function(r,n){try{var o=await async function(r){if(!h)try{var n=await t(r);return new Uint8Array(n)}catch{}return function(r){if(r==R&&h)return new Uint8Array(h);if(e)return e(r);throw"both async and sync fetching of the wasm failed"}(r)}(r);return await WebAssembly.instantiate(o,n)}catch(r){_(`failed to asynchronously prepare wasm: ${r}`),P(r)}}(n,o)}class I{name="ExitStatus";constructor(r){this.message=`Program terminated with exit(${r})`,this.status=r}}var B,x=r=>{for(;r.length>0;)r.shift()(n)},U=[],z=r=>U.push(r),j=[],H=r=>j.push(r),G=!1,Y=r=>ur(r),$=()=>hr(),X=r=>r<-9007199254740992||r>9007199254740992?NaN:Number(r),W="undefined"!=typeof TextDecoder?new TextDecoder:void 0,K=(r,t=0,e=NaN)=>{for(var n=(t>>>=0)+e,o=t;r[o]&&!(o>=n);)++o;if(o-t>16&&r.buffer&&W)return W.decode(r.subarray(t,o));for(var a="";t<o;){var i=r[t++];if(128&i){var s=63&r[t++];if(192!=(224&i)){var c=63&r[t++];if((i=224==(240&i)?(15&i)<<12|s<<6|c:(7&i)<<18|s<<12|c<<6|63&r[t++])<65536)a+=String.fromCharCode(i);else{var u=i-65536;a+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a},q=(r,t)=>(r>>>=0)?K(p,r,t):"",V=[],Q=r=>{var t=V[r];return t||(V[r]=t=B.get(r)),t},Z=[],J=0,rr=0;class tr{constructor(r){this.excPtr=r,this.ptr=r-24}set_type(r){g[this.ptr+4>>>2>>>0]=r}get_type(){return g[this.ptr+4>>>2>>>0]}set_destructor(r){g[this.ptr+8>>>2>>>0]=r}get_destructor(){return g[this.ptr+8>>>2>>>0]}set_caught(r){r=r?1:0,v[this.ptr+12>>>0]=r}get_caught(){return 0!=v[this.ptr+12>>>0]}set_rethrown(r){r=r?1:0,v[this.ptr+13>>>0]=r}get_rethrown(){return 0!=v[this.ptr+13>>>0]}init(r,t){this.set_adjusted_ptr(0),this.set_type(r),this.set_destructor(t)}set_adjusted_ptr(r){g[this.ptr+16>>>2>>>0]=r}get_adjusted_ptr(){return g[this.ptr+16>>>2>>>0]}}var er,nr,or,ar,ir,sr,cr,ur,fr,hr,dr,lr,mr,wr=r=>cr(r),vr=r=>{var t=rr;if(!t)return wr(0),0;var e=new tr(t);e.set_adjusted_ptr(t);var n=e.get_type();if(!n)return wr(0),t;for(var o of r){if(0===o||o===n)break;var a=e.ptr+16;if(mr(o,n,a))return wr(o),t}return wr(n),t},pr={isAbs:r=>"/"===r.charAt(0),splitPath:r=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1),normalizeArray:(r,t)=>{for(var e=0,n=r.length-1;n>=0;n--){var o=r[n];"."===o?r.splice(n,1):".."===o?(r.splice(n,1),e++):e&&(r.splice(n,1),e--)}if(t)for(;e;e--)r.unshift("..");return r},normalize:r=>{var t=pr.isAbs(r),e="/"===r.slice(-1);return(r=pr.normalizeArray(r.split("/").filter(r=>!!r),!t).join("/"))||t||(r="."),r&&e&&(r+="/"),(t?"/":"")+r},dirname:r=>{var t=pr.splitPath(r),e=t[0],n=t[1];return e||n?(n&&(n=n.slice(0,-1)),e+n):"."},basename:r=>r&&r.match(/([^\/]+|\/)\/*$/)[1],join:(...r)=>pr.normalize(r.join("/")),join2:(r,t)=>pr.normalize(r+"/"+t)},Er=r=>{(Er=r=>crypto.getRandomValues(r))(r)},yr={resolve:(...r)=>{for(var t="",e=!1,n=r.length-1;n>=-1&&!e;n--){var o=n>=0?r[n]:Fr.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";t=o+"/"+t,e=pr.isAbs(o)}return(e?"/":"")+(t=pr.normalizeArray(t.split("/").filter(r=>!!r),!e).join("/"))||"."},relative:(r,t)=>{function e(r){for(var t=0;t<r.length&&""===r[t];t++);for(var e=r.length-1;e>=0&&""===r[e];e--);return t>e?[]:r.slice(t,e-t+1)}r=yr.resolve(r).slice(1),t=yr.resolve(t).slice(1);for(var n=e(r.split("/")),o=e(t.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s<a;s++)if(n[s]!==o[s]){i=s;break}var c=[];for(s=i;s<n.length;s++)c.push("..");return(c=c.concat(o.slice(i))).join("/")}},gr=[],br=r=>{for(var t=0,e=0;e<r.length;++e){var n=r.charCodeAt(e);n<=127?t++:n<=2047?t+=2:n>=55296&&n<=57343?(t+=4,++e):t+=3}return t},kr=(r,t,e,n)=>{if(!(n>0))return 0;for(var o=e>>>=0,a=e+n-1,i=0;i<r.length;++i){var s=r.codePointAt(i);if(s<=127){if(e>=a)break;t[e++>>>0]=s}else if(s<=2047){if(e+1>=a)break;t[e++>>>0]=192|s>>6,t[e++>>>0]=128|63&s}else if(s<=65535){if(e+2>=a)break;t[e++>>>0]=224|s>>12,t[e++>>>0]=128|s>>6&63,t[e++>>>0]=128|63&s}else{if(e+3>=a)break;t[e++>>>0]=240|s>>18,t[e++>>>0]=128|s>>12&63,t[e++>>>0]=128|s>>6&63,t[e++>>>0]=128|63&s,i++}}return t[e>>>0]=0,e-o},_r=(r,t,e)=>{var n=e>0?e:br(r)+1,o=new Array(n),a=kr(r,o,0,o.length);return t&&(o.length=a),o},Sr={ttys:[],init(){},shutdown(){},register(r,t){Sr.ttys[r]={input:[],output:[],ops:t},Fr.registerDevice(r,Sr.stream_ops)},stream_ops:{open(r){var t=Sr.ttys[r.node.rdev];if(!t)throw new Fr.ErrnoError(43);r.tty=t,r.seekable=!1},close(r){r.tty.ops.fsync(r.tty)},fsync(r){r.tty.ops.fsync(r.tty)},read(r,t,e,n,o){if(!r.tty||!r.tty.ops.get_char)throw new Fr.ErrnoError(60);for(var a=0,i=0;i<n;i++){var s;try{s=r.tty.ops.get_char(r.tty)}catch(r){throw new Fr.ErrnoError(29)}if(void 0===s&&0===a)throw new Fr.ErrnoError(6);if(null==s)break;a++,t[e+i]=s}return a&&(r.node.atime=Date.now()),a},write(r,t,e,n,o){if(!r.tty||!r.tty.ops.put_char)throw new Fr.ErrnoError(60);try{for(var a=0;a<n;a++)r.tty.ops.put_char(r.tty,t[e+a])}catch(r){throw new Fr.ErrnoError(29)}return n&&(r.node.mtime=r.node.ctime=Date.now()),a}},default_tty_ops:{get_char:r=>(()=>{if(!gr.length){var r=null;if("undefined"!=typeof window&&"function"==typeof window.prompt&&null!==(r=window.prompt("Input: "))&&(r+="\n"),!r)return null;gr=_r(r,!0)}return gr.shift()})(),put_char(r,t){null===t||10===t?(k(K(r.output)),r.output=[]):0!=t&&r.output.push(t)},fsync(r){r.output?.length>0&&(k(K(r.output)),r.output=[])},ioctl_tcgets:r=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(r,t,e)=>0,ioctl_tiocgwinsz:r=>[24,80]},default_tty1_ops:{put_char(r,t){null===t||10===t?(_(K(r.output)),r.output=[]):0!=t&&r.output.push(t)},fsync(r){r.output?.length>0&&(_(K(r.output)),r.output=[])}}},Dr=(r,t)=>Math.ceil(r/t)*t,Nr=r=>{r=Dr(r,65536);var t=ir(65536,r);return t&&((r,t)=>{p.fill(0,r,r+t)})(t,r),t},Or={ops_table:null,mount:r=>Or.createNode(null,"/",16895,0),createNode(r,t,e,n){if(Fr.isBlkdev(e)||Fr.isFIFO(e))throw new Fr.ErrnoError(63);Or.ops_table||={dir:{node:{getattr:Or.node_ops.getattr,setattr:Or.node_ops.setattr,lookup:Or.node_ops.lookup,mknod:Or.node_ops.mknod,rename:Or.node_ops.rename,unlink:Or.node_ops.unlink,rmdir:Or.node_ops.rmdir,readdir:Or.node_ops.readdir,symlink:Or.node_ops.symlink},stream:{llseek:Or.stream_ops.llseek}},file:{node:{getattr:Or.node_ops.getattr,setattr:Or.node_ops.setattr},stream:{llseek:Or.stream_ops.llseek,read:Or.stream_ops.read,write:Or.stream_ops.write,mmap:Or.stream_ops.mmap,msync:Or.stream_ops.msync}},link:{node:{getattr:Or.node_ops.getattr,setattr:Or.node_ops.setattr,readlink:Or.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Or.node_ops.getattr,setattr:Or.node_ops.setattr},stream:Fr.chrdev_stream_ops}};var o=Fr.createNode(r,t,e,n);return Fr.isDir(o.mode)?(o.node_ops=Or.ops_table.dir.node,o.stream_ops=Or.ops_table.dir.stream,o.contents={}):Fr.isFile(o.mode)?(o.node_ops=Or.ops_table.file.node,o.stream_ops=Or.ops_table.file.stream,o.usedBytes=0,o.contents=null):Fr.isLink(o.mode)?(o.node_ops=Or.ops_table.link.node,o.stream_ops=Or.ops_table.link.stream):Fr.isChrdev(o.mode)&&(o.node_ops=Or.ops_table.chrdev.node,o.stream_ops=Or.ops_table.chrdev.stream),o.atime=o.mtime=o.ctime=Date.now(),r&&(r.contents[t]=o,r.atime=r.mtime=r.ctime=o.atime),o},getFileDataAsTypedArray:r=>r.contents?r.contents.subarray?r.contents.subarray(0,r.usedBytes):new Uint8Array(r.contents):new Uint8Array(0),expandFileStorage(r,t){var e=r.contents?r.contents.length:0;if(!(e>=t)){t=Math.max(t,e*(e<1048576?2:1.125)>>>0),0!=e&&(t=Math.max(t,256));var n=r.contents;r.contents=new Uint8Array(t),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage(r,t){if(r.usedBytes!=t)if(0==t)r.contents=null,r.usedBytes=0;else{var e=r.contents;r.contents=new Uint8Array(t),e&&r.contents.set(e.subarray(0,Math.min(t,r.usedBytes))),r.usedBytes=t}},node_ops:{getattr(r){var t={};return t.dev=Fr.isChrdev(r.mode)?r.id:1,t.ino=r.id,t.mode=r.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=r.rdev,Fr.isDir(r.mode)?t.size=4096:Fr.isFile(r.mode)?t.size=r.usedBytes:Fr.isLink(r.mode)?t.size=r.link.length:t.size=0,t.atime=new Date(r.atime),t.mtime=new Date(r.mtime),t.ctime=new Date(r.ctime),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr(r,t){for(const e of["mode","atime","mtime","ctime"])null!=t[e]&&(r[e]=t[e]);void 0!==t.size&&Or.resizeFileStorage(r,t.size)},lookup(r,t){throw Or.doesNotExistError},mknod:(r,t,e,n)=>Or.createNode(r,t,e,n),rename(r,t,e){var n;try{n=Fr.lookupNode(t,e)}catch(r){}if(n){if(Fr.isDir(r.mode))for(var o in n.contents)throw new Fr.ErrnoError(55);Fr.hashRemoveNode(n)}delete r.parent.contents[r.name],t.contents[e]=r,r.name=e,t.ctime=t.mtime=r.parent.ctime=r.parent.mtime=Date.now()},unlink(r,t){delete r.contents[t],r.ctime=r.mtime=Date.now()},rmdir(r,t){var e=Fr.lookupNode(r,t);for(var n in e.contents)throw new Fr.ErrnoError(55);delete r.contents[t],r.ctime=r.mtime=Date.now()},readdir:r=>[".","..",...Object.keys(r.contents)],symlink(r,t,e){var n=Or.createNode(r,t,41471,0);return n.link=e,n},readlink(r){if(!Fr.isLink(r.mode))throw new Fr.ErrnoError(28);return r.link}},stream_ops:{read(r,t,e,n,o){var a=r.node.contents;if(o>=r.node.usedBytes)return 0;var i=Math.min(r.node.usedBytes-o,n);if(i>8&&a.subarray)t.set(a.subarray(o,o+i),e);else for(var s=0;s<i;s++)t[e+s]=a[o+s];return i},write(r,t,e,n,o,a){if(t.buffer===v.buffer&&(a=!1),!n)return 0;var i=r.node;if(i.mtime=i.ctime=Date.now(),t.subarray&&(!i.contents||i.contents.subarray)){if(a)return i.contents=t.subarray(e,e+n),i.usedBytes=n,n;if(0===i.usedBytes&&0===o)return i.contents=t.slice(e,e+n),i.usedBytes=n,n;if(o+n<=i.usedBytes)return i.contents.set(t.subarray(e,e+n),o),n}if(Or.expandFileStorage(i,o+n),i.contents.subarray&&t.subarray)i.contents.set(t.subarray(e,e+n),o);else for(var s=0;s<n;s++)i.contents[o+s]=t[e+s];return i.usedBytes=Math.max(i.usedBytes,o+n),n},llseek(r,t,e){var n=t;if(1===e?n+=r.position:2===e&&Fr.isFile(r.node.mode)&&(n+=r.node.usedBytes),n<0)throw new Fr.ErrnoError(28);return n},mmap(r,t,e,n,o){if(!Fr.isFile(r.node.mode))throw new Fr.ErrnoError(43);var a,i,s=r.node.contents;if(2&o||!s||s.buffer!==v.buffer){if(i=!0,!(a=Nr(t)))throw new Fr.ErrnoError(48);s&&((e>0||e+t<s.length)&&(s=s.subarray?s.subarray(e,e+t):Array.prototype.slice.call(s,e,e+t)),v.set(s,a>>>0))}else i=!1,a=s.byteOffset;return{ptr:a,allocated:i}},msync:(r,t,e,n,o)=>(Or.stream_ops.write(r,t,0,n,e,!1),0)}},Ar=[],Tr=(r,t)=>{var e=0;return r&&(e|=365),t&&(e|=146),e},Fr={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(r){this.errno=r}},FSStream:class{shared={};get object(){return this.node}set object(r){this.node=r}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return!!(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(r){this.shared.flags=r}get position(){return this.shared.position}set position(r){this.shared.position=r}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(r,t,e,n){r||(r=this),this.parent=r,this.mount=r.mount,this.id=Fr.nextInode++,this.name=t,this.mode=e,this.rdev=n,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(r){r?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(r){r?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return Fr.isDir(this.mode)}get isDevice(){return Fr.isChrdev(this.mode)}},lookupPath(r,t={}){if(!r)throw new Fr.ErrnoError(44);t.follow_mount??=!0,pr.isAbs(r)||(r=Fr.cwd()+"/"+r);r:for(var e=0;e<40;e++){for(var n=r.split("/").filter(r=>!!r),o=Fr.root,a="/",i=0;i<n.length;i++){var s=i===n.length-1;if(s&&t.parent)break;if("."!==n[i])if(".."!==n[i]){a=pr.join2(a,n[i]);try{o=Fr.lookupNode(o,n[i])}catch(r){if(44===r?.errno&&s&&t.noent_okay)return{path:a};throw r}if(!Fr.isMountpoint(o)||s&&!t.follow_mount||(o=o.mounted.root),Fr.isLink(o.mode)&&(!s||t.follow)){if(!o.node_ops.readlink)throw new Fr.ErrnoError(52);var c=o.node_ops.readlink(o);pr.isAbs(c)||(c=pr.dirname(a)+"/"+c),r=c+"/"+n.slice(i+1).join("/");continue r}}else{if(a=pr.dirname(a),Fr.isRoot(o)){r=a+"/"+n.slice(i+1).join("/");continue r}o=o.parent}}return{path:a,node:o}}throw new Fr.ErrnoError(32)},getPath(r){for(var t;;){if(Fr.isRoot(r)){var e=r.mount.mountpoint;return t?"/"!==e[e.length-1]?`${e}/${t}`:e+t:e}t=t?`${r.name}/${t}`:r.name,r=r.parent}},hashName(r,t){for(var e=0,n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n)|0;return(r+e>>>0)%Fr.nameTable.length},hashAddNode(r){var t=Fr.hashName(r.parent.id,r.name);r.name_next=Fr.nameTable[t],Fr.nameTable[t]=r},hashRemoveNode(r){var t=Fr.hashName(r.parent.id,r.name);if(Fr.nameTable[t]===r)Fr.nameTable[t]=r.name_next;else for(var e=Fr.nameTable[t];e;){if(e.name_next===r){e.name_next=r.name_next;break}e=e.name_next}},lookupNode(r,t){var e=Fr.mayLookup(r);if(e)throw new Fr.ErrnoError(e);for(var n=Fr.hashName(r.id,t),o=Fr.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===r.id&&a===t)return o}return Fr.lookup(r,t)},createNode(r,t,e,n){var o=new Fr.FSNode(r,t,e,n);return Fr.hashAddNode(o),o},destroyNode(r){Fr.hashRemoveNode(r)},isRoot:r=>r===r.parent,isMountpoint:r=>!!r.mounted,isFile:r=>32768==(61440&r),isDir:r=>16384==(61440&r),isLink:r=>40960==(61440&r),isChrdev:r=>8192==(61440&r),isBlkdev:r=>24576==(61440&r),isFIFO:r=>4096==(61440&r),isSocket:r=>!(49152&~r),flagsToPermissionString(r){var t=["r","w","rw"][3&r];return 512&r&&(t+="w"),t},nodePermissions:(r,t)=>Fr.ignorePermissions||(!t.includes("r")||292&r.mode)&&(!t.includes("w")||146&r.mode)&&(!t.includes("x")||73&r.mode)?0:2,mayLookup:r=>Fr.isDir(r.mode)?Fr.nodePermissions(r,"x")||(r.node_ops.lookup?0:2):54,mayCreate(r,t){if(!Fr.isDir(r.mode))return 54;try{return Fr.lookupNode(r,t),20}catch(r){}return Fr.nodePermissions(r,"wx")},mayDelete(r,t,e){var n;try{n=Fr.lookupNode(r,t)}catch(r){return r.errno}var o=Fr.nodePermissions(r,"wx");if(o)return o;if(e){if(!Fr.isDir(n.mode))return 54;if(Fr.isRoot(n)||Fr.getPath(n)===Fr.cwd())return 10}else if(Fr.isDir(n.mode))return 31;return 0},mayOpen:(r,t)=>r?Fr.isLink(r.mode)?32:Fr.isDir(r.mode)&&("r"!==Fr.flagsToPermissionString(t)||576&t)?31:Fr.nodePermissions(r,Fr.flagsToPermissionString(t)):44,checkOpExists(r,t){if(!r)throw new Fr.ErrnoError(t);return r},MAX_OPEN_FDS:4096,nextfd(){for(var r=0;r<=Fr.MAX_OPEN_FDS;r++)if(!Fr.streams[r])return r;throw new Fr.ErrnoError(33)},getStreamChecked(r){var t=Fr.getStream(r);if(!t)throw new Fr.ErrnoError(8);return t},getStream:r=>Fr.streams[r],createStream:(r,t=-1)=>(r=Object.assign(new Fr.FSStream,r),-1==t&&(t=Fr.nextfd()),r.fd=t,Fr.streams[t]=r,r),closeStream(r){Fr.streams[r]=null},dupStream(r,t=-1){var e=Fr.createStream(r,t);return e.stream_ops?.dup?.(e),e},doSetAttr(r,t,e){var n=r?.stream_ops.setattr,o=n?r:t;n??=t.node_ops.setattr,Fr.checkOpExists(n,63),n(o,e)},chrdev_stream_ops:{open(r){var t=Fr.getDevice(r.node.rdev);r.stream_ops=t.stream_ops,r.stream_ops.open?.(r)},llseek(){throw new Fr.ErrnoError(70)}},major:r=>r>>8,minor:r=>255&r,makedev:(r,t)=>r<<8|t,registerDevice(r,t){Fr.devices[r]={stream_ops:t}},getDevice:r=>Fr.devices[r],getMounts(r){for(var t=[],e=[r];e.length;){var n=e.pop();t.push(n),e.push(...n.mounts)}return t},syncfs(r,t){"function"==typeof r&&(t=r,r=!1),Fr.syncFSRequests++,Fr.syncFSRequests>1&&_(`warning: ${Fr.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var e=Fr.getMounts(Fr.root.mount),n=0;function o(r){return Fr.syncFSRequests--,t(r)}function a(r){if(r)return a.errored?void 0:(a.errored=!0,o(r));++n>=e.length&&o(null)}e.forEach(t=>{if(!t.type.syncfs)return a(null);t.type.syncfs(t,r,a)})},mount(r,t,e){var n,o="/"===e,a=!e;if(o&&Fr.root)throw new Fr.ErrnoError(10);if(!o&&!a){var i=Fr.lookupPath(e,{follow_mount:!1});if(e=i.path,n=i.node,Fr.isMountpoint(n))throw new Fr.ErrnoError(10);if(!Fr.isDir(n.mode))throw new Fr.ErrnoError(54)}var s={type:r,opts:t,mountpoint:e,mounts:[]},c=r.mount(s);return c.mount=s,s.root=c,o?Fr.root=c:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),c},unmount(r){var t=Fr.lookupPath(r,{follow_mount:!1});if(!Fr.isMountpoint(t.node))throw new Fr.ErrnoError(28);var e=t.node,n=e.mounted,o=Fr.getMounts(n);Object.keys(Fr.nameTable).forEach(r=>{for(var t=Fr.nameTable[r];t;){var e=t.name_next;o.includes(t.mount)&&Fr.destroyNode(t),t=e}}),e.mounted=null;var a=e.mount.mounts.indexOf(n);e.mount.mounts.splice(a,1)},lookup:(r,t)=>r.node_ops.lookup(r,t),mknod(r,t,e){var n=Fr.lookupPath(r,{parent:!0}).node,o=pr.basename(r);if(!o)throw new Fr.ErrnoError(28);if("."===o||".."===o)throw new Fr.ErrnoError(20);var a=Fr.mayCreate(n,o);if(a)throw new Fr.ErrnoError(a);if(!n.node_ops.mknod)throw new Fr.ErrnoError(63);return n.node_ops.mknod(n,o,t,e)},statfs:r=>Fr.statfsNode(Fr.lookupPath(r,{follow:!0}).node),statfsStream:r=>Fr.statfsNode(r.node),statfsNode(r){var t={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:Fr.nextInode,ffree:Fr.nextInode-1,fsid:42,flags:2,namelen:255};return r.node_ops.statfs&&Object.assign(t,r.node_ops.statfs(r.mount.opts.root)),t},create:(r,t=438)=>(t&=4095,t|=32768,Fr.mknod(r,t,0)),mkdir:(r,t=511)=>(t&=1023,t|=16384,Fr.mknod(r,t,0)),mkdirTree(r,t){var e=r.split("/"),n="";for(var o of e)if(o){(n||pr.isAbs(r))&&(n+="/"),n+=o;try{Fr.mkdir(n,t)}catch(r){if(20!=r.errno)throw r}}},mkdev:(r,t,e)=>(void 0===e&&(e=t,t=438),t|=8192,Fr.mknod(r,t,e)),symlink(r,t){if(!yr.resolve(r))throw new Fr.ErrnoError(44);var e=Fr.lookupPath(t,{parent:!0}).node;if(!e)throw new Fr.ErrnoError(44);var n=pr.basename(t),o=Fr.mayCreate(e,n);if(o)throw new Fr.ErrnoError(o);if(!e.node_ops.symlink)throw new Fr.ErrnoError(63);return e.node_ops.symlink(e,n,r)},rename(r,t){var e,n,o=pr.dirname(r),a=pr.dirname(t),i=pr.basename(r),s=pr.basename(t);if(e=Fr.lookupPath(r,{parent:!0}).node,n=Fr.lookupPath(t,{parent:!0}).node,!e||!n)throw new Fr.ErrnoError(44);if(e.mount!==n.mount)throw new Fr.ErrnoError(75);var c,u=Fr.lookupNode(e,i),f=yr.relative(r,a);if("."!==f.charAt(0))throw new Fr.ErrnoError(28);if("."!==(f=yr.relative(t,o)).charAt(0))throw new Fr.ErrnoError(55);try{c=Fr.lookupNode(n,s)}catch(r){}if(u!==c){var h=Fr.isDir(u.mode),d=Fr.mayDelete(e,i,h);if(d)throw new Fr.ErrnoError(d);if(d=c?Fr.mayDelete(n,s,h):Fr.mayCreate(n,s))throw new Fr.ErrnoError(d);if(!e.node_ops.rename)throw new Fr.ErrnoError(63);if(Fr.isMountpoint(u)||c&&Fr.isMountpoint(c))throw new Fr.ErrnoError(10);if(n!==e&&(d=Fr.nodePermissions(e,"w")))throw new Fr.ErrnoError(d);Fr.hashRemoveNode(u);try{e.node_ops.rename(u,n,s),u.parent=n}catch(r){throw r}finally{Fr.hashAddNode(u)}}},rmdir(r){var t=Fr.lookupPath(r,{parent:!0}).node,e=pr.basename(r),n=Fr.lookupNode(t,e),o=Fr.mayDelete(t,e,!0);if(o)throw new Fr.ErrnoError(o);if(!t.node_ops.rmdir)throw new Fr.ErrnoError(63);if(Fr.isMountpoint(n))throw new Fr.ErrnoError(10);t.node_ops.rmdir(t,e),Fr.destroyNode(n)},readdir(r){var t=Fr.lookupPath(r,{follow:!0}).node;return Fr.checkOpExists(t.node_ops.readdir,54)(t)},unlink(r){var t=Fr.lookupPath(r,{parent:!0}).node;if(!t)throw new Fr.ErrnoError(44);var e=pr.basename(r),n=Fr.lookupNode(t,e),o=Fr.mayDelete(t,e,!1);if(o)throw new Fr.ErrnoError(o);if(!t.node_ops.unlink)throw new Fr.ErrnoError(63);if(Fr.isMountpoint(n))throw new Fr.ErrnoError(10);t.node_ops.unlink(t,e),Fr.destroyNode(n)},readlink(r){var t=Fr.lookupPath(r).node;if(!t)throw new Fr.ErrnoError(44);if(!t.node_ops.readlink)throw new Fr.ErrnoError(28);return t.node_ops.readlink(t)},stat(r,t){var e=Fr.lookupPath(r,{follow:!t}).node;return Fr.checkOpExists(e.node_ops.getattr,63)(e)},fstat(r){var t=Fr.getStreamChecked(r),e=t.node,n=t.stream_ops.getattr,o=n?t:e;return n??=e.node_ops.getattr,Fr.checkOpExists(n,63),n(o)},lstat:r=>Fr.stat(r,!0),doChmod(r,t,e,n){Fr.doSetAttr(r,t,{mode:4095&e|-4096&t.mode,ctime:Date.now(),dontFollow:n})},chmod(r,t,e){var n;n="string"==typeof r?Fr.lookupPath(r,{follow:!e}).node:r,Fr.doChmod(null,n,t,e)},lchmod(r,t){Fr.chmod(r,t,!0)},fchmod(r,t){var e=Fr.getStreamChecked(r);Fr.doChmod(e,e.node,t,!1)},doChown(r,t,e){Fr.doSetAttr(r,t,{timestamp:Date.now(),dontFollow:e})},chown(r,t,e,n){var o;o="string"==typeof r?Fr.lookupPath(r,{follow:!n}).node:r,Fr.doChown(null,o,n)},lchown(r,t,e){Fr.chown(r,t,e,!0)},fchown(r,t,e){var n=Fr.getStreamChecked(r);Fr.doChown(n,n.node,!1)},doTruncate(r,t,e){if(Fr.isDir(t.mode))throw new Fr.ErrnoError(31);if(!Fr.isFile(t.mode))throw new Fr.ErrnoError(28);var n=Fr.nodePermissions(t,"w");if(n)throw new Fr.ErrnoError(n);Fr.doSetAttr(r,t,{size:e,timestamp:Date.now()})},truncate(r,t){if(t<0)throw new Fr.ErrnoError(28);var e;e="string"==typeof r?Fr.lookupPath(r,{follow:!0}).node:r,Fr.doTruncate(null,e,t)},ftruncate(r,t){var e=Fr.getStreamChecked(r);if(t<0||!(2097155&e.flags))throw new Fr.ErrnoError(28);Fr.doTruncate(e,e.node,t)},utime(r,t,e){var n=Fr.lookupPath(r,{follow:!0}).node;Fr.checkOpExists(n.node_ops.setattr,63)(n,{atime:t,mtime:e})},open(r,t,e=438){if(""===r)throw new Fr.ErrnoError(44);var o,a;if(e=64&(t="string"==typeof t?(r=>{var t={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[r];if(void 0===t)throw new Error(`Unknown file open mode: ${r}`);return t})(t):t)?4095&e|32768:0,"object"==typeof r)o=r;else{a=r.endsWith("/");var i=Fr.lookupPath(r,{follow:!(131072&t),noent_okay:!0});o=i.node,r=i.path}var s=!1;if(64&t)if(o){if(128&t)throw new Fr.ErrnoError(20)}else{if(a)throw new Fr.ErrnoError(31);o=Fr.mknod(r,511|e,0),s=!0}if(!o)throw new Fr.ErrnoError(44);if(Fr.isChrdev(o.mode)&&(t&=-513),65536&t&&!Fr.isDir(o.mode))throw new Fr.ErrnoError(54);if(!s){var c=Fr.mayOpen(o,t);if(c)throw new Fr.ErrnoError(c)}512&t&&!s&&Fr.truncate(o,0),t&=-131713;var u=Fr.createStream({node:o,path:Fr.getPath(o),flags:t,seekable:!0,position:0,stream_ops:o.stream_ops,ungotten:[],error:!1});return u.stream_ops.open&&u.stream_ops.open(u),s&&Fr.chmod(o,511&e),!n.logReadFiles||1&t||r in Fr.readFiles||(Fr.readFiles[r]=1),u},close(r){if(Fr.isClosed(r))throw new Fr.ErrnoError(8);r.getdents&&(r.getdents=null);try{r.stream_ops.close&&r.stream_ops.close(r)}catch(r){throw r}finally{Fr.closeStream(r.fd)}r.fd=null},isClosed:r=>null===r.fd,llseek(r,t,e){if(Fr.isClosed(r))throw new Fr.ErrnoError(8);if(!r.seekable||!r.stream_ops.llseek)throw new Fr.ErrnoError(70);if(0!=e&&1!=e&&2!=e)throw new Fr.ErrnoError(28);return r.position=r.stream_ops.llseek(r,t,e),r.ungotten=[],r.position},read(r,t,e,n,o){if(n<0||o<0)throw new Fr.ErrnoError(28);if(Fr.isClosed(r))throw new Fr.ErrnoError(8);if(1==(2097155&r.flags))throw new Fr.ErrnoError(8);if(Fr.isDir(r.node.mode))throw new Fr.ErrnoError(31);if(!r.stream_ops.read)throw new Fr.ErrnoError(28);var a=void 0!==o;if(a){if(!r.seekable)throw new Fr.ErrnoError(70)}else o=r.position;var i=r.stream_ops.read(r,t,e,n,o);return a||(r.position+=i),i},write(r,t,e,n,o,a){if(n<0||o<0)throw new Fr.ErrnoError(28);if(Fr.isClosed(r))throw new Fr.ErrnoError(8);if(!(2097155&r.flags))throw new Fr.ErrnoError(8);if(Fr.isDir(r.node.mode))throw new Fr.ErrnoError(31);if(!r.stream_ops.write)throw new Fr.ErrnoError(28);r.seekable&&1024&r.flags&&Fr.llseek(r,0,2);var i=void 0!==o;if(i){if(!r.seekable)throw new Fr.ErrnoError(70)}else o=r.position;var s=r.stream_ops.write(r,t,e,n,o,a);return i||(r.position+=s),s},mmap(r,t,e,n,o){if(2&n&&!(2&o)&&2!=(2097155&r.flags))throw new Fr.ErrnoError(2);if(1==(2097155&r.flags))throw new Fr.ErrnoError(2);if(!r.stream_ops.mmap)throw new Fr.ErrnoError(43);if(!t)throw new Fr.ErrnoError(28);return r.stream_ops.mmap(r,t,e,n,o)},msync:(r,t,e,n,o)=>r.stream_ops.msync?r.stream_ops.msync(r,t,e,n,o):0,ioctl(r,t,e){if(!r.stream_ops.ioctl)throw new Fr.ErrnoError(59);return r.stream_ops.ioctl(r,t,e)},readFile(r,t={}){if(t.flags=t.flags||0,t.encoding=t.encoding||"binary","utf8"!==t.encoding&&"binary"!==t.encoding)throw new Error(`Invalid encoding type "${t.encoding}"`);var e=Fr.open(r,t.flags),n=Fr.stat(r).size,o=new Uint8Array(n);return Fr.read(e,o,0,n,0),"utf8"===t.encoding&&(o=K(o)),Fr.close(e),o},writeFile(r,t,e={}){e.flags=e.flags||577;var n=Fr.open(r,e.flags,e.mode);if("string"==typeof t&&(t=new Uint8Array(_r(t,!0))),!ArrayBuffer.isView(t))throw new Error("Unsupported data type");Fr.write(n,t,0,t.byteLength,void 0,e.canOwn),Fr.close(n)},cwd:()=>Fr.currentPath,chdir(r){var t=Fr.lookupPath(r,{follow:!0});if(null===t.node)throw new Fr.ErrnoError(44);if(!Fr.isDir(t.node.mode))throw new Fr.ErrnoError(54);var e=Fr.nodePermissions(t.node,"x");if(e)throw new Fr.ErrnoError(e);Fr.currentPath=t.path},createDefaultDirectories(){Fr.mkdir("/tmp"),Fr.mkdir("/home"),Fr.mkdir("/home/web_user")},createDefaultDevices(){Fr.mkdir("/dev"),Fr.registerDevice(Fr.makedev(1,3),{read:()=>0,write:(r,t,e,n,o)=>n,llseek:()=>0}),Fr.mkdev("/dev/null",Fr.makedev(1,3)),Sr.register(Fr.makedev(5,0),Sr.default_tty_ops),Sr.register(Fr.makedev(6,0),Sr.default_tty1_ops),Fr.mkdev("/dev/tty",Fr.makedev(5,0)),Fr.mkdev("/dev/tty1",Fr.makedev(6,0));var r=new Uint8Array(1024),t=0,e=()=>(0===t&&(Er(r),t=r.byteLength),r[--t]);Fr.createDevice("/dev","random",e),Fr.createDevice("/dev","urandom",e),Fr.mkdir("/dev/shm"),Fr.mkdir("/dev/shm/tmp")},createSpecialDirectories(){Fr.mkdir("/proc");var r=Fr.mkdir("/proc/self");Fr.mkdir("/proc/self/fd"),Fr.mount({mount(){var t=Fr.createNode(r,"fd",16895,73);return t.stream_ops={llseek:Or.stream_ops.llseek},t.node_ops={lookup(r,t){var e=+t,n=Fr.getStreamChecked(e),o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path},id:e+1};return o.parent=o,o},readdir:()=>Array.from(Fr.streams.entries()).filter(([r,t])=>t).map(([r,t])=>r.toString())},t}},{},"/proc/self/fd")},createStandardStreams(r,t,e){r?Fr.createDevice("/dev","stdin",r):Fr.symlink("/dev/tty","/dev/stdin"),t?Fr.createDevice("/dev","stdout",null,t):Fr.symlink("/dev/tty","/dev/stdout"),e?Fr.createDevice("/dev","stderr",null,e):Fr.symlink("/dev/tty1","/dev/stderr"),Fr.open("/dev/stdin",0),Fr.open("/dev/stdout",1),Fr.open("/dev/stderr",1)},staticInit(){Fr.nameTable=new Array(4096),Fr.mount(Or,{},"/"),Fr.createDefaultDirectories(),Fr.createDefaultDevices(),Fr.createSpecialDirectories(),Fr.filesystems={MEMFS:Or}},init(r,t,e){Fr.initialized=!0,r??=n.stdin,t??=n.stdout,e??=n.stderr,Fr.createStandardStreams(r,t,e)},quit(){for(var r of(Fr.initialized=!1,nr(0),Fr.streams))r&&Fr.close(r)},findObject(r,t){var e=Fr.analyzePath(r,t);return e.exists?e.object:null},analyzePath(r,t){try{r=(n=Fr.lookupPath(r,{follow:!t})).path}catch(r){}var e={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Fr.lookupPath(r,{parent:!0});e.parentExists=!0,e.parentPath=n.path,e.parentObject=n.node,e.name=pr.basename(r),n=Fr.lookupPath(r,{follow:!t}),e.exists=!0,e.path=n.path,e.object=n.node,e.name=n.node.name,e.isRoot="/"===n.path}catch(r){e.error=r.errno}return e},createPath(r,t,e,n){r="string"==typeof r?r:Fr.getPath(r);for(var o=t.split("/").reverse();o.length;){var a=o.pop();if(a){var i=pr.join2(r,a);try{Fr.mkdir(i)}catch(r){if(20!=r.errno)throw r}r=i}}return i},createFile(r,t,e,n,o){var a=pr.join2("string"==typeof r?r:Fr.getPath(r),t),i=Tr(n,o);return Fr.create(a,i)},createDataFile(r,t,e,n,o,a){var i=t;r&&(r="string"==typeof r?r:Fr.getPath(r),i=t?pr.join2(r,t):r);var s=Tr(n,o),c=Fr.create(i,s);if(e){if("string"==typeof e){for(var u=new Array(e.length),f=0,h=e.length;f<h;++f)u[f]=e.charCodeAt(f);e=u}Fr.chmod(c,146|s);var d=Fr.open(c,577);Fr.write(d,e,0,e.length,0,a),Fr.close(d),Fr.chmod(c,s)}},createDevice(r,t,e,n){var o=pr.join2("string"==typeof r?r:Fr.getPath(r),t),a=Tr(!!e,!!n);Fr.createDevice.major??=64;var i=Fr.makedev(Fr.createDevice.major++,0);return Fr.registerDevice(i,{open(r){r.seekable=!1},close(r){n?.buffer?.length&&n(10)},read(r,t,n,o,a){for(var i=0,s=0;s<o;s++){var c;try{c=e()}catch(r){throw new Fr.ErrnoError(29)}if(void 0===c&&0===i)throw new Fr.ErrnoError(6);if(null==c)break;i++,t[n+s]=c}return i&&(r.node.atime=Date.now()),i},write(r,t,e,o,a){for(var i=0;i<o;i++)try{n(t[e+i])}catch(r){throw new Fr.ErrnoError(29)}return o&&(r.node.mtime=r.node.ctime=Date.now()),i}}),Fr.mkdev(o,a,i)},forceLoadFile(r){if(r.isDevice||r.isFolder||r.link||r.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{r.contents=e(r.url),r.usedBytes=r.contents.length}catch(r){throw new Fr.ErrnoError(29)}},createLazyFile(r,t,e,n,o){class i{lengthKnown=!1;chunks=[];get(r){if(!(r>this.length-1||r<0)){var t=r%this.chunkSize,e=r/this.chunkSize|0;return this.getter(e)[t]}}setDataGetter(r){this.getter=r}cacheLength(){var r=new XMLHttpRequest;if(r.open("HEAD",e,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error("Couldn't load "+e+". Status: "+r.status);var t,n=Number(r.getResponseHeader("Content-length")),o=(t=r.getResponseHeader("Accept-Ranges"))&&"bytes"===t,a=(t=r.getResponseHeader("Content-Encoding"))&&"gzip"===t,i=1048576;o||(i=n);var s=this;s.setDataGetter(r=>{var t=r*i,o=(r+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=((r,t)=>{if(r>t)throw new Error("invalid range ("+r+", "+t+") or no bytes requested!");if(t>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",e,!1),n!==i&&o.setRequestHeader("Range","bytes="+r+"-"+t),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+e+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):_r(o.responseText||"",!0)})(t,o)),void 0===s.chunks[r])throw new Error("doXHR failed!");return s.chunks[r]}),!a&&n||(i=n=1,n=this.getter(0).length,i=n,k("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if("undefined"!=typeof XMLHttpRequest){if(!a)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var s={isDevice:!1,contents:new i}}else s={isDevice:!1,url:e};var c=Fr.createFile(r,t,s,n,o);s.contents?c.contents=s.contents:s.url&&(c.contents=null,c.url=s.url),Object.defineProperties(c,{usedBytes:{get:function(){return this.contents.length}}});var u={};function f(r,t,e,n,o){var a=r.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(a.slice)for(var s=0;s<i;s++)t[e+s]=a[o+s];else for(s=0;s<i;s++)t[e+s]=a.get(o+s);return i}return Object.keys(c.stream_ops).forEach(r=>{var t=c.stream_ops[r];u[r]=(...r)=>(Fr.forceLoadFile(c),t(...r))}),u.read=(r,t,e,n,o)=>(Fr.forceLoadFile(c),f(r,t,e,n,o)),u.mmap=(r,t,e,n,o)=>{Fr.forceLoadFile(c);var a=Nr(t);if(!a)throw new Fr.ErrnoError(48);return f(r,v,a,t,e),{ptr:a,allocated:!0}},c.stream_ops=u,c}},Pr={DEFAULT_POLLMASK:5,calculateAt(r,t,e){if(pr.isAbs(t))return t;var n;if(n=-100===r?Fr.cwd():Pr.getStreamFromFD(r).path,0==t.length){if(!e)throw new Fr.ErrnoError(44);return n}return n+"/"+t},writeStat(r,t){y[r>>>2>>>0]=t.dev,y[r+4>>>2>>>0]=t.mode,g[r+8>>>2>>>0]=t.nlink,y[r+12>>>2>>>0]=t.uid,y[r+16>>>2>>>0]=t.gid,y[r+20>>>2>>>0]=t.rdev,b[r+24>>>3>>>0]=BigInt(t.size),y[r+32>>>2>>>0]=4096,y[r+36>>>2>>>0]=t.blocks;var e=t.atime.getTime(),n=t.mtime.getTime(),o=t.ctime.getTime();return b[r+40>>>3>>>0]=BigInt(Math.floor(e/1e3)),g[r+48>>>2>>>0]=e%1e3*1e3*1e3,b[r+56>>>3>>>0]=BigInt(Math.floor(n/1e3)),g[r+64>>>2>>>0]=n%1e3*1e3*1e3,b[r+72>>>3>>>0]=BigInt(Math.floor(o/1e3)),g[r+80>>>2>>>0]=o%1e3*1e3*1e3,b[r+88>>>3>>>0]=BigInt(t.ino),0},writeStatFs(r,t){y[r+4>>>2>>>0]=t.bsize,y[r+40>>>2>>>0]=t.bsize,y[r+8>>>2>>>0]=t.blocks,y[r+12>>>2>>>0]=t.bfree,y[r+16>>>2>>>0]=t.bavail,y[r+20>>>2>>>0]=t.files,y[r+24>>>2>>>0]=t.ffree,y[r+28>>>2>>>0]=t.fsid,y[r+44>>>2>>>0]=t.flags,y[r+36>>>2>>>0]=t.namelen},doMsync(r,t,e,n,o){if(!Fr.isFile(t.node.mode))throw new Fr.ErrnoError(43);if(2&n)return 0;var a=p.slice(r,r+e);Fr.msync(t,a,o,e,n)},getStreamFromFD:r=>Fr.getStreamChecked(r),varargs:void 0,getStr:r=>q(r)},Rr=()=>{var r=y[+Pr.varargs>>>2>>>0];return Pr.varargs+=4,r},Mr=Rr,Cr=(r,t,e)=>kr(r,p,t,e),Lr=r=>g[r>>>2>>>0]+4294967296*y[r+4>>>2>>>0],Ir=0,Br=[0,31,60,91,121,152,182,213,244,274,305,335],xr=[0,31,59,90,120,151,181,212,243,273,304,334],Ur=r=>{var t;return((t=r.getFullYear())%4!=0||t%100==0&&t%400!=0?xr:Br)[r.getMonth()]+r.getDate()-1},zr=()=>Date.now(),jr=r=>{var t=(r-w.buffer.byteLength+65535)/65536|0;try{return w.grow(t),N(),1}catch(r){}},Hr={},Gr=()=>{if(!Gr.strings){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var t in Hr)void 0===Hr[t]?delete r[t]:r[t]=Hr[t];var e=[];for(var t in r)e.push(`${t}=${r[t]}`);Gr.strings=e}return Gr.strings},Yr=()=>G||Ir>0,$r=r=>{d=r,Yr()||(n.onExit?.(r),S=!0),c(0,new I(r))},Xr=(r,t)=>{d=r,Yr()||(ar(),Fr.quit(),Sr.shutdown()),$r(r)},Wr=Xr,Kr=r=>fr(r);Fr.createPreloadedFile=(r,e,n,o,a,i,s,c,u,f)=>{var h=e?yr.resolve(pr.join2(r,e)):r;function d(t){function n(t){f?.(),c||((...r)=>{Fr.createDataFile(...r)})(r,e,t,o,a,u),i?.(),F()}((r,t,e,n)=>{"undefined"!=typeof Browser&&Browser.init();var o=!1;return Ar.forEach(a=>{o||a.canHandle(t)&&(a.handle(r,t,e,n),o=!0)}),o})(t,h,n,()=>{s?.(),F()})||n(t)}T(),"string"==typeof n?(async r=>{var e=await t(r);return new Uint8Array(e)})(n).then(d,s):d(n)},Fr.staticInit(),Or.doesNotExistError=new Fr.ErrnoError(44),Or.doesNotExistError.stack="<generic error, no stack>",n.noExitRuntime&&(G=n.noExitRuntime),n.preloadPlugins&&(Ar=n.preloadPlugins),n.print&&(k=n.print),n.printErr&&(_=n.printErr),n.wasmBinary&&(h=n.wasmBinary),n.arguments&&(i=n.arguments),n.thisProgram&&(s=n.thisProgram),n.callMain=Qr,n.ENV=Hr,n.ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},n.PATH=pr,n.FS=Fr;var qr={V:function(r,t,e,n){return t>>>=0,n>>>=0,P(`Assertion failed: ${q(r>>>=0)}, at: `+[t?q(t):"unknown filename",e,n?q(n):"unknown function"])},sb:function(r,t){return Q(r>>>=0)(t)},q:function(r){var t=new tr(r>>>=0);return t.get_caught()||(t.set_caught(!0),J--),t.set_rethrown(!1),Z.push(t),lr(r),or(r)},ib:function(){if(!Z.length)return 0;var r=Z[Z.length-1];return lr(r.excPtr),r.excPtr},y:()=>{sr(0,0);var r=Z.pop();dr(r.excPtr),rr=0},a:function(){return vr([])},j:function(r){return vr([r>>>=0])},t:function(r,t){return vr([r>>>=0,t>>>=0])},p:function(r,t,e){return vr([r>>>=0,t>>>=0,e>>>=0])},Aa:()=>{var r=Z.pop();r||P("no exception to throw");var t=r.excPtr;throw r.get_rethrown()||(Z.push(r),r.set_rethrown(!0),r.set_caught(!1),J++),rr=t},r:function(r,t,e){throw t>>>=0,e>>>=0,new tr(r>>>=0).init(t,e),J++,rr=r},O:()=>J,d:function(r){throw rr||(rr=r>>>=0),rr},Lb:function(r){r>>>=0;try{return r=Pr.getStr(r),Fr.chdir(r),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Ra:function(r,t){r>>>=0;try{return r=Pr.getStr(r),Fr.chmod(r,t),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Jb:function(r){try{var t=Pr.getStreamFromFD(r);return Fr.dupStream(t).fd}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Mb:function(r,t,e,n){t>>>=0;try{if(t=Pr.getStr(t),t=Pr.calculateAt(r,t),-8&e)return-28;var o=Fr.lookupPath(t,{follow:!0}).node;if(!o)return-44;var a="";return 4&e&&(a+="r"),2&e&&(a+="w"),1&e&&(a+="x"),a&&Fr.nodePermissions(o,a)?-2:0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Hb:function(r,t){try{return Fr.fchmod(r,t),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},W:function(r,t,e){e>>>=0,Pr.varargs=e;try{var n=Pr.getStreamFromFD(r);switch(t){case 0:if((o=Rr())<0)return-28;for(;Fr.streams[o];)o++;return Fr.dupStream(n,o).fd;case 1:case 2:case 13:case 14:return 0;case 3:return n.flags;case 4:var o=Rr();return n.flags|=o,0;case 12:return o=Mr(),E[o+0>>>1>>>0]=2,0}return-28}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Gb:function(r,t){t>>>=0;try{return Pr.writeStat(t,Fr.fstat(r))}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},ob:function(r,t,e){e>>>=0;try{var n=Pr.getStreamFromFD(r);return Pr.writeStatFs(e,Fr.statfsStream(n)),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Cb:function(r,t){r>>>=0,t>>>=0;try{if(0===t)return-28;var e=Fr.cwd(),n=br(e)+1;return t<n?-68:(Cr(e,r,t),n)}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},rb:function(r,t,e){t>>>=0,e>>>=0;try{var n=Pr.getStreamFromFD(r);n.getdents||=Fr.readdir(n.path);for(var o=280,a=0,i=Fr.llseek(n,0,1),s=Math.floor(i/o),c=Math.min(n.getdents.length,s+Math.floor(e/o)),u=s;u<c;u++){var f,h,d=n.getdents[u];if("."===d)f=n.node.id,h=4;else if(".."===d)f=Fr.lookupPath(n.path,{parent:!0}).node.id,h=4;else{var l;try{l=Fr.lookupNode(n.node,d)}catch(r){if(28===r?.errno)continue;throw r}f=l.id,h=Fr.isChrdev(l.mode)?2:Fr.isDir(l.mode)?4:Fr.isLink(l.mode)?10:8}b[t+a>>>3>>>0]=BigInt(f),b[t+a+8>>>3>>>0]=BigInt((u+1)*o),E[t+a+16>>>1>>>0]=280,v[t+a+18>>>0]=h,Cr(d,t+a+19,256),a+=o}return Fr.llseek(n,u*o,0),a}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Pb:function(r,t,e){e>>>=0,Pr.varargs=e;try{var n=Pr.getStreamFromFD(r);switch(t){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return n.tty?0:-59;case 21505:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcgets){var o=n.tty.ops.ioctl_tcgets(n),a=Mr();y[a>>>2>>>0]=o.c_iflag||0,y[a+4>>>2>>>0]=o.c_oflag||0,y[a+8>>>2>>>0]=o.c_cflag||0,y[a+12>>>2>>>0]=o.c_lflag||0;for(var i=0;i<32;i++)v[a+i+17>>>0]=o.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcsets){a=Mr();var s=y[a>>>2>>>0],c=y[a+4>>>2>>>0],u=y[a+8>>>2>>>0],f=y[a+12>>>2>>>0],h=[];for(i=0;i<32;i++)h.push(v[a+i+17>>>0]);return n.tty.ops.ioctl_tcsets(n.tty,t,{c_iflag:s,c_oflag:c,c_cflag:u,c_lflag:f,c_cc:h})}return 0;case 21519:return n.tty?(a=Mr(),y[a>>>2>>>0]=0,0):-59;case 21520:return n.tty?-28:-59;case 21531:return a=Mr(),Fr.ioctl(n,t,a);case 21523:if(!n.tty)return-59;if(n.tty.ops.ioctl_tiocgwinsz){var d=n.tty.ops.ioctl_tiocgwinsz(n.tty);a=Mr(),E[a>>>1>>>0]=d[0],E[a+2>>>1>>>0]=d[1]}return 0;default:return-28}}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Db:function(r,t){r>>>=0,t>>>=0;try{return r=Pr.getStr(r),Pr.writeStat(t,Fr.lstat(r))}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Ab:function(r,t,e){t>>>=0;try{return t=Pr.getStr(t),t=Pr.calculateAt(r,t),Fr.mkdir(t,e,0),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Eb:function(r,t,e,n){t>>>=0,e>>>=0;try{t=Pr.getStr(t);var o=256&n,a=4096&n;return n&=-6401,t=Pr.calculateAt(r,t,a),Pr.writeStat(e,o?Fr.lstat(t):Fr.stat(t))}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Ba:function(r,t,e,n){t>>>=0,n>>>=0,Pr.varargs=n;try{t=Pr.getStr(t),t=Pr.calculateAt(r,t);var o=n?Rr():0;return Fr.open(t,e,o).fd}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},qb:function(r,t,e,n){t>>>=0,e>>>=0,n>>>=0;try{if(t=Pr.getStr(t),t=Pr.calculateAt(r,t),n<=0)return-28;var o=Fr.readlink(t),a=Math.min(n,br(o)),i=v[e+a>>>0];return Cr(o,e,n+1),v[e+a>>>0]=i,a}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},pb:function(r,t,e,n){t>>>=0,n>>>=0;try{return t=Pr.getStr(t),n=Pr.getStr(n),t=Pr.calculateAt(r,t),n=Pr.calculateAt(e,n),Fr.rename(t,n),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Oa:function(r){r>>>=0;try{return r=Pr.getStr(r),Fr.rmdir(r),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Fb:function(r,t){r>>>=0,t>>>=0;try{return r=Pr.getStr(r),Pr.writeStat(t,Fr.stat(r))}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Pa:function(r,t,e){t>>>=0;try{if(t=Pr.getStr(t),t=Pr.calculateAt(r,t),e){if(512!==e)return-28;Fr.rmdir(t)}else Fr.unlink(t);return 0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},lb:function(r,t,e,n){t>>>=0,e>>>=0;try{t=Pr.getStr(t),t=Pr.calculateAt(r,t,!0);var o,a,i=Date.now();if(e){var s=Lr(e),c=y[e+8>>>2>>>0];o=1073741823==c?i:1073741822==c?null:1e3*s+c/1e6,s=Lr(e+=16),a=1073741823==(c=y[e+8>>>2>>>0])?i:1073741822==c?null:1e3*s+c/1e6}else o=i,a=i;return null!==(a??o)&&Fr.utime(t,o,a),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},Nb:()=>P(""),tb:()=>{G=!1,Ir=0},mb:function(r){return(r>>>=0)?-52:0},jb:()=>{throw 1/0},wb:function(r,t){r=X(r),t>>>=0;var e=new Date(1e3*r);y[t>>>2>>>0]=e.getUTCSeconds(),y[t+4>>>2>>>0]=e.getUTCMinutes(),y[t+8>>>2>>>0]=e.getUTCHours(),y[t+12>>>2>>>0]=e.getUTCDate(),y[t+16>>>2>>>0]=e.getUTCMonth(),y[t+20>>>2>>>0]=e.getUTCFullYear()-1900,y[t+24>>>2>>>0]=e.getUTCDay();var n=Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0),o=(e.getTime()-n)/864e5|0;y[t+28>>>2>>>0]=o},xb:function(r,t){r=X(r),t>>>=0;var e=new Date(1e3*r);y[t>>>2>>>0]=e.getSeconds(),y[t+4>>>2>>>0]=e.getMinutes(),y[t+8>>>2>>>0]=e.getHours(),y[t+12>>>2>>>0]=e.getDate(),y[t+16>>>2>>>0]=e.getMonth(),y[t+20>>>2>>>0]=e.getFullYear()-1900,y[t+24>>>2>>>0]=e.getDay();var n=0|Ur(e);y[t+28>>>2>>>0]=n,y[t+36>>>2>>>0]=-60*e.getTimezoneOffset();var o=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=0|(a!=i&&e.getTimezoneOffset()==Math.min(i,a));y[t+32>>>2>>>0]=s},yb:function(r){r>>>=0;var t=(()=>{var t=new Date(y[r+20>>>2>>>0]+1900,y[r+16>>>2>>>0],y[r+12>>>2>>>0],y[r+8>>>2>>>0],y[r+4>>>2>>>0],y[r>>>2>>>0],0),e=y[r+32>>>2>>>0],n=t.getTimezoneOffset(),o=new Date(t.getFullYear(),0,1),a=new Date(t.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=Math.min(i,a);if(e<0)y[r+32>>>2>>>0]=Number(a!=i&&s==n);else if(e>0!=(s==n)){var c=Math.max(i,a),u=e>0?s:c;t.setTime(t.getTime()+6e4*(u-n))}y[r+24>>>2>>>0]=t.getDay();var f=0|Ur(t);y[r+28>>>2>>>0]=f,y[r>>>2>>>0]=t.getSeconds(),y[r+4>>>2>>>0]=t.getMinutes(),y[r+8>>>2>>>0]=t.getHours(),y[r+12>>>2>>>0]=t.getDate(),y[r+16>>>2>>>0]=t.getMonth(),y[r+20>>>2>>>0]=t.getYear();var h=t.getTime();return isNaN(h)?-1:h/1e3})();return BigInt(t)},ub:function(r,t,e,n,o,a,i){r>>>=0,o=X(o),a>>>=0,i>>>=0;try{var s=Pr.getStreamFromFD(n),c=Fr.mmap(s,r,o,t,e),u=c.ptr;return y[a>>>2>>>0]=c.allocated,g[i>>>2>>>0]=u,0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},vb:function(r,t,e,n,o,a){r>>>=0,t>>>=0,a=X(a);try{var i=Pr.getStreamFromFD(o);2&e&&Pr.doMsync(r,i,t,n,a)}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return-r.errno}},zb:function(r,t,e,n){r>>>=0,t>>>=0,e>>>=0,n>>>=0;var o=(new Date).getFullYear(),a=new Date(o,0,1),i=new Date(o,6,1),s=a.getTimezoneOffset(),c=i.getTimezoneOffset(),u=Math.max(s,c);g[r>>>2>>>0]=60*u,y[t>>>2>>>0]=Number(s!=c);var f=r=>{var t=r>=0?"-":"+",e=Math.abs(r);return`UTC${t}${String(Math.floor(e/60)).padStart(2,"0")}${String(e%60).padStart(2,"0")}`},h=f(s),d=f(c);c<s?(Cr(h,e,17),Cr(d,n,17)):(Cr(h,n,17),Cr(d,e,17))},Kb:function(r,t,e){if(t=X(t),e>>>=0,!((n=r)>=0&&n<=3))return 28;var n,o;o=0===r?zr():performance.now();var a=Math.round(1e3*o*1e3);return b[e>>>3>>>0]=BigInt(a),0},Ib:zr,nb:function(){return 4294901760},kb:function(r){r>>>=0;var t=p.length,e=4294901760;if(r>e)return!1;for(var n=1;n<=4;n*=2){var o=t*(1+.2/n);o=Math.min(o,r+100663296);var a=Math.min(e,Dr(Math.max(r,o),65536));if(jr(a))return!0}return!1},Qb:function(r,t){r>>>=0,t>>>=0;var e=0,n=0;for(var o of Gr()){var a=t+e;g[r+n>>>2>>>0]=a,e+=Cr(o,a,1/0)+1,n+=4}return 0},Rb:function(r,t){r>>>=0,t>>>=0;var e=Gr();g[r>>>2>>>0]=e.length;var n=0;for(var o of e)n+=br(o)+1;return g[t>>>2>>>0]=n,0},S:Wr,fa:function(r){try{var t=Pr.getStreamFromFD(r);return Fr.close(t),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}},Qa:function(r,t){t>>>=0;try{var e=Pr.getStreamFromFD(r),n=e.tty?2:Fr.isDir(e.mode)?3:Fr.isLink(e.mode)?7:4;return v[t>>>0]=n,E[t+2>>>1>>>0]=0,b[t+8>>>3>>>0]=BigInt(0),b[t+16>>>3>>>0]=BigInt(0),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}},Sa:function(r,t,e,n){t>>>=0,e>>>=0,n>>>=0;try{var o=((r,t,e,n)=>{for(var o=0,a=0;a<e;a++){var i=g[t>>>2>>>0],s=g[t+4>>>2>>>0];t+=8;var c=Fr.read(r,v,i,s,n);if(c<0)return-1;if(o+=c,c<s)break;void 0!==n&&(n+=c)}return o})(Pr.getStreamFromFD(r),t,e);return g[n>>>2>>>0]=o,0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}},Bb:function(r,t,e,n){t=X(t),n>>>=0;try{if(isNaN(t))return 61;var o=Pr.getStreamFromFD(r);return Fr.llseek(o,t,e),b[n>>>3>>>0]=BigInt(o.position),o.getdents&&0===t&&0===e&&(o.getdents=null),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}},Ca:function(r,t,e,n){t>>>=0,e>>>=0,n>>>=0;try{var o=((r,t,e,n)=>{for(var o=0,a=0;a<e;a++){var i=g[t>>>2>>>0],s=g[t+4>>>2>>>0];t+=8;var c=Fr.write(r,v,i,s,n);if(c<0)return-1;if(o+=c,c<s)break;void 0!==n&&(n+=c)}return o})(Pr.getStreamFromFD(r),t,e);return g[n>>>2>>>0]=o,0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}},D:function(r,t){var e=$();try{return Q(r)(t)}catch(r){if(Y(e),r!==r+0)throw r;sr(1,0)}},ba:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},ha:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Na:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},C:function(r){var t=$();try{return Q(r)()}catch(r){if(Y(t),r!==r+0)throw r;sr(1,0)}},b:function(r,t){var e=$();try{return Q(r)(t)}catch(r){if(Y(e),r!==r+0)throw r;sr(1,0)}},u:function(r,t,e){var n=$();try{return Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},J:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},eb:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},ua:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},I:function(r,t,e){var n=$();try{return Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},e:function(r,t,e){var n=$();try{return Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},wa:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Ka:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},cb:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},h:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Ta:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},Ea:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},Sb:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},Tb:function(r,t,e,n,o,a,i){var s=$();try{return Q(r)(t,e,n,o,a,i)}catch(r){if(Y(s),r!==r+0)throw r;sr(1,0)}},l:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},X:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},ya:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},gb:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},fb:function(r,t,e,n,o,a,i,s,c){var u=$();try{return Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},n:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},db:function(r,t,e,n,o,a,i){var s=$();try{return Q(r)(t,e,n,o,a,i)}catch(r){if(Y(s),r!==r+0)throw r;sr(1,0)}},$a:function(r,t,e,n,o,a,i,s,c,u,f){var h=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f)}catch(r){if(Y(h),r!==r+0)throw r;sr(1,0)}},v:function(r,t,e,n,o,a,i){var s=$();try{return Q(r)(t,e,n,o,a,i)}catch(r){if(Y(s),r!==r+0)throw r;sr(1,0)}},w:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},E:function(r,t,e,n,o,a,i,s,c){var u=$();try{return Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},P:function(r,t,e,n,o,a,i,s,c,u){var f=$();try{return Q(r)(t,e,n,o,a,i,s,c,u)}catch(r){if(Y(f),r!==r+0)throw r;sr(1,0)}},da:function(r,t,e,n,o,a,i,s,c,u,f){var h=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f)}catch(r){if(Y(h),r!==r+0)throw r;sr(1,0)}},ia:function(r,t,e,n,o,a,i,s,c,u,f,h){var d=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f,h)}catch(r){if(Y(d),r!==r+0)throw r;sr(1,0)}},Y:function(r,t,e,n,o,a,i,s,c,u,f,h,d){var l=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f,h,d)}catch(r){if(Y(l),r!==r+0)throw r;sr(1,0)}},ea:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m){var w=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m)}catch(r){if(Y(w),r!==r+0)throw r;sr(1,0)}},Ma:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m,w){var v=$();try{return Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m,w)}catch(r){if(Y(v),r!==r+0)throw r;sr(1,0)}},Wa:function(r,t,e,n,o,a,i,s,c){var u=$();try{return Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},Va:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},sa:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},Ua:function(r,t,e,n,o,a,i,s){var c=$();try{return Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},ga:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},ta:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},Z:function(r,t,e){var n=$();try{return Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},R:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},pa:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},$:function(r){var t=$();try{return Q(r)()}catch(r){if(Y(t),r!==r+0)throw r;return sr(1,0),0n}},M:function(r,t){var e=$();try{return Q(r)(t)}catch(r){if(Y(e),r!==r+0)throw r;return sr(1,0),0n}},T:function(r,t,e){var n=$();try{return Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;return sr(1,0),0n}},Ha:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;return sr(1,0),0n}},Q:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;return sr(1,0),0n}},ka:function(r,t,e,n,o,a){var i=$();try{return Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;return sr(1,0),0n}},N:function(r,t,e,n){var o=$();try{return Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;return sr(1,0),0n}},_:function(r,t,e,n,o){var a=$();try{return Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;return sr(1,0),0n}},k:function(r){var t=$();try{Q(r)()}catch(r){if(Y(t),r!==r+0)throw r;sr(1,0)}},qa:function(r,t){var e=$();try{Q(r)(t)}catch(r){if(Y(e),r!==r+0)throw r;sr(1,0)}},c:function(r,t){var e=$();try{Q(r)(t)}catch(r){if(Y(e),r!==r+0)throw r;sr(1,0)}},B:function(r,t,e){var n=$();try{Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},Ja:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},L:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},na:function(r,t,e){var n=$();try{Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},g:function(r,t,e){var n=$();try{Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},ca:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Ya:function(r,t,e,n,o,a,i,s,c,u,f,h,d){var l=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d)}catch(r){if(Y(l),r!==r+0)throw r;sr(1,0)}},xa:function(r,t,e,n,o,a,i,s){var c=$();try{Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},za:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},ma:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},f:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Da:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},bb:function(r,t,e,n,o,a,i,s,c){var u=$();try{Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},oa:function(r,t,e,n,o,a){var i=$();try{Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},i:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},ab:function(r,t,e,n,o,a,i,s,c,u,f){var h=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f)}catch(r){if(Y(h),r!==r+0)throw r;sr(1,0)}},A:function(r,t,e,n,o,a,i,s,c,u,f){var h=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f)}catch(r){if(Y(h),r!==r+0)throw r;sr(1,0)}},Ub:function(r,t,e,n,o,a,i){var s=$();try{Q(r)(t,e,n,o,a,i)}catch(r){if(Y(s),r!==r+0)throw r;sr(1,0)}},o:function(r,t,e,n,o,a){var i=$();try{Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},m:function(r,t,e,n,o,a,i){var s=$();try{Q(r)(t,e,n,o,a,i)}catch(r){if(Y(s),r!==r+0)throw r;sr(1,0)}},x:function(r,t,e,n,o,a,i,s){var c=$();try{Q(r)(t,e,n,o,a,i,s)}catch(r){if(Y(c),r!==r+0)throw r;sr(1,0)}},z:function(r,t,e,n,o,a,i,s,c){var u=$();try{Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},K:function(r,t,e,n,o,a,i,s,c,u){var f=$();try{Q(r)(t,e,n,o,a,i,s,c,u)}catch(r){if(Y(f),r!==r+0)throw r;sr(1,0)}},G:function(r,t,e,n,o,a,i,s,c,u,f){var h=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f)}catch(r){if(Y(h),r!==r+0)throw r;sr(1,0)}},Ga:function(r,t,e,n,o,a,i,s,c,u,f,h){var d=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h)}catch(r){if(Y(d),r!==r+0)throw r;sr(1,0)}},H:function(r,t,e,n,o,a,i,s,c,u,f,h,d){var l=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d)}catch(r){if(Y(l),r!==r+0)throw r;sr(1,0)}},F:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l){var m=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l)}catch(r){if(Y(m),r!==r+0)throw r;sr(1,0)}},_a:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m){var w=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m)}catch(r){if(Y(w),r!==r+0)throw r;sr(1,0)}},ra:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m,w){var v=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m,w)}catch(r){if(Y(v),r!==r+0)throw r;sr(1,0)}},Ia:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m,w,v){var p=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m,w,v)}catch(r){if(Y(p),r!==r+0)throw r;sr(1,0)}},va:function(r,t,e,n,o,a,i,s,c,u,f,h,d,l,m,w,v,p){var E=$();try{Q(r)(t,e,n,o,a,i,s,c,u,f,h,d,l,m,w,v,p)}catch(r){if(Y(E),r!==r+0)throw r;sr(1,0)}},la:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},U:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Fa:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},aa:function(r,t,e,n,o,a){var i=$();try{Q(r)(t,e,n,o,a)}catch(r){if(Y(i),r!==r+0)throw r;sr(1,0)}},La:function(r,t,e){var n=$();try{Q(r)(t,e)}catch(r){if(Y(n),r!==r+0)throw r;sr(1,0)}},Za:function(r,t,e,n){var o=$();try{Q(r)(t,e,n)}catch(r){if(Y(o),r!==r+0)throw r;sr(1,0)}},Xa:function(r,t,e,n,o){var a=$();try{Q(r)(t,e,n,o)}catch(r){if(Y(a),r!==r+0)throw r;sr(1,0)}},ja:function(r,t,e,n,o,a,i,s,c){var u=$();try{Q(r)(t,e,n,o,a,i,s,c)}catch(r){if(Y(u),r!==r+0)throw r;sr(1,0)}},s:function(r){return r>>>0},Ob:$r,hb:function(r,t){r>>>=0,t>>>=0;try{return Er(p.subarray(r>>>0,r+t>>>0)),0}catch(r){if(void 0===Fr||"ErrnoError"!==r.name)throw r;return r.errno}}},Vr=await async function(){function r(r,t){var e,o;return Vr=function(r){var t,e=r=>t=>r(t)>>>0;return(r=Object.assign({},r))._b=e(r._b),r.ac=(t=r.ac,(r,e)=>t(r,e)>>>0),r.ec=e(r.ec),r.fc=(r=>()=>r()>>>0)(r.fc),r}(Vr=function(r){var t={};for(var e in r){var n=r[e];t[e]="function"==typeof n?C(n):n}return t}(Vr=r.exports)),w=Vr.Vb,N(),B=Vr.Yb,e=B.get,o={},B.get=r=>{var t=e.call(B,r),n=o[r];return n&&n.func===t||(n=o[r]={func:t,wrapper:C(t)}),n.wrapper},function(r){n._main=er=r.Xb,nr=r.Zb,or=r._b,ar=r.$b,ir=r.ac,sr=r.bc,cr=r.cc,ur=r.dc,fr=r.ec,hr=r.fc,dr=r.gc,lr=r.hc,mr=r.ic}(Vr),F(),Vr}T();var t,e={a:qr};return n.instantiateWasm?new Promise((t,o)=>{n.instantiateWasm(e,(e,n)=>{t(r(e))})}):(R??=n.locateFile?(t="openscad.wasm",n.locateFile?n.locateFile(t,f):f+t):new URL("openscad.wasm",import.meta.url).href,r((await L(h,R,e)).instance))}();function Qr(r=[]){var t=er;r.unshift(s);var e=r.length,n=Kr(4*(e+1)),o=n;r.forEach(r=>{g[o>>>2>>>0]=(r=>{var t=br(r)+1,e=Kr(t);return Cr(r,e,t),e})(r),o+=4}),g[o>>>2>>>0]=0;try{M++;var a=t(e,n);return Xr(a),a}catch(r){return(r=>{if(r instanceof I||"unwind"==r)return d;c(0,r)})(r)}finally{M--}}return function(){if(n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()()}(),function r(t=i){function e(){n.calledRun=!0,S||(D=!0,n.noFSInit||Fr.initialized||Fr.init(),Sr.init(),Vr.Wb(),Fr.ignorePermissions=!1,l?.(n),n.onRuntimeInitialized?.(),n.noInitialRun||Qr(t),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)z(n.postRun.shift());x(U)}())}O>0?A=r:(function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)H(n.preRun.shift());x(j)}(),O>0?A=r:n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),e()},1)):e())}(),D?n:new Promise((r,t)=>{l=r,m=t})};export default OpenSCAD;
|
package/dist/openscad.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(()=>{"use strict";var e={200(e){e.exports=require("child_process")},896(e){e.exports=require("fs")},857(e){e.exports=require("os")},928(e){e.exports=require("path")},16(e){e.exports=require("url")},635(e,r,n){function t(e,r,n,t){return new(n||(n=Promise))(function(o,i){function s(e){try{l(t.next(e))}catch(e){i(e)}}function a(e){try{l(t.throw(e))}catch(e){i(e)}}function l(e){var r;e.done?o(e.value):(r=e.value,r instanceof n?r:new n(function(e){e(r)})).then(s,a)}l((t=t.apply(e,r||[])).next())})}n.d(r,{__awaiter:()=>t,__importStar:()=>a});var o=Object.create?function(e,r,n,t){void 0===t&&(t=n);var o=Object.getOwnPropertyDescriptor(r,n);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[n]}}),Object.defineProperty(e,t,o)}:function(e,r,n,t){void 0===t&&(t=n),e[t]=r[n]},i=Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r},s=function(e){return s=Object.getOwnPropertyNames||function(e){var r=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[r.length]=n);return r},s(e)};function a(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var n=s(e),t=0;t<n.length;t++)"default"!==n[t]&&o(r,e,n[t]);return i(r,e),r}}},r={};function n(t){var o=r[t];if(void 0!==o)return o.exports;var i=r[t]={exports:{}};return e[t](i,i.exports,n),i.exports}n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var t={};(()=>{var e=t;Object.defineProperty(e,"__esModule",{value:!0}),e.isOpenSCADFile=function(e){return".scad"===i.extname(e).toLowerCase()},e.getDefaultOpenSCADLibraryPaths=f,e.getAllOpenSCADLibraryPaths=m,e.validateOpenSCAD=function(e,n,t){return r.__awaiter(this,void 0,void 0,function*(){const r=[],t=[];try{const i=null!=n?n:o.readFileSync(e,"utf8"),s=yield d(e=>{},e=>{/ERROR|error/.test(e)?r.push(e):/WARNING|warning/.test(e)&&t.push(e)});return s.FS.writeFile("/input.scad",i),{valid:0===s.callMain(["/input.scad","-o","/output.echo"])&&0===r.length,errors:r,warnings:t}}catch(e){return{valid:!1,errors:[e instanceof Error?e.message:String(e)],warnings:[]}}})},e.generateOpenSCADLibrariesDocumentation=g,e.convertLibrariesDocumentationToMarkdown=y,e.generateAndSaveLibrariesDocumentation=function(e,n,t){return r.__awaiter(this,void 0,void 0,function*(){const r=y(yield g(n,t));yield o.promises.writeFile(e,r,"utf8")})},e.getOpenSCADNodeWorkerPath=S,e.isOpenSCADNodeWorkerAvailable=function(){const e=S();return o.existsSync(e)},e.convertOpenSCADWithNodeWorker=b,e.convertOpenSCAD=function(e,n){return new Promise((r,t)=>{try{const o=function(e){if(e){const r=new Blob([e],{type:"application/javascript"}),n=URL.createObjectURL(r);return new Worker(n)}const r=function(){var e;const r=globalThis.__BABYLON_ROS_WORKER_URL;if("string"==typeof r&&r.trim().length>0)return r;if("undefined"!=typeof document){const r=document.currentScript,n=null==r?void 0:r.src;if(n)try{if("file:"===("undefined"!=typeof window?null===(e=window.location)||void 0===e?void 0:e.protocol:void 0))return new URL("../dist/workers/openscadWorker.js",n).href;const r=new URL(".",n).href;return new URL("workers/openscadWorker.js",r).href}catch(e){}}if("undefined"!=typeof window&&window.location)try{return"file:"===window.location.protocol?new URL("../dist/workers/openscadWorker.js",window.location.href).href:new URL("openscadWorker.js",window.location.href).href}catch(e){}return"./workers/openscadWorker.js"}();return new Worker(r,{type:"module"})}(n),i=e.timeout||3e5,s=setTimeout(()=>{o.terminate(),t(new Error(`OpenSCAD conversion timed out after ${i}ms`))},i);o.onmessage=e=>{e.data.progress||(clearTimeout(s),e.data.success?(o.terminate(),r(e.data)):(o.terminate(),t(new Error(e.data.error||"OpenSCAD conversion failed"))))},o.onerror=e=>{clearTimeout(s),o.terminate(),t(new Error(`Worker error: ${e.message}`))};const a=function(e){if(e&&e.trim().length>0)return e;const r=globalThis.__BABYLON_ROS_OPENSCAD_URL;if("string"==typeof r&&r.trim().length>0)return r;if("undefined"!=typeof document){const e=document.currentScript,r=null==e?void 0:e.src;if(r)try{const e=new URL(".",r).href;return new URL("openscad-wasm-build/dist/openscad.js",e).href}catch(e){}}if("undefined"!=typeof window&&window.location)try{return new URL("openscad-wasm-build/dist/openscad.js",window.location.href).href}catch(e){}return"./openscad-wasm-build/dist/openscad.js"}(e.openscadScriptUrl);o.postMessage(Object.assign(Object.assign({},e),{openscadScriptUrl:a}))}catch(e){t(e)}}).catch(e=>r.__awaiter(this,void 0,void 0,function*(){const r=e instanceof Error?e.message:String(e);if(!/importScripts|Worker error|NetworkError|Failed to execute 'importScripts'|Unable to load OpenSCAD runtime/i.test(r))throw e;throw new Error('OpenSCAD runtime is unavailable. Run "npm run download-openscad" and then "npm run build" to refresh runtime assets, or provide request.openscadScriptUrl to point to openscad.js.')}))},e.convertOpenSCADCancellable=function(e,n,t,o){return r.__awaiter(this,void 0,void 0,function*(){return(null==t?void 0:t.isCancellationRequested)?(null==n||n.appendLine("Conversion cancelled before start"),null):b(e,n,{timeout:null==o?void 0:o.timeout,outputFormat:null==o?void 0:o.outputFormat,parameterOverrides:null==o?void 0:o.parameterOverrides,parameterConfiguration:null==o?void 0:o.parameterConfiguration})})},e.exportOpenSCAD=function(e,t,s,a,l){return r.__awaiter(this,void 0,void 0,function*(){var u;if(!o.existsSync(e))return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Error: SCAD file not found: ${e}`),null;const c="svg"===t?".svg":".stl",f=e.replace(/\.scad$/i,c),v=null!==(u=null==l?void 0:l.timeout)&&void 0!==u?u:3e5,h=Date.now();if("stl"===t){if(null==a?void 0:a.isCancellationRequested)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Export cancelled before start"),null;(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Exporting OpenSCAD to STL via worker: ${e}`);const r=yield b(e,s,{timeout:v,outputFormat:"stl",parameterOverrides:null==l?void 0:l.parameterOverrides});return r||(null==l?void 0:l.suppressErrorMessage)||(null==a?void 0:a.isCancellationRequested)||null==s||s.appendLine("STL export failed via worker"),r}try{if(null==a?void 0:a.isCancellationRequested)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Export cancelled before start"),null;(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Exporting OpenSCAD to ${t.toUpperCase()}: ${e}`);const u=o.readFileSync(e,"utf8");let c=u;(null==l?void 0:l.parameterOverrides)&&((null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Applying parameter overrides"),c=function(e,r){return Object.entries(r).map(([e,r])=>`${e} = ${"string"==typeof r?`"${r.replace(/"/g,'\\"')}"`:r};`).join("\n")+"\n"+e}(u,l.parameterOverrides));const g=i.dirname(e),y=i.resolve(g,"../.."),S=yield m(y),b=[],O=yield d(e=>{},e=>{/ERROR|error/.test(e)&&(b.push(e),(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Error: ${e}`))});if(null==a?void 0:a.isCancellationRequested)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Export cancelled before WASM initialization"),null;if(yield function(e){return r.__awaiter(this,void 0,void 0,function*(){try{const r=p(),t=i.join(r,"openscad.fonts.js");if(o.existsSync(t))try{const{pathToFileURL:r}=n(16),o=yield import(r(t).href);"function"==typeof o.addFonts&&o.addFonts(e)}catch(e){}}catch(e){}})}(O),(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Loading libraries from ${S.length} paths`),yield function(e,n,t){return r.__awaiter(this,void 0,void 0,function*(){try{e.FS.mkdir("/libraries")}catch(e){}for(const r of n){if(!o.existsSync(r))continue;null==t||t.appendLine(`Loading libraries from: ${r}`);const n=yield w(r);let s=0;for(const a of n)try{const n=`/libraries/${i.relative(r,a).replace(/\\/g,"/")}`,t=i.dirname(n).replace(/\\/g,"/").split("/").filter(e=>e);let l="";for(const r of t){l+="/"+r;try{e.FS.mkdir(l)}catch(e){}}const u=o.readFileSync(a,"utf8");e.FS.writeFile(n,u),s++}catch(e){null==t||t.appendLine(`Warning: Failed to load library file: ${a}`)}s>0&&(null==t||t.appendLine(`Loaded ${s} library files from ${r}`))}})}(O,S,s),O.FS.writeFile("/input.scad",c),null==a?void 0:a.isCancellationRequested)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Export cancelled before OpenSCAD execution"),null;(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Running OpenSCAD export to ${t.toUpperCase()}...`);const _="svg"===t?"/output.svg":"/output.stl",L=new Promise((e,r)=>{try{e(O.callMain(["/input.scad","-o",_]))}catch(e){r(e)}});let C=-1;try{const e=new Promise((e,r)=>{setTimeout(()=>{r(new Error(`OpenSCAD export timeout after ${v}ms`))},v)}),r=a?new Promise((e,r)=>{a.onCancellationRequested(()=>{r(new Error("OpenSCAD export cancelled by user"))})}):null,n=[L];r&&n.push(r),v>0&&n.push(e),C=yield Promise.race(n)}catch(e){const r=e instanceof Error?e.message:String(e);(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Export error: ${r}`),b.push(r)}if(b.length>0)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Export failed with ${b.length} error(s)`),null;if(0!==C)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`OpenSCAD exited with code ${C}`),null;if(null==a?void 0:a.isCancellationRequested)return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine("Export cancelled before reading output"),null;try{const e=O.FS.readFile(_);o.writeFileSync(f,Buffer.from(e));const r=Date.now()-h;return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Export succeeded in ${r}ms: ${f}`),f}catch(e){const r=e instanceof Error?e.message:String(e);return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Failed to read/write output: ${r}`),null}}catch(e){const r=e instanceof Error?e.message:String(e);return(null==l?void 0:l.suppressErrorMessage)||null==s||s.appendLine(`Export exception: ${r}`),null}})};const r=n(635),o=r.__importStar(n(896)),i=r.__importStar(n(928)),s=r.__importStar(n(857)),a=n(16),l=n(200),u=new Set([".git","node_modules","venv",".venv","env",".env","__pycache__",".pytest_cache",".tox","dist","build",".cache",".vscode",".idea","target","bin","obj"]);let c=null;function p(){const e=i.join(__dirname,"openscad-wasm");if(o.existsSync(i.join(e,"openscad.wasm")))return e;const r=i.join(__dirname,"..","openscad-wasm-build","build");return o.existsSync(i.join(r,"openscad.wasm"))?r:e}function d(e,n){return r.__awaiter(this,void 0,void 0,function*(){const t=yield function(){return r.__awaiter(this,void 0,void 0,function*(){var e;if(c)return c;const r=p(),n=i.join(r,"openscad.wasm.js"),t=(0,a.pathToFileURL)(n).href,o=yield import(t);return c=null!==(e=o.default)&&void 0!==e?e:o,c})}(),s=p();return t({noInitialRun:!0,wasmBinary:o.readFileSync(i.join(s,"openscad.wasm")),locateFile:e=>i.join(s,e),print:null!=e?e:()=>{},printErr:null!=n?n:()=>{}})})}function f(){const e=s.homedir(),r=s.platform();return"win32"===r||"darwin"===r?[i.join(e,"Documents","OpenSCAD","libraries")]:[i.join(e,".local","share","OpenSCAD","libraries")]}function m(e,n){return r.__awaiter(this,void 0,void 0,function*(){const r=[...f()];if(n)for(const t of n){const n=e?t.replace(/\$\{workspaceFolder\}/g,e):t;r.push(n)}const t=[];for(const e of r)try{(yield o.promises.stat(e)).isDirectory()&&t.push(e)}catch(e){}return t})}function v(e){const r=e.match(/^\s*(\/\*[\s\S]*?\*\/)/);return r?r[1].replace(/^\/\*+\s*/,"").replace(/\s*\*+\/$/,"").trim():void 0}function h(e){const r=[],n=[],t=e.split("\n"),o=/^\s*(module|function)\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(([^)]*)\)/,i=/^\s*\/\/(.*)$/;let s;for(let e=0;e<t.length;e++){const a=t[e],l=a.match(i);if(l){s=l[1].trim();continue}const u=a.match(o);if(u){const t=u[1],o=u[2],i=u[3].trim(),a={name:o,parameters:i?i.split(",").map(e=>e.trim()).filter(Boolean):[],line:e+1};s&&(a.description=s),"module"===t?r.push(a):n.push(a)}s=void 0}return{modules:r,functions:n}}function w(e){return r.__awaiter(this,void 0,void 0,function*(){const r=[];let n;try{n=yield o.promises.readdir(e,{withFileTypes:!0})}catch(e){return r}for(const t of n){if(u.has(t.name))continue;const n=i.join(e,t.name);if(t.isDirectory()){const e=yield w(n);r.push(...e)}else t.isFile()&&t.name.toLowerCase().endsWith(".scad")&&r.push(n)}return r})}function g(e,n){return r.__awaiter(this,void 0,void 0,function*(){const r=yield m(e,n),t=[];for(const e of r){const r=yield w(e);for(const n of r){let r;try{r=yield o.promises.readFile(n,"utf8")}catch(e){continue}const s=v(r),{modules:a,functions:l}=h(r);(0!==a.length||0!==l.length||s)&&t.push({path:n,relativePath:i.relative(e,n),libraryRoot:e,headerComment:s,modules:a,functions:l})}}return{libraries:t,generatedAt:(new Date).toISOString(),libraryPaths:r}})}function y(e){const r=["# OpenSCAD Libraries Documentation","",`Generated: ${e.generatedAt}`,"","Library paths scanned:",...e.libraryPaths.map(e=>`- \`${e}\``),"",`Found **${e.libraries.length}** library file(s).`,""];for(const n of e.libraries){if(r.push(`## ${n.relativePath}`,""),r.push(`**Path:** \`${n.path}\``,""),n.headerComment&&r.push(n.headerComment,""),n.modules.length>0){r.push("### Modules","");for(const e of n.modules){const n=`${e.name}(${e.parameters.join(", ")})`;r.push(`#### \`${n}\``),e.description&&r.push("",e.description),r.push("")}}if(n.functions.length>0){r.push("### Functions","");for(const e of n.functions){const n=`${e.name}(${e.parameters.join(", ")})`;r.push(`#### \`${n}\``),e.description&&r.push("",e.description),r.push("")}}}return r.join("\n")}function S(){return i.join(__dirname,"workers","openscadWorker.node.js")}function b(e,r,n){return new Promise(t=>{var i,s;if(!o.existsSync(e))return null==r||r.appendLine(`Error: SCAD file not found: ${e}`),void t(null);const a=S();if(!o.existsSync(a))return null==r||r.appendLine(`Error: OpenSCAD worker not found: ${a}`),void t(null);const u=null!==(i=null==n?void 0:n.timeout)&&void 0!==i?i:3e5,c=(0,l.fork)(a,[],{stdio:["pipe","pipe","pipe","ipc"]});let p=!1;const d=e=>{if(!p){p=!0;try{c.kill()}catch(e){}t(e)}},f=setTimeout(()=>{null==r||r.appendLine(`OpenSCAD worker conversion timed out after ${u}ms`),d(null)},u);c.on("message",e=>{e.progress?null==r||r.appendLine(`${e.progress}`):(clearTimeout(f),e.success&&e.outputPath?d(e.outputPath):(null==r||r.appendLine(`OpenSCAD worker error: ${e.error||"Unknown error"}`),d(null)))}),c.on("error",e=>{clearTimeout(f),null==r||r.appendLine(`OpenSCAD worker process error: ${e.message}`),d(null)}),c.on("exit",e=>{p||(clearTimeout(f),setImmediate(()=>{p||(null==r||r.appendLine(`OpenSCAD worker exited unexpectedly with code ${e}`),d(null))}))});const m={scadFilePath:e,libraryFiles:{},timeout:u,exportFormat:null!==(s=null==n?void 0:n.outputFormat)&&void 0!==s?s:"stl",parameterOverrides:null==n?void 0:n.parameterOverrides,parameterConfiguration:null==n?void 0:n.parameterConfiguration};c.send(m)})}})(),module.exports=t})();
|
|
2
|
+
//# sourceMappingURL=openscad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openscad.js","mappings":"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","sources":["webpack://@ranchhandrobotics/babylon_ros/external commonjs \"child_process\"","webpack://@ranchhandrobotics/babylon_ros/external node-commonjs \"fs\"","webpack://@ranchhandrobotics/babylon_ros/external node-commonjs \"os\"","webpack://@ranchhandrobotics/babylon_ros/external node-commonjs \"path\"","webpack://@ranchhandrobotics/babylon_ros/external node-commonjs \"url\"","webpack://@ranchhandrobotics/babylon_ros/./node_modules/tslib/tslib.es6.mjs","webpack://@ranchhandrobotics/babylon_ros/webpack/bootstrap","webpack://@ranchhandrobotics/babylon_ros/webpack/runtime/define property getters","webpack://@ranchhandrobotics/babylon_ros/webpack/runtime/hasOwnProperty shorthand","webpack://@ranchhandrobotics/babylon_ros/./src/openscad.ts"],"sourcesContent":["module.exports = require(\"child_process\");","module.exports = require(\"fs\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"url\");","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * openscad-node.ts\n * Node.js-compatible OpenSCAD utilities for use in VS Code extensions and Node.js tools.\n * Provides library scanning, validation, and documentation generation using the\n * local openscad-wasm build. Does NOT depend on browser APIs.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { pathToFileURL } from 'url';\nimport { fork } from 'child_process';\n\nimport {\n OpenSCADCustomizerValue,\n} from './openscadCustomizer';\n\n\n// ── Interfaces ────────────────────────────────────────────────────────────────\n\nexport interface OpenSCADValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\nexport interface OpenSCADLibraryModule {\n name: string;\n parameters: string[];\n description?: string;\n line: number;\n}\n\nexport interface OpenSCADLibraryFile {\n path: string;\n relativePath: string;\n libraryRoot: string;\n headerComment?: string;\n modules: OpenSCADLibraryModule[];\n functions: OpenSCADLibraryModule[];\n}\n\nexport interface OpenSCADLibrariesDocumentation {\n libraries: OpenSCADLibraryFile[];\n generatedAt: string;\n libraryPaths: string[];\n}\n\n\n/**\n * OpenSCAD conversion request for Web Worker\n */\nexport interface OpenSCADConversionRequest {\n scadContent: string;\n filename: string;\n libraryFiles?: { [virtualPath: string]: string }; // Base64 encoded\n timeout?: number;\n exportFormat?: 'stl' | 'svg' | 'glb';\n parameterOverrides?: Record<string, OpenSCADCustomizerValue>;\n /** Optional absolute URL to openscad.js runtime entrypoint */\n openscadScriptUrl?: string;\n}\n\n/**\n * OpenSCAD conversion response from Web Worker\n */\nexport interface OpenSCADConversionResponse {\n success: boolean;\n outputData?: Uint8Array; // Binary STL/SVG/GLB data\n outputFormat?: string; // 'stl', 'svg', or 'glb'\n filename?: string;\n error?: string;\n logs?: string[]; // Captured stderr/stdout messages from OpenSCAD\n progress?: string;\n}\n\n// ── WASM loader ───────────────────────────────────────────────────────────────\n\n/** Directories to skip when scanning for library files */\nconst EXCLUDED_DIRS = new Set([\n '.git',\n 'node_modules',\n 'venv',\n '.venv',\n 'env',\n '.env',\n '__pycache__',\n '.pytest_cache',\n '.tox',\n 'dist',\n 'build',\n '.cache',\n '.vscode',\n '.idea',\n 'target', // Rust/Java build directories\n 'bin',\n 'obj',\n]);\n\nlet _wasmFactoryCache: ((options: any) => Promise<any>) | null = null;\n\n/**\n * Locate the directory containing the openscad-wasm build files.\n * Works both in the published package (dist/openscad-wasm/) and in the local\n * development tree (openscad-wasm-build/build/).\n */\nfunction getWasmDir(): string {\n // When running from the built dist/openscad-node.js bundle\n const distWasmDir = path.join(__dirname, 'openscad-wasm');\n if (fs.existsSync(path.join(distWasmDir, 'openscad.wasm'))) {\n return distWasmDir;\n }\n // When running from the development source tree (src/openscad-node.ts)\n const devWasmDir = path.join(__dirname, '..', 'openscad-wasm-build', 'build');\n if (fs.existsSync(path.join(devWasmDir, 'openscad.wasm'))) {\n return devWasmDir;\n }\n // Fallback: assume dist layout\n return distWasmDir;\n}\n\n/**\n * Load the openscad.wasm.js ES module dynamically without webpack bundling it.\n * The /* webpackIgnore: true * / comment tells webpack to leave this dynamic\n * import as-is in the output bundle.\n */\nasync function getOpenSCADFactory(): Promise<(options: any) => Promise<any>> {\n if (_wasmFactoryCache) {\n return _wasmFactoryCache;\n }\n const wasmDir = getWasmDir();\n const wasmJsPath = path.join(wasmDir, 'openscad.wasm.js');\n const wasmJsUrl = pathToFileURL(wasmJsPath).href;\n\n // webpackIgnore: true — do NOT bundle this import\n const mod = await import(/* webpackIgnore: true */ wasmJsUrl);\n _wasmFactoryCache = mod.default ?? mod;\n return _wasmFactoryCache!;\n}\n\n/**\n * Create a fresh OpenSCAD WASM instance ready for use.\n * Provides the wasm binary directly to bypass URL-based loading.\n */\nasync function createOpenSCADInstance(\n stdout?: (text: string) => void,\n stderr?: (text: string) => void,\n): Promise<any> {\n const factory = await getOpenSCADFactory();\n const wasmDir = getWasmDir();\n const wasmBinary = fs.readFileSync(path.join(wasmDir, 'openscad.wasm'));\n\n return factory({\n noInitialRun: true,\n wasmBinary,\n locateFile: (filename: string) => path.join(wasmDir, filename),\n print: stdout ?? (() => { /* noop */ }),\n printErr: stderr ?? (() => { /* noop */ }),\n });\n}\n\n// ── Public helpers ────────────────────────────────────────────────────────────\n\n/** Returns true when filePath has a .scad extension (case-insensitive). */\nexport function isOpenSCADFile(filePath: string): boolean {\n return path.extname(filePath).toLowerCase() === '.scad';\n}\n\n/**\n * Returns the OS-specific default OpenSCAD library paths.\n * These are the same directories used by the desktop OpenSCAD application.\n */\nexport function getDefaultOpenSCADLibraryPaths(): string[] {\n const home = os.homedir();\n const platform = os.platform();\n\n if (platform === 'win32') {\n return [path.join(home, 'Documents', 'OpenSCAD', 'libraries')];\n }\n if (platform === 'darwin') {\n return [path.join(home, 'Documents', 'OpenSCAD', 'libraries')];\n }\n return [path.join(home, '.local', 'share', 'OpenSCAD', 'libraries')];\n}\n\n/**\n * Returns all OpenSCAD library paths: default OS paths plus any\n * configured extra paths. Non-existent directories are filtered out.\n *\n * @param workspaceRoot Optional workspace root for ${workspaceFolder} substitution.\n * @param configuredPaths Extra paths from extension settings.\n */\nexport async function getAllOpenSCADLibraryPaths(\n workspaceRoot?: string,\n configuredPaths?: string[],\n): Promise<string[]> {\n const candidates: string[] = [...getDefaultOpenSCADLibraryPaths()];\n\n if (configuredPaths) {\n for (const rawPath of configuredPaths) {\n const resolved = workspaceRoot\n ? rawPath.replace(/\\$\\{workspaceFolder\\}/g, workspaceRoot)\n : rawPath;\n candidates.push(resolved);\n }\n }\n\n const existing: string[] = [];\n for (const p of candidates) {\n try {\n const stat = await fs.promises.stat(p);\n if (stat.isDirectory()) {\n existing.push(p);\n }\n } catch {\n // Directory does not exist — skip silently\n }\n }\n return existing;\n}\n\n// ── Validation ────────────────────────────────────────────────────────────────\n\n/**\n * Validate an OpenSCAD file by compiling it with the WASM runtime.\n *\n * @param filePath Path to the .scad file (used for reading when content is omitted).\n * @param content Optional: SCAD source to validate instead of reading the file.\n * @param workspaceRoot Optional: workspace root for library resolution.\n */\nexport async function validateOpenSCAD(\n filePath: string,\n content?: string,\n workspaceRoot?: string,\n): Promise<OpenSCADValidationResult> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n const scadContent = content ?? fs.readFileSync(filePath, 'utf8');\n\n const instance = await createOpenSCADInstance(\n (_text: string) => { /* stdout — ignore render output */ },\n (text: string) => {\n if (/ERROR|error/.test(text)) {\n errors.push(text);\n } else if (/WARNING|warning/.test(text)) {\n warnings.push(text);\n }\n },\n );\n\n // Write the SCAD source to the virtual FS\n instance.FS.writeFile('/input.scad', scadContent);\n\n // A dry-run echo export is the lightest way to surface parse errors\n const exitCode: number = instance.callMain(['/input.scad', '-o', '/output.echo']);\n\n return {\n valid: exitCode === 0 && errors.length === 0,\n errors,\n warnings,\n };\n } catch (err) {\n return {\n valid: false,\n errors: [err instanceof Error ? err.message : String(err)],\n warnings: [],\n };\n }\n}\n\n// ── Library documentation ─────────────────────────────────────────────────────\n\n/** Extract the leading block comment (/** ... *\\/ or /* ... *\\/) from file content. */\nfunction extractHeaderComment(content: string): string | undefined {\n const match = content.match(/^\\s*(\\/\\*[\\s\\S]*?\\*\\/)/);\n return match ? match[1].replace(/^\\/\\*+\\s*/, '').replace(/\\s*\\*+\\/$/, '').trim() : undefined;\n}\n\n/** Extract module/function definitions and their parameter lists. */\nfunction extractDefinitions(content: string): { modules: OpenSCADLibraryModule[]; functions: OpenSCADLibraryModule[] } {\n const modules: OpenSCADLibraryModule[] = [];\n const functions: OpenSCADLibraryModule[] = [];\n const lines = content.split('\\n');\n\n // Regex: optional preceding // comment line is handled by tracking pendingDoc\n const defRegex = /^\\s*(module|function)\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*\\(([^)]*)\\)/;\n const commentRegex = /^\\s*\\/\\/(.*)$/;\n\n let pendingDoc: string | undefined;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const commentMatch = line.match(commentRegex);\n if (commentMatch) {\n pendingDoc = commentMatch[1].trim();\n continue;\n }\n\n const defMatch = line.match(defRegex);\n if (defMatch) {\n const kind = defMatch[1] as 'module' | 'function';\n const name = defMatch[2];\n const paramStr = defMatch[3].trim();\n const parameters = paramStr\n ? paramStr.split(',').map(p => p.trim()).filter(Boolean)\n : [];\n\n const def: OpenSCADLibraryModule = { name, parameters, line: i + 1 };\n if (pendingDoc) {\n def.description = pendingDoc;\n }\n if (kind === 'module') {\n modules.push(def);\n } else {\n functions.push(def);\n }\n }\n\n pendingDoc = undefined;\n }\n\n return { modules, functions };\n}\n\n/** Recursively collect all .scad files from a directory, skipping excluded dirs. */\nasync function collectScadFiles(dir: string): Promise<string[]> {\n const results: string[] = [];\n let entries: fs.Dirent[];\n try {\n entries = await fs.promises.readdir(dir, { withFileTypes: true });\n } catch {\n return results;\n }\n\n for (const entry of entries) {\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n const sub = await collectScadFiles(fullPath);\n results.push(...sub);\n } else if (entry.isFile() && entry.name.toLowerCase().endsWith('.scad')) {\n results.push(fullPath);\n }\n }\n return results;\n}\n\n/**\n * Scan library paths and generate structured documentation.\n *\n * @param workspaceRoot Optional workspace root for ${workspaceFolder} substitution.\n * @param configuredPaths Extra paths from extension settings (e.g. urdf-editor.OpenSCADLibraryPaths).\n */\nexport async function generateOpenSCADLibrariesDocumentation(\n workspaceRoot?: string,\n configuredPaths?: string[],\n): Promise<OpenSCADLibrariesDocumentation> {\n const libraryPaths = await getAllOpenSCADLibraryPaths(workspaceRoot, configuredPaths);\n const libraries: OpenSCADLibraryFile[] = [];\n\n for (const libRoot of libraryPaths) {\n const files = await collectScadFiles(libRoot);\n for (const filePath of files) {\n let content: string;\n try {\n content = await fs.promises.readFile(filePath, 'utf8');\n } catch {\n continue;\n }\n\n const headerComment = extractHeaderComment(content);\n const { modules, functions } = extractDefinitions(content);\n\n if (modules.length === 0 && functions.length === 0 && !headerComment) {\n continue; // Nothing useful to document\n }\n\n libraries.push({\n path: filePath,\n relativePath: path.relative(libRoot, filePath),\n libraryRoot: libRoot,\n headerComment,\n modules,\n functions,\n });\n }\n }\n\n return {\n libraries,\n generatedAt: new Date().toISOString(),\n libraryPaths,\n };\n}\n\n/**\n * Convert an OpenSCADLibrariesDocumentation object into a Markdown string\n * suitable for consumption by AI assistants or documentation sites.\n */\nexport function convertLibrariesDocumentationToMarkdown(\n doc: OpenSCADLibrariesDocumentation,\n): string {\n const lines: string[] = [\n '# OpenSCAD Libraries Documentation',\n '',\n `Generated: ${doc.generatedAt}`,\n '',\n `Library paths scanned:`,\n ...doc.libraryPaths.map(p => `- \\`${p}\\``),\n '',\n `Found **${doc.libraries.length}** library file(s).`,\n '',\n ];\n\n for (const lib of doc.libraries) {\n lines.push(`## ${lib.relativePath}`, '');\n lines.push(`**Path:** \\`${lib.path}\\``, '');\n\n if (lib.headerComment) {\n lines.push(lib.headerComment, '');\n }\n\n if (lib.modules.length > 0) {\n lines.push('### Modules', '');\n for (const mod of lib.modules) {\n const sig = `${mod.name}(${mod.parameters.join(', ')})`;\n lines.push(`#### \\`${sig}\\``);\n if (mod.description) {\n lines.push('', mod.description);\n }\n lines.push('');\n }\n }\n\n if (lib.functions.length > 0) {\n lines.push('### Functions', '');\n for (const fn of lib.functions) {\n const sig = `${fn.name}(${fn.parameters.join(', ')})`;\n lines.push(`#### \\`${sig}\\``);\n if (fn.description) {\n lines.push('', fn.description);\n }\n lines.push('');\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convenience wrapper: generate documentation and write it to a Markdown file.\n */\nexport async function generateAndSaveLibrariesDocumentation(\n outputPath: string,\n workspaceRoot?: string,\n configuredPaths?: string[],\n): Promise<void> {\n const doc = await generateOpenSCADLibrariesDocumentation(workspaceRoot, configuredPaths);\n const markdown = convertLibrariesDocumentationToMarkdown(doc);\n await fs.promises.writeFile(outputPath, markdown, 'utf8');\n}\n\n// ── Node.js Worker Export Types ───────────────────────────────────────────────\n\n/**\n * Configuration for OpenSCAD parameter overrides (Node.js worker)\n */\nexport interface OpenSCADParameterConfiguration {\n jsonContent: string;\n parameterSetName: string;\n}\n\n/**\n * Request interface for Node.js OpenSCAD worker\n */\nexport interface OpenSCADNodeConversionRequest {\n scadFilePath: string;\n libraryFiles: { [virtualPath: string]: string }; // Base64 encoded content\n workspaceRoot?: string;\n timeout?: number; // Custom timeout in milliseconds\n exportFormat?: 'stl' | 'svg' | 'glb'; // Export format\n parameterOverrides?: Record<string, OpenSCADCustomizerValue>;\n parameterConfiguration?: OpenSCADParameterConfiguration;\n}\n\n/**\n * Response interface for Node.js OpenSCAD worker\n */\nexport interface OpenSCADNodeConversionResponse {\n success: boolean;\n outputPath?: string;\n error?: string;\n progress?: string;\n}\n\nexport interface OpenSCADNodeConversionOptions {\n timeout?: number;\n outputFormat?: 'stl' | 'glb';\n parameterOverrides?: Record<string, OpenSCADCustomizerValue>;\n parameterConfiguration?: OpenSCADParameterConfiguration;\n}\n\n/**\n * Get the path to the OpenSCAD Node.js worker module.\n * Can be used by Node.js applications (like RDE MCP Server) to spawn worker processes.\n * \n * @returns Path to the compiled openscadWorker.js file\n */\nexport function getOpenSCADNodeWorkerPath(): string {\n // Node-target worker is emitted under dist/workers.\n return path.join(__dirname, 'workers', 'openscadWorker.node.js');\n}\n\n/**\n * Check if the OpenSCAD Node.js worker is available at the expected location.\n */\nexport function isOpenSCADNodeWorkerAvailable(): boolean {\n const workerPath = getOpenSCADNodeWorkerPath();\n return fs.existsSync(workerPath);\n}\n\n/**\n * Convert an OpenSCAD file using the Node.js worker process.\n * This keeps OpenSCAD execution off the extension host thread.\n */\nexport function convertOpenSCADWithNodeWorker(\n scadFilePath: string,\n trace?: any,\n options?: OpenSCADNodeConversionOptions,\n): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n if (!fs.existsSync(scadFilePath)) {\n trace?.appendLine(`Error: SCAD file not found: ${scadFilePath}`);\n resolve(null);\n return;\n }\n\n const workerPath = getOpenSCADNodeWorkerPath();\n if (!fs.existsSync(workerPath)) {\n trace?.appendLine(`Error: OpenSCAD worker not found: ${workerPath}`);\n resolve(null);\n return;\n }\n\n const timeout = options?.timeout ?? 300000;\n const worker = fork(workerPath, [], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });\n let settled = false;\n\n const finish = (result: string | null) => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n worker.kill();\n } catch {\n // best effort\n }\n resolve(result);\n };\n\n const timeoutHandle = setTimeout(() => {\n trace?.appendLine(`OpenSCAD worker conversion timed out after ${timeout}ms`);\n finish(null);\n }, timeout);\n\n worker.on('message', (message: OpenSCADNodeConversionResponse) => {\n if (message.progress) {\n trace?.appendLine(`${message.progress}`);\n return;\n }\n\n clearTimeout(timeoutHandle);\n if (message.success && message.outputPath) {\n finish(message.outputPath);\n } else {\n trace?.appendLine(`OpenSCAD worker error: ${message.error || 'Unknown error'}`);\n finish(null);\n }\n });\n\n worker.on('error', (err: Error) => {\n clearTimeout(timeoutHandle);\n trace?.appendLine(`OpenSCAD worker process error: ${err.message}`);\n finish(null);\n });\n\n worker.on('exit', (code) => {\n if (settled) {\n return;\n }\n clearTimeout(timeoutHandle);\n // Defer by one event loop tick so any buffered IPC messages that arrived\n // before the process exited have a chance to be processed first.\n setImmediate(() => {\n if (settled) {\n return;\n }\n trace?.appendLine(`OpenSCAD worker exited unexpectedly with code ${code}`);\n finish(null);\n });\n });\n\n const request: OpenSCADNodeConversionRequest = {\n scadFilePath,\n libraryFiles: {},\n timeout,\n exportFormat: options?.outputFormat ?? 'stl',\n parameterOverrides: options?.parameterOverrides,\n parameterConfiguration: options?.parameterConfiguration,\n };\n\n worker.send(request);\n });\n}\n\n\n\n/**\n * Create a Web Worker for OpenSCAD conversion\n */\nfunction createOpenSCADWorker(workerScript?: string): Worker {\n if (workerScript) {\n // Use provided worker script\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n const workerUrl = URL.createObjectURL(blob);\n return new Worker(workerUrl);\n }\n\n // Load the compiled browser worker\n const workerUrl = resolveOpenSCADWorkerUrl();\n return new Worker(workerUrl, { type: 'module' });\n}\n\n\n/**\n * Create a Web Worker for OpenSCAD conversion\n * Returns a promise that resolves with the conversion result\n */\nexport function convertOpenSCAD(\n request: OpenSCADConversionRequest,\n workerScript?: string\n): Promise<OpenSCADConversionResponse> {\n return new Promise<OpenSCADConversionResponse>((resolve, reject) => {\n try {\n // Create an inline worker if no script provided\n const worker = createOpenSCADWorker(workerScript);\n\n // Set timeout for conversion\n const timeout = request.timeout || 300000; // 5 minutes default\n const timeoutHandle = setTimeout(() => {\n worker.terminate();\n reject(new Error(`OpenSCAD conversion timed out after ${timeout}ms`));\n }, timeout);\n\n // Handle worker messages\n worker.onmessage = (event: MessageEvent<OpenSCADConversionResponse>) => {\n if (event.data.progress) {\n return;\n }\n clearTimeout(timeoutHandle);\n if (event.data.success) {\n worker.terminate();\n resolve(event.data);\n } else {\n worker.terminate();\n reject(new Error(event.data.error || 'OpenSCAD conversion failed'));\n }\n };\n\n // Handle worker errors\n worker.onerror = (error: ErrorEvent) => {\n clearTimeout(timeoutHandle);\n worker.terminate();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const openscadScriptUrl = resolveOpenSCADScriptUrl(request.openscadScriptUrl);\n\n // Send conversion request to worker with the OpenSCAD script URL\n worker.postMessage({\n ...request,\n openscadScriptUrl\n });\n } catch (error) {\n reject(error);\n }\n }).catch(async (error: unknown): Promise<OpenSCADConversionResponse> => {\n // If worker initialization/importScripts fails (CSP, offline, blocked local assets),\n // surface a clear actionable error.\n const message = error instanceof Error ? error.message : String(error);\n const workerLoadFailure = /importScripts|Worker error|NetworkError|Failed to execute 'importScripts'|Unable to load OpenSCAD runtime/i.test(message);\n if (!workerLoadFailure) {\n throw error;\n }\n\n throw new Error(\n 'OpenSCAD runtime is unavailable. ' +\n 'Run \"npm run download-openscad\" and then \"npm run build\" to refresh runtime assets, ' +\n 'or provide request.openscadScriptUrl to point to openscad.js.'\n );\n });\n}\n\nfunction resolveOpenSCADScriptUrl(explicitUrl?: string): string {\n if (explicitUrl && explicitUrl.trim().length > 0) {\n return explicitUrl;\n }\n\n // Allow host applications to set a global override without changing call sites\n const globalOverride = (globalThis as unknown as { __BABYLON_ROS_OPENSCAD_URL?: string }).__BABYLON_ROS_OPENSCAD_URL;\n if (typeof globalOverride === 'string' && globalOverride.trim().length > 0) {\n return globalOverride;\n }\n\n if (typeof document !== 'undefined') {\n const currentScript = document.currentScript as HTMLScriptElement | null;\n const src = currentScript?.src;\n if (src) {\n try {\n const base = new URL('.', src).href;\n return new URL('openscad-wasm-build/dist/openscad.js', base).href;\n } catch {\n // fall through to other strategies\n }\n }\n }\n\n if (typeof window !== 'undefined' && window.location) {\n try {\n return new URL('openscad-wasm-build/dist/openscad.js', window.location.href).href;\n } catch {\n // fall through to final relative fallback\n }\n }\n\n return './openscad-wasm-build/dist/openscad.js';\n}\n\n\n/**\n * Resolve the URL to the compiled OpenSCAD browser worker.\n * Works in both development and production environments.\n */\nfunction resolveOpenSCADWorkerUrl(): string {\n // Allow explicit override via global variable\n const globalOverride = (globalThis as unknown as { __BABYLON_ROS_WORKER_URL?: string }).__BABYLON_ROS_WORKER_URL;\n if (typeof globalOverride === 'string' && globalOverride.trim().length > 0) {\n return globalOverride;\n }\n\n if (typeof document !== 'undefined') {\n const currentScript = document.currentScript as HTMLScriptElement | null;\n const src = currentScript?.src;\n if (src) {\n try {\n const locationProtocol = typeof window !== 'undefined' ? window.location?.protocol : undefined;\n if (locationProtocol === 'file:') {\n return new URL('../dist/workers/openscadWorker.js', src).href;\n }\n const base = new URL('.', src).href;\n return new URL('workers/openscadWorker.js', base).href;\n } catch {\n // fall through to other strategies\n }\n }\n }\n\n if (typeof window !== 'undefined' && window.location) {\n try {\n if (window.location.protocol === 'file:') {\n // Local dev viewer (`web/viewer-openscad.html`) runs from /web,\n // while the compiled browser worker is emitted under /dist.\n return new URL('../dist/workers/openscadWorker.js', window.location.href).href;\n }\n return new URL('openscadWorker.js', window.location.href).href;\n } catch {\n // fall through to final relative fallback\n }\n }\n\n return './workers/openscadWorker.js';\n}\n\n// ── Library file loading ───────────────────────────────────────────────────────\n\n/**\n * Recursively load library files from disk into OpenSCAD WASM virtual filesystem.\n * \n * @param instance OpenSCAD WASM instance with FS property\n * @param libraryPaths Array of library directory paths to load\n * @param trace Optional debug trace output\n */\nasync function loadLibraryFiles(\n instance: any,\n libraryPaths: string[],\n trace?: any,\n): Promise<void> {\n // Create /libraries directory in WASM FS\n try {\n instance.FS.mkdir('/libraries');\n } catch {\n // Directory may already exist\n }\n\n for (const libPath of libraryPaths) {\n if (!fs.existsSync(libPath)) {\n continue;\n }\n\n trace?.appendLine(`Loading libraries from: ${libPath}`);\n\n // Recursively scan and load all .scad files\n const files = await collectScadFiles(libPath);\n let loadedCount = 0;\n\n for (const filePath of files) {\n try {\n const relativePath = path.relative(libPath, filePath).replace(/\\\\/g, '/');\n const vfsPath = `/libraries/${relativePath}`;\n\n // Ensure parent directory exists in WASM FS\n const vfsDir = path.dirname(vfsPath).replace(/\\\\/g, '/');\n const parts = vfsDir.split('/').filter(p => p);\n let currentPath = '';\n for (const part of parts) {\n currentPath += '/' + part;\n try {\n instance.FS.mkdir(currentPath);\n } catch {\n // Directory already exists\n }\n }\n\n // Read file and write to WASM FS\n const content = fs.readFileSync(filePath, 'utf8');\n instance.FS.writeFile(vfsPath, content);\n loadedCount++;\n } catch (err) {\n trace?.appendLine(`Warning: Failed to load library file: ${filePath}`);\n }\n }\n\n if (loadedCount > 0) {\n trace?.appendLine(`Loaded ${loadedCount} library files from ${libPath}`);\n }\n }\n}\n\n/**\n * Load OpenSCAD fonts helper into the WASM FS.\n * Required for proper font rendering in OpenSCAD.\n * Calls addFonts(instance) from openscad.fonts.js which writes fonts.conf\n * and Liberation font binaries into the WASM virtual filesystem.\n */\nasync function loadOpenSCADFonts(instance: any): Promise<void> {\n try {\n const wasmDir = getWasmDir();\n const fontsPath = path.join(wasmDir, 'openscad.fonts.js');\n\n if (fs.existsSync(fontsPath)) {\n try {\n // openscad.fonts.js is an ES module — use dynamic import with webpackIgnore\n // so webpack does not attempt to bundle this runtime-located file.\n // pathToFileURL converts the Windows/Unix path to a valid file:// URL.\n const { pathToFileURL } = require('url') as typeof import('url');\n const fontsModule = await import(/* webpackIgnore: true */ pathToFileURL(fontsPath).href as string);\n if (typeof fontsModule.addFonts === 'function') {\n fontsModule.addFonts(instance);\n }\n } catch {\n // Font loading is best-effort; don't fail conversion if it doesn't work\n }\n }\n } catch {\n // Font loading is best-effort; don't fail conversion if it doesn't work\n }\n}\n\n// ── Node.js-compatible conversion functions ───────────────────────────────────\n\n/**\n * Convert an OpenSCAD file to STL or GLB format with cancellation token support.\n * Designed for use in VS Code extensions and Node.js tools.\n * \n * @param scadFilePath Path to the .scad file\n * @param trace Debug output trace (function that logs strings)\n * @param token Optional VS Code CancellationToken for cancellation support\n * @param options Conversion options (timeout, parameter overrides, outputFormat, etc.)\n * @returns Path to generated file, or null if conversion failed/was cancelled\n */\nexport async function convertOpenSCADCancellable(\n scadFilePath: string,\n trace: any,\n token?: any,\n options?: {\n timeout?: number;\n parameterOverrides?: Record<string, OpenSCADCustomizerValue>;\n parameterConfiguration?: OpenSCADParameterConfiguration;\n outputFormat?: 'stl' | 'glb';\n },\n): Promise<string | null> {\n if (token?.isCancellationRequested) {\n trace?.appendLine('Conversion cancelled before start');\n return null;\n }\n\n return convertOpenSCADWithNodeWorker(scadFilePath, trace, {\n timeout: options?.timeout,\n outputFormat: options?.outputFormat,\n parameterOverrides: options?.parameterOverrides,\n parameterConfiguration: options?.parameterConfiguration,\n });\n}\n\n/**\n * Export an OpenSCAD file to STL or SVG format with cancellation token support.\n * Designed for use in VS Code extensions and Node.js tools.\n * \n * @param scadFilePath Path to the .scad file\n * @param exportFormat Output format: 'stl' or 'svg'\n * @param trace Debug output trace (function that logs strings)\n * @param token Optional VS Code CancellationToken for cancellation support\n * @param options Export options (timeout, parameter overrides, etc.)\n * @returns Path to generated file, or null if export failed/was cancelled\n */\nexport async function exportOpenSCAD(\n scadFilePath: string,\n exportFormat: 'stl' | 'svg',\n trace: any,\n token?: any,\n options?: {\n timeout?: number;\n parameterOverrides?: Record<string, OpenSCADCustomizerValue>;\n suppressErrorMessage?: boolean;\n },\n): Promise<string | null> {\n if (!fs.existsSync(scadFilePath)) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Error: SCAD file not found: ${scadFilePath}`);\n }\n return null;\n }\n\n const extension = exportFormat === 'svg' ? '.svg' : '.stl';\n const outputPath = scadFilePath.replace(/\\.scad$/i, extension);\n const timeout = options?.timeout ?? 300000; // 5 minutes default\n const startTime = Date.now();\n\n // STL export is routed through the Node worker so extension-host execution\n // stays responsive and behavior matches preview conversion plumbing.\n if (exportFormat === 'stl') {\n if (token?.isCancellationRequested) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Export cancelled before start');\n }\n return null;\n }\n\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Exporting OpenSCAD to STL via worker: ${scadFilePath}`);\n }\n\n const stlPath = await convertOpenSCADWithNodeWorker(scadFilePath, trace, {\n timeout,\n outputFormat: 'stl',\n parameterOverrides: options?.parameterOverrides,\n });\n\n if (!stlPath && !options?.suppressErrorMessage && !token?.isCancellationRequested) {\n trace?.appendLine('STL export failed via worker');\n }\n return stlPath;\n }\n\n try {\n // Check for cancellation before starting\n if (token?.isCancellationRequested) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Export cancelled before start');\n }\n return null;\n }\n\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Exporting OpenSCAD to ${exportFormat.toUpperCase()}: ${scadFilePath}`);\n }\n\n const scadContent = fs.readFileSync(scadFilePath, 'utf8');\n \n // Apply parameter overrides if provided\n let finalScadContent = scadContent;\n if (options?.parameterOverrides) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Applying parameter overrides');\n }\n finalScadContent = applyParameterOverrides(scadContent, options.parameterOverrides);\n }\n\n // Get library paths for this SCAD file's directory\n const scadDir = path.dirname(scadFilePath);\n const workspaceRoot = path.resolve(scadDir, '../..');\n const libraryPaths = await getAllOpenSCADLibraryPaths(workspaceRoot);\n\n // Create OpenSCAD WASM instance with stderr capture\n const errors: string[] = [];\n\n const instance = await createOpenSCADInstance(\n (_text: string) => { /* stdout — ignore render output */ },\n (text: string) => {\n if (/ERROR|error/.test(text)) {\n errors.push(text);\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Error: ${text}`);\n }\n }\n },\n );\n\n // Check for cancellation before writing files\n if (token?.isCancellationRequested) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Export cancelled before WASM initialization');\n }\n return null;\n }\n\n // Load fonts to avoid fontconfig errors\n await loadOpenSCADFonts(instance);\n\n // Load libraries into WASM FS\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Loading libraries from ${libraryPaths.length} paths`);\n }\n await loadLibraryFiles(instance, libraryPaths, trace);\n\n // Write SCAD content to WASM FS\n instance.FS.writeFile('/input.scad', finalScadContent);\n\n // Check for cancellation before conversion\n if (token?.isCancellationRequested) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Export cancelled before OpenSCAD execution');\n }\n return null;\n }\n\n // Run OpenSCAD export with timeout\n // Note: Use /input.scad first, then -o flag, matching openscad CLI convention\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Running OpenSCAD export to ${exportFormat.toUpperCase()}...`);\n }\n \n const outputFileName = exportFormat === 'svg' ? '/output.svg' : '/output.stl';\n const exportPromise = new Promise<number>((_resolve, reject) => {\n try {\n const exitCode: number = instance.callMain(['/input.scad', '-o', outputFileName]);\n _resolve(exitCode);\n } catch (err) {\n reject(err);\n }\n });\n\n // Handle timeout and cancellation\n let exitCode = -1;\n try {\n const timeoutPromise = new Promise<number>((_resolve, reject) => {\n setTimeout(() => {\n reject(new Error(`OpenSCAD export timeout after ${timeout}ms`));\n }, timeout);\n });\n\n const cancellationPromise = token\n ? new Promise<number>((_resolve, reject) => {\n token.onCancellationRequested(() => {\n reject(new Error('OpenSCAD export cancelled by user'));\n });\n })\n : null;\n\n const promises = [exportPromise];\n if (cancellationPromise) {\n promises.push(cancellationPromise);\n }\n if (timeout > 0) {\n promises.push(timeoutPromise);\n }\n\n exitCode = await Promise.race(promises);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Export error: ${message}`);\n }\n errors.push(message);\n }\n\n if (errors.length > 0) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Export failed with ${errors.length} error(s)`);\n }\n return null;\n }\n\n if (exitCode !== 0) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`OpenSCAD exited with code ${exitCode}`);\n }\n return null;\n }\n\n // Check for cancellation before reading output\n if (token?.isCancellationRequested) {\n if (!options?.suppressErrorMessage) {\n trace?.appendLine('Export cancelled before reading output');\n }\n return null;\n }\n\n // Read output from WASM FS and write to filesystem\n try {\n const outputData = instance.FS.readFile(outputFileName);\n fs.writeFileSync(outputPath, Buffer.from(outputData));\n \n const elapsed = Date.now() - startTime;\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Export succeeded in ${elapsed}ms: ${outputPath}`);\n }\n return outputPath;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Failed to read/write output: ${message}`);\n }\n return null;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (!options?.suppressErrorMessage) {\n trace?.appendLine(`Export exception: ${message}`);\n }\n return null;\n }\n}\n\n/**\n * Apply parameter overrides to OpenSCAD content by injecting variable assignments.\n * @param scadContent Original SCAD source code\n * @param overrides Key-value pairs of parameter names and values\n * @returns SCAD content with overrides prepended\n */\nfunction applyParameterOverrides(\n scadContent: string,\n overrides: Record<string, OpenSCADCustomizerValue>,\n): string {\n const assignments = Object.entries(overrides)\n .map(([name, value]) => {\n // Quote string values, leave numbers/booleans as-is\n const formattedValue = typeof value === 'string' ? `\"${value.replace(/\"/g, '\\\\\"')}\"` : value;\n return `${name} = ${formattedValue};`;\n })\n .join('\\n');\n\n return assignments + '\\n' + scadContent;\n}\n"],"names":["module","exports","require","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__createBinding","Object","create","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__setModuleDefault","v","ownKeys","getOwnPropertyNames","ar","prototype","hasOwnProperty","call","length","__importStar","mod","i","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","key","obj","prop","isOpenSCADFile","filePath","path","extname","toLowerCase","getDefaultOpenSCADLibraryPaths","getAllOpenSCADLibraryPaths","validateOpenSCAD","content","workspaceRoot","errors","warnings","scadContent","fs","readFileSync","instance","createOpenSCADInstance","_text","text","test","push","FS","writeFile","valid","callMain","err","Error","message","String","generateOpenSCADLibrariesDocumentation","convertLibrariesDocumentationToMarkdown","generateAndSaveLibrariesDocumentation","outputPath","configuredPaths","markdown","promises","getOpenSCADNodeWorkerPath","isOpenSCADNodeWorkerAvailable","workerPath","existsSync","convertOpenSCADWithNodeWorker","convertOpenSCAD","request","workerScript","worker","blob","Blob","type","workerUrl","URL","createObjectURL","Worker","globalOverride","globalThis","__BABYLON_ROS_WORKER_URL","trim","document","currentScript","src","window","_a","location","protocol","href","base","_b","_c","resolveOpenSCADWorkerUrl","createOpenSCADWorker","timeout","timeoutHandle","setTimeout","terminate","onmessage","event","data","progress","clearTimeout","success","error","onerror","openscadScriptUrl","explicitUrl","__BABYLON_ROS_OPENSCAD_URL","resolveOpenSCADScriptUrl","postMessage","assign","catch","tslib_1","this","convertOpenSCADCancellable","scadFilePath","trace","token","options","isCancellationRequested","appendLine","outputFormat","parameterOverrides","parameterConfiguration","exportOpenSCAD","exportFormat","suppressErrorMessage","extension","replace","startTime","Date","now","stlPath","toUpperCase","finalScadContent","overrides","entries","map","name","join","applyParameterOverrides","scadDir","dirname","libraryPaths","wasmDir","getWasmDir","fontsPath","pathToFileURL","fontsModule","import","addFonts","loadOpenSCADFonts","mkdir","libPath","files","collectScadFiles","loadedCount","vfsPath","relative","parts","split","filter","p","currentPath","part","loadLibraryFiles","outputFileName","exportPromise","_resolve","exitCode","timeoutPromise","cancellationPromise","onCancellationRequested","race","outputData","readFile","writeFileSync","Buffer","from","elapsed","os","url_1","child_process_1","EXCLUDED_DIRS","Set","_wasmFactoryCache","distWasmDir","__dirname","devWasmDir","stdout","stderr","factory","wasmJsPath","wasmJsUrl","default","getOpenSCADFactory","noInitialRun","wasmBinary","locateFile","filename","print","printErr","home","homedir","platform","candidates","rawPath","resolved","existing","stat","isDirectory","extractHeaderComment","match","extractDefinitions","modules","functions","lines","defRegex","commentRegex","pendingDoc","line","commentMatch","defMatch","kind","paramStr","def","parameters","Boolean","description","dir","results","readdir","withFileTypes","entry","has","fullPath","sub","isFile","endsWith","libraries","libRoot","headerComment","relativePath","libraryRoot","generatedAt","toISOString","doc","lib","sig","fn","fork","stdio","settled","finish","kill","on","code","setImmediate","libraryFiles","send"],"sourceRoot":""}
|