@aztec/foundation 0.1.0-alpha10

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.
Files changed (414) hide show
  1. package/.eslintrc.cjs +103 -0
  2. package/.prettierrc.json +6 -0
  3. package/.tsbuildinfo +1 -0
  4. package/README.md +1 -0
  5. package/dest/abi/index.d.ts +137 -0
  6. package/dest/abi/index.d.ts.map +1 -0
  7. package/dest/abi/index.js +18 -0
  8. package/dest/async-map/async_map.test.d.ts +2 -0
  9. package/dest/async-map/async_map.test.d.ts.map +1 -0
  10. package/dest/async-map/async_map.test.js +9 -0
  11. package/dest/async-map/index.d.ts +13 -0
  12. package/dest/async-map/index.d.ts.map +1 -0
  13. package/dest/async-map/index.js +19 -0
  14. package/dest/aztec-address/index.d.ts +96 -0
  15. package/dest/aztec-address/index.d.ts.map +1 -0
  16. package/dest/aztec-address/index.js +124 -0
  17. package/dest/bigint-buffer/bigint-buffer.test.d.ts +2 -0
  18. package/dest/bigint-buffer/bigint-buffer.test.d.ts.map +1 -0
  19. package/dest/bigint-buffer/bigint-buffer.test.js +18 -0
  20. package/dest/bigint-buffer/index.d.ts +35 -0
  21. package/dest/bigint-buffer/index.d.ts.map +1 -0
  22. package/dest/bigint-buffer/index.js +68 -0
  23. package/dest/collection/array.d.ts +30 -0
  24. package/dest/collection/array.d.ts.map +1 -0
  25. package/dest/collection/array.js +47 -0
  26. package/dest/collection/index.d.ts +2 -0
  27. package/dest/collection/index.d.ts.map +1 -0
  28. package/dest/collection/index.js +2 -0
  29. package/dest/crypto/index.d.ts +4 -0
  30. package/dest/crypto/index.d.ts.map +1 -0
  31. package/dest/crypto/index.js +4 -0
  32. package/dest/crypto/keccak/index.d.ts +20 -0
  33. package/dest/crypto/keccak/index.d.ts.map +1 -0
  34. package/dest/crypto/keccak/index.js +31 -0
  35. package/dest/crypto/random/index.d.ts +3 -0
  36. package/dest/crypto/random/index.d.ts.map +1 -0
  37. package/dest/crypto/random/index.js +36 -0
  38. package/dest/crypto/random/index.test.d.ts +2 -0
  39. package/dest/crypto/random/index.test.d.ts.map +1 -0
  40. package/dest/crypto/random/index.test.js +13 -0
  41. package/dest/crypto/sha256/index.d.ts +11 -0
  42. package/dest/crypto/sha256/index.d.ts.map +1 -0
  43. package/dest/crypto/sha256/index.js +14 -0
  44. package/dest/crypto/sha256/index.test.d.ts +2 -0
  45. package/dest/crypto/sha256/index.test.d.ts.map +1 -0
  46. package/dest/crypto/sha256/index.test.js +11 -0
  47. package/dest/errors/index.d.ts +8 -0
  48. package/dest/errors/index.d.ts.map +1 -0
  49. package/dest/errors/index.js +8 -0
  50. package/dest/eth-address/eth_address.test.d.ts +2 -0
  51. package/dest/eth-address/eth_address.test.d.ts.map +1 -0
  52. package/dest/eth-address/eth_address.test.js +87 -0
  53. package/dest/eth-address/index.d.ts +139 -0
  54. package/dest/eth-address/index.d.ts.map +1 -0
  55. package/dest/eth-address/index.js +221 -0
  56. package/dest/fields/coordinate.d.ts +67 -0
  57. package/dest/fields/coordinate.d.ts.map +1 -0
  58. package/dest/fields/coordinate.js +95 -0
  59. package/dest/fields/coordinate.test.d.ts +2 -0
  60. package/dest/fields/coordinate.test.d.ts.map +1 -0
  61. package/dest/fields/coordinate.test.js +22 -0
  62. package/dest/fields/fields.d.ts +170 -0
  63. package/dest/fields/fields.d.ts.map +1 -0
  64. package/dest/fields/fields.js +210 -0
  65. package/dest/fields/index.d.ts +4 -0
  66. package/dest/fields/index.d.ts.map +1 -0
  67. package/dest/fields/index.js +4 -0
  68. package/dest/fields/point.d.ts +111 -0
  69. package/dest/fields/point.d.ts.map +1 -0
  70. package/dest/fields/point.js +133 -0
  71. package/dest/fifo/bounded_serial_queue.d.ts +56 -0
  72. package/dest/fifo/bounded_serial_queue.d.ts.map +1 -0
  73. package/dest/fifo/bounded_serial_queue.js +94 -0
  74. package/dest/fifo/index.d.ts +5 -0
  75. package/dest/fifo/index.d.ts.map +1 -0
  76. package/dest/fifo/index.js +5 -0
  77. package/dest/fifo/memory_fifo.d.ts +55 -0
  78. package/dest/fifo/memory_fifo.d.ts.map +1 -0
  79. package/dest/fifo/memory_fifo.js +109 -0
  80. package/dest/fifo/semaphore.d.ts +23 -0
  81. package/dest/fifo/semaphore.d.ts.map +1 -0
  82. package/dest/fifo/semaphore.js +30 -0
  83. package/dest/fifo/serial_queue.d.ts +48 -0
  84. package/dest/fifo/serial_queue.d.ts.map +1 -0
  85. package/dest/fifo/serial_queue.js +74 -0
  86. package/dest/json-rpc/class_converter.d.ts +109 -0
  87. package/dest/json-rpc/class_converter.d.ts.map +1 -0
  88. package/dest/json-rpc/class_converter.js +85 -0
  89. package/dest/json-rpc/client/index.d.ts +2 -0
  90. package/dest/json-rpc/client/index.d.ts.map +1 -0
  91. package/dest/json-rpc/client/index.js +2 -0
  92. package/dest/json-rpc/client/json_rpc_client.d.ts +22 -0
  93. package/dest/json-rpc/client/json_rpc_client.d.ts.map +1 -0
  94. package/dest/json-rpc/client/json_rpc_client.js +83 -0
  95. package/dest/json-rpc/client/json_rpc_client.test.d.ts +2 -0
  96. package/dest/json-rpc/client/json_rpc_client.test.d.ts.map +1 -0
  97. package/dest/json-rpc/client/json_rpc_client.test.js +20 -0
  98. package/dest/json-rpc/convert.d.ts +22 -0
  99. package/dest/json-rpc/convert.d.ts.map +1 -0
  100. package/dest/json-rpc/convert.js +93 -0
  101. package/dest/json-rpc/convert.test.d.ts +2 -0
  102. package/dest/json-rpc/convert.test.d.ts.map +1 -0
  103. package/dest/json-rpc/convert.test.js +14 -0
  104. package/dest/json-rpc/fixtures/test_state.d.ts +47 -0
  105. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
  106. package/dest/json-rpc/fixtures/test_state.js +62 -0
  107. package/dest/json-rpc/index.d.ts +4 -0
  108. package/dest/json-rpc/index.d.ts.map +1 -0
  109. package/dest/json-rpc/index.js +4 -0
  110. package/dest/json-rpc/js_utils.d.ts +13 -0
  111. package/dest/json-rpc/js_utils.d.ts.map +1 -0
  112. package/dest/json-rpc/js_utils.js +18 -0
  113. package/dest/json-rpc/server/index.d.ts +3 -0
  114. package/dest/json-rpc/server/index.d.ts.map +1 -0
  115. package/dest/json-rpc/server/index.js +3 -0
  116. package/dest/json-rpc/server/json_proxy.d.ts +18 -0
  117. package/dest/json-rpc/server/json_proxy.d.ts.map +1 -0
  118. package/dest/json-rpc/server/json_proxy.js +35 -0
  119. package/dest/json-rpc/server/json_rpc_server.d.ts +34 -0
  120. package/dest/json-rpc/server/json_rpc_server.d.ts.map +1 -0
  121. package/dest/json-rpc/server/json_rpc_server.js +109 -0
  122. package/dest/json-rpc/server/json_rpc_server.test.d.ts +2 -0
  123. package/dest/json-rpc/server/json_rpc_server.test.d.ts.map +1 -0
  124. package/dest/json-rpc/server/json_rpc_server.test.js +22 -0
  125. package/dest/log/console.d.ts +16 -0
  126. package/dest/log/console.d.ts.map +1 -0
  127. package/dest/log/console.js +39 -0
  128. package/dest/log/debug.d.ts +46 -0
  129. package/dest/log/debug.d.ts.map +1 -0
  130. package/dest/log/debug.js +75 -0
  131. package/dest/log/index.d.ts +4 -0
  132. package/dest/log/index.d.ts.map +1 -0
  133. package/dest/log/index.js +4 -0
  134. package/dest/log/log_history.d.ts +31 -0
  135. package/dest/log/log_history.d.ts.map +1 -0
  136. package/dest/log/log_history.js +42 -0
  137. package/dest/log/log_history.test.d.ts +2 -0
  138. package/dest/log/log_history.test.d.ts.map +1 -0
  139. package/dest/log/log_history.test.js +78 -0
  140. package/dest/mutex/index.d.ts +53 -0
  141. package/dest/mutex/index.d.ts.map +1 -0
  142. package/dest/mutex/index.js +74 -0
  143. package/dest/mutex/mutex.test.d.ts +9 -0
  144. package/dest/mutex/mutex.test.d.ts.map +1 -0
  145. package/dest/mutex/mutex.test.js +58 -0
  146. package/dest/mutex/mutex_database.d.ts +10 -0
  147. package/dest/mutex/mutex_database.d.ts.map +1 -0
  148. package/dest/mutex/mutex_database.js +2 -0
  149. package/dest/retry/index.d.ts +33 -0
  150. package/dest/retry/index.d.ts.map +1 -0
  151. package/dest/retry/index.js +70 -0
  152. package/dest/running-promise/index.d.ts +35 -0
  153. package/dest/running-promise/index.d.ts.map +1 -0
  154. package/dest/running-promise/index.js +59 -0
  155. package/dest/serialize/buffer_reader.d.ts +188 -0
  156. package/dest/serialize/buffer_reader.d.ts.map +1 -0
  157. package/dest/serialize/buffer_reader.js +229 -0
  158. package/dest/serialize/buffer_reader.test.d.ts +2 -0
  159. package/dest/serialize/buffer_reader.test.d.ts.map +1 -0
  160. package/dest/serialize/buffer_reader.test.js +156 -0
  161. package/dest/serialize/deserializer.d.ts +134 -0
  162. package/dest/serialize/deserializer.d.ts.map +1 -0
  163. package/dest/serialize/deserializer.js +145 -0
  164. package/dest/serialize/free_funcs.d.ts +203 -0
  165. package/dest/serialize/free_funcs.d.ts.map +1 -0
  166. package/dest/serialize/free_funcs.js +250 -0
  167. package/dest/serialize/index.d.ts +6 -0
  168. package/dest/serialize/index.d.ts.map +1 -0
  169. package/dest/serialize/index.js +6 -0
  170. package/dest/serialize/serialize.test.d.ts +2 -0
  171. package/dest/serialize/serialize.test.d.ts.map +1 -0
  172. package/dest/serialize/serialize.test.js +68 -0
  173. package/dest/serialize/serializer.d.ts +89 -0
  174. package/dest/serialize/serializer.d.ts.map +1 -0
  175. package/dest/serialize/serializer.js +111 -0
  176. package/dest/serialize/types.d.ts +33 -0
  177. package/dest/serialize/types.d.ts.map +1 -0
  178. package/dest/serialize/types.js +22 -0
  179. package/dest/sleep/index.d.ts +52 -0
  180. package/dest/sleep/index.d.ts.map +1 -0
  181. package/dest/sleep/index.js +70 -0
  182. package/dest/timer/index.d.ts +3 -0
  183. package/dest/timer/index.d.ts.map +1 -0
  184. package/dest/timer/index.js +3 -0
  185. package/dest/timer/timeout.d.ts +41 -0
  186. package/dest/timer/timeout.d.ts.map +1 -0
  187. package/dest/timer/timeout.js +62 -0
  188. package/dest/timer/timer.d.ts +33 -0
  189. package/dest/timer/timer.d.ts.map +1 -0
  190. package/dest/timer/timer.js +38 -0
  191. package/dest/transport/browser/index.d.ts +5 -0
  192. package/dest/transport/browser/index.d.ts.map +1 -0
  193. package/dest/transport/browser/index.js +5 -0
  194. package/dest/transport/browser/message_port_socket.d.ts +37 -0
  195. package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
  196. package/dest/transport/browser/message_port_socket.js +46 -0
  197. package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
  198. package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
  199. package/dest/transport/browser/shared_worker_connector.js +21 -0
  200. package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
  201. package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
  202. package/dest/transport/browser/shared_worker_listener.js +37 -0
  203. package/dest/transport/browser/worker_connector.d.ts +26 -0
  204. package/dest/transport/browser/worker_connector.d.ts.map +1 -0
  205. package/dest/transport/browser/worker_connector.js +30 -0
  206. package/dest/transport/browser/worker_listener.d.ts +39 -0
  207. package/dest/transport/browser/worker_listener.d.ts.map +1 -0
  208. package/dest/transport/browser/worker_listener.js +39 -0
  209. package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
  210. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
  211. package/dest/transport/dispatch/create_dispatch_fn.js +18 -0
  212. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
  213. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
  214. package/dest/transport/dispatch/create_dispatch_proxy.js +56 -0
  215. package/dest/transport/dispatch/messages.d.ts +52 -0
  216. package/dest/transport/dispatch/messages.d.ts.map +1 -0
  217. package/dest/transport/dispatch/messages.js +12 -0
  218. package/dest/transport/index.d.ts +12 -0
  219. package/dest/transport/index.d.ts.map +1 -0
  220. package/dest/transport/index.js +12 -0
  221. package/dest/transport/interface/connector.d.ts +8 -0
  222. package/dest/transport/interface/connector.d.ts.map +1 -0
  223. package/dest/transport/interface/connector.js +2 -0
  224. package/dest/transport/interface/listener.d.ts +13 -0
  225. package/dest/transport/interface/listener.d.ts.map +1 -0
  226. package/dest/transport/interface/listener.js +2 -0
  227. package/dest/transport/interface/socket.d.ts +13 -0
  228. package/dest/transport/interface/socket.d.ts.map +1 -0
  229. package/dest/transport/interface/socket.js +2 -0
  230. package/dest/transport/interface/transferable.d.ts +68 -0
  231. package/dest/transport/interface/transferable.d.ts.map +1 -0
  232. package/dest/transport/interface/transferable.js +63 -0
  233. package/dest/transport/node/index.d.ts +3 -0
  234. package/dest/transport/node/index.d.ts.map +1 -0
  235. package/dest/transport/node/index.js +3 -0
  236. package/dest/transport/node/node_connector.d.ts +28 -0
  237. package/dest/transport/node/node_connector.d.ts.map +1 -0
  238. package/dest/transport/node/node_connector.js +28 -0
  239. package/dest/transport/node/node_connector_socket.d.ts +42 -0
  240. package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
  241. package/dest/transport/node/node_connector_socket.js +48 -0
  242. package/dest/transport/node/node_listener.d.ts +26 -0
  243. package/dest/transport/node/node_listener.d.ts.map +1 -0
  244. package/dest/transport/node/node_listener.js +30 -0
  245. package/dest/transport/node/node_listener_socket.d.ts +37 -0
  246. package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
  247. package/dest/transport/node/node_listener_socket.js +44 -0
  248. package/dest/transport/transport_client.d.ts +61 -0
  249. package/dest/transport/transport_client.d.ts.map +1 -0
  250. package/dest/transport/transport_client.js +94 -0
  251. package/dest/transport/transport_server.d.ts +56 -0
  252. package/dest/transport/transport_server.d.ts.map +1 -0
  253. package/dest/transport/transport_server.js +101 -0
  254. package/dest/types/index.d.ts +7 -0
  255. package/dest/types/index.d.ts.map +1 -0
  256. package/dest/types/index.js +2 -0
  257. package/dest/wasm/index.d.ts +5 -0
  258. package/dest/wasm/index.d.ts.map +1 -0
  259. package/dest/wasm/index.js +5 -0
  260. package/dest/wasm/wasm/empty_wasi_sdk.d.ts +130 -0
  261. package/dest/wasm/wasm/empty_wasi_sdk.d.ts.map +1 -0
  262. package/dest/wasm/wasm/empty_wasi_sdk.js +166 -0
  263. package/dest/wasm/wasm/index.d.ts +2 -0
  264. package/dest/wasm/wasm/index.d.ts.map +1 -0
  265. package/dest/wasm/wasm/index.js +2 -0
  266. package/dest/wasm/wasm/wasm_module.d.ts +135 -0
  267. package/dest/wasm/wasm/wasm_module.d.ts.map +1 -0
  268. package/dest/wasm/wasm/wasm_module.js +205 -0
  269. package/dest/wasm/wasm/wasm_module.test.d.ts +2 -0
  270. package/dest/wasm/wasm/wasm_module.test.d.ts.map +1 -0
  271. package/dest/wasm/wasm/wasm_module.test.js +24 -0
  272. package/dest/wasm/worker/browser/index.d.ts +3 -0
  273. package/dest/wasm/worker/browser/index.d.ts.map +1 -0
  274. package/dest/wasm/worker/browser/index.js +3 -0
  275. package/dest/wasm/worker/browser/start_web_module.d.ts +7 -0
  276. package/dest/wasm/worker/browser/start_web_module.d.ts.map +1 -0
  277. package/dest/wasm/worker/browser/start_web_module.js +22 -0
  278. package/dest/wasm/worker/browser/web_data_store.d.ts +23 -0
  279. package/dest/wasm/worker/browser/web_data_store.d.ts.map +1 -0
  280. package/dest/wasm/worker/browser/web_data_store.js +32 -0
  281. package/dest/wasm/worker/browser/web_worker.d.ts +10 -0
  282. package/dest/wasm/worker/browser/web_worker.d.ts.map +1 -0
  283. package/dest/wasm/worker/browser/web_worker.js +23 -0
  284. package/dest/wasm/worker/data_store.d.ts +9 -0
  285. package/dest/wasm/worker/data_store.d.ts.map +1 -0
  286. package/dest/wasm/worker/data_store.js +2 -0
  287. package/dest/wasm/worker/index.d.ts +3 -0
  288. package/dest/wasm/worker/index.d.ts.map +1 -0
  289. package/dest/wasm/worker/index.js +2 -0
  290. package/dest/wasm/worker/node/index.d.ts +3 -0
  291. package/dest/wasm/worker/node/index.d.ts.map +1 -0
  292. package/dest/wasm/worker/node/index.js +3 -0
  293. package/dest/wasm/worker/node/node_data_store.d.ts +22 -0
  294. package/dest/wasm/worker/node/node_data_store.d.ts.map +1 -0
  295. package/dest/wasm/worker/node/node_data_store.js +31 -0
  296. package/dest/wasm/worker/node/node_worker.d.ts +6 -0
  297. package/dest/wasm/worker/node/node_worker.d.ts.map +1 -0
  298. package/dest/wasm/worker/node/node_worker.js +20 -0
  299. package/dest/wasm/worker/node/start_node_module.d.ts +7 -0
  300. package/dest/wasm/worker/node/start_node_module.d.ts.map +1 -0
  301. package/dest/wasm/worker/node/start_node_module.js +26 -0
  302. package/dest/wasm/worker/wasm_worker.d.ts +9 -0
  303. package/dest/wasm/worker/wasm_worker.d.ts.map +1 -0
  304. package/dest/wasm/worker/wasm_worker.js +2 -0
  305. package/dest/wasm/worker/worker_pool.d.ts +40 -0
  306. package/dest/wasm/worker/worker_pool.d.ts.map +1 -0
  307. package/dest/wasm/worker/worker_pool.js +62 -0
  308. package/package.json +44 -0
  309. package/src/abi/index.ts +147 -0
  310. package/src/async-map/async_map.test.ts +9 -0
  311. package/src/async-map/index.ts +18 -0
  312. package/src/aztec-address/index.ts +135 -0
  313. package/src/bigint-buffer/bigint-buffer.test.ts +21 -0
  314. package/src/bigint-buffer/index.ts +68 -0
  315. package/src/collection/array.ts +48 -0
  316. package/src/collection/index.ts +1 -0
  317. package/src/crypto/index.ts +3 -0
  318. package/src/crypto/keccak/index.ts +33 -0
  319. package/src/crypto/random/index.test.ts +13 -0
  320. package/src/crypto/random/index.ts +38 -0
  321. package/src/crypto/sha256/index.test.ts +13 -0
  322. package/src/crypto/sha256/index.ts +15 -0
  323. package/src/errors/index.ts +6 -0
  324. package/src/eth-address/eth_address.test.ts +104 -0
  325. package/src/eth-address/index.ts +236 -0
  326. package/src/fields/coordinate.test.ts +26 -0
  327. package/src/fields/coordinate.ts +104 -0
  328. package/src/fields/fields.ts +234 -0
  329. package/src/fields/index.ts +3 -0
  330. package/src/fields/point.ts +143 -0
  331. package/src/fifo/bounded_serial_queue.ts +100 -0
  332. package/src/fifo/index.ts +4 -0
  333. package/src/fifo/memory_fifo.ts +114 -0
  334. package/src/fifo/semaphore.ts +33 -0
  335. package/src/fifo/serial_queue.ts +78 -0
  336. package/src/json-rpc/README.md +55 -0
  337. package/src/json-rpc/class_converter.ts +160 -0
  338. package/src/json-rpc/client/index.ts +1 -0
  339. package/src/json-rpc/client/json_rpc_client.test.ts +20 -0
  340. package/src/json-rpc/client/json_rpc_client.ts +103 -0
  341. package/src/json-rpc/convert.test.ts +15 -0
  342. package/src/json-rpc/convert.ts +109 -0
  343. package/src/json-rpc/fixtures/test_state.ts +59 -0
  344. package/src/json-rpc/index.ts +3 -0
  345. package/src/json-rpc/js_utils.ts +20 -0
  346. package/src/json-rpc/server/index.ts +2 -0
  347. package/src/json-rpc/server/json_proxy.ts +36 -0
  348. package/src/json-rpc/server/json_rpc_server.test.ts +23 -0
  349. package/src/json-rpc/server/json_rpc_server.ts +124 -0
  350. package/src/log/console.ts +45 -0
  351. package/src/log/debug.ts +86 -0
  352. package/src/log/index.ts +3 -0
  353. package/src/log/log_history.test.ts +87 -0
  354. package/src/log/log_history.ts +44 -0
  355. package/src/mutex/index.ts +83 -0
  356. package/src/mutex/mutex.test.ts +75 -0
  357. package/src/mutex/mutex_database.ts +9 -0
  358. package/src/retry/index.ts +78 -0
  359. package/src/running-promise/index.ts +60 -0
  360. package/src/serialize/buffer_reader.test.ts +175 -0
  361. package/src/serialize/buffer_reader.ts +272 -0
  362. package/src/serialize/deserializer.ts +180 -0
  363. package/src/serialize/free_funcs.ts +285 -0
  364. package/src/serialize/index.ts +5 -0
  365. package/src/serialize/serialize.test.ts +89 -0
  366. package/src/serialize/serializer.ts +128 -0
  367. package/src/serialize/types.ts +40 -0
  368. package/src/sleep/index.ts +71 -0
  369. package/src/timer/index.ts +2 -0
  370. package/src/timer/timeout.ts +64 -0
  371. package/src/timer/timer.ts +41 -0
  372. package/src/transport/browser/index.ts +4 -0
  373. package/src/transport/browser/message_port_socket.ts +48 -0
  374. package/src/transport/browser/shared_worker_connector.ts +21 -0
  375. package/src/transport/browser/shared_worker_listener.ts +52 -0
  376. package/src/transport/browser/worker_connector.ts +30 -0
  377. package/src/transport/browser/worker_listener.ts +53 -0
  378. package/src/transport/dispatch/create_dispatch_fn.ts +33 -0
  379. package/src/transport/dispatch/create_dispatch_proxy.ts +140 -0
  380. package/src/transport/dispatch/messages.ts +58 -0
  381. package/src/transport/index.ts +11 -0
  382. package/src/transport/interface/connector.ts +8 -0
  383. package/src/transport/interface/listener.ts +14 -0
  384. package/src/transport/interface/socket.ts +12 -0
  385. package/src/transport/interface/transferable.ts +121 -0
  386. package/src/transport/node/index.ts +2 -0
  387. package/src/transport/node/node_connector.ts +29 -0
  388. package/src/transport/node/node_connector_socket.ts +51 -0
  389. package/src/transport/node/node_listener.ts +33 -0
  390. package/src/transport/node/node_listener_socket.ts +47 -0
  391. package/src/transport/transport_client.ts +125 -0
  392. package/src/transport/transport_server.ts +108 -0
  393. package/src/types/index.ts +7 -0
  394. package/src/wasm/README.md +6 -0
  395. package/src/wasm/fixtures/gcd.wasm +0 -0
  396. package/src/wasm/fixtures/gcd.wat +27 -0
  397. package/src/wasm/index.ts +4 -0
  398. package/src/wasm/wasm/empty_wasi_sdk.ts +166 -0
  399. package/src/wasm/wasm/index.ts +1 -0
  400. package/src/wasm/wasm/wasm_module.test.ts +27 -0
  401. package/src/wasm/wasm/wasm_module.ts +257 -0
  402. package/src/wasm/worker/browser/index.ts +2 -0
  403. package/src/wasm/worker/browser/start_web_module.ts +23 -0
  404. package/src/wasm/worker/browser/web_data_store.ts +37 -0
  405. package/src/wasm/worker/browser/web_worker.ts +24 -0
  406. package/src/wasm/worker/data_store.ts +7 -0
  407. package/src/wasm/worker/index.ts +2 -0
  408. package/src/wasm/worker/node/index.ts +2 -0
  409. package/src/wasm/worker/node/node_data_store.ts +36 -0
  410. package/src/wasm/worker/node/node_worker.ts +21 -0
  411. package/src/wasm/worker/node/start_node_module.ts +28 -0
  412. package/src/wasm/worker/wasm_worker.ts +7 -0
  413. package/src/wasm/worker/worker_pool.ts +73 -0
  414. package/tsconfig.json +10 -0
