watr 3.2.1 → 4.0.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/LICENSE +26 -0
- package/bin/watr.js +83 -0
- package/dist/watr.js +1815 -0
- package/dist/watr.min.js +5 -0
- package/package.json +61 -14
- package/readme.md +42 -92
- package/src/compile.js +560 -532
- package/src/const.js +142 -52
- package/src/encode.js +89 -35
- package/src/parse.js +41 -28
- package/src/print.js +73 -12
- package/src/util.js +80 -2
- package/types/src/compile.d.ts +8 -0
- package/types/src/compile.d.ts.map +1 -0
- package/types/src/const.d.ts +87 -0
- package/types/src/const.d.ts.map +1 -0
- package/types/src/encode.d.ts +58 -0
- package/types/src/encode.d.ts.map +1 -0
- package/types/src/parse.d.ts +3 -0
- package/types/src/parse.d.ts.map +1 -0
- package/types/src/print.d.ts +16 -0
- package/types/src/print.d.ts.map +1 -0
- package/types/src/util.d.ts +18 -0
- package/types/src/util.d.ts.map +1 -0
- package/types/watr.d.ts +34 -0
- package/types/watr.d.ts.map +1 -0
- package/watr.js +233 -3
package/dist/watr.min.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var ue=Object.defineProperty;var _e=(e,t)=>{for(var i in t)ue(e,i,{get:t[i],enumerable:!0})};var F={};_e(F,{f32:()=>B,f64:()=>q,i16:()=>ye,i32:()=>I,i64:()=>E,i8:()=>ge,uleb:()=>o,uleb5:()=>he});var _=(e,t=_.i)=>{if(t!=null&&_.src){let i=1,r=1;for(let a=0;a<t&&a<_.src.length;a++)_.src[a]===`
|
|
2
|
+
`?(i++,r=1):r++;e+=` at ${i}:${r}`}throw Error(e)};var Z=/^_|_$|[^\da-f]_|_[^\da-f]/i,ee=/^[+-]?(?:0x[\da-f]+|\d+)$/i,ce=new TextEncoder,pe=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),Q={n:10,r:13,t:9,'"':34,"'":39,"\\":92},C=e=>{let t=[],i=1,r,a,l="",f=()=>(l&&t.push(...ce.encode(l)),l="");for(;i<e.length-1;)a=e[i++],r=null,a==="\\"&&(e[i]==="u"?(i++,i++,a=String.fromCodePoint(parseInt(e.slice(i,i=e.indexOf("}",i)),16)),i++):Q[e[i]]?r=Q[e[i++]]:isNaN(r=parseInt(e[i]+e[i+1],16))?a+=e[i]:(i++,i++)),r!=null?(f(),t.push(r)):l+=a;return f(),t.valueOf=()=>e,t},te=e=>pe.decode(new Uint8Array(C(e)));var o=(e,t=[])=>{if(e==null)return t;if(typeof e=="string"&&(e=/[_x]/i.test(e)?BigInt(e.replaceAll("_","")):I.parse(e)),typeof e=="bigint"){for(;;){let r=Number(e&0x7Fn);if(e>>=7n,e===0n){t.push(r);break}t.push(r|128)}return t}let i=e&127;return e>>>=7,e===0?(t.push(i),t):(t.push(i|128),o(e,t))};function he(e){let t=[];for(let i=0;i<5;i++){let r=e&127;e>>>=7,i<4&&(r|=128),t.push(r)}return t}function I(e,t=[]){for(typeof e=="string"&&(e=I.parse(e));;){let i=Number(e&127);if(e>>=7,e===0&&!(i&64)||e===-1&&i&64){t.push(i);break}t.push(i|128)}return t}var ie=e=>!Z.test(e)&&ee.test(e=e.replaceAll("_",""))?e:_(`Bad int ${e}`),ge=I,ye=I;I.parse=e=>(e=parseInt(ie(e)),(e<-2147483648||e>4294967295)&&_("i32 constant out of range"),e);function E(e,t=[]){for(typeof e=="string"&&(e=E.parse(e));;){let i=Number(e&0x7Fn);if(e>>=7n,e===0n&&!(i&64)||e===-1n&&i&64){t.push(i);break}t.push(i|128)}return t}E.parse=e=>(e=ie(e),e=e[0]==="-"?-BigInt(e.slice(1)):BigInt(e),(e<-0x8000000000000000n||e>0xffffffffffffffffn)&&_("i64 constant out of range"),y.setBigInt64(0,e),y.getBigInt64(0));var y=new DataView(new Float64Array(1).buffer),de=2147483648,be=2139095040;function B(e,t,i){return typeof e=="string"&&~(i=e.indexOf("nan:"))?(t=I.parse(e.slice(i+4)),t|=be,e[0]==="-"&&(t|=de),y.setInt32(0,t)):(t=typeof e=="string"?B.parse(e):e,y.setFloat32(0,t)),[y.getUint8(3),y.getUint8(2),y.getUint8(1),y.getUint8(0)]}var we=0x8000000000000000n,Ae=0x7ff0000000000000n;function q(e,t,i){return typeof e=="string"&&~(i=e.indexOf("nan:"))?(t=E.parse(e.slice(i+4)),t|=Ae,e[0]==="-"&&(t|=we),y.setBigInt64(0,t)):(t=typeof e=="string"?q.parse(e):e,y.setFloat64(0,t)),[y.getUint8(7),y.getUint8(6),y.getUint8(5),y.getUint8(4),y.getUint8(3),y.getUint8(2),y.getUint8(1),y.getUint8(0)]}q.parse=(e,t=Number.MAX_VALUE)=>{e=e.replaceAll("_","");let i=1;if(e[0]==="-"?(i=-1,e=e.slice(1)):e[0]==="+"&&(e=e.slice(1)),e[1]==="x"){let[r,a="0"]=e.split(/p/i),[l,f=""]=r.split("."),s=f.length??0,n=parseInt(l);isNaN(n)&&_();let m=f?parseInt("0x"+f)/16**s:0;a=parseInt(a,10);let x=i*(n+m)*2**a;return x=Math.max(-t,Math.min(t,x)),x}return e.includes("nan")?i<0?NaN:NaN:e.includes("inf")?i*(1/0):i*parseFloat(e)};B.parse=e=>q.parse(e,34028234663852886e22);var M=["unreachable","nop","block block","loop block","if block","else null","then null",,"throw tagidx",,"throw_ref","end end","br labelidx","br_if labelidx","br_table br_table","return","call funcidx","call_indirect call_indirect","return_call funcidx","return_call_indirect call_indirect","call_ref typeidx","return_call_ref typeidx",,,,,"drop","select select","",,,"try_table try_table","local.get localidx","local.set localidx","local.tee localidx","global.get globalidx","global.set globalidx","table.get tableidx","table.set tableidx",,"i32.load memarg","i64.load memarg","f32.load memarg","f64.load memarg","i32.load8_s memarg","i32.load8_u memarg","i32.load16_s memarg","i32.load16_u memarg","i64.load8_s memarg","i64.load8_u memarg","i64.load16_s memarg","i64.load16_u memarg","i64.load32_s memarg","i64.load32_u memarg","i32.store memarg","i64.store memarg","f32.store memarg","f64.store memarg","i32.store8 memarg","i32.store16 memarg","i64.store8 memarg","i64.store16 memarg","i64.store32 memarg","memory.size opt_memory","memory.grow opt_memory","i32.const i32","i64.const i64","f32.const f32","f64.const f64","i32.eqz","i32.eq","i32.ne","i32.lt_s","i32.lt_u","i32.gt_s","i32.gt_u","i32.le_s","i32.le_u","i32.ge_s","i32.ge_u","i64.eqz","i64.eq","i64.ne","i64.lt_s","i64.lt_u","i64.gt_s","i64.gt_u","i64.le_s","i64.le_u","i64.ge_s","i64.ge_u","f32.eq","f32.ne","f32.lt","f32.gt","f32.le","f32.ge","f64.eq","f64.ne","f64.lt","f64.gt","f64.le","f64.ge","i32.clz","i32.ctz","i32.popcnt","i32.add","i32.sub","i32.mul","i32.div_s","i32.div_u","i32.rem_s","i32.rem_u","i32.and","i32.or","i32.xor","i32.shl","i32.shr_s","i32.shr_u","i32.rotl","i32.rotr","i64.clz","i64.ctz","i64.popcnt","i64.add","i64.sub","i64.mul","i64.div_s","i64.div_u","i64.rem_s","i64.rem_u","i64.and","i64.or","i64.xor","i64.shl","i64.shr_s","i64.shr_u","i64.rotl","i64.rotr","f32.abs","f32.neg","f32.ceil","f32.floor","f32.trunc","f32.nearest","f32.sqrt","f32.add","f32.sub","f32.mul","f32.div","f32.min","f32.max","f32.copysign","f64.abs","f64.neg","f64.ceil","f64.floor","f64.trunc","f64.nearest","f64.sqrt","f64.add","f64.sub","f64.mul","f64.div","f64.min","f64.max","f64.copysign","i32.wrap_i64","i32.trunc_f32_s","i32.trunc_f32_u","i32.trunc_f64_s","i32.trunc_f64_u","i64.extend_i32_s","i64.extend_i32_u","i64.trunc_f32_s","i64.trunc_f32_u","i64.trunc_f64_s","i64.trunc_f64_u","f32.convert_i32_s","f32.convert_i32_u","f32.convert_i64_s","f32.convert_i64_u","f32.demote_f64","f64.convert_i32_s","f64.convert_i32_u","f64.convert_i64_s","f64.convert_i64_u","f64.promote_f32","i32.reinterpret_f32","i64.reinterpret_f64","f32.reinterpret_i32","f64.reinterpret_i64","i32.extend8_s","i32.extend16_s","i64.extend8_s","i64.extend16_s","i64.extend32_s",,,,,,,,,,,,"ref.null ref_null","ref.is_null","ref.func funcidx","ref.eq","ref.as_non_null","br_on_null labelidx","br_on_non_null labelidx",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["struct.new typeidx","struct.new_default typeidx","struct.get typeidx_field","struct.get_s typeidx_field","struct.get_u typeidx_field","struct.set typeidx_field","array.new typeidx","array.new_default typeidx","array.new_fixed typeidx_multi","array.new_data typeidx_dataidx","array.new_elem typeidx_elemidx","array.get typeidx","array.get_s typeidx","array.get_u typeidx","array.set typeidx","array.len","array.fill typeidx","array.copy typeidx_typeidx","array.init_data typeidx_dataidx","array.init_elem typeidx_elemidx","ref.test reftype","","ref.cast reftype","","br_on_cast reftype2","br_on_cast_fail reftype2","any.convert_extern","extern.convert_any","ref.i31","i31.get_s","i31.get_u"],["i32.trunc_sat_f32_s","i32.trunc_sat_f32_u","i32.trunc_sat_f64_s","i32.trunc_sat_f64_u","i64.trunc_sat_f32_s","i64.trunc_sat_f32_u","i64.trunc_sat_f64_s","i64.trunc_sat_f64_u","memory.init dataidx_memoryidx","data.drop dataidx","memory.copy memoryidx_memoryidx","memory.fill memoryidx?","table.init reversed","elem.drop elemidx","table.copy tableidx_tableidx","table.grow tableidx","table.size tableidx","table.fill tableidx",,"i64.add128","i64.sub128","i64.mul_wide_s","i64.mul_wide_u"],["v128.load memarg","v128.load8x8_s memarg","v128.load8x8_u memarg","v128.load16x4_s memarg","v128.load16x4_u memarg","v128.load32x2_s memarg","v128.load32x2_u memarg","v128.load8_splat memarg","v128.load16_splat memarg","v128.load32_splat memarg","v128.load64_splat memarg","v128.store memarg","v128.const v128const","i8x16.shuffle shuffle","i8x16.swizzle","i8x16.splat","i16x8.splat","i32x4.splat","i64x2.splat","f32x4.splat","f64x2.splat","i8x16.extract_lane_s laneidx","i8x16.extract_lane_u laneidx","i8x16.replace_lane laneidx","i16x8.extract_lane_s laneidx","i16x8.extract_lane_u laneidx","i16x8.replace_lane laneidx","i32x4.extract_lane laneidx","i32x4.replace_lane laneidx","i64x2.extract_lane laneidx","i64x2.replace_lane laneidx","f32x4.extract_lane laneidx","f32x4.replace_lane laneidx","f64x2.extract_lane laneidx","f64x2.replace_lane laneidx","i8x16.eq","i8x16.ne","i8x16.lt_s","i8x16.lt_u","i8x16.gt_s","i8x16.gt_u","i8x16.le_s","i8x16.le_u","i8x16.ge_s","i8x16.ge_u","i16x8.eq","i16x8.ne","i16x8.lt_s","i16x8.lt_u","i16x8.gt_s","i16x8.gt_u","i16x8.le_s","i16x8.le_u","i16x8.ge_s","i16x8.ge_u","i32x4.eq","i32x4.ne","i32x4.lt_s","i32x4.lt_u","i32x4.gt_s","i32x4.gt_u","i32x4.le_s","i32x4.le_u","i32x4.ge_s","i32x4.ge_u","f32x4.eq","f32x4.ne","f32x4.lt","f32x4.gt","f32x4.le","f32x4.ge","f64x2.eq","f64x2.ne","f64x2.lt","f64x2.gt","f64x2.le","f64x2.ge","v128.not","v128.and","v128.andnot","v128.or","v128.xor","v128.bitselect","v128.any_true","v128.load8_lane memlane","v128.load16_lane memlane","v128.load32_lane memlane","v128.load64_lane memlane","v128.store8_lane memlane","v128.store16_lane memlane","v128.store32_lane memlane","v128.store64_lane memlane","v128.load32_zero memarg","v128.load64_zero memarg","f32x4.demote_f64x2_zero","f64x2.promote_low_f32x4","i8x16.abs","i8x16.neg","i8x16.popcnt","i8x16.all_true","i8x16.bitmask","i8x16.narrow_i16x8_s","i8x16.narrow_i16x8_u","f32x4.ceil","f32x4.floor","f32x4.trunc","f32x4.nearest","i8x16.shl","i8x16.shr_s","i8x16.shr_u","i8x16.add","i8x16.add_sat_s","i8x16.add_sat_u","i8x16.sub","i8x16.sub_sat_s","i8x16.sub_sat_u","f64x2.ceil","f64x2.floor","i8x16.min_s","i8x16.min_u","i8x16.max_s","i8x16.max_u","f64x2.trunc","i8x16.avgr_u","i16x8.extadd_pairwise_i8x16_s","i16x8.extadd_pairwise_i8x16_u","i32x4.extadd_pairwise_i16x8_s","i32x4.extadd_pairwise_i16x8_u","i16x8.abs","i16x8.neg","i16x8.q15mulr_sat_s","i16x8.all_true","i16x8.bitmask","i16x8.narrow_i32x4_s","i16x8.narrow_i32x4_u","i16x8.extend_low_i8x16_s","i16x8.extend_high_i8x16_s","i16x8.extend_low_i8x16_u","i16x8.extend_high_i8x16_u","i16x8.shl","i16x8.shr_s","i16x8.shr_u","i16x8.add","i16x8.add_sat_s","i16x8.add_sat_u","i16x8.sub","i16x8.sub_sat_s","i16x8.sub_sat_u","f64x2.nearest","i16x8.mul","i16x8.min_s","i16x8.min_u","i16x8.max_s","i16x8.max_u",,"i16x8.avgr_u","i16x8.extmul_low_i8x16_s","i16x8.extmul_high_i8x16_s","i16x8.extmul_low_i8x16_u","i16x8.extmul_high_i8x16_u","i32x4.abs","i32x4.neg",,"i32x4.all_true","i32x4.bitmask",,,"i32x4.extend_low_i16x8_s","i32x4.extend_high_i16x8_s","i32x4.extend_low_i16x8_u","i32x4.extend_high_i16x8_u","i32x4.shl","i32x4.shr_s","i32x4.shr_u","i32x4.add",,,"i32x4.sub",,,,"i32x4.mul","i32x4.min_s","i32x4.min_u","i32x4.max_s","i32x4.max_u","i32x4.dot_i16x8_s",,"i32x4.extmul_low_i16x8_s","i32x4.extmul_high_i16x8_s","i32x4.extmul_low_i16x8_u","i32x4.extmul_high_i16x8_u","i64x2.abs","i64x2.neg",,"i64x2.all_true","i64x2.bitmask",,,"i64x2.extend_low_i32x4_s","i64x2.extend_high_i32x4_s","i64x2.extend_low_i32x4_u","i64x2.extend_high_i32x4_u","i64x2.shl","i64x2.shr_s","i64x2.shr_u","i64x2.add",,,"i64x2.sub",,,,"i64x2.mul","i64x2.eq","i64x2.ne","i64x2.lt_s","i64x2.gt_s","i64x2.le_s","i64x2.ge_s","i64x2.extmul_low_i32x4_s","i64x2.extmul_high_i32x4_s","i64x2.extmul_low_i32x4_u","i64x2.extmul_high_i32x4_u","f32x4.abs","f32x4.neg",,"f32x4.sqrt","f32x4.add","f32x4.sub","f32x4.mul","f32x4.div","f32x4.min","f32x4.max","f32x4.pmin","f32x4.pmax","f64x2.abs","f64x2.neg",,"f64x2.sqrt","f64x2.add","f64x2.sub","f64x2.mul","f64x2.div","f64x2.min","f64x2.max","f64x2.pmin","f64x2.pmax","i32x4.trunc_sat_f32x4_s","i32x4.trunc_sat_f32x4_u","f32x4.convert_i32x4_s","f32x4.convert_i32x4_u","i32x4.trunc_sat_f64x2_s_zero","i32x4.trunc_sat_f64x2_u_zero","f64x2.convert_low_i32x4_s","f64x2.convert_low_i32x4_u","i8x16.relaxed_swizzle","i32x4.relaxed_trunc_f32x4_s","i32x4.relaxed_trunc_f32x4_u","i32x4.relaxed_trunc_f64x2_s_zero","i32x4.relaxed_trunc_f64x2_u_zero","f32x4.relaxed_madd","f32x4.relaxed_nmadd","f64x2.relaxed_madd","f64x2.relaxed_nmadd","i8x16.relaxed_laneselect","i16x8.relaxed_laneselect","i32x4.relaxed_laneselect","i64x2.relaxed_laneselect","f32x4.relaxed_min","f32x4.relaxed_max","f64x2.relaxed_min","f64x2.relaxed_max","i16x8.relaxed_q15mulr_s","i16x8.relaxed_dot_i8x16_i7x16_s","i32x4.relaxed_dot_i8x16_i7x16_add_s"],["memory.atomic.notify memarg","memory.atomic.wait32 memarg","memory.atomic.wait64 memarg","atomic.fence opt_memory",,,,,,,,,,,,,"i32.atomic.load memarg","i64.atomic.load memarg","i32.atomic.load8_u memarg","i32.atomic.load16_u memarg","i64.atomic.load8_u memarg","i64.atomic.load16_u memarg","i64.atomic.load32_u memarg","i32.atomic.store memarg","i64.atomic.store memarg","i32.atomic.store8 memarg","i32.atomic.store16 memarg","i64.atomic.store8 memarg","i64.atomic.store16 memarg","i64.atomic.store32 memarg","i32.atomic.rmw.add memarg","i64.atomic.rmw.add memarg","i32.atomic.rmw8.add_u memarg","i32.atomic.rmw16.add_u memarg","i64.atomic.rmw8.add_u memarg","i64.atomic.rmw16.add_u memarg","i64.atomic.rmw32.add_u memarg","i32.atomic.rmw.sub memarg","i64.atomic.rmw.sub memarg","i32.atomic.rmw8.sub_u memarg","i32.atomic.rmw16.sub_u memarg","i64.atomic.rmw8.sub_u memarg","i64.atomic.rmw16.sub_u memarg","i64.atomic.rmw32.sub_u memarg","i32.atomic.rmw.and memarg","i64.atomic.rmw.and memarg","i32.atomic.rmw8.and_u memarg","i32.atomic.rmw16.and_u memarg","i64.atomic.rmw8.and_u memarg","i64.atomic.rmw16.and_u memarg","i64.atomic.rmw32.and_u memarg","i32.atomic.rmw.or memarg","i64.atomic.rmw.or memarg","i32.atomic.rmw8.or_u memarg","i32.atomic.rmw16.or_u memarg","i64.atomic.rmw8.or_u memarg","i64.atomic.rmw16.or_u memarg","i64.atomic.rmw32.or_u memarg","i32.atomic.rmw.xor memarg","i64.atomic.rmw.xor memarg","i32.atomic.rmw8.xor_u memarg","i32.atomic.rmw16.xor_u memarg","i64.atomic.rmw8.xor_u memarg","i64.atomic.rmw16.xor_u memarg","i64.atomic.rmw32.xor_u memarg","i32.atomic.rmw.xchg memarg","i64.atomic.rmw.xchg memarg","i32.atomic.rmw8.xchg_u memarg","i32.atomic.rmw16.xchg_u memarg","i64.atomic.rmw8.xchg_u memarg","i64.atomic.rmw16.xchg_u memarg","i64.atomic.rmw32.xchg_u memarg","i32.atomic.rmw.cmpxchg memarg","i64.atomic.rmw.cmpxchg memarg","i32.atomic.rmw8.cmpxchg_u memarg","i32.atomic.rmw16.cmpxchg_u memarg","i64.atomic.rmw8.cmpxchg_u memarg","i64.atomic.rmw16.cmpxchg_u memarg","i64.atomic.rmw32.cmpxchg_u memarg"]],g={custom:0,type:1,import:2,func:3,table:4,memory:5,tag:13,global:6,export:7,start:8,elem:9,datacount:12,code:10,data:11},w={i8:120,i16:119,i32:127,i64:126,f32:125,f64:124,void:64,v128:123,exn:105,noexn:116,nofunc:115,noextern:114,none:113,func:112,extern:111,any:110,eq:109,i31:108,struct:107,array:106,nullfuncref:115,nullexternref:114,nullexnref:116,nullref:113,funcref:112,externref:111,exnref:105,anyref:110,eqref:109,i31ref:108,structref:107,arrayref:106,ref:100,refnull:99,sub:80,subfinal:79,rec:78},re={func:96,struct:95,array:94,sub:80,subfinal:79,rec:78},Y={func:0,table:1,memory:2,global:3,tag:4};var k=e=>{let t=0,i=[],r="",a=0,l=0,f=()=>r&&(i.push(r),r=""),s=n=>{i.i=n;for(let m,x,p;t<e.length;)if(m=e.charCodeAt(t),a===34)r+=e[t++],m===92?r+=e[t++]:m===34&&(f(),a=0);else if(a>59)m===40&&e.charCodeAt(t+1)===59?(a++,r+=e[t++]+e[t++]):m===59&&e.charCodeAt(t+1)===41?(r+=e[t++]+e[t++],--a===59&&(f(),a=0)):r+=e[t++];else if(a<0)m===10||m===13?(r+=e[t++],f(),a=0):r+=e[t++];else if(m===34)r!=="$"&&f(),a=34,r+=e[t++];else if(m===40&&e.charCodeAt(t+1)===59)f(),a=60,r=e[t++]+e[t++];else if(m===59&&e.charCodeAt(t+1)===59)f(),a=-1,r=e[t++]+e[t++];else if(m===40&&e.charCodeAt(t+1)===64)f(),p=t,t+=2,r="@",l++,(x=i).push(i=[]),s(p),i=x;else if(m===40)f(),p=t++,l++,(x=i).push(i=[]),s(p),i=x;else{if(m===41)return f(),t++,l--;m<=32?(f(),t++):r+=e[t++]}a<0&&f(),f()};return s(0),a===34&&_("Unclosed quote",t),a>59&&_("Unclosed block comment",t),l>0&&_("Unclosed parenthesis",t),t<e.length&&_("Unexpected closing parenthesis",t),i.length>1?i:i[0]||[]};var se=(e,t)=>Array.isArray(e)?e[0]?.[0]==="@"&&e[0]!=="@custom"&&!e[0]?.startsWith?.("@metadata.code.")?null:(t=e.map(se).filter(i=>i!=null),t.i=e.i,t.length===1&&t[0]?.[0]==="module"?t[0]:t):typeof e!="string"?e:e[0]===";"||e[1]===";"?null:e[0]==="$"&&e[1]==='"'?e.includes("\\")?"$"+te(e.slice(1)):"$"+e.slice(2,-1):e[0]==='"'?C(e):e;function T(e){typeof e=="string"?(_.src=e,e=k(e)||[]):_.src="",_.i=0,e=se(e)||[];let t=0;if(e[0]==="module"?(t++,A(e[t])&&t++):typeof e[0]=="string"&&(e=[e]),e[t]==="binary")return Uint8Array.from(e.slice(++t).flat());if(e[t]==="quote")return T(e.slice(++t).map(l=>l.valueOf().slice(1,-1)).flat().join(""));let i=[];for(let l in g)(i[g[l]]=i[l]=[]).name=l;i.metadata={},e.slice(t).filter(l=>{if(!Array.isArray(l)){let n=_.src?.indexOf(l,_.i);n>=0&&(_.i=n),_(`Unexpected token ${l}`)}let[f,...s]=l;if(_.i=l.i,f==="@custom")i.custom.push(s);else if(f==="rec")for(let n=0;n<s.length;n++){let[,...m]=s[n];G(m,i.type),(m=ae(m,i)).push(n?!0:[i.type.length,s.length]),i.type.push(m)}else if(f==="type")G(s,i.type),i.type.push(ae(s,i));else if(f==="start"||f==="export")i[f].push(s);else return!0}).forEach(l=>{let[f,...s]=l;_.i=l.i;let n;f==="import"&&([f,...s]=(n=s).pop());let m=i[f];for(m||_(`Unknown section ${f}`),G(s,m);s[0]?.[0]==="export";)i.export.push([s.shift()[1],[f,m?.length]]);if(s[0]?.[0]==="import"&&([,...n]=s.shift()),f==="table"){let x=s[0]==="i64",p=x?1:0;if(s[p+1]?.[0]==="elem"){let[d,[,...c]]=[s[p],s[p+1]];s=x?["i64",c.length,c.length,d]:[c.length,c.length,d],i.elem.push([["table",m.length],["offset",[x?"i64.const":"i32.const",x?0n:0]],d,...c])}}else if(f==="memory"){let x=s[0]==="i64",p=x?1:0;if(s[p]?.[0]==="data"){let[,...d]=s.splice(p,1)[0],c=""+Math.ceil(d.reduce((v,b)=>v+b.length,0)/65536);i.data.push([["memory",m.length],[x?"i64.const":"i32.const",x?0n:0],...d]),s=x?["i64",c,c]:[c,c]}}else if(f==="func"){let[x,p,d]=L(s,i);x??=R(p,d,i),!n&&i.code.push([[x,p,d],...N(s,i)]),s=[["type",x]]}else if(f==="tag"){let[x,p]=L(s,i);x??=R(p,[],i),s=[["type",x]]}n&&(i.import.push([...n,[f,...s]]),s=null),m.push(s)});let r=(l,f=!0)=>{let s=i[l].filter(Boolean).map(n=>X[l](n,i)).filter(Boolean);return l===g.custom?s.flatMap(n=>[l,...h(n)]):s.length?[l,...h(f?h(s):s)]:[]},a=()=>{let l=[];for(let f in i.metadata){let s=h(C(`"metadata.code.${f}"`)),n=h(i.metadata[f].map(([m,x])=>[...o(m),...h(x.map(([p,d])=>[...o(p),...h(d)]))]));l.push(0,...h([...s,...n]))}return l};return Uint8Array.from([0,97,115,109,1,0,0,0,...r(g.custom),...r(g.type),...r(g.import),...r(g.func),...r(g.table),...r(g.memory),...r(g.tag),...r(g.global),...r(g.export),...r(g.start,!1),...r(g.elem),...r(g.datacount,!1),...r(g.code),...a(),...r(g.data)])}var U=e=>e?.[0]==="$"||!isNaN(e),A=e=>e?.[0]==="$",K=e=>e?.[0]==="a"||e?.[0]==="o";function N(e,t){let i=[];for(e=[...e];e.length;){let r=e.shift();if(typeof r=="string")if(i.push(r),r==="block"||r==="if"||r==="loop")A(e[0])&&i.push(e.shift()),i.push(D(e,t));else if(r==="else"||r==="end")A(e[0])&&e.shift();else if(r==="select")i.push(V(e)[1]);else if(r.endsWith("call_indirect")){let a=U(e[0])?e.shift():0,[l,f,s]=L(e,t);i.push(a,["type",l??R(f,s,t)])}else r==="table.init"?i.push(U(e[1])?e.shift():0,e.shift()):r==="table.copy"||r==="memory.copy"?i.push(U(e[0])?e.shift():0,U(e[0])?e.shift():0):r.startsWith("table.")?i.push(U(e[0])?e.shift():0):r==="memory.init"?(i.push(...U(e[1])?[e.shift(),e.shift()].reverse():[e.shift(),0]),t.datacount&&(t.datacount[0]=!0)):r==="data.drop"||r==="array.new_data"||r==="array.init_data"?(r==="data.drop"&&i.push(e.shift()),t.datacount&&(t.datacount[0]=!0)):(r.startsWith("memory.")||r.endsWith("load")||r.endsWith("store"))&&U(e[0])&&i.push(e.shift());else if(Array.isArray(r)){let a=r[0];if(r.i!=null&&(_.i=r.i),a?.startsWith?.("@metadata.code.")){let f=a.slice(15);i.push(["@metadata",f,r[1]]);continue}if(typeof a!="string"||!Array.isArray(M[a])){i.push(r);continue}let l=r.slice(1);if(a==="block"||a==="loop")i.push(a),A(l[0])&&i.push(l.shift()),i.push(D(l,t),...N(l,t),"end");else if(a==="if"){let f=[],s=[];l.at(-1)?.[0]==="else"&&(s=N(l.pop().slice(1),t)),l.at(-1)?.[0]==="then"&&(f=N(l.pop().slice(1),t));let n=[a];A(l[0])&&n.push(l.shift()),n.push(D(l,t)),i.push(...N(l,t),...n,...f),s.length&&i.push("else",...s),i.push("end")}else if(a==="try_table"){for(i.push(a),A(l[0])&&i.push(l.shift()),i.push(D(l,t));l[0]?.[0]==="catch"||l[0]?.[0]==="catch_ref"||l[0]?.[0]==="catch_all"||l[0]?.[0]==="catch_all_ref";)i.push(l.shift());i.push(...N(l,t),"end")}else{let f=[];for(;l.length&&(!Array.isArray(l[0])||"type,param,result,ref".includes(l[0][0]));)f.push(l.shift());i.push(...N(l,t),a,...f),e.unshift(...i.splice(i.length-1-f.length))}}else i.push(r)}return i}var R=(e,t,i,r="$"+e+">"+t)=>(i.type[r]??=i.type.push(["func",[e,t]])-1,r),H=(e,t)=>{let i=[];for(;e[0]?.[0]===t;){let[,...r]=e.shift(),a=A(r[0])&&r.shift();a&&(a in i?(()=>{throw Error(`Duplicate ${t} ${a}`)})():i[a]=i.length),i.push(...r)}return i},V=e=>{let t=H(e,"param"),i=H(e,"result");if(e[0]?.[0]==="param")throw Error("Unexpected param");return[t,i]},L=(e,t)=>{if(e[0]?.[0]!=="type")return[,...V(e)];let[,i]=e.shift(),[r,a]=V(e),l=t.type[typeof i=="string"&&isNaN(i)?t.type[i]:+i];if(!l)throw Error(`Unknown type ${i}`);if((r.length||a.length)&&l[1].join(">")!==r+">"+a)throw Error(`Type ${i} mismatch`);return[i,...l[1]]},D=(e,t)=>{let[i,r,a]=L(e,t);if(!(!r.length&&!a.length))return!r.length&&a.length===1?["result",...a]:["type",i??R(r,a,t)]},G=(e,t)=>{let i=A(e[0])&&e.shift();return i&&(i in t?_(`Duplicate ${t.name} ${i}`):t[i]=t.length),i},ae=([e],t)=>{let i="subfinal",r=[],a;return e[0]==="sub"&&(i=e.shift(),e[0]==="final"&&(i+=e.shift()),e=(r=e).pop()),[a,...e]=e,a==="func"?(e=V(e),t.type["$"+e.join(">")]??=t.type.length):a==="struct"?e=H(e,"field"):a==="array"&&([e]=e),[a,e,i,r]},X=[([e,...t],i)=>{let r=t;return(t[0]?.[0]==="before"||t[0]?.[0]==="after")&&(r=t.slice(1)),[...h(e),...r.flat()]},([e,t,i,r,a],l)=>{if(a===!0)return;let f;if(a){e="rec";let[s,n]=a,m=Array.from({length:n},(x,p)=>X[g.type](l.type[s+p].slice(0,4),l));f=h(m)}else i==="sub"||r?.length?(f=[...h(r.map(s=>u(s,l.type))),...X[g.type]([e,t],l)],e=i):e==="func"?f=[...h(t[0].map(s=>$(s,l))),...h(t[1].map(s=>$(s,l)))]:e==="array"?f=W(t,l):e==="struct"&&(f=h(t.map(s=>W(s,l))));return[re[e],...f]},([e,t,[i,...r]],a)=>{let l;if(i==="func"){let[[,f]]=r;l=o(u(f,a.type))}else if(i==="tag"){let[[,f]]=r;l=[0,...o(u(f,a.type))]}else i==="memory"?l=j(r):i==="global"?l=W(r[0],a):i==="table"?l=[...$(r.pop(),a),...j(r)]:_(`Unknown kind ${i}`);return[...h(e),...h(t),Y[i],...l]},([[,e]],t)=>o(u(e,t.type)),(e,t)=>{let i=j(e),r=$(e.shift(),t),[a]=e;return a?[64,0,...r,...i,...z(a,t)]:[...r,...i]},(e,t)=>j(e),([e,t],i)=>[...W(e,i),...z(t,i)],([e,[t,i]],r)=>[...h(e),Y[t],...o(u(i,r[t]))],([e],t)=>o(u(e,t.func)),(e,t)=>{let i=0,r=0,a=0,l=0,f,s,n;e[0]==="declare"&&(e.shift(),r=1),e[0]?.[0]==="table"?([,f]=e.shift(),f=u(f,t.table)):(typeof e[0]=="string"||typeof e[0]=="number")&&(e[1]?.[0]==="offset"||Array.isArray(e[1])&&e[1][0]!=="item"&&!e[1][0]?.startsWith("ref"))&&(f=u(e.shift(),t.table)),e[0]?.[0]==="offset"||Array.isArray(e[0])&&e[0][0]!=="item"&&!e[0][0].startsWith("ref")?(s=e.shift(),s[0]==="offset"&&([,s]=s),s=z(s,t)):r||(i=1),w[e[0]]||e[0]?.[0]==="ref"?n=$(e.shift(),t):e[0]==="func"?n=[w[e.shift()]]:n=[w.func],e=e.map(x=>(x[0]==="item"&&(x=x.length===3&&x[1]==="ref.func"?x[2]:x[1]),x[0]==="ref.func"&&([,x]=x),typeof x!="string"&&(a=1),x)),n[0]!==w.funcref&&(l=1,a=1);let m=a<<2|(i||r?r:!!f||l)<<1|(i||r);return[m,...m===0?s:m===1?[0]:m===2?[...o(f||0),...s,0]:m===3?[0]:m===4?s:m===5?n:m===6?[...o(f||0),...s,...n]:n,...h(e.map(a?x=>z(typeof x=="string"?["ref.func",x]:x,t):x=>o(u(x,t.func))))]},(e,t)=>{let[i,r]=e.shift();r||([,[r]]=t.type[u(i,t.type)]),t.local=Object.create(r),t.block=[],t.local.name="local",t.block.name="block",t._codeIdx===void 0&&(t._codeIdx=0);let a=t._codeIdx++;for(;e[0]?.[0]==="local";){let[,...n]=e.shift();if(A(n[0])){let m=n.shift();m in t.local?_(`Duplicate local ${m}`):t.local[m]=t.local.length}t.local.push(...n)}t.meta={};let l=me(e,t),f=t.import.filter(n=>n[2][0]==="func").length+a;for(let n in t.meta)((t.metadata??={})[n]??=[]).push([f,t.meta[n]]);let s=t.local.slice(r.length).reduce((n,m)=>(m==n[n.length-1]?.[1]?n[n.length-1][0]++:n.push([1,m]),n),[]);return t.local=t.block=t.meta=null,h([...h(s.map(([n,m])=>[...o(n),...$(m,t)])),...l])},(e,t)=>{let i,r=0;return e[0]?.[0]==="memory"?([,r]=e.shift(),r=u(r,t.memory)):(typeof e[0]=="string"||typeof e[0]=="number")&&(e[1]?.[0]==="offset"||Array.isArray(e[1])&&typeof e[1][0]=="string")&&(r=u(e.shift(),t.memory)),Array.isArray(e[0])&&typeof e[0]?.[0]=="string"&&(i=e.shift(),i[0]==="offset"&&([,i]=i),i??_("Bad offset",i)),[...r?[2,...o(r),...z(i,t)]:i?[0,...z(i,t)]:[1],...h(e.flat())]},(e,t)=>o(t.data.length),([[,e]],t)=>[0,...o(u(e,t.type))]],$=(e,t)=>e[0]==="ref"?e[1]=="null"?w[e[2]]?[w[e[2]]]:[w.refnull,...o(u(e[e.length-1],t.type))]:[w.ref,...o(w[e[e.length-1]]||u(e[e.length-1],t.type))]:[w[e]??_(`Unknown type ${e}`)],W=(e,t,i=e[0]==="mut"?1:0)=>[...$(i?e[1]:e,t),i],fe={null:()=>[],reversed:(e,t)=>{let i=e.shift(),r=e.shift();return[...o(u(r,t.elem)),...o(u(i,t.table))]},block:(e,t)=>{t.block.push(1),A(e[0])&&(t.block[e.shift()]=t.block.length);let i=e.shift();return i?i[0]==="result"?$(i[1],t):o(u(i[1],t.type)):[w.void]},try_table:(e,t)=>{A(e[0])&&(t.block[e.shift()]=t.block.length+1);let i=e.shift(),r=i?i[0]==="result"?$(i[1],t):o(u(i[1],t.type)):[w.void],a=[],l=0;for(;e[0]?.[0]==="catch"||e[0]?.[0]==="catch_ref"||e[0]?.[0]==="catch_all"||e[0]?.[0]==="catch_all_ref";){let f=e.shift(),s=f[0]==="catch"?0:f[0]==="catch_ref"?1:f[0]==="catch_all"?2:3;s<=1?a.push(s,...o(u(f[1],t.tag)),...o(O(f[2],t.block))):a.push(s,...o(O(f[1],t.block))),l++}return t.block.push(1),[...r,...o(l),...a]},end:(e,t)=>(t.block.pop(),[]),call_indirect:(e,t)=>{let i=e.shift(),[,r]=e.shift();return[...o(u(r,t.type)),...o(u(i,t.table))]},br_table:(e,t)=>{let i=[],r=0;for(;e[0]&&(!isNaN(e[0])||A(e[0]));)i.push(...o(O(e.shift(),t.block))),r++;return[...o(r-1),...i]},select:(e,t)=>{let i=e.shift()||[];return i.length?h(i.map(r=>$(r,t))):[]},ref_null:(e,t)=>{let i=e.shift();return w[i]?[w[i]]:o(u(i,t.type))},memarg:(e,t,i)=>le(e,i,U(e[0])&&!K(e[0])?u(e.shift(),t.memory):0),opt_memory:(e,t)=>o(u(U(e[0])?e.shift():0,t.memory)),reftype:(e,t)=>{let i=$(e.shift(),t);return i.length>1?i.slice(1):i},reftype2:(e,t)=>{let i=O(e.shift(),t.block),r=$(e.shift(),t),a=$(e.shift(),t);return[(a[0]!==w.ref)<<1|r[0]!==w.ref,...o(i),r.pop(),a.pop()]},v128const:e=>{let[t,i]=e.shift().split("x"),r=+t.slice(1),a=r>>>3;if(i=+i,t[0]==="i"){let f=i===16?new Uint8Array(16):i===8?new Uint16Array(8):i===4?new Uint32Array(4):new BigUint64Array(2);for(let s=0;s<i;s++)f[s]=F[t].parse(e.shift());return[...new Uint8Array(f.buffer)]}let l=new Uint8Array(16);for(let f=0;f<i;f++)l.set(F[t](e.shift()),f*a);return[...l]},shuffle:e=>{let t=[];for(let i=0;i<16;i++)t.push(P(e.shift(),32));return typeof e[0]=="string"&&!isNaN(e[0])&&_("invalid lane length"),t},memlane:(e,t,i)=>{let r=A(e[0])||U(e[0])&&(K(e[1])||U(e[1]))?u(e.shift(),t.memory):0;return[...le(e,i,r),...o(P(e.shift()))]},"*":e=>o(e.shift()),labelidx:(e,t)=>o(O(e.shift(),t.block)),laneidx:e=>[P(e.shift(),255)],funcidx:(e,t)=>o(u(e.shift(),t.func)),typeidx:(e,t)=>o(u(e.shift(),t.type)),tableidx:(e,t)=>o(u(e.shift(),t.table)),memoryidx:(e,t)=>o(u(e.shift(),t.memory)),globalidx:(e,t)=>o(u(e.shift(),t.global)),localidx:(e,t)=>o(u(e.shift(),t.local)),dataidx:(e,t)=>o(u(e.shift(),t.data)),elemidx:(e,t)=>o(u(e.shift(),t.elem)),tagidx:(e,t)=>o(u(e.shift(),t.tag)),"memoryidx?":(e,t)=>o(u(U(e[0])?e.shift():0,t.memory)),i32:e=>I(e.shift()),i64:e=>E(e.shift()),f32:e=>B(e.shift()),f64:e=>q(e.shift()),v128:e=>(void 0)(e.shift()),typeidx_field:(e,t)=>{let i=u(e.shift(),t.type);return[...o(i),...o(u(e.shift(),t.type[i][1]))]},typeidx_multi:(e,t)=>[...o(u(e.shift(),t.type)),...o(e.shift())],typeidx_dataidx:(e,t)=>[...o(u(e.shift(),t.type)),...o(u(e.shift(),t.data))],typeidx_elemidx:(e,t)=>[...o(u(e.shift(),t.type)),...o(u(e.shift(),t.elem))],typeidx_typeidx:(e,t)=>[...o(u(e.shift(),t.type)),...o(u(e.shift(),t.type))],dataidx_memoryidx:(e,t)=>[...o(u(e.shift(),t.data)),...o(u(e.shift(),t.memory))],memoryidx_memoryidx:(e,t)=>[...o(u(e.shift(),t.memory)),...o(u(e.shift(),t.memory))],tableidx_tableidx:(e,t)=>[...o(u(e.shift(),t.table)),...o(u(e.shift(),t.table))]},S={};(function e(t,i){for(let r=0,a,l,f;r<t.length;r++)(a=t[r])&&(Array.isArray(a)?e(a,r):([l,f]=a.split(" "),M[l]=i?[i,...o(r)]:[r],f&&(S[l]=fe[f])))})(M);var me=(e,t)=>{let i=[],r=[];for(;e?.length;){let a=e.shift();if(a?.[0]==="@metadata"){r.push(a.slice(1));continue}Array.isArray(a)&&(a.i!=null&&(_.i=a.i),_(`Unknown instruction ${a[0]}`));let[...l]=M[a]||_(`Unknown instruction ${a}`);S[a]&&(a==="select"&&e[0]?.length?l[0]++:S[a]===fe.reftype&&(e[0][1]==="null"||e[0][0]!=="ref")&&l[l.length-1]++,l.push(...S[a](e,t,a)));for(let[f,s]of r)(t.meta[f]??=[]).push([i.length,s]);i.push(...l)}return i.push(11),i},z=(e,t)=>me(N([e],t),t),u=(e,t,i)=>(i=A(e)?t[e]:+e,i in t?i:_(`Unknown ${t.name} ${e}`)),O=(e,t,i)=>(i=A(e)?t.length-t[e]:+e,isNaN(i)||i>t.length?_(`Bad label ${e}`):i),ve=e=>{let t,i,r,a;for(;K(e[0]);)[r,a]=e.shift().split("="),r==="offset"?i=+a:r==="align"?t=+a:_(`Unknown param ${r}=${a}`);return(i<0||i>4294967295)&&_(`Bad offset ${i}`),(t<=0||t>4294967295)&&_(`Bad align ${t}`),t&&(t=Math.log2(t))%1&&_(`Bad align ${t}`),[t,i]},le=(e,t,i=0)=>{let[r,a]=ve(e),l=(r??$e(t))|(i&&64);return i?[...o(l),...o(i),...o(a??0)]:[...o(l),...o(a??0)]},$e=e=>{let t=e.indexOf(".",3)+1,i=e.slice(1,e[0]==="v"?4:3);if(e[t]==="a"&&(t=e.indexOf(".",t)+1),e[0]==="m")return e.includes("64")?3:2;if(e[t]==="r"){let l=e.slice(t,t+6).match(/\d+/);return Math.log2(l?l[0]/8:+i/8)}let r=e[t]==="l"?t+4:t+5,a=e.slice(r).match(/(\d+)(x|_|$)/);return Math.log2(a?a[2]==="x"?8:a[1]/8:+i/8)},j=e=>{let t=e[0]==="i64"&&e.shift(),i=e[e.length-1]==="shared"&&e.pop(),r=!isNaN(parseInt(e[1])),a=(t?4:0)|(i?2:0)|(r?1:0),l=t?f=>{if(typeof f=="bigint")return f;let s=typeof f=="string"?f.replaceAll("_",""):String(f);return BigInt(s)}:P;return r?[a,...o(l(e.shift())),...o(l(e.shift()))]:[a,...o(l(e.shift()))]},P=(e,t=4294967295)=>{let i=typeof e=="string"&&e[0]!=="+"?I.parse(e):typeof e=="number"?e:_(`Bad int ${e}`);return i>t?_(`Value out of range ${e}`):i},h=e=>[...o(e.length),...e.flat()];function ne(e,t={}){typeof e=="string"&&(e=k(e));let{indent:i=" ",newline:r=`
|
|
3
|
+
`,comments:a=!0}=t;if(i||="",r||="",typeof e[0]=="string"&&e[0][0]!==";")return f(e);return e.filter(s=>a||!l(s)).map(s=>f(s)).join(r);function l(s){return typeof s=="string"&&s[1]===";"}function f(s,n=0){if(!Array.isArray(s))return s;let m=s[0];if(!m)return"";let x=!1;if(m==="try_table"){let c=1;for(typeof s[c]=="string"&&s[c][0]==="$"&&(m+=" "+s[c++]),Array.isArray(s[c])&&(s[c][0]==="result"||s[c][0]==="type")&&(m+=" "+f(s[c++],n));Array.isArray(s[c])&&/^catch/.test(s[c][0]);)m+=" "+f(s[c++],n).trim();for(;c<s.length;c++)m+=Array.isArray(s[c])?r+i.repeat(n+1)+f(s[c],n+1):" "+s[c];return`(${m+r+i.repeat(n)})`}let p=!!r&&s.length<4&&!s.some(c=>typeof c=="string"&&c[0]===";"&&c[1]===";"),d=i.repeat(n+1);for(let c=1;c<s.length;c++){let v=s[c].valueOf();if(typeof v=="string"&&v[1]===";"){if(!a)continue;if(v[0]===";")if(r)m+=r+d+v.trimEnd(),x=!0;else{let b=m[m.length-1];b&&b!==" "&&b!=="("&&(m+=" "),m+=v.trimEnd()+`
|
|
4
|
+
`}else{let b=m[m.length-1];b&&b!==" "&&b!=="("&&(m+=" "),m+=v.trimEnd()}}else if(Array.isArray(v))p&&(p=v.every(b=>!Array.isArray(b))),m+=r+d+f(v,n+1),x=!1;else if(s[0]==="data")p=!1,(r||m[m.length-1]!==")")&&(m+=r||" "),m+=d+v,x=!1;else{let b=m[m.length-1];x&&r?m+=r+d:b===`
|
|
5
|
+
`?m+="":(b&&b!==")"&&b!==" "||r||b===")")&&(m+=" "),m+=v,x=!1}}return p?`(${m.replaceAll(r+d+"("," (")})`:`(${m+r+i.repeat(n)})`}}var oe="\uE000",xe=e=>{if(!e||typeof e!="string")return null;let t=e.split(".")[0];return/^[if](32|64)|v128/.test(t)?t:/\.(eq|ne|[lg][te]|eqz)/.test(e)||e==="memory.size"||e==="memory.grow"?"i32":null},Ue=(e,t={})=>{if(!Array.isArray(e))return typeof e=="string"&&e[0]==="$"&&t.locals?.[e]?t.locals[e]:null;let[i,...r]=e;return xe(i)?xe(i):i==="local.get"&&t.locals?.[r[0]]?t.locals[r[0]]:i==="call"&&t.funcs?.[r[0]]?t.funcs[r[0]].result?.[0]:null};function J(e,t){if(e=t(e),Array.isArray(e))for(let i=0;i<e.length;i++){let r=J(e[i],t);r?._splice?(e.splice(i,1,...r),i+=r.length-1):e[i]=r}return e}function Ie(e,t){let i=[],r=new Map;return J(e,a=>{if(!Array.isArray(a))return a;if(a[0]==="call"&&typeof a[1]=="function"){let l=a[1];if(!r.has(l)){let s=[];for(let x=2;x<a.length;x++){let p=Ue(a[x]);p&&s.push(p)}let n=i.length,m=l.name||`$fn${n}`;r.set(l,{idx:n,name:m.startsWith("$")?m:"$"+m,params:s,fn:l}),i.push(r.get(l))}let f=r.get(l);a[1]=f.name}return a}),i}function Ne(e){return e.map(({name:t,params:i})=>["import",'"env"',`"${t.slice(1)}"`,["func",t,...i.map(r=>["param",r])]])}function ke(e,...t){if(Array.isArray(e)&&e.raw){let i=e[0];for(let n=0;n<t.length;n++)i+=oe+e[n+1];let r=k(i),a=[],l=0;r=J(r,n=>{if(n===oe){let m=t[l++];if(typeof m=="function")return a.push(m),m;if(typeof m=="string"&&(m[0]==="("||/^\s*\(/.test(m))){let x=k(m);return Array.isArray(x)&&Array.isArray(x[0])&&(x._splice=!0),x}return m instanceof Uint8Array?[...m]:m}return n});let f=null;if(a.length){let n=Ie(r,a);if(n.length){let m=Ne(n);r[0]==="module"?r.splice(1,0,...m):typeof r[0]=="string"?r=[...m,r]:r.unshift(...m),f={env:{}};for(let x of n)f.env[x.name.slice(1)]=x.fn}}let s=T(r);return f&&(s._imports=f),s}return T(e)}function Ee(e,...t){let i=ke(e,...t),r=new WebAssembly.Module(i);return new WebAssembly.Instance(r,i._imports).exports}var Ge=Ee;export{ke as compile,Ge as default,k as parse,ne as print,Ee as watr};
|
package/package.json
CHANGED
|
@@ -1,18 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "watr",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "Light & fast WAT compiler – WebAssembly Text to binary, parse, print, transform",
|
|
5
5
|
"main": "watr.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"watr": "./bin/watr.js"
|
|
8
|
+
},
|
|
9
|
+
"types": "types/watr.d.ts",
|
|
6
10
|
"exports": {
|
|
7
|
-
".":
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./types/watr.d.ts",
|
|
13
|
+
"default": "./watr.js"
|
|
14
|
+
},
|
|
15
|
+
"./dist": "./dist/watr.js",
|
|
16
|
+
"./dist/watr.min.js": "./dist/watr.min.js",
|
|
17
|
+
"./parse": {
|
|
18
|
+
"types": "./types/src/parse.d.ts",
|
|
19
|
+
"default": "./src/parse.js"
|
|
20
|
+
},
|
|
21
|
+
"./print": {
|
|
22
|
+
"types": "./types/src/print.d.ts",
|
|
23
|
+
"default": "./src/print.js"
|
|
24
|
+
},
|
|
25
|
+
"./compile": {
|
|
26
|
+
"types": "./types/src/compile.d.ts",
|
|
27
|
+
"default": "./src/compile.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"typesVersions": {
|
|
31
|
+
"*": {
|
|
32
|
+
"parse": [
|
|
33
|
+
"./types/src/parse.d.ts"
|
|
34
|
+
],
|
|
35
|
+
"print": [
|
|
36
|
+
"./types/src/print.d.ts"
|
|
37
|
+
],
|
|
38
|
+
"compile": [
|
|
39
|
+
"./types/src/compile.d.ts"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
11
42
|
},
|
|
12
43
|
"type": "module",
|
|
13
44
|
"scripts": {
|
|
45
|
+
"build": "esbuild watr.js --bundle --format=esm --outfile=dist/watr.js && esbuild watr.js --bundle --format=esm --minify --outfile=dist/watr.min.js",
|
|
14
46
|
"test": "node test",
|
|
15
|
-
"
|
|
47
|
+
"test:repl": "npx playwright test",
|
|
48
|
+
"types": "npx tsc src/*.js watr.js --allowJs --declaration --emitDeclarationOnly --declarationMap --outDir types",
|
|
49
|
+
"prepublishOnly": "npm run build && npm run types",
|
|
50
|
+
"prepare": "git submodule update --init --recursive 2>/dev/null || true"
|
|
16
51
|
},
|
|
17
52
|
"repository": {
|
|
18
53
|
"type": "git",
|
|
@@ -20,20 +55,30 @@
|
|
|
20
55
|
},
|
|
21
56
|
"files": [
|
|
22
57
|
"src",
|
|
58
|
+
"types",
|
|
23
59
|
"watr.js",
|
|
24
|
-
"
|
|
60
|
+
"dist",
|
|
61
|
+
"bin"
|
|
25
62
|
],
|
|
26
63
|
"keywords": [
|
|
27
64
|
"wat",
|
|
28
65
|
"wasm",
|
|
29
|
-
"
|
|
66
|
+
"webassembly",
|
|
30
67
|
"compiler",
|
|
68
|
+
"wat2wasm",
|
|
31
69
|
"wabt",
|
|
32
|
-
"pretty-print",
|
|
33
|
-
"webassembly",
|
|
34
|
-
"wasm-text",
|
|
35
70
|
"wast",
|
|
36
|
-
"
|
|
71
|
+
"parser",
|
|
72
|
+
"printer",
|
|
73
|
+
"formatter",
|
|
74
|
+
"bytecode",
|
|
75
|
+
"binary",
|
|
76
|
+
"text-format",
|
|
77
|
+
"s-expression",
|
|
78
|
+
"assembly",
|
|
79
|
+
"jit",
|
|
80
|
+
"codegen",
|
|
81
|
+
"zero-dependency"
|
|
37
82
|
],
|
|
38
83
|
"author": "Dmitry Iv",
|
|
39
84
|
"license": "MIT",
|
|
@@ -42,6 +87,8 @@
|
|
|
42
87
|
},
|
|
43
88
|
"homepage": "https://github.com/dy/watr#readme",
|
|
44
89
|
"devDependencies": {
|
|
45
|
-
"
|
|
90
|
+
"@playwright/test": "^1.57.0",
|
|
91
|
+
"esbuild": "^0.24.2",
|
|
92
|
+
"tst": "^9.0.0"
|
|
46
93
|
}
|
|
47
94
|
}
|
package/readme.md
CHANGED
|
@@ -1,115 +1,65 @@
|
|
|
1
|
-
# watr [](https://github.com/dy/watr/actions/workflows/test.js.yml) [](https://bundlephobia.com/package/watr) [](https://npmjs.org/watr) [](https://krishnized.github.io/license)
|
|
2
2
|
|
|
3
|
-
Light & fast WAT compiler
|
|
4
|
-
Useful for high-level languages or dynamic (in-browser) compilation.<br/>
|
|
5
|
-
Supports full [spec text syntax](https://webassembly.github.io/spec/core/text/index.html) and [official testsuite](https://github.com/WebAssembly/testsuite).
|
|
3
|
+
Light & fast WAT compiler.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
* [feature](https://webassembly.org/features/) & [spec](https://webassembly.github.io/spec/core/text/index.html)-complete, zero deps
|
|
6
|
+
* parse · compile · print · minify
|
|
7
|
+
* instant wasm, JS interop, clear errors
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
### Compile
|
|
12
|
-
|
|
13
|
-
Compile wasm text or syntax tree into wasm binary.
|
|
14
|
-
|
|
15
|
-
```js
|
|
16
|
-
import { compile } from 'watr'
|
|
17
|
-
|
|
18
|
-
const buffer = compile(`(func (export "double")
|
|
19
|
-
(param f64) (result f64)
|
|
20
|
-
(f64.mul (local.get 0) (f64.const 2))
|
|
21
|
-
)`)
|
|
22
|
-
const module = new WebAssembly.Module(buffer)
|
|
23
|
-
const instance = new WebAssembly.Instance(module)
|
|
24
|
-
const {double} = instance.exports
|
|
9
|
+
Useful for backends, JIT compilers, DSLs, code generators, dev tools.
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
```
|
|
11
|
+
**[Docs](./docs.md)** · **[Repl](https://dy.github.io/watr/repl/)**
|
|
28
12
|
|
|
29
|
-
### Parse
|
|
30
13
|
|
|
31
|
-
|
|
14
|
+
## Usage
|
|
32
15
|
|
|
33
16
|
```js
|
|
34
|
-
import { parse } from 'watr'
|
|
17
|
+
import watr, { compile, parse, print } from 'watr'
|
|
35
18
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Print
|
|
19
|
+
// instant wasm function
|
|
20
|
+
const { add } = watr`(func (export "add") (param i32 i32) (result i32)
|
|
21
|
+
(i32.add (local.get 0) (local.get 1))
|
|
22
|
+
)`
|
|
23
|
+
add(2, 3) // 5
|
|
44
24
|
|
|
45
|
-
|
|
25
|
+
// auto-import functions
|
|
26
|
+
const { test } = watr`(func (export "test") (call ${console.log} (i32.const 42)))`
|
|
27
|
+
test() // logs 42
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
// interpolate values
|
|
30
|
+
const { pi } = watr`(global (export "pi") f64 (f64.const ${Math.PI}))`
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
)
|
|
32
|
+
// compile to binary
|
|
33
|
+
const binary = compile(`(func (export "f") (result f64) (f64.const 1))`)
|
|
34
|
+
const module = new WebAssembly.Module(binary)
|
|
35
|
+
const { f } = new WebAssembly.Instance(module).exports
|
|
54
36
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
newline: '\n',
|
|
59
|
-
})
|
|
60
|
-
// (func
|
|
61
|
-
// (export "double")
|
|
62
|
-
// (param f64)
|
|
63
|
-
// (result f64)
|
|
64
|
-
// (f64.mul (local.get 0) (f64.const 2))
|
|
65
|
-
// )
|
|
66
|
-
|
|
67
|
-
// minify
|
|
68
|
-
print(src, {
|
|
69
|
-
indent: false,
|
|
70
|
-
newline: false
|
|
71
|
-
})
|
|
72
|
-
// (func(export "double")(param f64)(result f64)(f64.mul(local.get 0)(f64.const 2)))
|
|
37
|
+
// parse / print
|
|
38
|
+
parse('(i32.const 42)') // ['i32.const', 42]
|
|
39
|
+
print('(module(func(result i32)i32.const 42))') // (module\n (func (result i32)\n ...
|
|
73
40
|
```
|
|
74
41
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
## Status
|
|
42
|
+
## CLI
|
|
78
43
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* [x] [gc](https://github.com/WebAssembly/gc)
|
|
86
|
-
* [ ] [exceptions](https://github.com/WebAssembly/exception-handling)
|
|
87
|
-
* [ ] [memory64](https://github.com/WebAssembly/memory64)
|
|
88
|
-
* [ ] [annotations](https://github.com/WebAssembly/annotations), [code_metadata](https://github.com/WebAssembly/tool-conventions/blob/main/CodeMetadata.md)
|
|
89
|
-
* [ ] [js strings](https://github.com/WebAssembly/js-string-builtins/blob/main/proposals/js-string-builtins/Overview.md)
|
|
44
|
+
```sh
|
|
45
|
+
npx watr input.wat # → input.wasm
|
|
46
|
+
npx watr input.wat -o out.wasm # custom output
|
|
47
|
+
npx watr input.wat --print # pretty-print
|
|
48
|
+
npx watr input.wat --minify # minify
|
|
49
|
+
```
|
|
90
50
|
|
|
91
|
-
##
|
|
51
|
+
## Metrics
|
|
92
52
|
|
|
93
|
-
| Size
|
|
53
|
+
| Size | Speed
|
|
94
54
|
---|---|---
|
|
95
|
-
watr |
|
|
96
|
-
[spec/wast.js](https://github.com/WebAssembly/spec
|
|
97
|
-
[wabt](https://github.com/WebAssembly/wabt) | 282
|
|
98
|
-
[
|
|
99
|
-
|
|
100
|
-
<!--
|
|
101
|
-
## Projects using watr
|
|
55
|
+
**watr** | **10 KB** | **4,460 op/s**
|
|
56
|
+
[spec/wast.js](https://github.com/WebAssembly/spec) | 216 KB | 2,185 op/s
|
|
57
|
+
[wabt](https://github.com/WebAssembly/wabt) | 282 KB | 1,273 op/s
|
|
58
|
+
[binaryen](https://github.com/WebAssembly/binaryen) | 1,100 KB | 718 op/s
|
|
59
|
+
[wat-compiler](https://github.com/stagas/wat-compiler) | 7.7 KB (MVP) | 539 op/s |
|
|
102
60
|
|
|
103
|
-
* [piezo](https://github.com/audio-lab/piezo) – audio processing language
|
|
104
|
-
-->
|
|
105
61
|
|
|
106
|
-
<!--
|
|
107
|
-
## Useful links
|
|
108
62
|
|
|
109
|
-
|
|
110
|
-
* [MDN: control flow](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow)
|
|
111
|
-
* [WASM reference manual](https://github.com/sunfishcode/wasm-reference-manual/blob/master/WebAssembly.md#loop)
|
|
112
|
-
* [WASM binary encoding](https://github.com/WebAssembly/design/blob/main/BinaryEncoding.md)
|
|
113
|
-
-->
|
|
63
|
+
## Used by
|
|
114
64
|
|
|
115
|
-
|
|
65
|
+
* [jz](https://github.com/dy/jz) – minimal static JS subset
|