@onda-lang/wasm-compiler 0.5.0-rc.0 → 0.5.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/dist/backend/artifact.d.ts +18 -0
- package/dist/backend/artifact.js +1 -0
- package/dist/backend/constants.js +2 -0
- package/dist/backend/errors.js +6 -0
- package/dist/backend/index.d.ts +37 -0
- package/dist/backend/index.js +3672 -0
- package/dist/backend/math-kernel.generated.js +18 -0
- package/dist/backend/messagepack.js +124 -0
- package/dist/backend/operations.js +38 -0
- package/dist/build.json +12 -0
- package/dist/frontend/LICENSE +21 -0
- package/dist/frontend/README.md +55 -0
- package/dist/frontend/onda_compiler_web.d.ts +70 -0
- package/dist/frontend/onda_compiler_web.js +377 -0
- package/dist/frontend/onda_compiler_web_bg.wasm +0 -0
- package/dist/frontend/onda_compiler_web_bg.wasm.d.ts +18 -0
- package/dist/frontend/package.json +24 -0
- package/dist/licenses/BINARYEN-LICENSE +201 -0
- package/dist/licenses/LIBM-LICENSE +19 -0
- package/dist/version.js +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Generated by scripts/build-math-kernel.mjs; do not edit.
|
|
2
|
+
// libm 0.2.16, SHA-256 b6b40b3520b4f2a103b03f9e0d5a2af876825a6da6f440f8918c9d7fa52974c4
|
|
3
|
+
const BASE64 = "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QgAgBCAFIARUG31CAYYhBSANQXxqIg0NAAsgDkUNAQtBACAOayENA0AgBUIAIAQgBSAEVBt9QgGGIQUgDUEBaiINDQALCyAFQgAgBCAFIARUG30hBAwECyANQcAATw0CIAJBgAFqIAVCACANEKaAgIAAIAQgAikDiAEiA1gNAiACIAIpA4ABIAMgBEIAEKeAgIAAIAIpAwAhBAwDCyAAIAGiIgAgAKMhAAwECxCXgICAAAALAkACQAJAAkACQAJAIARCgICAgICAgIDAAFoNACAFIApaDQECQCAEIARCf3wiA4NQDQAgBCAEeadBfmoiC60iCoYiB0KAgICAgICAgCBYDQMgB0KAgICAgICAgMAAWg0EIAUgB0IBhiIIWg0FIAJB8ABqQgBCgICAgICAgICAfyAIfSIEIAhCABClgICAACACQeAAaiACKQNwIgMgAikDeCIGIAhCABCjgICAACACQdAAaiADIAZCAXwgBUIBhkIAEKOAgIAAIAQgAikDaH0gAikDYCIEQgBSrX0hA0IAIAR9IQYgAikDWCEEIAIpA1AhBQJAIAsgDWoiDUE/SQ0AA0AgAkHAAGogBEIAIAYgAxCjgICAACAFQgGIIAIpA0h8IQQgAikDQCEFIA1BQWoiDUE+Sw0ACwsgAkEwaiAFIAQgDRCmgICAACACQSBqIAYgAyAEIA1BP3OtiEIAEKOAgIAAIAJBEGogAikDKCACKQM4Qv///////////wCDfCACKQMgIgQgAikDMHwgBFStfEICfEIAIAhCABCjgICAACACKQMYIgRCACAHIAcgBFYbfSAKiCEEDAcLIA1BwABJDQUMBwtBIhCYgICAAAALQR4QmICAgAAAC0ErEJiAgIAAAAtBKxCYgICAAAALQRcQmICAgAAACyAFIA2thiADgyEECyAEUA0AIARBNCAEeadBP3NrIg0gDCANIAxJGyINrYYgCXwgDCANa61CNIZ8vyEADAELIAm/IQALIAJBkAFqJICAgIAAIAAL5AoGAX8BfAJ/AXwBfwF8I4CAgIAAQRBrIgEkgICAgAAgALshAgJAAkAgALwiA0H/////B3EiBEHbn6T6A0kNAAJAIARB0qftgwRJDQACQCAEQdbjiIcESQ0AAkACQAJAAkACQCAEQf////sHSw0AIAFCADcDCAJAAkAgBEHan6TuBEsNACAC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BwAAZQcAAAJjCgEEmQkAAO4JAAACFwoBBFYKAACrCgAAAjwKAQAAAAL3AQAAAu0AAAACDwQAAAMoAQAAbAEAAAMxAQMbBQAAXwUAAAXkAQX/////iQIAAAftAwAAAACfywQAAA8FAAABFAbTAAAA/////wUAAAABpR8HNQAAAP////8BAAAAA0AcAgc1AAAA/////wMAAAADQDICAAhhAAAA/////w8AAAABqycJ3wAAAP////8XAAAAAQAIQQAAAP////8HAAAABeUcCE4AAAD/////EAAAAAXmIAAK3wAAAGgAAAABbjIIQQAAAP////8DAAAABeUcCE4AAAD/////CgAAAAXmIAAK3wAAAIAAAAABcTIIQQAAAP////8FAAAABeUcCE4AAAD/////CAAAAAXmIAAIYQAAAP////8PAAAAAYsrCt8AAACYAAAAAZMvCEEAAAD/////BQAAAAXlHAhOAAAA/////wgAAAAF5iAABtMAAAD/////CAAAAAE4Kgg1AAAA/////wMAAAADQDIINQAAAP////8FAAAAA0AcAAhhAAAA/////w8AAAABUisK3wAAALAAAAABWi8IQQAAAP////8FAAAABeUcCE4AAAD/////CAAAAAXmIAAK3wAAAMgAAAABKh8IQQAAAP////8FAAAABeUcCE4AAAD/////CAAAAAXmIAAK3wAAAOAAAAABYyMIQQAAAP////8FAAAABeUcCE4AAAD/////CAAAAAXmIAAAA3QEAAC4BAAABX8BAmcEAAADQgYAAJYGAAAGGQEDxwgAABsJAAAGHQEABWZjAAA6BAAABO0ABZ8jBAAAZwQAAAYSCI4AAACFYwAAIQAAAAYwHgiOAAAApmMAABMAAAAGMSILpwAAAAVmAAARAAAABmYBIQu0AAAAFmYAABMAAAAGZgEzDNkCAAC1ZQAABQAAAAZZASQIbgAAALVlAAAFAAAABYAcAA2aAAAA+AAAAAZTASEM2QIAAEVmAAAJAAAABkwBJAhuAAAARWYAAAkAAAAFgBwADY4AAAAQAQAABm0BHgzZAgAA/mYAAA8AAAAGfAEfCG4AAAD+ZgAABwAAAAWAHAh7AAAABWcAAAgAAAAFgSAABtkCAADaZAAABQAAAAbUGwhuAAAA2mQAAAUAAAAFgBwACuoCAAAoAQAABtonDpoAAAAo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Y2lhbGl6ZWRfZGl2X3JlbTIzdTMyX25vcm1hbGl6YXRpb25fc2hpZnQAaW50X3RyYWl0cwBvcHMAX1JOdk1zOF9OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVtbzEzbGVhZGluZ196ZXJvcwBfUk52TXM2X050Q3Nka2R0MWFhQWcxVF80Y29yZTNudW1tMTNsZWFkaW5nX3plcm9zAGNvbXBpbGVyX2J1aWx0aW5zAF9STnZYczFrX050TnRDc2RrZHQxYWFBZzFUXzRjb3JlM29wczNiaXR5TnRCNl81Qml0T3I1Yml0b3IAX1JOdlhzMXJfTnROdENzZGtkdDFhYUFnMVRfNGNvcmUzb3BzM2JpdG5OdEI2XzVCaXRPcjViaXRvcgBfUk52WHNnX050TnROdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zNG1hdGg5bGlibV9tYXRoN3N1cHBvcnQxMGludF90cmFpdHN5TnRCNV8zSW50MTFsb2dpY2FsX3NocgBfUk52TXM3X050Q3Nka2R0MWFhQWcxVF80Y29yZTNudW15MTJ3cmFwcGluZ19zaHIAX1JOdk1zN19OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVteTEzdW5jaGVja2VkX3NocgBMc2hyAF9STnZOdE50Q3Nka2R0MWFhQWcxVF80Y29yZTlwYW5pY2tpbmcxMXBhbmljX2NvbnN0MjNwYW5pY19jb25zdF9yZW1fYnlfemVybwBfUk52WHNCX050TnROdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zNG1hdGg5bGlibV9tYXRoN3N1cHBvcnQxMGludF90cmFpdHNsTnRCNV80SEludDEwemVyb193aWRlbgBudW0Ac3BlY2lhbGl6ZWRfZGl2X3JlbQBfUk52TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQxOXNwZWNpYWxpemVkX2Rpdl9yZW0xMnUxMjhfZGl2X3JlbQBfUk52TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQxOXNwZWNpYWxpemVkX2Rpdl9yZW0xOHU2NF9ieV91NjRfZGl2X3JlbQBfUk52TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQxOXNwZWNpYWxpemVkX2Rpdl9yZW0xMXU2NF9kaXZfcmVtAF9STnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDE5c3BlY2lhbGl6ZWRfZGl2X3JlbTE4dTMyX2J5X3UzMl9kaXZfcmVtAF9STnZNczdfTnRDc2RrZHQxYWFBZzFUXzRjb3JlM251bXkxMWNoZWNrZWRfcmVtAF9STnZNczZfTnRDc2RrZHQxYWFBZzFUXzRjb3JlM251bW0xMWNoZWNrZWRfcmVtAF9STnZYc0JfTnROdE50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnM0bWF0aDlsaWJtX21hdGg3c3VwcG9ydDEwaW50X3RyYWl0c2xOdEI1XzRISW50MTR6ZXJvX3dpZGVuX211bABfUk52TnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDE5c3BlY2lhbGl6ZWRfZGl2X3JlbTEydTEyOF9kaXZfcmVtMTJjYXJyeWluZ19tdWwAX1JOdk1zMV9OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVteDEyd3JhcHBpbmdfbXVsAF9STnZYc2lfTnROdE50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnM0bWF0aDlsaWJtX21hdGg3c3VwcG9ydDEwaW50X3RyYWl0c3hOdEI1XzNJbnQxMndyYXBwaW5nX211bABfUk52TXM4X050Q3Nka2R0MWFhQWcxVF80Y29yZTNudW1vMTJ3cmFwcGluZ19tdWwATXVsAF9STnZNczdfTnRDc2RrZHQxYWFBZzFUXzRjb3JlM251bXkxMndyYXBwaW5nX3NobABfUk52WHNnX050TnROdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zNG1hdGg5bGlibV9tYXRoN3N1cHBvcnQxMGludF90cmFpdHN5TnRCNV8zSW50MTJ3cmFwcGluZ19zaGwAX1JOdk1zN19OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVteTEzdW5jaGVja2VkX3NobABBc2hsAF9STnZYc3RfTnROdE50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnM0bWF0aDlsaWJtX21hdGg3c3VwcG9ydDEwaW50X3RyYWl0c3hOdEI1XzRESW50MmhpAGxpYm1fbWF0aABwYW5pY2tpbmcAY29yZQBfUk52TnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDE5c3BlY2lhbGl6ZWRfZGl2X3JlbTEydTEyOF9kaXZfcmVtMTZjYXJyeWluZ19tdWxfYWRkAF9STnZYc21fTnROdE50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnM0bWF0aDlsaWJtX21hdGg3c3VwcG9ydDEwaW50X3RyYWl0c25OdEI1XzNJbnQxMndyYXBwaW5nX2FkZABfUk52TXM4X050Q3Nka2R0MWFhQWcxVF80Y29yZTNudW1vMTJ3cmFwcGluZ19hZGQAX1JOdk1zMl9OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVtbjEyd3JhcHBpbmdfYWRkAF9STnZOdENzZGtkdDFhYUFnMVRfNGNvcmU5cGFuaWNraW5nNXBhbmljAF9STnZNczdfTnRDc2RrZHQxYWFBZzFUXzRjb3JlM251bXkxMndyYXBwaW5nX3N1YgBfUk52TXM4X050Q3Nka2R0MWFhQWcxVF80Y29yZTNudW1vMTJ3cmFwcGluZ19zdWIAX1JOdk1zNl9OdENzZGtkdDFhYUFnMVRfNGNvcmUzbnVtbTEyd3JhcHBpbmdfc3ViAF9STnZZbk50TnROdE50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnM0bWF0aDlsaWJtX21hdGg3c3VwcG9ydDEwaW50X3RyYWl0czRESW50MTBmcm9tX2xvX2hpQmRfAF9STnZZb050TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQ1c2hpZnQ0THNocjRsc2hyQjlfAF9STnZZbk50TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQzbXVsM011bDNtdWxCOV8AX1JOdllvTnROdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDVzaGlmdDRBc2hsNGFzaGxCOV8AbHNocjx1MTI4PgBhc2hsPHUxMjg+AG11bDxpMTI4PgBmcm9tX2xvX2hpPGkxMjg+AC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2xpYi5ycy9AL2NvbXBpbGVyX2J1aWx0aW5zLjRmZTVlMzM0ODNiNzhmOTItY2d1LjAxOQAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9saWIucnMvQC9jb21waWxlcl9idWlsdGlucy40ZmU1ZTMzNDgzYjc4ZjkyLWNndS4wMjYAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvbGliLnJzL0AvY29tcGlsZXJfYnVpbHRpbnMuNGZlNWUzMzQ4M2I3OGY5Mi1jZ3UuMzQ1AC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2xpYi5ycy9AL2NvbXBpbGVyX2J1aWx0aW5zLjRmZTVlMzM0ODNiNzhmOTItY2d1LjAyNABfUk52TnROdENzNlJpaUQ1dHNTZjZfMTdjb21waWxlcl9idWlsdGluczNpbnQ0dWRpdjlfX191ZGl2dGkzAF9STnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDVzaGlmdDlfX19sc2hydGkzAF9STnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDNtdWw4X19fbXVsdGkzAF9STnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDVzaGlmdDlfX19hc2hsdGkzAF9STnZOdE50Q3M2UmlpRDV0c1NmNl8xN2NvbXBpbGVyX2J1aWx0aW5zM2ludDR1ZGl2OV9fX3Vtb2R0aTMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvbGliLnJzL0AvY29tcGlsZXJfYnVpbHRpbnMuNGZlNWUzMzQ4M2I3OGY5Mi1jZ3UuMTkzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2xpYi5ycy9AL2NvbXBpbGVyX2J1aWx0aW5zLjRmZTVlMzM0ODNiNzhmOTItY2d1LjM0MwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9saWIucnMvQC9jb21waWxlcl9idWlsdGlucy40ZmU1ZTMzNDgzYjc4ZjkyLWNndS4zNjIAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvbGliLnJzL0AvY29tcGlsZXJfYnVpbHRpbnMuNGZlNWUzMzQ4M2I3OGY5Mi1jZ3UuMDUyAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2xpYi5ycy9AL2NvbXBpbGVyX2J1aWx0aW5zLjRmZTVlMzM0ODNiNzhmOTItY2d1LjI1MAAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9saWIucnMvQC9jb21waWxlcl9idWlsdGlucy40ZmU1ZTMzNDgzYjc4ZjkyLWNndS4wMjAAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9saWIucnMvQC9jb3JlLjliMzc5NmUzMGQ5OWRkYjctY2d1LjAAY2xhbmcgTExWTSAocnVzdGMgdmVyc2lvbiAxLjk3LjEgKDhiYWIyNmY0ZiAyMDI2LTA3LTE0KSkAALkkCy5kZWJ1Z19saW5ldAAAAAQANQAAAAEBAfsODQABAQEBAAAAAQAAAWxpYnJhcnkvY29yZS9zcmMAAHBhbmlja2luZy5ycwABAAAABQ4KAAUC82IAAAPPAAECAgABAQUFCgAFAuNFAAADlQEBAggAAQEFEQoABQLZRQAAA64BAQIIAAEBvgEAAAQAOQEAAAEBAfsODQABAQEBAAAAAQAAAWxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjAGxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL21hdGgvLi4vLi4vLi4vbGlibS9zcmMvbWF0aC9zdXBwb3J0AGxpYnJhcnkvY29yZS9zcmMvbnVtAGxpYnJhcnkvY29yZS9zcmMvb3BzAGxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2ludAAAbWFjcm9zLnJzAAEAAGludF90cmFpdHMucnMAAgAAaW50X21hY3Jvcy5ycwADAABiaXQucnMABAAAbXVsLnJzAAUAAAAABQL2YgAAA90DAQQCBRUKA51/yAasBAMFDQYDww4gBAIFFQOscZAEAwUNA9QOIAQCBRUDrHHIBAMFDQPUDiADuH88BAQFLQOkcWYEAwUNA9wOIAPIAFgDuH90BAQFLQOkceQEAwUNA6QPggZYBgO4f1gEAQUOA+tyWAIBAAEBIAEAAAQAGgEAAAEBAfsODQABAQEBAAAAAQAAAWxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL21hdGgvLi4vLi4vLi4vbGlibS9zcmMvbWF0aC9zdXBwb3J0AGxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2ludABsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYwBsaWJyYXJ5L2NvcmUvc3JjL251bQAAaW50X3RyYWl0cy5ycwABAABtdWwucnMAAgAAbWFjcm9zLnJzAAMAAGludF9tYWNyb3MucnMABAAAAJ4AAAAEAJgAAAABAQH7Dg0AAQEBAQAAAAEAAAFsaWJyYXJ5L2NvcmUvc3JjL29wcwBsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9tYXRoLy4uLy4uLy4uL2xpYm0vc3JjL21hdGgvc3VwcG9ydAAAYml0LnJzAAEAAGludF90cmFpdHMucnMAAgAAACkGAAAEAPYAAAABAQH7Dg0AAQEBAQAAAAEAAAFsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9pbnQvc3BlY2lhbGl6ZWRfZGl2X3JlbQBsaWJyYXJ5L2NvcmUvc3JjL251bQBsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYwAAZGVsZWdhdGUucnMAAQAAdWludF9tYWNyb3MucnMAAgAAbm9ybV9zaGlmdC5ycwABAABsaWIucnMAAwAAbW9kLnJzAAEAAHRyaWZlY3RhLnJzAAEAAAAABQL/////AxMBBRoKAwzIcmcFDZMGA16eBS4DIlgFDVgDXjwDIkoDXi4DIiADXpADIkoDXi4EAgUUBgOaAWYGIAQDBRcGA6Z/PAQBBSsD6AAgBShXBAIFDQOWE7oEAQUcA+9s5AUdPgUgdQYD0X50BRkGA7QBkHMFFQN3PAUgMwUpLwYD0H50BS4GAyJmBQ0GkAUYBgMMLgUfAzOQBAIDhgp0A8cBdAQBBRwDunTyBgOYfzwFKwYD7QBKBAIFHwP6CZAEAQUzA412PAUVA6d/WAVOA9kAIAVNBlgFISAEAgUfBgO6CyAEAQUVA+1zngUqA9UAdAQCBR8D9wku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YnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjL2ludABsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYwBsaWJyYXJ5L2NvcmUvc3JjL251bQBsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9tYXRoLy4uLy4uLy4uL2xpYm0vc3JjL21hdGgvc3VwcG9ydABsaWJyYXJ5L2NvcmUvc3JjL29wcwAAc2hpZnQucnMAAQAAbWFjcm9zLnJzAAIAAHVpbnRfbWFjcm9zLnJzAAMAAGludF90cmFpdHMucnMABAAAYml0LnJzAAUAAAC6AAAABACQAAAAAQEB+w4NAAEBAQEAAAABAAABbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMAbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvaW50AABtYWNyb3MucnMAAQAAdWRpdi5ycwACAAAAAAUCOWgAAAPdAwEEAgUNCgPOfQg8BAEFDgO1AgIoAQIMAAEBVwAAAAQAUQAAAAEBAfsODQABAQEBAAAAAQAAAWxpYnJhcnkvY29tcGlsZXItYnVpbHRpbnMvY29tcGlsZXItYnVpbHRpbnMvc3JjAABtYWNyb3MucnMAAQAAAJ0BAAAEADwBAAABAQH7Dg0AAQEBAQAAAAEAAAFsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYwBsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9pbnQAbGlicmFyeS9jb3JlL3NyYy9udW0AbGlicmFyeS9jb3JlL3NyYy9vcHMAbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvbWF0aC8uLi8uLi8uLi9saWJtL3NyYy9tYXRoL3N1cHBvcnQAAG1hY3Jvcy5ycwABAABzaGlmdC5ycwACAAB1aW50X21hY3Jvcy5ycwADAABiaXQucnMABAAAaW50X3RyYWl0cy5ycwAFAAAAAAUCgmgAAAPdAwEEAgUMCgPYfLoFEz4GA0hYBAMFDQYDvRRKBREDvns8A7kBLgQEBS0D5nCCBAMFEQOaDzwGA8xukAYDtBEgBgPMbroEAQUOBgPhA+QCAQABAUIBAAAEADwBAAABAQH7Dg0AAQEBAQAAAAEAAAFsaWJyYXJ5L2NvbXBpbGVyLWJ1aWx0aW5zL2NvbXBpbGVyLWJ1aWx0aW5zL3NyYy9pbnQAbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMAbGlicmFyeS9jb3JlL3NyYy9udW0AbGlicmFyeS9jb21waWxlci1idWlsdGlucy9jb21waWxlci1idWlsdGlucy9zcmMvbWF0aC8uLi8uLi8uLi9saWJtL3NyYy9tYXRoL3N1cHBvcnQAbGlicmFyeS9jb3JlL3NyYy9vcHMAAHNoaWZ0LnJzAAEAAG1hY3Jvcy5ycwACAAB1aW50X21hY3Jvcy5ycwADAABpbnRfdHJhaXRzLnJzAAQAAGJpdC5ycwAFAAAAAJMKBG5hbWUAGxpvbmRhX3dhc21fbWF0aF9rZXJuZWwud2FzbQHOCSkAE29uZGFfbWF0aF9hdGFuMl9mMzIBLF9STnZOdE50Q3Nob2dyY2cxTGdMOF80bGlibTRtYXRoNWF0YW5mNWF0YW5mAhNvbmRhX21hdGhfYXRhbjJfZjY0AypfUk52TnROdENzaG9ncmNnMUxnTDhfNGxpYm00bWF0aDRhdGFuNGF0YW4EEm9uZGFfbWF0aF9hdGFuX2YzMgUSb25kYV9tYXRoX2F0YW5fZjY0BhFvbmRhX21hdGhfY29zX2YzMgdAX1JOdk50TnRDc2hvZ3JjZzFMZ0w4XzRsaWJtNG1hdGgxNHJlbV9waW8yX2xhcmdlMTRyZW1fcGlvMl9sYXJnZQgRb25kYV9tYXRoX2Nvc19mNjQJMl9STnZOdE50Q3Nob2dyY2cxTGdMOF80bGlibTRtYXRoOHJlbV9waW8yOHJlbV9waW8yChFvbmRhX21hdGhfZXhwX2YzMgsRb25kYV9tYXRoX2V4cF9mNjQMEW9uZGFfbWF0aF9mbWFfZjMyDRFvbmRhX21hdGhfZm1hX2Y2NA4Rb25kYV9tYXRoX2xvZ19mMzIPEW9uZGFfbWF0aF9sb2dfZjY0EBFvbmRhX21hdGhfcG93X2YzMhErX1JOdk50TnRDc2hvZ3JjZzFMZ0w4XzRsaWJtNG1hdGg0c3FydDVzcXJ0ZhIvX1JOdk50TnRDc2hvZ3JjZzFMZ0w4XzRsaWJtNG1hdGg2c2NhbGJuN3NjYWxibmYTEW9uZGFfbWF0aF9wb3dfZjY0FCpfUk52TnROdENzaG9ncmNnMUxnTDhfNGxpYm00bWF0aDRzcXJ0NHNxcnQVLl9STnZOdE50Q3Nob2dyY2cxTGdMOF80bGlibTRtYXRoNnNjYWxibjZzY2FsYm4WF29uZGFfbWF0aF9yZW1haW5kZXJfZjMyF0tfUk52TnROdENzZGtkdDFhYUFnMVRfNGNvcmU5cGFuaWNraW5nMTFwYW5pY19jb25zdDIzcGFuaWNfY29uc3RfcmVtX2J5X3plcm8YKV9STnZOdENzZGtkdDFhYUFnMVRfNGNvcmU5cGFuaWNraW5nNXBhbmljGRdvbmRhX21hdGhfcmVtYWluZGVyX2Y2NBoRb25kYV9tYXRoX3Npbl9mMzIbEW9uZGFfbWF0aF9zaW5fZjY0HBFvbmRhX21hdGhfdGFuX2YzMh0Rb25kYV9tYXRoX3Rhbl9mNjQeEm9uZGFfbWF0aF90YW5oX2YzMh8uX1JOdk50TnRDc2hvZ3JjZzFMZ0w4XzRsaWJtNG1hdGg2ZXhwbTFmNmV4cG0xZiASb25kYV9tYXRoX3RhbmhfZjY0ISxfUk52TnROdENzaG9ncmNnMUxnTDhfNGxpYm00bWF0aDVleHBtMTVleHBtMSItX1JOdk50Q3Nka2R0MWFhQWcxVF80Y29yZTlwYW5pY2tpbmc5cGFuaWNfZm10IwhfX211bHRpMyRQX1JOdk50TnRDczZSaWlENXRzU2Y2XzE3Y29tcGlsZXJfYnVpbHRpbnMzaW50MTlzcGVjaWFsaXplZF9kaXZfcmVtMTJ1MTI4X2Rpdl9yZW0lCV9fdWRpdnRpMyYJX19hc2hsdGkzJwlfX3Vtb2R0aTMoCV9fbHNocnRpMwcSAQAPX19zdGFja19wb2ludGVyCQoBAAcucm9kYXRhAE0JcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AQVydXN0Yx0xLjk3LjEgKDhiYWIyNmY0ZiAyMDI2LTA3LTE0KQCUAQ90YXJnZXRfZmVhdHVyZXMIKwtidWxrLW1lbW9yeSsPYnVsay1tZW1vcnktb3B0KxZjYWxsLWluZGlyZWN0LW92ZXJsb25nKwptdWx0aXZhbHVlKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrD3JlZmVyZW5jZS10eXBlcysIc2lnbi1leHQ=";
|
|
4
|
+
|
|
5
|
+
function decodeBase64(value) {
|
|
6
|
+
if (typeof Buffer !== "undefined") {
|
|
7
|
+
return Uint8Array.from(Buffer.from(value, "base64"));
|
|
8
|
+
}
|
|
9
|
+
const binary = atob(value);
|
|
10
|
+
const bytes = new Uint8Array(binary.length);
|
|
11
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
12
|
+
bytes[index] = binary.charCodeAt(index);
|
|
13
|
+
}
|
|
14
|
+
return bytes;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const ONDA_MATH_KERNEL_WASM = decodeBase64(BASE64);
|
|
18
|
+
export const ONDA_MATH_KERNEL_SHA256 = "b6b40b3520b4f2a103b03f9e0d5a2af876825a6da6f440f8918c9d7fa52974c4";
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
const utf8 = new TextDecoder("utf-8", { fatal: true });
|
|
2
|
+
const MAX_NESTING_DEPTH = 512;
|
|
3
|
+
|
|
4
|
+
export function decodeMirMessagePack(input) {
|
|
5
|
+
const bytes = asBytes(input);
|
|
6
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
7
|
+
let offset = 0;
|
|
8
|
+
|
|
9
|
+
const requireBytes = (count) => {
|
|
10
|
+
if (offset + count > bytes.byteLength) {
|
|
11
|
+
throw new Error("truncated MessagePack MIR payload");
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const take = (count) => {
|
|
15
|
+
requireBytes(count);
|
|
16
|
+
const start = offset;
|
|
17
|
+
offset += count;
|
|
18
|
+
return start;
|
|
19
|
+
};
|
|
20
|
+
const uint8 = () => view.getUint8(take(1));
|
|
21
|
+
const uint16 = () => view.getUint16(take(2), false);
|
|
22
|
+
const uint32 = () => view.getUint32(take(4), false);
|
|
23
|
+
const length32 = () => {
|
|
24
|
+
const value = uint32();
|
|
25
|
+
if (value > 0x7fff_ffff) throw new Error("MessagePack collection is too large");
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
const integer64 = (signed) => {
|
|
29
|
+
const start = take(8);
|
|
30
|
+
const value = signed
|
|
31
|
+
? view.getBigInt64(start, false)
|
|
32
|
+
: view.getBigUint64(start, false);
|
|
33
|
+
const number = Number(value);
|
|
34
|
+
if (!Number.isSafeInteger(number)) {
|
|
35
|
+
throw new Error("MessagePack integer exceeds JavaScript's exact integer range");
|
|
36
|
+
}
|
|
37
|
+
return number;
|
|
38
|
+
};
|
|
39
|
+
const string = (length) => {
|
|
40
|
+
const start = take(length);
|
|
41
|
+
return utf8.decode(bytes.subarray(start, start + length));
|
|
42
|
+
};
|
|
43
|
+
const array = (length, depth) => {
|
|
44
|
+
if (length > bytes.byteLength - offset) {
|
|
45
|
+
throw new Error("truncated MessagePack MIR array");
|
|
46
|
+
}
|
|
47
|
+
const result = new Array(length);
|
|
48
|
+
for (let index = 0; index < length; index += 1) {
|
|
49
|
+
result[index] = read(depth + 1);
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
const map = (length, depth) => {
|
|
54
|
+
if (length > Math.floor((bytes.byteLength - offset) / 2)) {
|
|
55
|
+
throw new Error("truncated MessagePack MIR map");
|
|
56
|
+
}
|
|
57
|
+
const result = Object.create(null);
|
|
58
|
+
for (let index = 0; index < length; index += 1) {
|
|
59
|
+
const key = read(depth + 1);
|
|
60
|
+
if (typeof key !== "string") throw new Error("MessagePack MIR map key is not a string");
|
|
61
|
+
result[key] = read(depth + 1);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
};
|
|
65
|
+
const binary = (length) => {
|
|
66
|
+
const start = take(length);
|
|
67
|
+
return bytes.slice(start, start + length);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
function read(depth) {
|
|
71
|
+
if (depth > MAX_NESTING_DEPTH) {
|
|
72
|
+
throw new Error("MessagePack MIR nesting is too deep");
|
|
73
|
+
}
|
|
74
|
+
const marker = uint8();
|
|
75
|
+
if (marker <= 0x7f) return marker;
|
|
76
|
+
if (marker >= 0xe0) return marker - 0x100;
|
|
77
|
+
if ((marker & 0xf0) === 0x80) return map(marker & 0x0f, depth);
|
|
78
|
+
if ((marker & 0xf0) === 0x90) return array(marker & 0x0f, depth);
|
|
79
|
+
if ((marker & 0xe0) === 0xa0) return string(marker & 0x1f);
|
|
80
|
+
|
|
81
|
+
switch (marker) {
|
|
82
|
+
case 0xc0: return null;
|
|
83
|
+
case 0xc2: return false;
|
|
84
|
+
case 0xc3: return true;
|
|
85
|
+
case 0xc4: return binary(uint8());
|
|
86
|
+
case 0xc5: return binary(uint16());
|
|
87
|
+
case 0xc6: return binary(length32());
|
|
88
|
+
case 0xca: return view.getFloat32(take(4), false);
|
|
89
|
+
case 0xcb: return view.getFloat64(take(8), false);
|
|
90
|
+
case 0xcc: return uint8();
|
|
91
|
+
case 0xcd: return uint16();
|
|
92
|
+
case 0xce: return uint32();
|
|
93
|
+
case 0xcf: return integer64(false);
|
|
94
|
+
case 0xd0: return view.getInt8(take(1));
|
|
95
|
+
case 0xd1: return view.getInt16(take(2), false);
|
|
96
|
+
case 0xd2: return view.getInt32(take(4), false);
|
|
97
|
+
case 0xd3: return integer64(true);
|
|
98
|
+
case 0xd9: return string(uint8());
|
|
99
|
+
case 0xda: return string(uint16());
|
|
100
|
+
case 0xdb: return string(length32());
|
|
101
|
+
case 0xdc: return array(uint16(), depth);
|
|
102
|
+
case 0xdd: return array(length32(), depth);
|
|
103
|
+
case 0xde: return map(uint16(), depth);
|
|
104
|
+
case 0xdf: return map(length32(), depth);
|
|
105
|
+
default:
|
|
106
|
+
throw new Error(`unsupported MessagePack marker 0x${marker.toString(16)}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const result = read(0);
|
|
111
|
+
if (offset !== bytes.byteLength) {
|
|
112
|
+
throw new Error("trailing bytes after MessagePack MIR payload");
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function asBytes(input) {
|
|
118
|
+
if (input instanceof Uint8Array) return input;
|
|
119
|
+
if (input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
120
|
+
if (ArrayBuffer.isView(input)) {
|
|
121
|
+
return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
122
|
+
}
|
|
123
|
+
throw new TypeError("MessagePack MIR must be an ArrayBuffer or typed array");
|
|
124
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const NUMERIC = Object.freeze(["f32", "f64", "i32", "i64"]);
|
|
2
|
+
const INTEGER = Object.freeze(["i32", "i64"]);
|
|
3
|
+
|
|
4
|
+
// Binaryen backend capability table for the complete scalar MIR operation
|
|
5
|
+
// surface. Lowering consults this table before dispatch, and tests assert its
|
|
6
|
+
// exact operation set so a MIR schema addition cannot silently become an
|
|
7
|
+
// undocumented backend gap.
|
|
8
|
+
export const MIR_OPERATION_CAPABILITIES = Object.freeze({
|
|
9
|
+
unary: Object.freeze({
|
|
10
|
+
negate: NUMERIC,
|
|
11
|
+
logical_not: Object.freeze(["bool"]),
|
|
12
|
+
bit_not: INTEGER,
|
|
13
|
+
}),
|
|
14
|
+
binary: Object.freeze({
|
|
15
|
+
add: NUMERIC,
|
|
16
|
+
subtract: NUMERIC,
|
|
17
|
+
multiply: NUMERIC,
|
|
18
|
+
divide: NUMERIC,
|
|
19
|
+
remainder: NUMERIC,
|
|
20
|
+
bit_and: INTEGER,
|
|
21
|
+
bit_or: INTEGER,
|
|
22
|
+
bit_xor: INTEGER,
|
|
23
|
+
shift_left: INTEGER,
|
|
24
|
+
shift_right: INTEGER,
|
|
25
|
+
}),
|
|
26
|
+
compare: Object.freeze({
|
|
27
|
+
equal: Object.freeze([...NUMERIC, "bool"]),
|
|
28
|
+
not_equal: Object.freeze([...NUMERIC, "bool"]),
|
|
29
|
+
less: NUMERIC,
|
|
30
|
+
less_equal: NUMERIC,
|
|
31
|
+
greater: NUMERIC,
|
|
32
|
+
greater_equal: NUMERIC,
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export function supportsMirOperation(kind, operation, scalar) {
|
|
37
|
+
return MIR_OPERATION_CAPABILITIES[kind]?.[operation]?.includes(scalar) === true;
|
|
38
|
+
}
|
package/dist/build.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ondaVersion": "0.5.0",
|
|
3
|
+
"binaryenVersion": "130.0.0",
|
|
4
|
+
"frontendPackage": "onda_compiler_web",
|
|
5
|
+
"frontendOptimization": {
|
|
6
|
+
"tool": "wasm-opt",
|
|
7
|
+
"binaryenVersion": "130.0.0",
|
|
8
|
+
"optimizeLevel": 4,
|
|
9
|
+
"inputBytes": 6451302,
|
|
10
|
+
"outputBytes": 4889523
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Francesco Cameli
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Onda browser compiler
|
|
2
|
+
|
|
3
|
+
`onda_compiler_web` is the browser-safe `source -> semantic analysis -> optimized validated MIR`
|
|
4
|
+
front half of Onda. The standard library is embedded in the Rust frontend, so compiling an
|
|
5
|
+
in-memory program and its `std/...` imports does not require filesystem access.
|
|
6
|
+
|
|
7
|
+
Build the production JavaScript glue and compiler Wasm from the repository root with:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm run build --workspace @onda-lang/wasm-compiler
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The package build runs `wasm-pack --release` and then the workspace-pinned Binaryen
|
|
14
|
+
`wasm-opt -O4`. Its internal `--no-opt` argument only disables wasm-pack's separately bundled
|
|
15
|
+
optimizer so every local, CI, website, and npm build uses the same Binaryen release.
|
|
16
|
+
|
|
17
|
+
The production exports `compile_to_mir_messagepack(source, sampleRate, blockSize)` and
|
|
18
|
+
`compile_project_to_mir_messagepack(entryPath, sourcesJson, sampleRate, blockSize)` return compact
|
|
19
|
+
schema-versioned bytes. JSON variants with the same names ending in `_json` remain available for
|
|
20
|
+
inspection and tooling. Project compilation accepts a JSON object of project-relative paths to
|
|
21
|
+
source strings, resolving imports and includes entirely in memory. Paths cannot escape the virtual
|
|
22
|
+
project root. `mir_schema_version()` exposes the producer version for integration checks.
|
|
23
|
+
Compilation failures reject with a JSON-encoded array of structured diagnostics.
|
|
24
|
+
|
|
25
|
+
The current producer and `packages/onda_binaryen_web` both use the current MIR schema. The browser playground
|
|
26
|
+
under `examples/web/onda_wasm_playground` passes the generated MessagePack directly to the explicitly
|
|
27
|
+
trusted Onda-producer entry point in the Binaryen.js backend and runs the resulting DSP Wasm in an
|
|
28
|
+
AudioWorklet.
|
|
29
|
+
|
|
30
|
+
Native MessagePack and JSON APIs exist for tests and non-JavaScript embedders. They use the identical
|
|
31
|
+
in-memory lowering and optimization path as the Wasm exports.
|
|
32
|
+
|
|
33
|
+
Run native tests with:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
cargo test -p onda_compiler_web
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Build and serve the complete browser path from the repository root with:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
bash ./examples/web/onda_wasm_playground/build-demo.sh --serve
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
That demo build requires Node/npm and `wasm-pack`; it does not require LLVM or the native Onda CLI.
|
|
46
|
+
This crate deliberately stops at optimized validated MIR transport. DSP Wasm emission, internal
|
|
47
|
+
Wasm math legalization, runtime layout metadata, and AudioWorklet hosting live in the Binaryen
|
|
48
|
+
package and browser example. Backend
|
|
49
|
+
compile/render measurements are documented in
|
|
50
|
+
[`docs/backend-benchmarks.md`](../../docs/backend-benchmarks.md).
|
|
51
|
+
|
|
52
|
+
Application consumers should normally install
|
|
53
|
+
[`@onda-lang/wasm-compiler`](../../packages/onda_wasm_compiler/README.md), which packages this
|
|
54
|
+
frontend Wasm with the compatible Binaryen backend, verifies their MIR schema handshake, and
|
|
55
|
+
provides typed source/project APIs plus the `onda-wasm` CLI.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Stateful `onda lsp` server for browser Worker transports.
|
|
6
|
+
*/
|
|
7
|
+
export class OndaLsp {
|
|
8
|
+
free(): void;
|
|
9
|
+
[Symbol.dispose](): void;
|
|
10
|
+
/**
|
|
11
|
+
* Accepts one JSON-RPC LSP message and returns a JSON array containing
|
|
12
|
+
* all responses and notifications emitted synchronously for it.
|
|
13
|
+
*/
|
|
14
|
+
handle_message(message_json: string): string;
|
|
15
|
+
constructor();
|
|
16
|
+
set_analysis_options(sample_rate: number, block_size: number): void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function compile_project_to_mir_json(entry_path: string, sources_json: string, sample_rate: number, block_size: number): string;
|
|
20
|
+
|
|
21
|
+
export function compile_project_to_mir_messagepack(entry_path: string, sources_json: string, sample_rate: number, block_size: number): Uint8Array;
|
|
22
|
+
|
|
23
|
+
export function compile_to_mir_json(source: string, sample_rate: number, block_size: number): string;
|
|
24
|
+
|
|
25
|
+
export function compile_to_mir_messagepack(source: string, sample_rate: number, block_size: number): Uint8Array;
|
|
26
|
+
|
|
27
|
+
export function mir_schema_version(): number;
|
|
28
|
+
|
|
29
|
+
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
|
30
|
+
|
|
31
|
+
export interface InitOutput {
|
|
32
|
+
readonly memory: WebAssembly.Memory;
|
|
33
|
+
readonly __wbg_ondalsp_free: (a: number, b: number) => void;
|
|
34
|
+
readonly compile_project_to_mir_json: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
|
|
35
|
+
readonly compile_project_to_mir_messagepack: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
|
|
36
|
+
readonly compile_to_mir_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
|
37
|
+
readonly compile_to_mir_messagepack: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
|
38
|
+
readonly mir_schema_version: () => number;
|
|
39
|
+
readonly ondalsp_handle_message: (a: number, b: number, c: number) => [number, number, number, number];
|
|
40
|
+
readonly ondalsp_new: () => number;
|
|
41
|
+
readonly ondalsp_set_analysis_options: (a: number, b: number, c: number) => [number, number];
|
|
42
|
+
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
43
|
+
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
|
44
|
+
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
|
45
|
+
readonly __externref_table_dealloc: (a: number) => void;
|
|
46
|
+
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
|
47
|
+
readonly __wbindgen_start: () => void;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type SyncInitInput = BufferSource | WebAssembly.Module;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Instantiates the given `module`, which can either be bytes or
|
|
54
|
+
* a precompiled `WebAssembly.Module`.
|
|
55
|
+
*
|
|
56
|
+
* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
|
|
57
|
+
*
|
|
58
|
+
* @returns {InitOutput}
|
|
59
|
+
*/
|
|
60
|
+
export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
|
|
64
|
+
* for everything else, calls `WebAssembly.instantiate` directly.
|
|
65
|
+
*
|
|
66
|
+
* @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
|
|
67
|
+
*
|
|
68
|
+
* @returns {Promise<InitOutput>}
|
|
69
|
+
*/
|
|
70
|
+
export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;
|