@@ -0,0 +1,121 @@
1
+ const $transferable = Symbol('thread.transferable');
2
+
3
+ /**
4
+ * Represents a descriptor for transferable objects in multi-threaded environments.
5
+ * Provides a structure for marking certain objects as transferable and managing the ownership transfer
6
+ * between threads, particularly useful when working with Web Workers.
7
+ */
8
+ export interface TransferDescriptor<T = any> {
9
+ /**
10
+ * A unique symbol indicating that an object is a TransferDescriptor.
11
+ */
12
+ [$transferable]: true;
13
+ /**
14
+ * The transferable data to be sent between threads.
15
+ */
16
+ send: T;
17
+ /**
18
+ * An array of objects that can be transferred between threads without serialization and deserialization.
19
+ */
20
+ transferables: Transferable[];
21
+ }
22
+
23
+ /**
24
+ * Determines if the provided object is transferable.
25
+ * Transferable objects are instances of a certain set of classes,
26
+ * such as ArrayBuffer or MessagePort, which can be transferred between
27
+ * different execution contexts (e.g., workers) without incurring the
28
+ * overhead of serialization and deserialization.
29
+ *
30
+ * This function checks for the basic transferable criteria, but does not
31
+ * perform an exhaustive check for all possible transferable types. As new
32
+ * transferable types are added to JavaScript, they may be supported without
33
+ * needing to modify this function.
34
+ *
35
+ * @param thing - The object to check for transferability.
36
+ * @returns A boolean indicating whether the object is transferable.
37
+ */
38
+ function isTransferable(thing: any): thing is Transferable {
39
+ if (!thing || typeof thing !== 'object') return false;
40
+ // Don't check too thoroughly, since the list of transferable things in JS might grow over time
41
+ return true;
42
+ }
43
+
44
+ /**
45
+ * Determines whether a given object is a TransferDescriptor.
46
+ * A TransferDescriptor is an object with a [$transferable] property set to true and used for
47
+ * transferring ownership of transferable objects between threads.
48
+ * This function checks if the input object has the required properties to be considered
49
+ * a valid TransferDescriptor.
50
+ *
51
+ * @param thing - The object to be checked for being a TransferDescriptor.
52
+ * @returns True if the object is a TransferDescriptor, false otherwise.
53
+ */
54
+ export function isTransferDescriptor(thing: any): thing is TransferDescriptor {
55
+ return thing && typeof thing === 'object' && thing[$transferable];
56
+ }
57
+
58
+ /**
59
+ * Mark a transferable object as such, so it will no be serialized and
60
+ * deserialized on messaging with the main thread, but to transfer
61
+ * ownership of it to the receiving thread.
62
+ *
63
+ * Only works with array buffers, message ports and few more special
64
+ * types of objects, but it's much faster than serializing and
65
+ * deserializing them.
66
+ *
67
+ * Note:
68
+ * The transferable object cannot be accessed by this thread again
69
+ * unless the receiving thread transfers it back again!
70
+ *
71
+ * @param transferable - Array buffer, message port or similar.
72
+ * @see https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast
73
+ */
74
+ export function Transfer<T>(transferable: Transferable): TransferDescriptor<T>;
75
+
76
+ /**
77
+ * Mark transferable objects within an arbitrary object or array as
78
+ * being a transferable object. They will then not be serialized
79
+ * and deserialized on messaging with the main thread, but ownership
80
+ * of them will be tranferred to the receiving thread.
81
+ *
82
+ * Only array buffers, message ports and few more special types of
83
+ * objects can be transferred, but it's much faster than serializing and
84
+ * deserializing them.
85
+ *
86
+ * Note:
87
+ * The transferable object cannot be accessed by this thread again
88
+ * unless the receiving thread transfers it back again!
89
+ *
90
+ * @param transferable - Array buffer, message port or similar.
91
+ * @see https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast
92
+ */
93
+ export function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor<T>;
94
+
95
+ /**
96
+ * Create a TransferDescriptor for transferable objects within an arbitrary object or array, allowing
97
+ * them to be transferred between threads instead of being serialized and deserialized.
98
+ * This method is particularly useful when working with Web Workers and other multi-threaded environments.
99
+ * Transferable objects include ArrayBuffers, MessagePorts, and a few other special types.
100
+ * Note that after transferring, the original thread will lose access to the transferred object unless
101
+ * it's transferred back again.
102
+ *
103
+ * @param payload - The transferable object or an object containing transferable properties.
104
+ * @param transferables - Optional array of Transferable objects found in the payload. If not provided,
105
+ * the payload itself should be a Transferable object.
106
+ * @returns A TransferDescriptor<T> containing the payload and transferables, marked as transferable.
107
+ * @throws Error if payload is not transferable and transferables array is not provided.
108
+ * @see https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast
109
+ */
110
+ export function Transfer<T>(payload: T, transferables?: Transferable[]): TransferDescriptor<T> {
111
+ if (!transferables) {
112
+ if (!isTransferable(payload)) throw Error();
113
+ transferables = [payload];
114
+ }
115
+
116
+ return {
117
+ [$transferable]: true,
118
+ send: payload,
119
+ transferables,
120
+ };
121
+ }
@@ -0,0 +1,2 @@
1
+ export * from './node_connector.js';
2
+ export * from './node_listener.js';
@@ -0,0 +1,29 @@
1
+ import { Worker } from 'worker_threads';
2
+ import { Connector } from '../interface/connector.js';
3
+ import { NodeConnectorSocket } from './node_connector_socket.js';
4
+
5
+ /**
6
+ * The NodeConnector class is a concrete implementation of the Connector interface, utilizing worker_threads for
7
+ * efficient parallel execution. This class provides an easy way to establish a connection with a Worker instance,
8
+ * allowing seamless communication via sockets.
9
+ *
10
+ * @example
11
+ * const worker = new Worker('./path/to/worker.js');
12
+ * const nodeConnector = new NodeConnector(worker);
13
+ * const socket = await nodeConnector.createSocket();
14
+ * socket.send('Hello from main thread!');
15
+ */
16
+ export class NodeConnector implements Connector {
17
+ constructor(private worker: Worker) {}
18
+
19
+ /**
20
+ * Creates a new instance of NodeConnectorSocket using the worker provided in the constructor.
21
+ * The createSocket method is used to establish connections using the worker_threads module,
22
+ * allowing for efficient and fast communication between different parts of the application.
23
+ *
24
+ * @returns A Promise that resolves to a newly created NodeConnectorSocket instance.
25
+ */
26
+ createSocket() {
27
+ return Promise.resolve(new NodeConnectorSocket(this.worker));
28
+ }
29
+ }
@@ -0,0 +1,51 @@
1
+ import { TransferListItem, Worker } from 'worker_threads';
2
+ import { Socket } from '../interface/socket.js';
3
+
4
+ /**
5
+ * NodeConnectorSocket is a wrapper class that implements the Socket interface for messaging between
6
+ * the main thread and worker threads in a Node.js environment. It uses the Worker API for
7
+ * communication by sending and receiving messages through postMessage and handling messages using
8
+ * event listeners.
9
+ *
10
+ * The send method sends messages to the worker thread, and the registerHandler method registers a
11
+ * callback function to handle incoming messages from the worker. The close method cleans up
12
+ * resources when the socket is no longer needed.
13
+ */
14
+ export class NodeConnectorSocket implements Socket {
15
+ constructor(private worker: Worker) {}
16
+
17
+ /**
18
+ * Sends a message from the NodeConnectorSocket instance to the associated worker thread.
19
+ * The 'msg' can be any data type and 'transfer' is an optional array of transferable objects
20
+ * that can be transferred with zero-copy semantics. The function returns a resolved Promise
21
+ * once the message has been posted.
22
+ *
23
+ * @param msg - The message to send to the worker thread.
24
+ * @param transfer - Optional array of Transferable objects to transfer ownership alongside the message.
25
+ * @returns A Promise that resolves when the message has been posted.
26
+ */
27
+ send(msg: any, transfer: Transferable[] = []): Promise<void> {
28
+ this.worker.postMessage(msg, transfer as TransferListItem[]);
29
+ return Promise.resolve();
30
+ }
31
+
32
+ /**
33
+ * Registers a callback function to handle incoming messages from the worker.
34
+ * The provided callback will be executed whenever a message is received from
35
+ * the worker, passing the message as its single argument.
36
+ *
37
+ * @param cb - The callback function to be called when a message is received.
38
+ */
39
+ registerHandler(cb: (msg: any) => any): void {
40
+ this.worker.on('message', cb);
41
+ }
42
+
43
+ /**
44
+ * Closes the worker connection and removes all event listeners.
45
+ * Sends an undefined message to the worker for graceful termination.
46
+ */
47
+ close() {
48
+ void this.send(undefined);
49
+ this.worker.removeAllListeners();
50
+ }
51
+ }
@@ -0,0 +1,33 @@
1
+ import { parentPort } from 'worker_threads';
2
+ import EventEmitter from 'events';
3
+ import { Listener } from '../interface/listener.js';
4
+ import { NodeListenerSocket } from './node_listener_socket.js';
5
+
6
+ /**
7
+ * NodeListener is an event-driven class that extends EventEmitter and implements the Listener interface.
8
+ * It provides methods to open and close communication with a worker thread using the NodeListenerSocket.
9
+ * The 'new_socket' event is emitted when a new NodeListenerSocket instance is created, allowing for
10
+ * efficient processing of incoming messages from the parent thread.
11
+ */
12
+ export class NodeListener extends EventEmitter implements Listener {
13
+ constructor() {
14
+ super();
15
+ }
16
+
17
+ /**
18
+ * Opens a new connection to a parent worker thread and emits an event with the created NodeListenerSocket instance.
19
+ * The 'new_socket' event can be listened for, providing access to the newly created NodeListenerSocket.
20
+ *
21
+ * Fires NodeListener#new_socket.
22
+ */
23
+ open() {
24
+ this.emit('new_socket', new NodeListenerSocket(parentPort as any));
25
+ }
26
+
27
+ /**
28
+ * Closes the NodeListener instance.
29
+ * This method currently has no implementation, as there is no need to perform any actions
30
+ * when closing a NodeListener. It exists for compatibility with the Listener interface.
31
+ */
32
+ close() {}
33
+ }
@@ -0,0 +1,47 @@
1
+ import { MessagePort, TransferListItem } from 'worker_threads';
2
+ import { Socket } from '../interface/socket.js';
3
+
4
+ /**
5
+ * An implementation of a TransportSocket using MessagePorts.
6
+ */
7
+ export class NodeListenerSocket implements Socket {
8
+ constructor(private port: MessagePort) {}
9
+
10
+ /**
11
+ * Sends a message through the MessagePort along with any provided Transferables.
12
+ * The transfer list allows for efficient sending of certain types of data,
13
+ * such as ArrayBuffer, ImageBitmap, and MessagePort.
14
+ * The Promise resolves once the message has been successfully sent.
15
+ *
16
+ * @param msg - The message to be sent through the MessagePort.
17
+ * @param transfer - An optional array of Transferable objects to be transferred.
18
+ * @returns A Promise that resolves once the message has been sent.
19
+ */
20
+ send(msg: any, transfer: Transferable[] = []): Promise<void> {
21
+ this.port.postMessage(msg, transfer as TransferListItem[]);
22
+ return Promise.resolve();
23
+ }
24
+
25
+ /**
26
+ * Registers a callback function to handle incoming messages from the MessagePort.
27
+ * When a message is received, the provided callback function will be invoked with
28
+ * the received message as its argument. This method allows for efficient and
29
+ * dynamic handling of incoming data in a NodeListenerSocket instance.
30
+ *
31
+ * @param cb - The callback function to process incoming messages.
32
+ */
33
+ registerHandler(cb: (msg: any) => any): void {
34
+ this.port.on('message', cb);
35
+ }
36
+
37
+ /**
38
+ * Closes the NodeListenerSocket instance, removing all listeners and closing the underlying MessagePort.
39
+ * Sends an undefined message to notify any connected ports about the closure before removing event listeners
40
+ * and cleaning up resources. This method should be called when the socket is no longer needed to avoid memory leaks.
41
+ */
42
+ close() {
43
+ void this.send(undefined);
44
+ this.port.removeAllListeners();
45
+ this.port.close();
46
+ }
47
+ }
@@ -0,0 +1,125 @@
1
+ import EventEmitter from 'events';
2
+ import { EventMessage, isEventMessage, ResponseMessage } from './dispatch/messages.js';
3
+ import { Connector } from './interface/connector.js';
4
+ import { Socket } from './interface/socket.js';
5
+ import { createDebugLogger } from '../log/index.js';
6
+
7
+ const debug = createDebugLogger('aztec:transport_client');
8
+
9
+ /**
10
+ * Represents a pending request in the TransportClient.
11
+ * Contains information about the message ID, and resolve/reject functions for handling responses.
12
+ * Used to track and manage asynchronous request/response communication with the TransportServer.
13
+ */
14
+ interface PendingRequest {
15
+ /**
16
+ * The unique message identifier used for tracking and matching request/response pairs.
17
+ */
18
+ msgId: number;
19
+ resolve(data: any): void;
20
+ reject(error: Error): void;
21
+ }
22
+
23
+ /**
24
+ * Represents a transport client for communication between TransportServer and clients.
25
+ * Provides request/response functionality, event handling, and multiplexing support
26
+ * for efficient and concurrent communication with a corresponding TransportServer.
27
+ */
28
+ export interface TransportClient<Payload> extends EventEmitter {
29
+ on(name: 'event_msg', handler: (payload: Payload) => void): this;
30
+ emit(name: 'event_msg', payload: Payload): boolean;
31
+ }
32
+
33
+ /**
34
+ * A TransportClient provides a request/response and event api to a corresponding TransportServer.
35
+ * If `broadcast` is called on TransportServer, TransportClients will emit an `event_msg`.
36
+ * The `request` method will block until a response is returned from the TransportServer's dispatch function.
37
+ * Request multiplexing is supported.
38
+ */
39
+ export class TransportClient<Payload> extends EventEmitter {
40
+ private msgId = 0;
41
+ private pendingRequests: PendingRequest[] = [];
42
+ private socket?: Socket;
43
+
44
+ constructor(private transportConnect: Connector) {
45
+ super();
46
+ }
47
+
48
+ /**
49
+ * Initializes and opens the socket connection for the TransportClient.
50
+ * This method creates a new Socket instance using the provided Connector,
51
+ * registers a handler for incoming messages, and establishes the connection.
52
+ * It should be called before making any requests or handling events.
53
+ *
54
+ * @throws An error if the socket is already open or there's an issue opening the connection.
55
+ * @returns A Promise that resolves when the socket connection is successfully opened.
56
+ */
57
+ async open() {
58
+ this.socket = await this.transportConnect.createSocket();
59
+ this.socket.registerHandler(msg => this.handleSocketMessage(msg));
60
+ }
61
+
62
+ /**
63
+ * Close the transport client's socket connection and remove all event listeners.
64
+ * This method should be called when the client is no longer needed to ensure proper cleanup
65
+ * and prevent potential memory leaks. Once closed, the client cannot be reused and a new
66
+ * instance must be created if another connection is needed.
67
+ */
68
+ close() {
69
+ this.socket?.close();
70
+ this.socket = undefined;
71
+ this.removeAllListeners();
72
+ }
73
+
74
+ /**
75
+ * Sends a request to the TransportServer with the given payload and transferable objects.
76
+ * The method will block until a response from the TransportServer's dispatch function is returned.
77
+ * Request multiplexing is supported, allowing multiple requests to be sent concurrently.
78
+ *
79
+ * @param payload - The message payload to send to the server.
80
+ * @param transfer - An optional array of ArrayBuffer, MessagePort, or ImageBitmap objects to transfer ownership.
81
+ * @returns A Promise that resolves with the server's response data or rejects with an error message.
82
+ */
83
+ request(payload: Payload, transfer?: Transferable[]) {
84
+ if (!this.socket) {
85
+ throw new Error('Socket not open.');
86
+ }
87
+ const msgId = this.msgId++;
88
+ const msg = { msgId, payload };
89
+ debug(`->`, msg);
90
+ return new Promise<any>((resolve, reject) => {
91
+ this.pendingRequests.push({ resolve, reject, msgId });
92
+ this.socket!.send(msg, transfer).catch(reject);
93
+ });
94
+ }
95
+
96
+ /**
97
+ * Handles incoming socket messages from the TransportServer, such as ResponseMessage and EventMessage.
98
+ * If it's an EventMessage, emits an 'event_msg' event with the payload.
99
+ * If it's a ResponseMessage, resolves or rejects the corresponding pending request based on the message content.
100
+ *
101
+ * @param msg - The ResponseMessage or EventMessage received from the TransportServer, or undefined if the remote socket closed.
102
+ */
103
+ private handleSocketMessage(msg: ResponseMessage<Payload> | EventMessage<Payload> | undefined) {
104
+ if (msg === undefined) {
105
+ // The remote socket closed.
106
+ this.close();
107
+ return;
108
+ }
109
+ debug(`<-`, msg);
110
+ if (isEventMessage(msg)) {
111
+ this.emit('event_msg', msg.payload);
112
+ return;
113
+ }
114
+ const reqIndex = this.pendingRequests.findIndex(r => r.msgId === msg.msgId);
115
+ if (reqIndex === -1) {
116
+ return;
117
+ }
118
+ const [pending] = this.pendingRequests.splice(reqIndex, 1);
119
+ if (msg.error) {
120
+ pending.reject(new Error(msg.error));
121
+ } else {
122
+ pending.resolve(msg.payload);
123
+ }
124
+ }
125
+ }
@@ -0,0 +1,108 @@
1
+ import { RequestMessage, ResponseMessage } from './dispatch/messages.js';
2
+ import { Listener } from './interface/listener.js';
3
+ import { Socket } from './interface/socket.js';
4
+ import { isTransferDescriptor } from './interface/transferable.js';
5
+
6
+ /**
7
+ * Keeps track of clients, providing a broadcast, and request/response api with multiplexing.
8
+ */
9
+ export class TransportServer<Payload> {
10
+ private sockets: Socket[] = [];
11
+
12
+ constructor(private listener: Listener, private msgHandlerFn: (msg: Payload) => Promise<any>) {}
13
+
14
+ /**
15
+ * Starts the TransportServer, allowing it to accept new connections and handle incoming messages.
16
+ * The server will listen for 'new_socket' events from the underlying listener and invoke the provided message handler function
17
+ * for each received message. The server remains active until the 'stop' method is called.
18
+ */
19
+ start() {
20
+ this.listener.on('new_socket', client => this.handleNewSocket(client));
21
+ this.listener.open();
22
+ }
23
+
24
+ /**
25
+ * Stops accepting new connections. It doesn't close existing sockets.
26
+ * It's expected the clients will gracefully complete by closing their end, sending an `undefined` message.
27
+ */
28
+ stop() {
29
+ this.listener.close();
30
+ }
31
+
32
+ /**
33
+ * Sends a broadcast message to all connected clients.
34
+ * The given payload will be sent to all the clients currently connected to the TransportServer.
35
+ * It waits for all the messages to be sent and resolves when they are all sent successfully.
36
+ *
37
+ * @param msg - The payload to broadcast to all connected clients.
38
+ * @returns A Promise that resolves when all messages have been sent successfully.
39
+ */
40
+ async broadcast(msg: Payload) {
41
+ await Promise.all(this.sockets.map(s => s.send({ payload: msg })));
42
+ }
43
+
44
+ /**
45
+ * Handles the addition of a new socket to the server by registering a message handler for the client
46
+ * and adding the socket to the list of active sockets. The message handler processes incoming messages
47
+ * from the client, including detecting client disconnection and removing the closed socket.
48
+ *
49
+ * @param socket - The new Socket instance that has connected to the server.
50
+ */
51
+ private handleNewSocket(socket: Socket) {
52
+ socket.registerHandler(async msg => {
53
+ if (msg === undefined) {
54
+ // Client socket has closed. Remove it from the list of sockets. Call close on it for any cleanup.
55
+ const socketIndex = this.sockets.findIndex(s => s === socket);
56
+ const [closingSocket] = this.sockets.splice(socketIndex, 1);
57
+ closingSocket.close();
58
+ return;
59
+ }
60
+ return await this.handleSocketMessage(socket, msg);
61
+ });
62
+ this.sockets.push(socket);
63
+ }
64
+
65
+ /**
66
+ * Detect the 'transferables' argument to our socket from our message
67
+ * handler return type.
68
+ * @param data - The compound payload data.
69
+ * @returns The split data and transferables.
70
+ */
71
+ private getPayloadAndTransfers(data: any): [any, Transferable[]] {
72
+ if (isTransferDescriptor(data)) {
73
+ // We treat PayloadWithTransfers specially so that we're able to
74
+ // attach transferables while keeping a simple return-type based usage
75
+ return [data.send, data.transferables];
76
+ }
77
+ if (data instanceof Uint8Array) {
78
+ // We may want to devise a better solution to this. We maybe given a view over a non cloneable/transferrable
79
+ // ArrayBuffer (such as a view over wasm memory). In this case we want to take a copy, and then transfer it.
80
+ const respPayload = data instanceof Uint8Array && ArrayBuffer.isView(data) ? new Uint8Array(data) : data;
81
+ const transferables = data instanceof Uint8Array ? [respPayload.buffer] : [];
82
+ return [respPayload, transferables];
83
+ }
84
+ return [data, []];
85
+ }
86
+ /**
87
+ * Handles incoming socket messages, processing the request and sending back a response.
88
+ * This function is responsible for invoking the registered message handler function with the received
89
+ * payload, extracting the result and transferables, and sending a response message back to the client.
90
+ * In case of an error during message handling, it sends an error response with the stack trace.
91
+ *
92
+ * @param socket - The Socket instance from which the message was received.
93
+ * @param msg - The RequestMessage object containing the message ID and payload.
94
+ */
95
+ private async handleSocketMessage(socket: Socket, { msgId, payload }: RequestMessage<Payload>) {
96
+ try {
97
+ const data = await this.msgHandlerFn(payload);
98
+
99
+ const [respPayload, transferables] = this.getPayloadAndTransfers(data);
100
+ const rep: ResponseMessage<Payload> = { msgId, payload: respPayload };
101
+
102
+ await socket.send(rep, transferables);
103
+ } catch (err: any) {
104
+ const rep: ResponseMessage<Payload> = { msgId, error: err.stack };
105
+ await socket.send(rep);
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Strips methods of a type.
3
+ */
4
+ export type FieldsOf<T> = {
5
+ // eslint-disable-next-line @typescript-eslint/ban-types
6
+ [P in keyof T as T[P] extends Function ? never : P]: T[P];
7
+ };
@@ -0,0 +1,6 @@
1
+ # wasm
2
+
3
+ Functionality to:
4
+
5
+ 1. Call WebAssembly functions
6
+ 2. Create asynchronous workers that host webassembly.
Binary file
@@ -0,0 +1,27 @@
1
+ (module
2
+ (func $gcd (param i32 i32) (result i32)
3
+ (local i32)
4
+ block ;; label = @1
5
+ block ;; label = @2
6
+ local.get 0
7
+ br_if 0 (;@2;)
8
+ local.get 1
9
+ local.set 2
10
+ br 1 (;@1;)
11
+ end
12
+ loop ;; label = @2
13
+ local.get 1
14
+ local.get 0
15
+ local.tee 2
16
+ i32.rem_u
17
+ local.set 0
18
+ local.get 2
19
+ local.set 1
20
+ local.get 0
21
+ br_if 0 (;@2;)
22
+ end
23
+ end
24
+ local.get 2
25
+ )
26
+ (export "gcd" (func $gcd))
27
+ )
@@ -0,0 +1,4 @@
1
+ export { WebDataStore } from './worker/browser/index.js';
2
+ export { NodeDataStore } from './worker/node/index.js';
3
+ export { WasmWorker, WorkerPool } from './worker/index.js';
4
+ export { WasmModule, IWasmModule } from './wasm/index.js';