diff --git a/.gitignore b/.gitignore index aeff396..a3d791e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ wasmServer internal/webserver/web/main.wasm internal/webserver/web/e2e.wasm internal/webserver/web/static/js/wasm_exec.js +internal/webserver/web/static/js/min/wasm_exec.min.js .vendor/ diff --git a/cmd/gokapi/Main.go b/cmd/gokapi/Main.go index 5c6081c..6ce55c9 100644 --- a/cmd/gokapi/Main.go +++ b/cmd/gokapi/Main.go @@ -1,4 +1,4 @@ -//go:build go1.20 +//go:build go1.22 package main @@ -32,7 +32,7 @@ import ( // versionGokapi is the current version in readable form. // Other version numbers can be modified in /build/go-generate/updateVersionNumbers.go -const versionGokapi = "1.8.1" +const versionGokapi = "1.8.2" // The following calls update the version numbers, update documentation, minify Js/CSS and build the WASM modules //go:generate go run "../../build/go-generate/updateVersionNumbers.go" diff --git a/internal/webserver/web/static/js/min/wasm_exec.min.js b/internal/webserver/web/static/js/min/wasm_exec.min.js deleted file mode 100644 index 71e52d4..0000000 --- a/internal/webserver/web/static/js/min/wasm_exec.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(()=>{const e=()=>{const e=new Error("not implemented");return e.code="ENOSYS",e};if(!globalThis.fs){let t="";globalThis.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(e,s){t+=n.decode(s);const o=t.lastIndexOf(` -`);return o!=-1&&(console.log(t.substring(0,o)),t=t.substring(o+1)),s.length},write(t,n,s,o,i,a){if(s!==0||o!==n.length||i!==null){a(e());return}const r=this.writeSync(t,n);a(null,r)},chmod(t,n,s){s(e())},chown(t,n,s,o){o(e())},close(t,n){n(e())},fchmod(t,n,s){s(e())},fchown(t,n,s,o){o(e())},fstat(t,n){n(e())},fsync(e,t){t(null)},ftruncate(t,n,s){s(e())},lchown(t,n,s,o){o(e())},link(t,n,s){s(e())},lstat(t,n){n(e())},mkdir(t,n,s){s(e())},open(t,n,s,o){o(e())},read(t,n,s,o,i,a){a(e())},readdir(t,n){n(e())},readlink(t,n){n(e())},rename(t,n,s){s(e())},rmdir(t,n){n(e())},stat(t,n){n(e())},symlink(t,n,s){s(e())},truncate(t,n,s){s(e())},unlink(t,n){n(e())},utimes(t,n,s,o){o(e())}}}if(globalThis.process||(globalThis.process={getuid(){return-1},getgid(){return-1},geteuid(){return-1},getegid(){return-1},getgroups(){throw e()},pid:-1,ppid:-1,umask(){throw e()},cwd(){throw e()},chdir(){throw e()}}),!globalThis.crypto)throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");if(!globalThis.performance)throw new Error("globalThis.performance is not available, polyfill required (performance.now only)");if(!globalThis.TextEncoder)throw new Error("globalThis.TextEncoder is not available, polyfill required");if(!globalThis.TextDecoder)throw new Error("globalThis.TextDecoder is not available, polyfill required");const t=new TextEncoder("utf-8"),n=new TextDecoder("utf-8");globalThis.Go=class{constructor(){this.argv=["js"],this.env={},this.exit=e=>{e!==0&&console.warn("exit code:",e)},this._exitPromise=new Promise(e=>{this._resolveExitPromise=e}),this._pendingEvent=null,this._scheduledTimeouts=new Map,this._nextCallbackTimeoutID=1;const i=(e,t)=>{this.mem.setUint32(e+0,t,!0),this.mem.setUint32(e+4,Math.floor(t/4294967296),!0)},d=(e,t)=>{this.mem.setUint32(e+0,t,!0)},s=e=>{const t=this.mem.getUint32(e+0,!0),n=this.mem.getInt32(e+4,!0);return t+n*4294967296},e=e=>{const t=this.mem.getFloat64(e,!0);if(t===0)return void 0;if(!isNaN(t))return t;const n=this.mem.getUint32(e,!0);return this._values[n]},o=(e,t)=>{const o=2146959360;if(typeof t=="number"&&t!==0){if(isNaN(t)){this.mem.setUint32(e+4,o,!0),this.mem.setUint32(e,0,!0);return}this.mem.setFloat64(e,t,!0);return}if(t===void 0){this.mem.setFloat64(e,0,!0);return}let n=this._ids.get(t);n===void 0&&(n=this._idPool.pop(),n===void 0&&(n=this._values.length),this._values[n]=t,this._goRefCounts[n]=0,this._ids.set(t,n)),this._goRefCounts[n]++;let s=0;switch(typeof t){case"object":t!==null&&(s=1);break;case"string":s=2;break;case"symbol":s=3;break;case"function":s=4;break}this.mem.setUint32(e+4,o|s,!0),this.mem.setUint32(e,n,!0)},r=e=>{const t=s(e+0),n=s(e+8);return new Uint8Array(this._inst.exports.mem.buffer,t,n)},c=t=>{const i=s(t+0),n=s(t+8),o=new Array(n);for(let t=0;t{const t=s(e+0),o=s(e+8);return n.decode(new DataView(this._inst.exports.mem.buffer,t,o))},l=Date.now()-performance.now();this.importObject={_gotest:{add:(e,t)=>e+t},gojs:{"runtime.wasmExit":e=>{e>>>=0;const t=this.mem.getInt32(e+8,!0);this.exited=!0,delete this._inst,delete this._values,delete this._goRefCounts,delete this._ids,delete this._idPool,this.exit(t)},"runtime.wasmWrite":e=>{e>>>=0;const t=s(e+8),n=s(e+16),o=this.mem.getInt32(e+24,!0);fs.writeSync(t,new Uint8Array(this._inst.exports.mem.buffer,n,o))},"runtime.resetMemoryDataView":e=>{e>>>=0,this.mem=new DataView(this._inst.exports.mem.buffer)},"runtime.nanotime1":e=>{e>>>=0,i(e+8,(l+performance.now())*1e6)},"runtime.walltime":e=>{e>>>=0;const t=(new Date).getTime();i(e+8,t/1e3),this.mem.setInt32(e+16,t%1e3*1e6,!0)},"runtime.scheduleTimeoutEvent":e=>{e>>>=0;const t=this._nextCallbackTimeoutID;this._nextCallbackTimeoutID++,this._scheduledTimeouts.set(t,setTimeout(()=>{for(this._resume();this._scheduledTimeouts.has(t);)console.warn("scheduleTimeoutEvent: missed timeout event"),this._resume()},s(e+8))),this.mem.setInt32(e+16,t,!0)},"runtime.clearTimeoutEvent":e=>{e>>>=0;const t=this.mem.getInt32(e+8,!0);clearTimeout(this._scheduledTimeouts.get(t)),this._scheduledTimeouts.delete(t)},"runtime.getRandomData":e=>{e>>>=0,crypto.getRandomValues(r(e+8))},"syscall/js.finalizeRef":e=>{e>>>=0;const t=this.mem.getUint32(e+8,!0);if(this._goRefCounts[t]--,this._goRefCounts[t]===0){const e=this._values[t];this._values[t]=null,this._ids.delete(e),this._idPool.push(t)}},"syscall/js.stringVal":e=>{e>>>=0,o(e+24,a(e+8))},"syscall/js.valueGet":t=>{t>>>=0;const n=Reflect.get(e(t+8),a(t+16));t=this._inst.exports.getsp()>>>0,o(t+32,n)},"syscall/js.valueSet":t=>{t>>>=0,Reflect.set(e(t+8),a(t+16),e(t+32))},"syscall/js.valueDelete":t=>{t>>>=0,Reflect.deleteProperty(e(t+8),a(t+16))},"syscall/js.valueIndex":t=>{t>>>=0,o(t+24,Reflect.get(e(t+8),s(t+16)))},"syscall/js.valueSetIndex":t=>{t>>>=0,Reflect.set(e(t+8),s(t+16),e(t+24))},"syscall/js.valueCall":t=>{t>>>=0;try{const n=e(t+8),s=Reflect.get(n,a(t+16)),i=c(t+32),r=Reflect.apply(s,n,i);t=this._inst.exports.getsp()>>>0,o(t+56,r),this.mem.setUint8(t+64,1)}catch(e){t=this._inst.exports.getsp()>>>0,o(t+56,e),this.mem.setUint8(t+64,0)}},"syscall/js.valueInvoke":t=>{t>>>=0;try{const n=e(t+8),s=c(t+16),i=Reflect.apply(n,void 0,s);t=this._inst.exports.getsp()>>>0,o(t+40,i),this.mem.setUint8(t+48,1)}catch(e){t=this._inst.exports.getsp()>>>0,o(t+40,e),this.mem.setUint8(t+48,0)}},"syscall/js.valueNew":t=>{t>>>=0;try{const n=e(t+8),s=c(t+16),i=Reflect.construct(n,s);t=this._inst.exports.getsp()>>>0,o(t+40,i),this.mem.setUint8(t+48,1)}catch(e){t=this._inst.exports.getsp()>>>0,o(t+40,e),this.mem.setUint8(t+48,0)}},"syscall/js.valueLength":t=>{t>>>=0,i(t+16,parseInt(e(t+8).length))},"syscall/js.valuePrepareString":n=>{n>>>=0;const s=t.encode(String(e(n+8)));o(n+16,s),i(n+24,s.length)},"syscall/js.valueLoadString":t=>{t>>>=0;const n=e(t+8);r(t+16).set(n)},"syscall/js.valueInstanceOf":t=>{t>>>=0,this.mem.setUint8(t+24,e(t+8)instanceof e(t+16)?1:0)},"syscall/js.copyBytesToGo":t=>{t>>>=0;const s=r(t+8),n=e(t+32);if(!(n instanceof Uint8Array||n instanceof Uint8ClampedArray)){this.mem.setUint8(t+48,0);return}const o=n.subarray(0,s.length);s.set(o),i(t+40,o.length),this.mem.setUint8(t+48,1)},"syscall/js.copyBytesToJS":t=>{t>>>=0;const n=e(t+8),o=r(t+16);if(!(n instanceof Uint8Array||n instanceof Uint8ClampedArray)){this.mem.setUint8(t+48,0);return}const s=o.subarray(0,n.length);n.set(s),i(t+40,s.length),this.mem.setUint8(t+48,1)},debug:e=>{console.log(e)}}}}async run(e){if(!(e instanceof WebAssembly.Instance))throw new Error("Go.run: WebAssembly.Instance expected");this._inst=e,this.mem=new DataView(this._inst.exports.mem.buffer),this._values=[NaN,0,null,!0,!1,globalThis,this],this._goRefCounts=new Array(this._values.length).fill(1/0),this._ids=new Map([[0,1],[null,2],[!0,3],[!1,4],[globalThis,5],[this,6]]),this._idPool=[],this.exited=!1;let n=4096;const o=e=>{const o=n,s=t.encode(e+"\0");return new Uint8Array(this.mem.buffer,n,s.length).set(s),n+=s.length,n%8!==0&&(n+=8-n%8),o},i=this.argv.length,s=[];this.argv.forEach(e=>{s.push(o(e))}),s.push(0);const a=Object.keys(this.env).sort();a.forEach(e=>{s.push(o(`${e}=${this.env[e]}`))}),s.push(0);const r=n;s.forEach(e=>{this.mem.setUint32(n,e,!0),this.mem.setUint32(n+4,0,!0),n+=8});const c=4096+8192;if(n>=c)throw new Error("total length of command line and environment variables exceeds limit");this._inst.exports.run(i,r),this.exited&&this._resolveExitPromise(),await this._exitPromise}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(e){const t=this;return function(){const n={id:e,this:this,args:arguments};return t._pendingEvent=n,t._resume(),n.result}}}})() \ No newline at end of file diff --git a/internal/webserver/web/templates/string_constants.tmpl b/internal/webserver/web/templates/string_constants.tmpl index 6ac4d50..ee27851 100644 --- a/internal/webserver/web/templates/string_constants.tmpl +++ b/internal/webserver/web/templates/string_constants.tmpl @@ -1,5 +1,5 @@ // Change these for rebranding -{{define "version"}}1.8.1{{end}} +{{define "version"}}1.8.2{{end}} // Specifies the version of JS files, so that the browser doesn't // use a cached version, if the file has been updated