zeed 1.3.0 → 1.4.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.
Files changed (575) hide show
  1. package/AGENTS.md +50 -211
  2. package/README.md +16 -0
  3. package/dist/_experiments/bitcask.cjs +243 -1
  4. package/dist/_experiments/bitcask.cjs.map +1 -1
  5. package/dist/_experiments/bitcask.mjs +230 -1
  6. package/dist/_experiments/bitcask.mjs.map +1 -1
  7. package/dist/bin-BAoS4qtm.mjs +593 -0
  8. package/dist/{bin-SPdenYkw.mjs.map → bin-BAoS4qtm.mjs.map} +1 -1
  9. package/dist/bin-Ddaz2lxM.cjs +862 -0
  10. package/dist/{bin-Ce3i6ABn.cjs.map → bin-Ddaz2lxM.cjs.map} +1 -1
  11. package/dist/browser/base64.cjs +14 -1
  12. package/dist/browser/base64.cjs.map +1 -1
  13. package/dist/browser/base64.mjs +12 -1
  14. package/dist/browser/base64.mjs.map +1 -1
  15. package/dist/browser/gravatar.cjs +186 -1
  16. package/dist/browser/gravatar.cjs.map +1 -1
  17. package/dist/browser/gravatar.mjs +184 -1
  18. package/dist/browser/gravatar.mjs.map +1 -1
  19. package/dist/browser/index.cjs +14 -1
  20. package/dist/browser/index.mjs +8 -1
  21. package/dist/browser/localstorage.cjs +46 -1
  22. package/dist/browser/localstorage.cjs.map +1 -1
  23. package/dist/browser/localstorage.mjs +45 -1
  24. package/dist/browser/localstorage.mjs.map +1 -1
  25. package/dist/browser/log/index.cjs +8 -1
  26. package/dist/browser/log/index.mjs +5 -1
  27. package/dist/browser/log/log-browser-factory.cjs +65 -1
  28. package/dist/browser/log/log-browser-factory.cjs.map +1 -1
  29. package/dist/browser/log/log-browser-factory.mjs +64 -1
  30. package/dist/browser/log/log-browser-factory.mjs.map +1 -1
  31. package/dist/browser/log/log-browser.cjs +72 -1
  32. package/dist/browser/log/log-browser.cjs.map +1 -1
  33. package/dist/browser/log/log-browser.mjs +71 -1
  34. package/dist/browser/log/log-browser.mjs.map +1 -1
  35. package/dist/browser/log/log-colors.cjs +11 -1
  36. package/dist/browser/log/log-colors.cjs.map +1 -1
  37. package/dist/browser/log/log-colors.mjs +9 -1
  38. package/dist/browser/log/log-colors.mjs.map +1 -1
  39. package/dist/browser/log/log-context-browser.cjs +25 -1
  40. package/dist/browser/log/log-context-browser.cjs.map +1 -1
  41. package/dist/browser/log/log-context-browser.mjs +23 -1
  42. package/dist/browser/log/log-context-browser.mjs.map +1 -1
  43. package/dist/chunk-DQk6qfdC.mjs +18 -0
  44. package/dist/chunk-uaV2rQ02.cjs +53 -0
  45. package/dist/common/assert.cjs +22 -1
  46. package/dist/common/assert.cjs.map +1 -1
  47. package/dist/common/assert.mjs +19 -1
  48. package/dist/common/assert.mjs.map +1 -1
  49. package/dist/common/bin/index.cjs +106 -1
  50. package/dist/common/bin/index.cjs.map +1 -1
  51. package/dist/common/bin/index.mjs +98 -1
  52. package/dist/common/bin/index.mjs.map +1 -1
  53. package/dist/common/bin/lib0/binary.cjs +146 -1
  54. package/dist/common/bin/lib0/binary.cjs.map +1 -1
  55. package/dist/common/bin/lib0/binary.mjs +80 -1
  56. package/dist/common/bin/lib0/binary.mjs.map +1 -1
  57. package/dist/common/bin/lib0/buffer.cjs +42 -1
  58. package/dist/common/bin/lib0/buffer.cjs.map +1 -1
  59. package/dist/common/bin/lib0/buffer.mjs +38 -1
  60. package/dist/common/bin/lib0/buffer.mjs.map +1 -1
  61. package/dist/common/bin/lib0/create.cjs +24 -1
  62. package/dist/common/bin/lib0/create.cjs.map +1 -1
  63. package/dist/common/bin/lib0/create.mjs +21 -1
  64. package/dist/common/bin/lib0/create.mjs.map +1 -1
  65. package/dist/common/bin/lib0/decoding.cjs +325 -1
  66. package/dist/common/bin/lib0/decoding.cjs.map +1 -1
  67. package/dist/common/bin/lib0/decoding.mjs +298 -1
  68. package/dist/common/bin/lib0/decoding.mjs.map +1 -1
  69. package/dist/common/bin/lib0/encoding.cjs +404 -1
  70. package/dist/common/bin/lib0/encoding.cjs.map +1 -1
  71. package/dist/common/bin/lib0/encoding.mjs +377 -1
  72. package/dist/common/bin/lib0/encoding.mjs.map +1 -1
  73. package/dist/common/bin/lib0/string.cjs +81 -1
  74. package/dist/common/bin/lib0/string.cjs.map +1 -1
  75. package/dist/common/bin/lib0/string.mjs +71 -1
  76. package/dist/common/bin/lib0/string.mjs.map +1 -1
  77. package/dist/common/crypto/aes-sealed.cjs +34 -1
  78. package/dist/common/crypto/aes-sealed.cjs.map +1 -1
  79. package/dist/common/crypto/aes-sealed.mjs +32 -1
  80. package/dist/common/crypto/aes-sealed.mjs.map +1 -1
  81. package/dist/common/crypto/crypto.cjs +91 -1
  82. package/dist/common/crypto/crypto.cjs.map +1 -1
  83. package/dist/common/crypto/crypto.mjs +80 -1
  84. package/dist/common/crypto/crypto.mjs.map +1 -1
  85. package/dist/common/crypto/index.cjs +23 -1
  86. package/dist/common/crypto/index.mjs +5 -1
  87. package/dist/common/crypto/xaes.cjs +128 -1
  88. package/dist/common/crypto/xaes.cjs.map +1 -1
  89. package/dist/common/crypto/xaes.mjs +123 -1
  90. package/dist/common/crypto/xaes.mjs.map +1 -1
  91. package/dist/common/csv.cjs +49 -4
  92. package/dist/common/csv.cjs.map +1 -1
  93. package/dist/common/csv.mjs +46 -4
  94. package/dist/common/csv.mjs.map +1 -1
  95. package/dist/common/data/array.cjs +299 -1
  96. package/dist/common/data/array.cjs.map +1 -1
  97. package/dist/common/data/array.mjs +274 -1
  98. package/dist/common/data/array.mjs.map +1 -1
  99. package/dist/common/data/basex-secure.cjs +30 -1
  100. package/dist/common/data/basex-secure.mjs +3 -1
  101. package/dist/common/data/basex.cjs +163 -1
  102. package/dist/common/data/basex.cjs.map +1 -1
  103. package/dist/common/data/basex.mjs +152 -1
  104. package/dist/common/data/basex.mjs.map +1 -1
  105. package/dist/common/data/bin-types.mjs +1 -1
  106. package/dist/common/data/bin.cjs +21 -1
  107. package/dist/common/data/bin.mjs +3 -1
  108. package/dist/common/data/camelcase.cjs +27 -1
  109. package/dist/common/data/camelcase.cjs.map +1 -1
  110. package/dist/common/data/camelcase.mjs +22 -1
  111. package/dist/common/data/camelcase.mjs.map +1 -1
  112. package/dist/common/data/convert.cjs +104 -1
  113. package/dist/common/data/convert.cjs.map +1 -1
  114. package/dist/common/data/convert.mjs +88 -1
  115. package/dist/common/data/convert.mjs.map +1 -1
  116. package/dist/common/data/datauri.cjs +32 -1
  117. package/dist/common/data/datauri.cjs.map +1 -1
  118. package/dist/common/data/datauri.mjs +27 -1
  119. package/dist/common/data/datauri.mjs.map +1 -1
  120. package/dist/common/data/day-legacy.cjs +148 -1
  121. package/dist/common/data/day-legacy.cjs.map +1 -1
  122. package/dist/common/data/day-legacy.mjs +143 -1
  123. package/dist/common/data/day-legacy.mjs.map +1 -1
  124. package/dist/common/data/day.cjs +335 -1
  125. package/dist/common/data/day.cjs.map +1 -1
  126. package/dist/common/data/day.mjs +305 -1
  127. package/dist/common/data/day.mjs.map +1 -1
  128. package/dist/common/data/decimal.cjs +28 -1
  129. package/dist/common/data/decimal.cjs.map +1 -1
  130. package/dist/common/data/decimal.mjs +23 -1
  131. package/dist/common/data/decimal.mjs.map +1 -1
  132. package/dist/common/data/deep.cjs +57 -1
  133. package/dist/common/data/deep.cjs.map +1 -1
  134. package/dist/common/data/deep.mjs +54 -1
  135. package/dist/common/data/deep.mjs.map +1 -1
  136. package/dist/common/data/diff.cjs +62 -1
  137. package/dist/common/data/diff.cjs.map +1 -1
  138. package/dist/common/data/diff.mjs +60 -1
  139. package/dist/common/data/diff.mjs.map +1 -1
  140. package/dist/common/data/distributed.cjs +24 -1
  141. package/dist/common/data/distributed.cjs.map +1 -1
  142. package/dist/common/data/distributed.mjs +22 -1
  143. package/dist/common/data/distributed.mjs.map +1 -1
  144. package/dist/common/data/format.cjs +63 -1
  145. package/dist/common/data/format.cjs.map +1 -1
  146. package/dist/common/data/format.mjs +59 -1
  147. package/dist/common/data/format.mjs.map +1 -1
  148. package/dist/common/data/html.cjs +13 -1
  149. package/dist/common/data/html.cjs.map +1 -1
  150. package/dist/common/data/html.mjs +10 -1
  151. package/dist/common/data/html.mjs.map +1 -1
  152. package/dist/common/data/index.cjs +296 -1
  153. package/dist/common/data/index.mjs +37 -1
  154. package/dist/common/data/is.cjs +106 -1
  155. package/dist/common/data/is.cjs.map +1 -1
  156. package/dist/common/data/is.mjs +85 -1
  157. package/dist/common/data/is.mjs.map +1 -1
  158. package/dist/common/data/json.cjs +70 -1
  159. package/dist/common/data/json.cjs.map +1 -1
  160. package/dist/common/data/json.mjs +65 -1
  161. package/dist/common/data/json.mjs.map +1 -1
  162. package/dist/common/data/list.cjs +32 -1
  163. package/dist/common/data/list.cjs.map +1 -1
  164. package/dist/common/data/list.mjs +27 -1
  165. package/dist/common/data/list.mjs.map +1 -1
  166. package/dist/common/data/lru.mjs +1 -1
  167. package/dist/common/data/math.cjs +79 -1
  168. package/dist/common/data/math.cjs.map +1 -1
  169. package/dist/common/data/math.mjs +65 -1
  170. package/dist/common/data/math.mjs.map +1 -1
  171. package/dist/common/data/message.cjs +30 -1
  172. package/dist/common/data/message.cjs.map +1 -1
  173. package/dist/common/data/message.mjs +28 -1
  174. package/dist/common/data/message.mjs.map +1 -1
  175. package/dist/common/data/object-changes.cjs +66 -1
  176. package/dist/common/data/object-changes.cjs.map +1 -1
  177. package/dist/common/data/object-changes.mjs +63 -1
  178. package/dist/common/data/object-changes.mjs.map +1 -1
  179. package/dist/common/data/object.cjs +112 -1
  180. package/dist/common/data/object.cjs.map +1 -1
  181. package/dist/common/data/object.mjs +104 -1
  182. package/dist/common/data/object.mjs.map +1 -1
  183. package/dist/common/data/orderby.cjs +42 -1
  184. package/dist/common/data/orderby.cjs.map +1 -1
  185. package/dist/common/data/orderby.mjs +37 -1
  186. package/dist/common/data/orderby.mjs.map +1 -1
  187. package/dist/common/data/path.cjs +26 -1
  188. package/dist/common/data/path.cjs.map +1 -1
  189. package/dist/common/data/path.mjs +25 -1
  190. package/dist/common/data/path.mjs.map +1 -1
  191. package/dist/common/data/regexp.cjs +12 -1
  192. package/dist/common/data/regexp.cjs.map +1 -1
  193. package/dist/common/data/regexp.mjs +10 -1
  194. package/dist/common/data/regexp.mjs.map +1 -1
  195. package/dist/common/data/rounding.cjs +107 -1
  196. package/dist/common/data/rounding.cjs.map +1 -1
  197. package/dist/common/data/rounding.mjs +95 -1
  198. package/dist/common/data/rounding.mjs.map +1 -1
  199. package/dist/common/data/signal.cjs +39 -1
  200. package/dist/common/data/signal.cjs.map +1 -1
  201. package/dist/common/data/signal.mjs +38 -1
  202. package/dist/common/data/signal.mjs.map +1 -1
  203. package/dist/common/data/sortable.cjs +35 -1
  204. package/dist/common/data/sortable.cjs.map +1 -1
  205. package/dist/common/data/sortable.mjs +31 -1
  206. package/dist/common/data/sortable.mjs.map +1 -1
  207. package/dist/common/data/sorted.cjs +54 -1
  208. package/dist/common/data/sorted.cjs.map +1 -1
  209. package/dist/common/data/sorted.mjs +53 -1
  210. package/dist/common/data/sorted.mjs.map +1 -1
  211. package/dist/common/data/string-deburr.cjs +240 -1
  212. package/dist/common/data/string-deburr.cjs.map +1 -1
  213. package/dist/common/data/string-deburr.mjs +238 -1
  214. package/dist/common/data/string-deburr.mjs.map +1 -1
  215. package/dist/common/data/string-hash-fnv.cjs +69 -1
  216. package/dist/common/data/string-hash-fnv.cjs.map +1 -1
  217. package/dist/common/data/string-hash-fnv.mjs +67 -1
  218. package/dist/common/data/string-hash-fnv.mjs.map +1 -1
  219. package/dist/common/data/string-hash-pool.cjs +28 -1
  220. package/dist/common/data/string-hash-pool.cjs.map +1 -1
  221. package/dist/common/data/string-hash-pool.mjs +27 -1
  222. package/dist/common/data/string-hash-pool.mjs.map +1 -1
  223. package/dist/common/data/url.cjs +98 -2
  224. package/dist/common/data/url.cjs.map +1 -1
  225. package/dist/common/data/url.mjs +91 -2
  226. package/dist/common/data/url.mjs.map +1 -1
  227. package/dist/common/data/utils.cjs +118 -1
  228. package/dist/common/data/utils.cjs.map +1 -1
  229. package/dist/common/data/utils.mjs +107 -1
  230. package/dist/common/data/utils.mjs.map +1 -1
  231. package/dist/common/data/wordlist.cjs +531 -1
  232. package/dist/common/data/wordlist.cjs.map +1 -1
  233. package/dist/common/data/wordlist.mjs +529 -1
  234. package/dist/common/data/wordlist.mjs.map +1 -1
  235. package/dist/common/data/xrx.cjs +96 -1
  236. package/dist/common/data/xrx.cjs.map +1 -1
  237. package/dist/common/data/xrx.mjs +92 -1
  238. package/dist/common/data/xrx.mjs.map +1 -1
  239. package/dist/common/dispose-defer.cjs +133 -1
  240. package/dist/common/dispose-defer.cjs.map +1 -1
  241. package/dist/common/dispose-defer.mjs +130 -1
  242. package/dist/common/dispose-defer.mjs.map +1 -1
  243. package/dist/common/dispose-types.mjs +1 -1
  244. package/dist/common/dispose-utils.cjs +113 -1
  245. package/dist/common/dispose-utils.cjs.map +1 -1
  246. package/dist/common/dispose-utils.mjs +106 -1
  247. package/dist/common/dispose-utils.mjs.map +1 -1
  248. package/dist/common/exec/index.cjs +24 -1
  249. package/dist/common/exec/index.d.cts +1 -1
  250. package/dist/common/exec/index.d.mts +1 -1
  251. package/dist/common/exec/index.mjs +8 -1
  252. package/dist/common/exec/mutex.cjs +44 -1
  253. package/dist/common/exec/mutex.cjs.map +1 -1
  254. package/dist/common/exec/mutex.mjs +42 -1
  255. package/dist/common/exec/mutex.mjs.map +1 -1
  256. package/dist/common/exec/pool.cjs +181 -1
  257. package/dist/common/exec/pool.cjs.map +1 -1
  258. package/dist/common/exec/pool.d.cts +1 -1
  259. package/dist/common/exec/pool.d.mts +1 -1
  260. package/dist/common/exec/pool.mjs +180 -1
  261. package/dist/common/exec/pool.mjs.map +1 -1
  262. package/dist/common/exec/progress.cjs +149 -1
  263. package/dist/common/exec/progress.cjs.map +1 -1
  264. package/dist/common/exec/progress.d.cts +1 -1
  265. package/dist/common/exec/progress.d.mts +1 -1
  266. package/dist/common/exec/progress.mjs +148 -1
  267. package/dist/common/exec/progress.mjs.map +1 -1
  268. package/dist/common/exec/promise.cjs +113 -1
  269. package/dist/common/exec/promise.cjs.map +1 -1
  270. package/dist/common/exec/promise.mjs +103 -1
  271. package/dist/common/exec/promise.mjs.map +1 -1
  272. package/dist/common/exec/queue.cjs +125 -1
  273. package/dist/common/exec/queue.cjs.map +1 -1
  274. package/dist/common/exec/queue.d.cts +1 -1
  275. package/dist/common/exec/queue.d.mts +1 -1
  276. package/dist/common/exec/queue.mjs +124 -1
  277. package/dist/common/exec/queue.mjs.map +1 -1
  278. package/dist/common/exec/throttle-debounce.cjs +114 -1
  279. package/dist/common/exec/throttle-debounce.cjs.map +1 -1
  280. package/dist/common/exec/throttle-debounce.mjs +112 -1
  281. package/dist/common/exec/throttle-debounce.mjs.map +1 -1
  282. package/dist/common/global.cjs +22 -1
  283. package/dist/common/global.cjs.map +1 -1
  284. package/dist/common/global.mjs +19 -1
  285. package/dist/common/global.mjs.map +1 -1
  286. package/dist/common/index.cjs +559 -1
  287. package/dist/common/index.d.cts +1 -1
  288. package/dist/common/index.d.mts +1 -1
  289. package/dist/common/index.mjs +89 -1
  290. package/dist/common/localhost.cjs +16 -1
  291. package/dist/common/localhost.cjs.map +1 -1
  292. package/dist/common/localhost.mjs +14 -1
  293. package/dist/common/localhost.mjs.map +1 -1
  294. package/dist/common/log/index.cjs +34 -1
  295. package/dist/common/log/index.mjs +11 -1
  296. package/dist/common/log/log-base.cjs +40 -1
  297. package/dist/common/log/log-base.cjs.map +1 -1
  298. package/dist/common/log/log-base.mjs +31 -1
  299. package/dist/common/log/log-base.mjs.map +1 -1
  300. package/dist/common/log/log-colors.cjs +92 -1
  301. package/dist/common/log/log-colors.cjs.map +1 -1
  302. package/dist/common/log/log-colors.mjs +90 -1
  303. package/dist/common/log/log-colors.mjs.map +1 -1
  304. package/dist/common/log/log-config.cjs +15 -1
  305. package/dist/common/log/log-config.cjs.map +1 -1
  306. package/dist/common/log/log-config.mjs +14 -1
  307. package/dist/common/log/log-config.mjs.map +1 -1
  308. package/dist/common/log/log-console-capture.cjs +33 -1
  309. package/dist/common/log/log-console-capture.cjs.map +1 -1
  310. package/dist/common/log/log-console-capture.mjs +32 -1
  311. package/dist/common/log/log-console-capture.mjs.map +1 -1
  312. package/dist/common/log/log-console-original.cjs +27 -1
  313. package/dist/common/log/log-console-original.cjs.map +1 -1
  314. package/dist/common/log/log-console-original.mjs +26 -1
  315. package/dist/common/log/log-console-original.mjs.map +1 -1
  316. package/dist/common/log/log-console.cjs +39 -1
  317. package/dist/common/log/log-console.cjs.map +1 -1
  318. package/dist/common/log/log-console.mjs +38 -1
  319. package/dist/common/log/log-console.mjs.map +1 -1
  320. package/dist/common/log/log-context.cjs +109 -1
  321. package/dist/common/log/log-context.cjs.map +1 -1
  322. package/dist/common/log/log-context.mjs +108 -1
  323. package/dist/common/log/log-context.mjs.map +1 -1
  324. package/dist/common/log/log-filter.cjs +80 -1
  325. package/dist/common/log/log-filter.cjs.map +1 -1
  326. package/dist/common/log/log-filter.mjs +75 -1
  327. package/dist/common/log/log-filter.mjs.map +1 -1
  328. package/dist/common/log/log-memory.cjs +45 -1
  329. package/dist/common/log/log-memory.cjs.map +1 -1
  330. package/dist/common/log/log-memory.mjs +43 -1
  331. package/dist/common/log/log-memory.mjs.map +1 -1
  332. package/dist/common/log/log-noop.cjs +17 -1
  333. package/dist/common/log/log-noop.cjs.map +1 -1
  334. package/dist/common/log/log-noop.mjs +15 -1
  335. package/dist/common/log/log-noop.mjs.map +1 -1
  336. package/dist/common/log/log.cjs +46 -1
  337. package/dist/common/log/log.cjs.map +1 -1
  338. package/dist/common/log/log.mjs +43 -1
  339. package/dist/common/log/log.mjs.map +1 -1
  340. package/dist/common/msg/channel-debug.cjs +17 -1
  341. package/dist/common/msg/channel-debug.cjs.map +1 -1
  342. package/dist/common/msg/channel-debug.d.cts +1 -1
  343. package/dist/common/msg/channel-debug.d.mts +1 -1
  344. package/dist/common/msg/channel-debug.mjs +16 -1
  345. package/dist/common/msg/channel-debug.mjs.map +1 -1
  346. package/dist/common/msg/channel-local.cjs +28 -1
  347. package/dist/common/msg/channel-local.cjs.map +1 -1
  348. package/dist/common/msg/channel-local.d.cts +1 -1
  349. package/dist/common/msg/channel-local.d.mts +1 -1
  350. package/dist/common/msg/channel-local.mjs +26 -1
  351. package/dist/common/msg/channel-local.mjs.map +1 -1
  352. package/dist/common/msg/channel-resilient.cjs +63 -1
  353. package/dist/common/msg/channel-resilient.cjs.map +1 -1
  354. package/dist/common/msg/channel-resilient.d.cts +1 -1
  355. package/dist/common/msg/channel-resilient.d.mts +1 -1
  356. package/dist/common/msg/channel-resilient.mjs +62 -1
  357. package/dist/common/msg/channel-resilient.mjs.map +1 -1
  358. package/dist/common/msg/channel-wkwebview.cjs +35 -1
  359. package/dist/common/msg/channel-wkwebview.cjs.map +1 -1
  360. package/dist/common/msg/channel-wkwebview.d.cts +2 -1
  361. package/dist/common/msg/channel-wkwebview.d.mts +2 -1
  362. package/dist/common/msg/channel-wkwebview.mjs +34 -1
  363. package/dist/common/msg/channel-wkwebview.mjs.map +1 -1
  364. package/dist/common/msg/channel.cjs +23 -1
  365. package/dist/common/msg/channel.cjs.map +1 -1
  366. package/dist/common/msg/channel.d.cts +1 -1
  367. package/dist/common/msg/channel.d.mts +1 -1
  368. package/dist/common/msg/channel.mjs +22 -1
  369. package/dist/common/msg/channel.mjs.map +1 -1
  370. package/dist/common/msg/emitter.cjs +141 -1
  371. package/dist/common/msg/emitter.cjs.map +1 -1
  372. package/dist/common/msg/emitter.d.cts +1 -1
  373. package/dist/common/msg/emitter.d.mts +1 -1
  374. package/dist/common/msg/emitter.mjs +139 -1
  375. package/dist/common/msg/emitter.mjs.map +1 -1
  376. package/dist/common/msg/encoder.cjs +38 -1
  377. package/dist/common/msg/encoder.cjs.map +1 -1
  378. package/dist/common/msg/encoder.mjs +35 -1
  379. package/dist/common/msg/encoder.mjs.map +1 -1
  380. package/dist/common/msg/index.cjs +28 -1
  381. package/dist/common/msg/index.d.cts +1 -1
  382. package/dist/common/msg/index.d.mts +1 -1
  383. package/dist/common/msg/index.mjs +11 -1
  384. package/dist/common/msg/messages.cjs +135 -1
  385. package/dist/common/msg/messages.cjs.map +1 -1
  386. package/dist/common/msg/messages.d.cts +1 -1
  387. package/dist/common/msg/messages.d.mts +1 -1
  388. package/dist/common/msg/messages.mjs +133 -1
  389. package/dist/common/msg/messages.mjs.map +1 -1
  390. package/dist/common/msg/pipe.mjs +1 -1
  391. package/dist/common/msg/pubsub.cjs +78 -1
  392. package/dist/common/msg/pubsub.cjs.map +1 -1
  393. package/dist/common/msg/pubsub.d.cts +1 -1
  394. package/dist/common/msg/pubsub.d.mts +1 -1
  395. package/dist/common/msg/pubsub.mjs +76 -1
  396. package/dist/common/msg/pubsub.mjs.map +1 -1
  397. package/dist/common/msg/rpc.cjs +142 -1
  398. package/dist/common/msg/rpc.cjs.map +1 -1
  399. package/dist/common/msg/rpc.mjs +139 -1
  400. package/dist/common/msg/rpc.mjs.map +1 -1
  401. package/dist/common/network.cjs +129 -1
  402. package/dist/common/network.cjs.map +1 -1
  403. package/dist/common/network.mjs +122 -1
  404. package/dist/common/network.mjs.map +1 -1
  405. package/dist/common/platform.cjs +92 -1
  406. package/dist/common/platform.cjs.map +1 -1
  407. package/dist/common/platform.mjs +84 -1
  408. package/dist/common/platform.mjs.map +1 -1
  409. package/dist/common/schema/_sandbox/sandbox-inherit.mjs +1 -1
  410. package/dist/common/schema/_sandbox/sandbox.mjs +1 -1
  411. package/dist/common/schema/_sandbox/sandbox.xspec.mjs +1 -1
  412. package/dist/common/schema/export-json-schema.cjs +54 -1
  413. package/dist/common/schema/export-json-schema.cjs.map +1 -1
  414. package/dist/common/schema/export-json-schema.mjs +52 -1
  415. package/dist/common/schema/export-json-schema.mjs.map +1 -1
  416. package/dist/common/schema/export-swift.cjs +30 -2
  417. package/dist/common/schema/export-swift.cjs.map +1 -1
  418. package/dist/common/schema/export-swift.mjs +29 -2
  419. package/dist/common/schema/export-swift.mjs.map +1 -1
  420. package/dist/common/schema/export-typescript.cjs +20 -2
  421. package/dist/common/schema/export-typescript.cjs.map +1 -1
  422. package/dist/common/schema/export-typescript.mjs +19 -2
  423. package/dist/common/schema/export-typescript.mjs.map +1 -1
  424. package/dist/common/schema/index.cjs +55 -1
  425. package/dist/common/schema/index.mjs +12 -1
  426. package/dist/common/schema/parse-args.cjs +62 -2
  427. package/dist/common/schema/parse-args.cjs.map +1 -1
  428. package/dist/common/schema/parse-args.mjs +60 -2
  429. package/dist/common/schema/parse-args.mjs.map +1 -1
  430. package/dist/common/schema/parse-env.cjs +48 -3
  431. package/dist/common/schema/parse-env.cjs.map +1 -1
  432. package/dist/common/schema/parse-env.mjs +46 -3
  433. package/dist/common/schema/parse-env.mjs.map +1 -1
  434. package/dist/common/schema/parse-object.cjs +122 -1
  435. package/dist/common/schema/parse-object.cjs.map +1 -1
  436. package/dist/common/schema/parse-object.mjs +119 -1
  437. package/dist/common/schema/parse-object.mjs.map +1 -1
  438. package/dist/common/schema/schema-standard.mjs +1 -1
  439. package/dist/common/schema/schema.cjs +423 -1
  440. package/dist/common/schema/schema.cjs.map +1 -1
  441. package/dist/common/schema/schema.mjs +404 -1
  442. package/dist/common/schema/schema.mjs.map +1 -1
  443. package/dist/common/schema/serialize.cjs +109 -1
  444. package/dist/common/schema/serialize.cjs.map +1 -1
  445. package/dist/common/schema/serialize.mjs +107 -1
  446. package/dist/common/schema/serialize.mjs.map +1 -1
  447. package/dist/common/schema/type-test.mjs +1 -1
  448. package/dist/common/schema/utils.cjs +25 -1
  449. package/dist/common/schema/utils.cjs.map +1 -1
  450. package/dist/common/schema/utils.mjs +19 -1
  451. package/dist/common/schema/utils.mjs.map +1 -1
  452. package/dist/common/schema/z-collection.cjs +51 -1
  453. package/dist/common/schema/z-collection.mjs +27 -1
  454. package/dist/common/schema/z.cjs +9 -1
  455. package/dist/common/schema/z.mjs +3 -1
  456. package/dist/common/storage/index.cjs +4 -1
  457. package/dist/common/storage/index.mjs +3 -1
  458. package/dist/common/storage/memstorage.cjs +26 -1
  459. package/dist/common/storage/memstorage.cjs.map +1 -1
  460. package/dist/common/storage/memstorage.mjs +25 -1
  461. package/dist/common/storage/memstorage.mjs.map +1 -1
  462. package/dist/common/test.cjs +14 -1
  463. package/dist/common/test.cjs.map +1 -1
  464. package/dist/common/test.mjs +13 -1
  465. package/dist/common/test.mjs.map +1 -1
  466. package/dist/common/time.cjs +220 -1
  467. package/dist/common/time.cjs.map +1 -1
  468. package/dist/common/time.mjs +194 -1
  469. package/dist/common/time.mjs.map +1 -1
  470. package/dist/common/timeout.cjs +27 -1
  471. package/dist/common/timeout.cjs.map +1 -1
  472. package/dist/common/timeout.mjs +25 -1
  473. package/dist/common/timeout.mjs.map +1 -1
  474. package/dist/common/types.mjs +1 -1
  475. package/dist/common/utils.cjs +7 -1
  476. package/dist/common/utils.cjs.map +1 -1
  477. package/dist/common/utils.mjs +5 -1
  478. package/dist/common/utils.mjs.map +1 -1
  479. package/dist/common/uuid.cjs +307 -1
  480. package/dist/common/uuid.cjs.map +1 -1
  481. package/dist/common/uuid.mjs +284 -1
  482. package/dist/common/uuid.mjs.map +1 -1
  483. package/dist/{index-DHXVOH8h.d.cts → index-CFkMqHvX.d.cts} +1 -2
  484. package/dist/{index-DMaPyx9O.d.mts → index-C_3Y_s6f.d.mts} +1 -2
  485. package/dist/index.all.cjs +641 -1
  486. package/dist/index.all.d.cts +1 -1
  487. package/dist/index.all.d.mts +1 -1
  488. package/dist/index.all.mjs +113 -1
  489. package/dist/index.browser.cjs +576 -1
  490. package/dist/index.browser.d.cts +1 -1
  491. package/dist/index.browser.d.mts +1 -1
  492. package/dist/index.browser.mjs +98 -1
  493. package/dist/index.jsr.cjs +57 -1
  494. package/dist/index.jsr.mjs +6 -1
  495. package/dist/index.node.cjs +628 -1
  496. package/dist/index.node.d.cts +1 -1
  497. package/dist/index.node.d.mts +1 -1
  498. package/dist/index.node.mjs +106 -1
  499. package/dist/node/args.cjs +56 -1
  500. package/dist/node/args.cjs.map +1 -1
  501. package/dist/node/args.mjs +53 -1
  502. package/dist/node/args.mjs.map +1 -1
  503. package/dist/node/clipboard.cjs +18 -1
  504. package/dist/node/clipboard.cjs.map +1 -1
  505. package/dist/node/clipboard.mjs +16 -1
  506. package/dist/node/clipboard.mjs.map +1 -1
  507. package/dist/node/crypto.cjs +28 -1
  508. package/dist/node/crypto.cjs.map +1 -1
  509. package/dist/node/crypto.mjs +24 -1
  510. package/dist/node/crypto.mjs.map +1 -1
  511. package/dist/node/env.cjs +100 -4
  512. package/dist/node/env.cjs.map +1 -1
  513. package/dist/node/env.mjs +90 -4
  514. package/dist/node/env.mjs.map +1 -1
  515. package/dist/node/files-async.cjs +66 -1
  516. package/dist/node/files-async.cjs.map +1 -1
  517. package/dist/node/files-async.mjs +60 -1
  518. package/dist/node/files-async.mjs.map +1 -1
  519. package/dist/node/files.cjs +52 -1
  520. package/dist/node/files.cjs.map +1 -1
  521. package/dist/node/files.mjs +46 -1
  522. package/dist/node/files.mjs.map +1 -1
  523. package/dist/node/filestorage.cjs +100 -1
  524. package/dist/node/filestorage.cjs.map +1 -1
  525. package/dist/node/filestorage.mjs +97 -1
  526. package/dist/node/filestorage.mjs.map +1 -1
  527. package/dist/node/fs.cjs +119 -1
  528. package/dist/node/fs.cjs.map +1 -1
  529. package/dist/node/fs.mjs +101 -1
  530. package/dist/node/fs.mjs.map +1 -1
  531. package/dist/node/glob.cjs +75 -1
  532. package/dist/node/glob.cjs.map +1 -1
  533. package/dist/node/glob.mjs +73 -1
  534. package/dist/node/glob.mjs.map +1 -1
  535. package/dist/node/index.cjs +66 -1
  536. package/dist/node/index.mjs +16 -1
  537. package/dist/node/log/index.cjs +20 -1
  538. package/dist/node/log/index.mjs +7 -1
  539. package/dist/node/log/log-context-node.cjs +39 -1
  540. package/dist/node/log/log-context-node.cjs.map +1 -1
  541. package/dist/node/log/log-context-node.mjs +35 -1
  542. package/dist/node/log/log-context-node.mjs.map +1 -1
  543. package/dist/node/log/log-file-rotation.cjs +71 -1
  544. package/dist/node/log/log-file-rotation.cjs.map +1 -1
  545. package/dist/node/log/log-file-rotation.mjs +68 -1
  546. package/dist/node/log/log-file-rotation.mjs.map +1 -1
  547. package/dist/node/log/log-file.cjs +57 -1
  548. package/dist/node/log/log-file.cjs.map +1 -1
  549. package/dist/node/log/log-file.mjs +54 -1
  550. package/dist/node/log/log-file.mjs.map +1 -1
  551. package/dist/node/log/log-node.cjs +162 -1
  552. package/dist/node/log/log-node.cjs.map +1 -1
  553. package/dist/node/log/log-node.mjs +155 -1
  554. package/dist/node/log/log-node.mjs.map +1 -1
  555. package/dist/node/log/log-rotation.cjs +543 -3
  556. package/dist/node/log/log-rotation.cjs.map +1 -1
  557. package/dist/node/log/log-rotation.mjs +538 -3
  558. package/dist/node/log/log-rotation.mjs.map +1 -1
  559. package/dist/node/log/log-util.cjs +69 -3
  560. package/dist/node/log/log-util.cjs.map +1 -1
  561. package/dist/node/log/log-util.mjs +63 -3
  562. package/dist/node/log/log-util.mjs.map +1 -1
  563. package/dist/node/open-browser.cjs +20 -1
  564. package/dist/node/open-browser.cjs.map +1 -1
  565. package/dist/node/open-browser.mjs +18 -1
  566. package/dist/node/open-browser.mjs.map +1 -1
  567. package/package.json +15 -15
  568. package/src/common/schema/README.md +247 -66
  569. package/src/eslint-defaults.js +4 -0
  570. package/src/index.spec.ts +6 -6
  571. package/dist/bin-Ce3i6ABn.cjs +0 -3
  572. package/dist/bin-SPdenYkw.mjs +0 -3
  573. package/dist/chunk-0Lt9GpW0.mjs +0 -1
  574. package/dist/chunk-D-qHiVGv.cjs +0 -1
  575. package/src/common/schema/README-SCHEMA.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.mjs","names":[],"sources":["../../../src/common/msg/pubsub.ts"],"sourcesContent":["import type { DisposerFunction } from '../dispose-types'\nimport type { Channel } from './channel'\nimport type { DefaultListener, EmitterSubscriberOptions, ListenerSignature } from './emitter'\nimport type { Encoder } from './encoder'\nimport { DefaultLogger } from '../log/log'\nimport { uname } from '../uuid'\nimport { Emitter } from './emitter'\nimport { JsonEncoder } from './encoder'\n\nexport interface PubSubConfig {\n channel: Channel\n encoder?: Encoder\n name?: string\n debug?: boolean\n}\n\nexport class PubSub<L extends ListenerSignature<L> = DefaultListener> extends Emitter<L> {\n name: string\n channel: Channel\n encoder: Encoder\n log: any\n debug: boolean\n\n get shortId() {\n return this.name.substr(0, 6)\n }\n\n constructor(opt: PubSubConfig) {\n super()\n\n const { name, encoder = new JsonEncoder(), channel, debug = false } = opt\n\n this.channel = channel\n this.encoder = encoder\n this.debug = debug\n\n this.name = name ?? this.channel.id ?? uname('pubsub')\n this.log = DefaultLogger(`${this.shortId}`)\n\n if (this.debug) {\n this.channel.on('connect', () => {\n this.log('channel connected')\n })\n this.channel.on('disconnect', () => {\n this.log('channel disconnected')\n })\n }\n\n this.channel.on('message', async ({ data }) => {\n const info = await this.encoder.decode(data)\n if (this.debug)\n this.log(`channel message, event=${info?.event}, info=`, info)\n else this.log(`channel message, event=${info?.event}`)\n if (info) {\n const { event, args } = info\n await this.emitSuper(event, ...args)\n }\n })\n }\n\n private async emitSuper<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n return await super.emit(event, ...args)\n }\n\n async emit<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n try {\n if (this.debug)\n this.log(`emit(${String(event)})`, event)\n else this.log(`emit(${String(event)})`, args.length)\n if (!this.channel.isConnected) {\n this.log.warn('channel not connected')\n return false\n }\n const data = await this.encoder.encode({ event, args })\n this.channel.postMessage(data)\n return true\n }\n catch (err) {\n this.log.warn(`emit(${String(event)})`, err)\n }\n return false\n }\n\n public async publish<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n return await this.emit(event, ...args)\n }\n\n public subscribe<U extends keyof L>(\n event: U,\n fn: L[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n return this.on(event as any as string | number, fn as any, opt)\n }\n}\n\nexport function usePubSub<L extends ListenerSignature<L> = DefaultListener>(\n opt: PubSubConfig,\n) {\n return new PubSub<L>(opt)\n}\n"],"mappings":"uKAgBA,IAAa,EAAb,cAA8E,CAAW,CACvF,KACA,QACA,QACA,IACA,MAEA,IAAI,SAAU,CACZ,OAAO,KAAK,KAAK,OAAO,EAAG,EAAE,CAG/B,YAAY,EAAmB,CAC7B,OAAO,CAEP,GAAM,CAAE,OAAM,UAAU,IAAI,EAAe,UAAS,QAAQ,IAAU,EAEtE,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,MAAQ,EAEb,KAAK,KAAO,GAAQ,KAAK,QAAQ,IAAM,EAAM,SAAS,CACtD,KAAK,IAAM,EAAc,GAAG,KAAK,UAAU,CAEvC,KAAK,QACP,KAAK,QAAQ,GAAG,cAAiB,CAC/B,KAAK,IAAI,oBAAoB,EAC7B,CACF,KAAK,QAAQ,GAAG,iBAAoB,CAClC,KAAK,IAAI,uBAAuB,EAChC,EAGJ,KAAK,QAAQ,GAAG,UAAW,MAAO,CAAE,UAAW,CAC7C,IAAM,EAAO,MAAM,KAAK,QAAQ,OAAO,EAAK,CAI5C,GAHI,KAAK,MACP,KAAK,IAAI,0BAA0B,GAAM,MAAM,SAAU,EAAK,CAC3D,KAAK,IAAI,0BAA0B,GAAM,QAAQ,CAClD,EAAM,CACR,GAAM,CAAE,QAAO,QAAS,EACxB,MAAM,KAAK,UAAU,EAAO,GAAG,EAAK,GAEtC,CAGJ,MAAc,UACZ,EACA,GAAG,EACe,CAClB,OAAO,MAAM,MAAM,KAAK,EAAO,GAAG,EAAK,CAGzC,MAAM,KACJ,EACA,GAAG,EACe,CAClB,GAAI,CAIF,GAHI,KAAK,MACP,KAAK,IAAI,QAAQ,OAAO,EAAM,CAAC,GAAI,EAAM,CACtC,KAAK,IAAI,QAAQ,OAAO,EAAM,CAAC,GAAI,EAAK,OAAO,CAChD,CAAC,KAAK,QAAQ,YAEhB,OADA,KAAK,IAAI,KAAK,wBAAwB,CAC/B,GAET,IAAM,EAAO,MAAM,KAAK,QAAQ,OAAO,CAAE,QAAO,OAAM,CAAC,CAEvD,OADA,KAAK,QAAQ,YAAY,EAAK,CACvB,SAEF,EAAK,CACV,KAAK,IAAI,KAAK,QAAQ,OAAO,EAAM,CAAC,GAAI,EAAI,CAE9C,MAAO,GAGT,MAAa,QACX,EACA,GAAG,EACe,CAClB,OAAO,MAAM,KAAK,KAAK,EAAO,GAAG,EAAK,CAGxC,UACE,EACA,EACA,EAAgC,EAAE,CAChB,CAClB,OAAO,KAAK,GAAG,EAAiC,EAAW,EAAI,GAInE,SAAgB,EACd,EACA,CACA,OAAO,IAAI,EAAU,EAAI"}
1
+ {"version":3,"file":"pubsub.mjs","names":[],"sources":["../../../src/common/msg/pubsub.ts"],"sourcesContent":["import type { DisposerFunction } from '../dispose-types'\nimport type { Channel } from './channel'\nimport type { DefaultListener, EmitterSubscriberOptions, ListenerSignature } from './emitter'\nimport type { Encoder } from './encoder'\nimport { DefaultLogger } from '../log/log'\nimport { uname } from '../uuid'\nimport { Emitter } from './emitter'\nimport { JsonEncoder } from './encoder'\n\nexport interface PubSubConfig {\n channel: Channel\n encoder?: Encoder\n name?: string\n debug?: boolean\n}\n\nexport class PubSub<L extends ListenerSignature<L> = DefaultListener> extends Emitter<L> {\n name: string\n channel: Channel\n encoder: Encoder\n log: any\n debug: boolean\n\n get shortId() {\n return this.name.substr(0, 6)\n }\n\n constructor(opt: PubSubConfig) {\n super()\n\n const { name, encoder = new JsonEncoder(), channel, debug = false } = opt\n\n this.channel = channel\n this.encoder = encoder\n this.debug = debug\n\n this.name = name ?? this.channel.id ?? uname('pubsub')\n this.log = DefaultLogger(`${this.shortId}`)\n\n if (this.debug) {\n this.channel.on('connect', () => {\n this.log('channel connected')\n })\n this.channel.on('disconnect', () => {\n this.log('channel disconnected')\n })\n }\n\n this.channel.on('message', async ({ data }) => {\n const info = await this.encoder.decode(data)\n if (this.debug)\n this.log(`channel message, event=${info?.event}, info=`, info)\n else this.log(`channel message, event=${info?.event}`)\n if (info) {\n const { event, args } = info\n await this.emitSuper(event, ...args)\n }\n })\n }\n\n private async emitSuper<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n return await super.emit(event, ...args)\n }\n\n async emit<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n try {\n if (this.debug)\n this.log(`emit(${String(event)})`, event)\n else this.log(`emit(${String(event)})`, args.length)\n if (!this.channel.isConnected) {\n this.log.warn('channel not connected')\n return false\n }\n const data = await this.encoder.encode({ event, args })\n this.channel.postMessage(data)\n return true\n }\n catch (err) {\n this.log.warn(`emit(${String(event)})`, err)\n }\n return false\n }\n\n public async publish<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n return await this.emit(event, ...args)\n }\n\n public subscribe<U extends keyof L>(\n event: U,\n fn: L[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n return this.on(event as any as string | number, fn as any, opt)\n }\n}\n\nexport function usePubSub<L extends ListenerSignature<L> = DefaultListener>(\n opt: PubSubConfig,\n) {\n return new PubSub<L>(opt)\n}\n"],"mappings":";;;;;;AAgBA,IAAa,SAAb,cAA8E,QAAW;CACvF;CACA;CACA;CACA;CACA;CAEA,IAAI,UAAU;AACZ,SAAO,KAAK,KAAK,OAAO,GAAG,EAAE;;CAG/B,YAAY,KAAmB;AAC7B,SAAO;EAEP,MAAM,EAAE,MAAM,UAAU,IAAI,aAAa,EAAE,SAAS,QAAQ,UAAU;AAEtE,OAAK,UAAU;AACf,OAAK,UAAU;AACf,OAAK,QAAQ;AAEb,OAAK,OAAO,QAAQ,KAAK,QAAQ,MAAM,MAAM,SAAS;AACtD,OAAK,MAAM,cAAc,GAAG,KAAK,UAAU;AAE3C,MAAI,KAAK,OAAO;AACd,QAAK,QAAQ,GAAG,iBAAiB;AAC/B,SAAK,IAAI,oBAAoB;KAC7B;AACF,QAAK,QAAQ,GAAG,oBAAoB;AAClC,SAAK,IAAI,uBAAuB;KAChC;;AAGJ,OAAK,QAAQ,GAAG,WAAW,OAAO,EAAE,WAAW;GAC7C,MAAM,OAAO,MAAM,KAAK,QAAQ,OAAO,KAAK;AAC5C,OAAI,KAAK,MACP,MAAK,IAAI,0BAA0B,MAAM,MAAM,UAAU,KAAK;OAC3D,MAAK,IAAI,0BAA0B,MAAM,QAAQ;AACtD,OAAI,MAAM;IACR,MAAM,EAAE,OAAO,SAAS;AACxB,UAAM,KAAK,UAAU,OAAO,GAAG,KAAK;;IAEtC;;CAGJ,MAAc,UACZ,OACA,GAAG,MACe;AAClB,SAAO,MAAM,MAAM,KAAK,OAAO,GAAG,KAAK;;CAGzC,MAAM,KACJ,OACA,GAAG,MACe;AAClB,MAAI;AACF,OAAI,KAAK,MACP,MAAK,IAAI,QAAQ,OAAO,MAAM,CAAC,IAAI,MAAM;OACtC,MAAK,IAAI,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO;AACpD,OAAI,CAAC,KAAK,QAAQ,aAAa;AAC7B,SAAK,IAAI,KAAK,wBAAwB;AACtC,WAAO;;GAET,MAAM,OAAO,MAAM,KAAK,QAAQ,OAAO;IAAE;IAAO;IAAM,CAAC;AACvD,QAAK,QAAQ,YAAY,KAAK;AAC9B,UAAO;WAEF,KAAK;AACV,QAAK,IAAI,KAAK,QAAQ,OAAO,MAAM,CAAC,IAAI,IAAI;;AAE9C,SAAO;;CAGT,MAAa,QACX,OACA,GAAG,MACe;AAClB,SAAO,MAAM,KAAK,KAAK,OAAO,GAAG,KAAK;;CAGxC,AAAO,UACL,OACA,IACA,MAAgC,EAAE,EAChB;AAClB,SAAO,KAAK,GAAG,OAAiC,IAAW,IAAI;;;AAInE,SAAgB,UACd,KACA;AACA,QAAO,IAAI,OAAU,IAAI"}
@@ -1,2 +1,143 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../exec/promise.cjs`);let t=1,n=function(e){return e[e.request=1]=`request`,e[e.event=2]=`event`,e[e.resolve=3]=`resolve`,e[e.reject=4]=`reject`,e}({});const r=e=>e,i=r;function a(a,o,s=[]){let{log:c,post:l,on:u,serialize:d=r,deserialize:f=i,timeout:p=6e4,onError:m,onTimeoutError:h,onlyEvents:g=!1,exceptions:_=!0,stringHashPool:v}=a;v&&Object.keys(o).forEach(v.hash);function y(e){Object.assign(o,e??{}),v&&Object.keys(e).forEach(v.hash)}function b(e){s.push(...e)}let x=new Map;return u(async e=>{try{let t=await f(e),r=t?.[0],i=r===n.event?0:t?.[1],[a,...s]=t.slice(r===n.event?1:2),u=v?.stringForHash(a)??a;if(r===n.request||r===n.event){let e,r;if(a!=null)try{let t=o[u];e=await t(...s)}catch(e){r=String(e)}else r=`Method implementation missing`;r&&(c?.warn(`error`,t,r),m?.(r,a??``,s)),i>0&&await l(await d(r?[n.reject,i,r]:[n.resolve,i,e]))}else if(i){let e=x.get(i);e!=null&&(clearTimeout(e.timeoutId),r===n.reject&&_===!0?e.reject(a):e.resolve(a)),x.delete(i)}}catch(t){c?.warn(`Error on handling RPC data. Invalid?`,t,e)}}),{post:l,serialize:d,rpcPromiseMap:x,proxyHandler:{get(r,i){let a=v?.hash(i)??i,o=async(...e)=>await l(await d([n.event,a,...e]));if(g||s.includes(i))return o.asEvent=o,o;let c=async(...r)=>{let[o,s,c]=e.createPromise(),u=t++,f;return p>=0&&(f=setTimeout(()=>{try{throw h?.(i,r),Error(`rpc timeout on calling "${i}"`)}catch(e){_===!0?c(e):s(void 0)}x.delete(u),clearTimeout(f),f=void 0},p).unref?.()),x.set(u,{resolve:s,reject:c,timeoutId:f}),await l(await d([n.request,u,a,...r])),o};return c.asEvent=o,c}},registerFunctions:y,registerEventNames:b}}function o(e,t){let{eventNames:n=[]}=t,{proxyHandler:r}=a(t,e,n);return new Proxy({},r)}function s(e){let{proxyHandler:t,registerFunctions:n,registerEventNames:r}=a(e,{},[]);function i(){return new Proxy({},t)}return function(e,t=[]){return n(e??{}),r(t),i()}}exports.RPCMode=n,exports.useRPC=o,exports.useRPCHub=s;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_exec_promise = require('../exec/promise.cjs');
3
+
4
+ //#region src/common/msg/rpc.ts
5
+ let rpcCounter = 1;
6
+ let RPCMode = /* @__PURE__ */ function(RPCMode) {
7
+ RPCMode[RPCMode["request"] = 1] = "request";
8
+ RPCMode[RPCMode["event"] = 2] = "event";
9
+ RPCMode[RPCMode["resolve"] = 3] = "resolve";
10
+ RPCMode[RPCMode["reject"] = 4] = "reject";
11
+ return RPCMode;
12
+ }({});
13
+ const defaultSerialize = (i) => i;
14
+ const defaultDeserialize = defaultSerialize;
15
+ function setupRPCBasic(options, functions, eventNames = []) {
16
+ const { log, post, on, serialize = defaultSerialize, deserialize = defaultDeserialize, timeout = 6e4, onError, onTimeoutError, onlyEvents = false, exceptions = true, stringHashPool } = options;
17
+ if (stringHashPool) Object.keys(functions).forEach(stringHashPool.hash);
18
+ function checkEventNames(eventNames) {}
19
+ checkEventNames(eventNames);
20
+ function registerFunctions(additionalFunctions) {
21
+ Object.assign(functions, additionalFunctions ?? {});
22
+ if (stringHashPool) Object.keys(additionalFunctions).forEach(stringHashPool.hash);
23
+ }
24
+ function registerEventNames(additionalEventNames) {
25
+ checkEventNames(additionalEventNames);
26
+ eventNames.push(...additionalEventNames);
27
+ }
28
+ const rpcPromiseMap = /* @__PURE__ */ new Map();
29
+ on(async (data) => {
30
+ try {
31
+ const msg = await deserialize(data);
32
+ const mode = msg?.[0];
33
+ const id = mode === RPCMode.event ? 0 : msg?.[1];
34
+ const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2);
35
+ const methodName = stringHashPool?.stringForHash(method) ?? method;
36
+ if (mode === RPCMode.request || mode === RPCMode.event) {
37
+ let result, error;
38
+ if (method != null) try {
39
+ const fn = functions[methodName];
40
+ result = await fn(...args);
41
+ } catch (e) {
42
+ error = String(e);
43
+ }
44
+ else error = "Method implementation missing";
45
+ if (error) {
46
+ log?.warn("error", msg, error);
47
+ onError?.(error, method ?? "", args);
48
+ }
49
+ if (id > 0) await post(await serialize(error ? [
50
+ RPCMode.reject,
51
+ id,
52
+ error
53
+ ] : [
54
+ RPCMode.resolve,
55
+ id,
56
+ result
57
+ ]));
58
+ } else if (id) {
59
+ const promise = rpcPromiseMap.get(id);
60
+ if (promise != null) {
61
+ clearTimeout(promise.timeoutId);
62
+ if (mode === RPCMode.reject && exceptions === true) promise.reject(method);
63
+ else promise.resolve(method);
64
+ }
65
+ rpcPromiseMap.delete(id);
66
+ }
67
+ } catch (err) {
68
+ log?.warn("Error on handling RPC data. Invalid?", err, data);
69
+ }
70
+ });
71
+ return {
72
+ post,
73
+ serialize,
74
+ rpcPromiseMap,
75
+ proxyHandler: { get(_, methodName) {
76
+ const method = stringHashPool?.hash(methodName) ?? methodName;
77
+ const sendEvent = async (...args) => await post(await serialize([
78
+ RPCMode.event,
79
+ method,
80
+ ...args
81
+ ]));
82
+ if (onlyEvents || eventNames.includes(methodName)) {
83
+ sendEvent.asEvent = sendEvent;
84
+ return sendEvent;
85
+ }
86
+ const sendCall = async (...args) => {
87
+ const [promise, resolve, reject] = require_common_exec_promise.createPromise();
88
+ const id = rpcCounter++;
89
+ let timeoutId;
90
+ if (timeout >= 0) timeoutId = setTimeout(() => {
91
+ try {
92
+ onTimeoutError?.(methodName, args);
93
+ throw new Error(`rpc timeout on calling "${methodName}"`);
94
+ } catch (e) {
95
+ if (exceptions === true) reject(e);
96
+ else resolve(void 0);
97
+ }
98
+ rpcPromiseMap.delete(id);
99
+ clearTimeout(timeoutId);
100
+ timeoutId = void 0;
101
+ }, timeout).unref?.();
102
+ rpcPromiseMap.set(id, {
103
+ resolve,
104
+ reject,
105
+ timeoutId
106
+ });
107
+ await post(await serialize([
108
+ RPCMode.request,
109
+ id,
110
+ method,
111
+ ...args
112
+ ]));
113
+ return promise;
114
+ };
115
+ sendCall.asEvent = sendEvent;
116
+ return sendCall;
117
+ } },
118
+ registerFunctions,
119
+ registerEventNames
120
+ };
121
+ }
122
+ function useRPC(functions, options) {
123
+ const { eventNames = [] } = options;
124
+ const { proxyHandler } = setupRPCBasic(options, functions, eventNames);
125
+ return new Proxy({}, proxyHandler);
126
+ }
127
+ function useRPCHub(options) {
128
+ const { proxyHandler, registerFunctions, registerEventNames } = setupRPCBasic(options, {}, []);
129
+ function createRPCProxy() {
130
+ return new Proxy({}, proxyHandler);
131
+ }
132
+ return function(additionalFunctions, additionalEventNames = []) {
133
+ registerFunctions(additionalFunctions ?? {});
134
+ registerEventNames(additionalEventNames);
135
+ return createRPCProxy();
136
+ };
137
+ }
138
+
139
+ //#endregion
140
+ exports.RPCMode = RPCMode;
141
+ exports.useRPC = useRPC;
142
+ exports.useRPCHub = useRPCHub;
2
143
  //# sourceMappingURL=rpc.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.cjs","names":["createPromise"],"sources":["../../../src/common/msg/rpc.ts"],"sourcesContent":["// From https://github.com/antfu/birpc/blob/main/src/index.ts MIT\n\nimport type { UseStringHashPool } from '../data/string-hash-pool'\nimport type { LoggerInterface } from '../log/log-base'\nimport type { Pipe } from './pipe'\nimport { createPromise } from '../exec/promise'\n\nexport type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never\nexport type ReturnType<T> = T extends (...args: any) => infer R ? R : never\n\nexport interface RPCOptionsBasic extends Pipe {\n /** No return values expected */\n onlyEvents?: boolean\n /** Maximum timeout for waiting for response, in milliseconds */\n timeout?: number\n /** Custom logger */\n log?: LoggerInterface\n /** Custom error handler */\n onError?: (error: Error, functionName: string, args: any[]) => boolean | void\n /** Custom error handler for timeouts */\n onTimeoutError?: (functionName: string, args: any[]) => boolean | void\n /** Throw execptions. Default: true */\n exceptions?: boolean\n /** */\n stringHashPool?: UseStringHashPool\n}\n\nexport interface RPCOptions<Remote> extends RPCOptionsBasic {\n // /** No return values expected */\n // onlyEvents?: boolean\n /** Names of remote functions that do not need response. */\n eventNames?: (keyof Remote)[]\n}\n\nexport interface RPCFn<T> {\n /** Call the remote function and wait for the result. */\n (...args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>>\n /** Send event without asking for response */\n asEvent: (...args: ArgumentsType<T>) => void\n}\n\nexport type RPCReturn<RemoteFunctions> = {\n [K in keyof RemoteFunctions]: RPCFn<RemoteFunctions[K]>\n}\n\nlet rpcCounter = 1\n\nexport enum RPCMode {\n request = 1,\n event = 2,\n resolve = 3,\n reject = 4,\n}\n\nexport type RPCMessage = [\n mode: RPCMode,\n id: number,\n method: string | number | any,\n ...any,\n]\n\nconst defaultSerialize = (i: any) => i\nconst defaultDeserialize = defaultSerialize\n\nfunction setupRPCBasic(options: RPCOptionsBasic, functions: Record<string, (...args: any) => Promise<any>>, eventNames: string[] = []) {\n const {\n log,\n post,\n on,\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n timeout = 60e3,\n onError,\n onTimeoutError,\n onlyEvents = false,\n exceptions = true,\n stringHashPool,\n } = options\n\n if (stringHashPool) {\n Object.keys(functions).forEach(stringHashPool.hash)\n }\n\n function checkEventNames(eventNames: string[]) {\n // eventNames.forEach((n) => {\n // if (functions[n] == null)\n // throw new Error(`event name ${n} has no registered function`)\n // })\n }\n\n checkEventNames(eventNames)\n\n function registerFunctions(additionalFunctions: any) {\n Object.assign(functions, additionalFunctions ?? {})\n if (stringHashPool)\n Object.keys(additionalFunctions).forEach(stringHashPool.hash)\n }\n\n function registerEventNames(additionalEventNames: string[]) {\n checkEventNames(additionalEventNames)\n eventNames.push(...additionalEventNames)\n }\n\n const rpcPromiseMap = new Map<number, {\n resolve: (...args: any) => any\n reject: (...args: any) => any\n timeoutId: Parameters<typeof clearTimeout>[0]\n }>()\n\n on(async (data) => {\n try {\n const msg = await deserialize(data) as RPCMessage\n const mode = msg?.[0]\n const id = mode === RPCMode.event ? 0 : msg?.[1]\n const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2)\n const methodName = stringHashPool?.stringForHash(method) ?? method\n if (mode === RPCMode.request || mode === RPCMode.event) {\n let result, error: any\n if (method != null) {\n try {\n const fn = functions[methodName]\n result = await fn(...args)\n }\n catch (e) {\n error = String(e)\n }\n }\n else {\n error = 'Method implementation missing'\n }\n if (error) {\n log?.warn('error', msg, error)\n onError?.(error, method ?? '', args)\n }\n if (id > 0) {\n const data = await serialize(error\n ? [RPCMode.reject, id, error]\n : [RPCMode.resolve, id, result])\n await post(data)\n }\n }\n else if (id) {\n const promise = rpcPromiseMap.get(id)\n if (promise != null) {\n clearTimeout(promise.timeoutId)\n if (mode === RPCMode.reject && exceptions === true)\n promise.reject(method)\n else\n promise.resolve(method)\n }\n rpcPromiseMap.delete(id)\n }\n }\n catch (err) {\n log?.warn('Error on handling RPC data. Invalid?', err, data)\n }\n })\n\n const proxyHandler = {\n get(_: any, methodName: string) {\n const method = stringHashPool?.hash(methodName) ?? methodName\n const sendEvent = async (...args: any[]) => await post(await serialize([RPCMode.event, method, ...args]))\n\n if (onlyEvents || eventNames.includes(methodName)) {\n sendEvent.asEvent = sendEvent\n return sendEvent\n }\n\n const sendCall = async (...args: any[]) => {\n const [promise, resolve, reject] = createPromise()\n const id = rpcCounter++\n\n let timeoutId: any\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n // Custom onTimeoutError handler can throw its own error too\n onTimeoutError?.(methodName, args)\n throw new Error(`rpc timeout on calling \"${methodName}\"`)\n }\n catch (e) {\n if (exceptions === true)\n reject(e)\n else\n resolve(undefined)\n }\n rpcPromiseMap.delete(id)\n\n // Garbage Collection https://jakearchibald.com/2024/garbage-collection-and-closures/\n clearTimeout(timeoutId)\n timeoutId = undefined\n }, timeout).unref?.()\n }\n\n rpcPromiseMap.set(id, { resolve, reject, timeoutId })\n const data = await serialize([RPCMode.request, id, method, ...args])\n await post(data)\n return promise\n }\n sendCall.asEvent = sendEvent\n return sendCall\n },\n }\n\n return {\n post,\n serialize,\n rpcPromiseMap,\n proxyHandler,\n registerFunctions,\n registerEventNames,\n }\n}\n\nexport function useRPC<LocalFunctions, RemoteFunctions = LocalFunctions>(\n functions: LocalFunctions,\n options: RPCOptions<RemoteFunctions>,\n): RPCReturn<RemoteFunctions> {\n const { eventNames = [] } = options\n\n const { proxyHandler } = setupRPCBasic(options, functions as any, eventNames as any)\n\n return new Proxy({}, proxyHandler)\n}\n\nexport function useRPCHub(options: RPCOptionsBasic) {\n const eventNames: string[] = []\n const functions: Record<string, any> = {}\n\n const {\n proxyHandler,\n registerFunctions,\n registerEventNames,\n } = setupRPCBasic(options, functions, eventNames)\n\n function createRPCProxy() {\n return new Proxy({}, proxyHandler)\n }\n\n return function<LocalFunctions, RemoteFunctions = LocalFunctions>(\n additionalFunctions?: LocalFunctions,\n additionalEventNames: string[] = [],\n ): RPCReturn<RemoteFunctions> {\n registerFunctions(additionalFunctions ?? {})\n registerEventNames(additionalEventNames)\n return createRPCProxy()\n }\n}\n\nexport type UseRPCHubType = ReturnType<typeof useRPCHub>\n\n// Syntax test case\n// async function _demo() {\n// const hub: UseRPCHubType = {} as any\n// const x = hub({\n// test(name: string): string {\n// return name\n// },\n// })\n// await x.test('dsd')\n// }\n"],"mappings":"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"}
1
+ {"version":3,"file":"rpc.cjs","names":["createPromise"],"sources":["../../../src/common/msg/rpc.ts"],"sourcesContent":["// From https://github.com/antfu/birpc/blob/main/src/index.ts MIT\n\nimport type { UseStringHashPool } from '../data/string-hash-pool'\nimport type { LoggerInterface } from '../log/log-base'\nimport type { Pipe } from './pipe'\nimport { createPromise } from '../exec/promise'\n\nexport type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never\nexport type ReturnType<T> = T extends (...args: any) => infer R ? R : never\n\nexport interface RPCOptionsBasic extends Pipe {\n /** No return values expected */\n onlyEvents?: boolean\n /** Maximum timeout for waiting for response, in milliseconds */\n timeout?: number\n /** Custom logger */\n log?: LoggerInterface\n /** Custom error handler */\n onError?: (error: Error, functionName: string, args: any[]) => boolean | void\n /** Custom error handler for timeouts */\n onTimeoutError?: (functionName: string, args: any[]) => boolean | void\n /** Throw execptions. Default: true */\n exceptions?: boolean\n /** */\n stringHashPool?: UseStringHashPool\n}\n\nexport interface RPCOptions<Remote> extends RPCOptionsBasic {\n // /** No return values expected */\n // onlyEvents?: boolean\n /** Names of remote functions that do not need response. */\n eventNames?: (keyof Remote)[]\n}\n\nexport interface RPCFn<T> {\n /** Call the remote function and wait for the result. */\n (...args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>>\n /** Send event without asking for response */\n asEvent: (...args: ArgumentsType<T>) => void\n}\n\nexport type RPCReturn<RemoteFunctions> = {\n [K in keyof RemoteFunctions]: RPCFn<RemoteFunctions[K]>\n}\n\nlet rpcCounter = 1\n\nexport enum RPCMode {\n request = 1,\n event = 2,\n resolve = 3,\n reject = 4,\n}\n\nexport type RPCMessage = [\n mode: RPCMode,\n id: number,\n method: string | number | any,\n ...any,\n]\n\nconst defaultSerialize = (i: any) => i\nconst defaultDeserialize = defaultSerialize\n\nfunction setupRPCBasic(options: RPCOptionsBasic, functions: Record<string, (...args: any) => Promise<any>>, eventNames: string[] = []) {\n const {\n log,\n post,\n on,\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n timeout = 60e3,\n onError,\n onTimeoutError,\n onlyEvents = false,\n exceptions = true,\n stringHashPool,\n } = options\n\n if (stringHashPool) {\n Object.keys(functions).forEach(stringHashPool.hash)\n }\n\n function checkEventNames(eventNames: string[]) {\n // eventNames.forEach((n) => {\n // if (functions[n] == null)\n // throw new Error(`event name ${n} has no registered function`)\n // })\n }\n\n checkEventNames(eventNames)\n\n function registerFunctions(additionalFunctions: any) {\n Object.assign(functions, additionalFunctions ?? {})\n if (stringHashPool)\n Object.keys(additionalFunctions).forEach(stringHashPool.hash)\n }\n\n function registerEventNames(additionalEventNames: string[]) {\n checkEventNames(additionalEventNames)\n eventNames.push(...additionalEventNames)\n }\n\n const rpcPromiseMap = new Map<number, {\n resolve: (...args: any) => any\n reject: (...args: any) => any\n timeoutId: Parameters<typeof clearTimeout>[0]\n }>()\n\n on(async (data) => {\n try {\n const msg = await deserialize(data) as RPCMessage\n const mode = msg?.[0]\n const id = mode === RPCMode.event ? 0 : msg?.[1]\n const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2)\n const methodName = stringHashPool?.stringForHash(method) ?? method\n if (mode === RPCMode.request || mode === RPCMode.event) {\n let result, error: any\n if (method != null) {\n try {\n const fn = functions[methodName]\n result = await fn(...args)\n }\n catch (e) {\n error = String(e)\n }\n }\n else {\n error = 'Method implementation missing'\n }\n if (error) {\n log?.warn('error', msg, error)\n onError?.(error, method ?? '', args)\n }\n if (id > 0) {\n const data = await serialize(error\n ? [RPCMode.reject, id, error]\n : [RPCMode.resolve, id, result])\n await post(data)\n }\n }\n else if (id) {\n const promise = rpcPromiseMap.get(id)\n if (promise != null) {\n clearTimeout(promise.timeoutId)\n if (mode === RPCMode.reject && exceptions === true)\n promise.reject(method)\n else\n promise.resolve(method)\n }\n rpcPromiseMap.delete(id)\n }\n }\n catch (err) {\n log?.warn('Error on handling RPC data. Invalid?', err, data)\n }\n })\n\n const proxyHandler = {\n get(_: any, methodName: string) {\n const method = stringHashPool?.hash(methodName) ?? methodName\n const sendEvent = async (...args: any[]) => await post(await serialize([RPCMode.event, method, ...args]))\n\n if (onlyEvents || eventNames.includes(methodName)) {\n sendEvent.asEvent = sendEvent\n return sendEvent\n }\n\n const sendCall = async (...args: any[]) => {\n const [promise, resolve, reject] = createPromise()\n const id = rpcCounter++\n\n let timeoutId: any\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n // Custom onTimeoutError handler can throw its own error too\n onTimeoutError?.(methodName, args)\n throw new Error(`rpc timeout on calling \"${methodName}\"`)\n }\n catch (e) {\n if (exceptions === true)\n reject(e)\n else\n resolve(undefined)\n }\n rpcPromiseMap.delete(id)\n\n // Garbage Collection https://jakearchibald.com/2024/garbage-collection-and-closures/\n clearTimeout(timeoutId)\n timeoutId = undefined\n }, timeout).unref?.()\n }\n\n rpcPromiseMap.set(id, { resolve, reject, timeoutId })\n const data = await serialize([RPCMode.request, id, method, ...args])\n await post(data)\n return promise\n }\n sendCall.asEvent = sendEvent\n return sendCall\n },\n }\n\n return {\n post,\n serialize,\n rpcPromiseMap,\n proxyHandler,\n registerFunctions,\n registerEventNames,\n }\n}\n\nexport function useRPC<LocalFunctions, RemoteFunctions = LocalFunctions>(\n functions: LocalFunctions,\n options: RPCOptions<RemoteFunctions>,\n): RPCReturn<RemoteFunctions> {\n const { eventNames = [] } = options\n\n const { proxyHandler } = setupRPCBasic(options, functions as any, eventNames as any)\n\n return new Proxy({}, proxyHandler)\n}\n\nexport function useRPCHub(options: RPCOptionsBasic) {\n const eventNames: string[] = []\n const functions: Record<string, any> = {}\n\n const {\n proxyHandler,\n registerFunctions,\n registerEventNames,\n } = setupRPCBasic(options, functions, eventNames)\n\n function createRPCProxy() {\n return new Proxy({}, proxyHandler)\n }\n\n return function<LocalFunctions, RemoteFunctions = LocalFunctions>(\n additionalFunctions?: LocalFunctions,\n additionalEventNames: string[] = [],\n ): RPCReturn<RemoteFunctions> {\n registerFunctions(additionalFunctions ?? {})\n registerEventNames(additionalEventNames)\n return createRPCProxy()\n }\n}\n\nexport type UseRPCHubType = ReturnType<typeof useRPCHub>\n\n// Syntax test case\n// async function _demo() {\n// const hub: UseRPCHubType = {} as any\n// const x = hub({\n// test(name: string): string {\n// return name\n// },\n// })\n// await x.test('dsd')\n// }\n"],"mappings":";;;;AA6CA,IAAI,aAAa;AAEjB,IAAY,UAAL;AACL;AACA;AACA;AACA;;KACD;AASD,MAAM,oBAAoB,MAAW;AACrC,MAAM,qBAAqB;AAE3B,SAAS,cAAc,SAA0B,WAA2D,aAAuB,EAAE,EAAE;CACrI,MAAM,EACJ,KACA,MACA,IACA,YAAY,kBACZ,cAAc,oBACd,UAAU,KACV,SACA,gBACA,aAAa,OACb,aAAa,MACb,mBACE;AAEJ,KAAI,eACF,QAAO,KAAK,UAAU,CAAC,QAAQ,eAAe,KAAK;CAGrD,SAAS,gBAAgB,YAAsB;AAO/C,iBAAgB,WAAW;CAE3B,SAAS,kBAAkB,qBAA0B;AACnD,SAAO,OAAO,WAAW,uBAAuB,EAAE,CAAC;AACnD,MAAI,eACF,QAAO,KAAK,oBAAoB,CAAC,QAAQ,eAAe,KAAK;;CAGjE,SAAS,mBAAmB,sBAAgC;AAC1D,kBAAgB,qBAAqB;AACrC,aAAW,KAAK,GAAG,qBAAqB;;CAG1C,MAAM,gCAAgB,IAAI,KAItB;AAEJ,IAAG,OAAO,SAAS;AACjB,MAAI;GACF,MAAM,MAAM,MAAM,YAAY,KAAK;GACnC,MAAM,OAAO,MAAM;GACnB,MAAM,KAAK,SAAS,QAAQ,QAAQ,IAAI,MAAM;GAC9C,MAAM,CAAC,QAAQ,GAAG,QAAQ,IAAI,MAAM,SAAS,QAAQ,QAAQ,IAAI,EAAE;GACnE,MAAM,aAAa,gBAAgB,cAAc,OAAO,IAAI;AAC5D,OAAI,SAAS,QAAQ,WAAW,SAAS,QAAQ,OAAO;IACtD,IAAI,QAAQ;AACZ,QAAI,UAAU,KACZ,KAAI;KACF,MAAM,KAAK,UAAU;AACrB,cAAS,MAAM,GAAG,GAAG,KAAK;aAErB,GAAG;AACR,aAAQ,OAAO,EAAE;;QAInB,SAAQ;AAEV,QAAI,OAAO;AACT,UAAK,KAAK,SAAS,KAAK,MAAM;AAC9B,eAAU,OAAO,UAAU,IAAI,KAAK;;AAEtC,QAAI,KAAK,EAIP,OAAM,KAHO,MAAM,UAAU,QACzB;KAAC,QAAQ;KAAQ;KAAI;KAAM,GAC3B;KAAC,QAAQ;KAAS;KAAI;KAAO,CAAC,CAClB;cAGX,IAAI;IACX,MAAM,UAAU,cAAc,IAAI,GAAG;AACrC,QAAI,WAAW,MAAM;AACnB,kBAAa,QAAQ,UAAU;AAC/B,SAAI,SAAS,QAAQ,UAAU,eAAe,KAC5C,SAAQ,OAAO,OAAO;SAEtB,SAAQ,QAAQ,OAAO;;AAE3B,kBAAc,OAAO,GAAG;;WAGrB,KAAK;AACV,QAAK,KAAK,wCAAwC,KAAK,KAAK;;GAE9D;AAgDF,QAAO;EACL;EACA;EACA;EACA,cAlDmB,EACnB,IAAI,GAAQ,YAAoB;GAC9B,MAAM,SAAS,gBAAgB,KAAK,WAAW,IAAI;GACnD,MAAM,YAAY,OAAO,GAAG,SAAgB,MAAM,KAAK,MAAM,UAAU;IAAC,QAAQ;IAAO;IAAQ,GAAG;IAAK,CAAC,CAAC;AAEzG,OAAI,cAAc,WAAW,SAAS,WAAW,EAAE;AACjD,cAAU,UAAU;AACpB,WAAO;;GAGT,MAAM,WAAW,OAAO,GAAG,SAAgB;IACzC,MAAM,CAAC,SAAS,SAAS,UAAUA,2CAAe;IAClD,MAAM,KAAK;IAEX,IAAI;AACJ,QAAI,WAAW,EACb,aAAY,iBAAiB;AAC3B,SAAI;AAEF,uBAAiB,YAAY,KAAK;AAClC,YAAM,IAAI,MAAM,2BAA2B,WAAW,GAAG;cAEpD,GAAG;AACR,UAAI,eAAe,KACjB,QAAO,EAAE;UAET,SAAQ,OAAU;;AAEtB,mBAAc,OAAO,GAAG;AAGxB,kBAAa,UAAU;AACvB,iBAAY;OACX,QAAQ,CAAC,SAAS;AAGvB,kBAAc,IAAI,IAAI;KAAE;KAAS;KAAQ;KAAW,CAAC;AAErD,UAAM,KADO,MAAM,UAAU;KAAC,QAAQ;KAAS;KAAI;KAAQ,GAAG;KAAK,CAAC,CACpD;AAChB,WAAO;;AAET,YAAS,UAAU;AACnB,UAAO;KAEV;EAOC;EACA;EACD;;AAGH,SAAgB,OACd,WACA,SAC4B;CAC5B,MAAM,EAAE,aAAa,EAAE,KAAK;CAE5B,MAAM,EAAE,iBAAiB,cAAc,SAAS,WAAkB,WAAkB;AAEpF,QAAO,IAAI,MAAM,EAAE,EAAE,aAAa;;AAGpC,SAAgB,UAAU,SAA0B;CAIlD,MAAM,EACJ,cACA,mBACA,uBACE,cAAc,SANqB,EAAE,EADZ,EAAE,CAOkB;CAEjD,SAAS,iBAAiB;AACxB,SAAO,IAAI,MAAM,EAAE,EAAE,aAAa;;AAGpC,QAAO,SACL,qBACA,uBAAiC,EAAE,EACP;AAC5B,oBAAkB,uBAAuB,EAAE,CAAC;AAC5C,qBAAmB,qBAAqB;AACxC,SAAO,gBAAgB"}
@@ -1,2 +1,140 @@
1
- import{createPromise as e}from"../exec/promise.mjs";let t=1,n=function(e){return e[e.request=1]=`request`,e[e.event=2]=`event`,e[e.resolve=3]=`resolve`,e[e.reject=4]=`reject`,e}({});const r=e=>e,i=r;function a(a,o,s=[]){let{log:c,post:l,on:u,serialize:d=r,deserialize:f=i,timeout:p=6e4,onError:m,onTimeoutError:h,onlyEvents:g=!1,exceptions:_=!0,stringHashPool:v}=a;v&&Object.keys(o).forEach(v.hash);function y(e){Object.assign(o,e??{}),v&&Object.keys(e).forEach(v.hash)}function b(e){s.push(...e)}let x=new Map;return u(async e=>{try{let t=await f(e),r=t?.[0],i=r===n.event?0:t?.[1],[a,...s]=t.slice(r===n.event?1:2),u=v?.stringForHash(a)??a;if(r===n.request||r===n.event){let e,r;if(a!=null)try{let t=o[u];e=await t(...s)}catch(e){r=String(e)}else r=`Method implementation missing`;r&&(c?.warn(`error`,t,r),m?.(r,a??``,s)),i>0&&await l(await d(r?[n.reject,i,r]:[n.resolve,i,e]))}else if(i){let e=x.get(i);e!=null&&(clearTimeout(e.timeoutId),r===n.reject&&_===!0?e.reject(a):e.resolve(a)),x.delete(i)}}catch(t){c?.warn(`Error on handling RPC data. Invalid?`,t,e)}}),{post:l,serialize:d,rpcPromiseMap:x,proxyHandler:{get(r,i){let a=v?.hash(i)??i,o=async(...e)=>await l(await d([n.event,a,...e]));if(g||s.includes(i))return o.asEvent=o,o;let c=async(...r)=>{let[o,s,c]=e(),u=t++,f;return p>=0&&(f=setTimeout(()=>{try{throw h?.(i,r),Error(`rpc timeout on calling "${i}"`)}catch(e){_===!0?c(e):s(void 0)}x.delete(u),clearTimeout(f),f=void 0},p).unref?.()),x.set(u,{resolve:s,reject:c,timeoutId:f}),await l(await d([n.request,u,a,...r])),o};return c.asEvent=o,c}},registerFunctions:y,registerEventNames:b}}function o(e,t){let{eventNames:n=[]}=t,{proxyHandler:r}=a(t,e,n);return new Proxy({},r)}function s(e){let{proxyHandler:t,registerFunctions:n,registerEventNames:r}=a(e,{},[]);function i(){return new Proxy({},t)}return function(e,t=[]){return n(e??{}),r(t),i()}}export{n as RPCMode,o as useRPC,s as useRPCHub};
1
+ import { createPromise } from "../exec/promise.mjs";
2
+
3
+ //#region src/common/msg/rpc.ts
4
+ let rpcCounter = 1;
5
+ let RPCMode = /* @__PURE__ */ function(RPCMode) {
6
+ RPCMode[RPCMode["request"] = 1] = "request";
7
+ RPCMode[RPCMode["event"] = 2] = "event";
8
+ RPCMode[RPCMode["resolve"] = 3] = "resolve";
9
+ RPCMode[RPCMode["reject"] = 4] = "reject";
10
+ return RPCMode;
11
+ }({});
12
+ const defaultSerialize = (i) => i;
13
+ const defaultDeserialize = defaultSerialize;
14
+ function setupRPCBasic(options, functions, eventNames = []) {
15
+ const { log, post, on, serialize = defaultSerialize, deserialize = defaultDeserialize, timeout = 6e4, onError, onTimeoutError, onlyEvents = false, exceptions = true, stringHashPool } = options;
16
+ if (stringHashPool) Object.keys(functions).forEach(stringHashPool.hash);
17
+ function checkEventNames(eventNames) {}
18
+ checkEventNames(eventNames);
19
+ function registerFunctions(additionalFunctions) {
20
+ Object.assign(functions, additionalFunctions ?? {});
21
+ if (stringHashPool) Object.keys(additionalFunctions).forEach(stringHashPool.hash);
22
+ }
23
+ function registerEventNames(additionalEventNames) {
24
+ checkEventNames(additionalEventNames);
25
+ eventNames.push(...additionalEventNames);
26
+ }
27
+ const rpcPromiseMap = /* @__PURE__ */ new Map();
28
+ on(async (data) => {
29
+ try {
30
+ const msg = await deserialize(data);
31
+ const mode = msg?.[0];
32
+ const id = mode === RPCMode.event ? 0 : msg?.[1];
33
+ const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2);
34
+ const methodName = stringHashPool?.stringForHash(method) ?? method;
35
+ if (mode === RPCMode.request || mode === RPCMode.event) {
36
+ let result, error;
37
+ if (method != null) try {
38
+ const fn = functions[methodName];
39
+ result = await fn(...args);
40
+ } catch (e) {
41
+ error = String(e);
42
+ }
43
+ else error = "Method implementation missing";
44
+ if (error) {
45
+ log?.warn("error", msg, error);
46
+ onError?.(error, method ?? "", args);
47
+ }
48
+ if (id > 0) await post(await serialize(error ? [
49
+ RPCMode.reject,
50
+ id,
51
+ error
52
+ ] : [
53
+ RPCMode.resolve,
54
+ id,
55
+ result
56
+ ]));
57
+ } else if (id) {
58
+ const promise = rpcPromiseMap.get(id);
59
+ if (promise != null) {
60
+ clearTimeout(promise.timeoutId);
61
+ if (mode === RPCMode.reject && exceptions === true) promise.reject(method);
62
+ else promise.resolve(method);
63
+ }
64
+ rpcPromiseMap.delete(id);
65
+ }
66
+ } catch (err) {
67
+ log?.warn("Error on handling RPC data. Invalid?", err, data);
68
+ }
69
+ });
70
+ return {
71
+ post,
72
+ serialize,
73
+ rpcPromiseMap,
74
+ proxyHandler: { get(_, methodName) {
75
+ const method = stringHashPool?.hash(methodName) ?? methodName;
76
+ const sendEvent = async (...args) => await post(await serialize([
77
+ RPCMode.event,
78
+ method,
79
+ ...args
80
+ ]));
81
+ if (onlyEvents || eventNames.includes(methodName)) {
82
+ sendEvent.asEvent = sendEvent;
83
+ return sendEvent;
84
+ }
85
+ const sendCall = async (...args) => {
86
+ const [promise, resolve, reject] = createPromise();
87
+ const id = rpcCounter++;
88
+ let timeoutId;
89
+ if (timeout >= 0) timeoutId = setTimeout(() => {
90
+ try {
91
+ onTimeoutError?.(methodName, args);
92
+ throw new Error(`rpc timeout on calling "${methodName}"`);
93
+ } catch (e) {
94
+ if (exceptions === true) reject(e);
95
+ else resolve(void 0);
96
+ }
97
+ rpcPromiseMap.delete(id);
98
+ clearTimeout(timeoutId);
99
+ timeoutId = void 0;
100
+ }, timeout).unref?.();
101
+ rpcPromiseMap.set(id, {
102
+ resolve,
103
+ reject,
104
+ timeoutId
105
+ });
106
+ await post(await serialize([
107
+ RPCMode.request,
108
+ id,
109
+ method,
110
+ ...args
111
+ ]));
112
+ return promise;
113
+ };
114
+ sendCall.asEvent = sendEvent;
115
+ return sendCall;
116
+ } },
117
+ registerFunctions,
118
+ registerEventNames
119
+ };
120
+ }
121
+ function useRPC(functions, options) {
122
+ const { eventNames = [] } = options;
123
+ const { proxyHandler } = setupRPCBasic(options, functions, eventNames);
124
+ return new Proxy({}, proxyHandler);
125
+ }
126
+ function useRPCHub(options) {
127
+ const { proxyHandler, registerFunctions, registerEventNames } = setupRPCBasic(options, {}, []);
128
+ function createRPCProxy() {
129
+ return new Proxy({}, proxyHandler);
130
+ }
131
+ return function(additionalFunctions, additionalEventNames = []) {
132
+ registerFunctions(additionalFunctions ?? {});
133
+ registerEventNames(additionalEventNames);
134
+ return createRPCProxy();
135
+ };
136
+ }
137
+
138
+ //#endregion
139
+ export { RPCMode, useRPC, useRPCHub };
2
140
  //# sourceMappingURL=rpc.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.mjs","names":[],"sources":["../../../src/common/msg/rpc.ts"],"sourcesContent":["// From https://github.com/antfu/birpc/blob/main/src/index.ts MIT\n\nimport type { UseStringHashPool } from '../data/string-hash-pool'\nimport type { LoggerInterface } from '../log/log-base'\nimport type { Pipe } from './pipe'\nimport { createPromise } from '../exec/promise'\n\nexport type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never\nexport type ReturnType<T> = T extends (...args: any) => infer R ? R : never\n\nexport interface RPCOptionsBasic extends Pipe {\n /** No return values expected */\n onlyEvents?: boolean\n /** Maximum timeout for waiting for response, in milliseconds */\n timeout?: number\n /** Custom logger */\n log?: LoggerInterface\n /** Custom error handler */\n onError?: (error: Error, functionName: string, args: any[]) => boolean | void\n /** Custom error handler for timeouts */\n onTimeoutError?: (functionName: string, args: any[]) => boolean | void\n /** Throw execptions. Default: true */\n exceptions?: boolean\n /** */\n stringHashPool?: UseStringHashPool\n}\n\nexport interface RPCOptions<Remote> extends RPCOptionsBasic {\n // /** No return values expected */\n // onlyEvents?: boolean\n /** Names of remote functions that do not need response. */\n eventNames?: (keyof Remote)[]\n}\n\nexport interface RPCFn<T> {\n /** Call the remote function and wait for the result. */\n (...args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>>\n /** Send event without asking for response */\n asEvent: (...args: ArgumentsType<T>) => void\n}\n\nexport type RPCReturn<RemoteFunctions> = {\n [K in keyof RemoteFunctions]: RPCFn<RemoteFunctions[K]>\n}\n\nlet rpcCounter = 1\n\nexport enum RPCMode {\n request = 1,\n event = 2,\n resolve = 3,\n reject = 4,\n}\n\nexport type RPCMessage = [\n mode: RPCMode,\n id: number,\n method: string | number | any,\n ...any,\n]\n\nconst defaultSerialize = (i: any) => i\nconst defaultDeserialize = defaultSerialize\n\nfunction setupRPCBasic(options: RPCOptionsBasic, functions: Record<string, (...args: any) => Promise<any>>, eventNames: string[] = []) {\n const {\n log,\n post,\n on,\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n timeout = 60e3,\n onError,\n onTimeoutError,\n onlyEvents = false,\n exceptions = true,\n stringHashPool,\n } = options\n\n if (stringHashPool) {\n Object.keys(functions).forEach(stringHashPool.hash)\n }\n\n function checkEventNames(eventNames: string[]) {\n // eventNames.forEach((n) => {\n // if (functions[n] == null)\n // throw new Error(`event name ${n} has no registered function`)\n // })\n }\n\n checkEventNames(eventNames)\n\n function registerFunctions(additionalFunctions: any) {\n Object.assign(functions, additionalFunctions ?? {})\n if (stringHashPool)\n Object.keys(additionalFunctions).forEach(stringHashPool.hash)\n }\n\n function registerEventNames(additionalEventNames: string[]) {\n checkEventNames(additionalEventNames)\n eventNames.push(...additionalEventNames)\n }\n\n const rpcPromiseMap = new Map<number, {\n resolve: (...args: any) => any\n reject: (...args: any) => any\n timeoutId: Parameters<typeof clearTimeout>[0]\n }>()\n\n on(async (data) => {\n try {\n const msg = await deserialize(data) as RPCMessage\n const mode = msg?.[0]\n const id = mode === RPCMode.event ? 0 : msg?.[1]\n const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2)\n const methodName = stringHashPool?.stringForHash(method) ?? method\n if (mode === RPCMode.request || mode === RPCMode.event) {\n let result, error: any\n if (method != null) {\n try {\n const fn = functions[methodName]\n result = await fn(...args)\n }\n catch (e) {\n error = String(e)\n }\n }\n else {\n error = 'Method implementation missing'\n }\n if (error) {\n log?.warn('error', msg, error)\n onError?.(error, method ?? '', args)\n }\n if (id > 0) {\n const data = await serialize(error\n ? [RPCMode.reject, id, error]\n : [RPCMode.resolve, id, result])\n await post(data)\n }\n }\n else if (id) {\n const promise = rpcPromiseMap.get(id)\n if (promise != null) {\n clearTimeout(promise.timeoutId)\n if (mode === RPCMode.reject && exceptions === true)\n promise.reject(method)\n else\n promise.resolve(method)\n }\n rpcPromiseMap.delete(id)\n }\n }\n catch (err) {\n log?.warn('Error on handling RPC data. Invalid?', err, data)\n }\n })\n\n const proxyHandler = {\n get(_: any, methodName: string) {\n const method = stringHashPool?.hash(methodName) ?? methodName\n const sendEvent = async (...args: any[]) => await post(await serialize([RPCMode.event, method, ...args]))\n\n if (onlyEvents || eventNames.includes(methodName)) {\n sendEvent.asEvent = sendEvent\n return sendEvent\n }\n\n const sendCall = async (...args: any[]) => {\n const [promise, resolve, reject] = createPromise()\n const id = rpcCounter++\n\n let timeoutId: any\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n // Custom onTimeoutError handler can throw its own error too\n onTimeoutError?.(methodName, args)\n throw new Error(`rpc timeout on calling \"${methodName}\"`)\n }\n catch (e) {\n if (exceptions === true)\n reject(e)\n else\n resolve(undefined)\n }\n rpcPromiseMap.delete(id)\n\n // Garbage Collection https://jakearchibald.com/2024/garbage-collection-and-closures/\n clearTimeout(timeoutId)\n timeoutId = undefined\n }, timeout).unref?.()\n }\n\n rpcPromiseMap.set(id, { resolve, reject, timeoutId })\n const data = await serialize([RPCMode.request, id, method, ...args])\n await post(data)\n return promise\n }\n sendCall.asEvent = sendEvent\n return sendCall\n },\n }\n\n return {\n post,\n serialize,\n rpcPromiseMap,\n proxyHandler,\n registerFunctions,\n registerEventNames,\n }\n}\n\nexport function useRPC<LocalFunctions, RemoteFunctions = LocalFunctions>(\n functions: LocalFunctions,\n options: RPCOptions<RemoteFunctions>,\n): RPCReturn<RemoteFunctions> {\n const { eventNames = [] } = options\n\n const { proxyHandler } = setupRPCBasic(options, functions as any, eventNames as any)\n\n return new Proxy({}, proxyHandler)\n}\n\nexport function useRPCHub(options: RPCOptionsBasic) {\n const eventNames: string[] = []\n const functions: Record<string, any> = {}\n\n const {\n proxyHandler,\n registerFunctions,\n registerEventNames,\n } = setupRPCBasic(options, functions, eventNames)\n\n function createRPCProxy() {\n return new Proxy({}, proxyHandler)\n }\n\n return function<LocalFunctions, RemoteFunctions = LocalFunctions>(\n additionalFunctions?: LocalFunctions,\n additionalEventNames: string[] = [],\n ): RPCReturn<RemoteFunctions> {\n registerFunctions(additionalFunctions ?? {})\n registerEventNames(additionalEventNames)\n return createRPCProxy()\n }\n}\n\nexport type UseRPCHubType = ReturnType<typeof useRPCHub>\n\n// Syntax test case\n// async function _demo() {\n// const hub: UseRPCHubType = {} as any\n// const x = hub({\n// test(name: string): string {\n// return name\n// },\n// })\n// await x.test('dsd')\n// }\n"],"mappings":"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"}
1
+ {"version":3,"file":"rpc.mjs","names":[],"sources":["../../../src/common/msg/rpc.ts"],"sourcesContent":["// From https://github.com/antfu/birpc/blob/main/src/index.ts MIT\n\nimport type { UseStringHashPool } from '../data/string-hash-pool'\nimport type { LoggerInterface } from '../log/log-base'\nimport type { Pipe } from './pipe'\nimport { createPromise } from '../exec/promise'\n\nexport type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never\nexport type ReturnType<T> = T extends (...args: any) => infer R ? R : never\n\nexport interface RPCOptionsBasic extends Pipe {\n /** No return values expected */\n onlyEvents?: boolean\n /** Maximum timeout for waiting for response, in milliseconds */\n timeout?: number\n /** Custom logger */\n log?: LoggerInterface\n /** Custom error handler */\n onError?: (error: Error, functionName: string, args: any[]) => boolean | void\n /** Custom error handler for timeouts */\n onTimeoutError?: (functionName: string, args: any[]) => boolean | void\n /** Throw execptions. Default: true */\n exceptions?: boolean\n /** */\n stringHashPool?: UseStringHashPool\n}\n\nexport interface RPCOptions<Remote> extends RPCOptionsBasic {\n // /** No return values expected */\n // onlyEvents?: boolean\n /** Names of remote functions that do not need response. */\n eventNames?: (keyof Remote)[]\n}\n\nexport interface RPCFn<T> {\n /** Call the remote function and wait for the result. */\n (...args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>>\n /** Send event without asking for response */\n asEvent: (...args: ArgumentsType<T>) => void\n}\n\nexport type RPCReturn<RemoteFunctions> = {\n [K in keyof RemoteFunctions]: RPCFn<RemoteFunctions[K]>\n}\n\nlet rpcCounter = 1\n\nexport enum RPCMode {\n request = 1,\n event = 2,\n resolve = 3,\n reject = 4,\n}\n\nexport type RPCMessage = [\n mode: RPCMode,\n id: number,\n method: string | number | any,\n ...any,\n]\n\nconst defaultSerialize = (i: any) => i\nconst defaultDeserialize = defaultSerialize\n\nfunction setupRPCBasic(options: RPCOptionsBasic, functions: Record<string, (...args: any) => Promise<any>>, eventNames: string[] = []) {\n const {\n log,\n post,\n on,\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n timeout = 60e3,\n onError,\n onTimeoutError,\n onlyEvents = false,\n exceptions = true,\n stringHashPool,\n } = options\n\n if (stringHashPool) {\n Object.keys(functions).forEach(stringHashPool.hash)\n }\n\n function checkEventNames(eventNames: string[]) {\n // eventNames.forEach((n) => {\n // if (functions[n] == null)\n // throw new Error(`event name ${n} has no registered function`)\n // })\n }\n\n checkEventNames(eventNames)\n\n function registerFunctions(additionalFunctions: any) {\n Object.assign(functions, additionalFunctions ?? {})\n if (stringHashPool)\n Object.keys(additionalFunctions).forEach(stringHashPool.hash)\n }\n\n function registerEventNames(additionalEventNames: string[]) {\n checkEventNames(additionalEventNames)\n eventNames.push(...additionalEventNames)\n }\n\n const rpcPromiseMap = new Map<number, {\n resolve: (...args: any) => any\n reject: (...args: any) => any\n timeoutId: Parameters<typeof clearTimeout>[0]\n }>()\n\n on(async (data) => {\n try {\n const msg = await deserialize(data) as RPCMessage\n const mode = msg?.[0]\n const id = mode === RPCMode.event ? 0 : msg?.[1]\n const [method, ...args] = msg.slice(mode === RPCMode.event ? 1 : 2)\n const methodName = stringHashPool?.stringForHash(method) ?? method\n if (mode === RPCMode.request || mode === RPCMode.event) {\n let result, error: any\n if (method != null) {\n try {\n const fn = functions[methodName]\n result = await fn(...args)\n }\n catch (e) {\n error = String(e)\n }\n }\n else {\n error = 'Method implementation missing'\n }\n if (error) {\n log?.warn('error', msg, error)\n onError?.(error, method ?? '', args)\n }\n if (id > 0) {\n const data = await serialize(error\n ? [RPCMode.reject, id, error]\n : [RPCMode.resolve, id, result])\n await post(data)\n }\n }\n else if (id) {\n const promise = rpcPromiseMap.get(id)\n if (promise != null) {\n clearTimeout(promise.timeoutId)\n if (mode === RPCMode.reject && exceptions === true)\n promise.reject(method)\n else\n promise.resolve(method)\n }\n rpcPromiseMap.delete(id)\n }\n }\n catch (err) {\n log?.warn('Error on handling RPC data. Invalid?', err, data)\n }\n })\n\n const proxyHandler = {\n get(_: any, methodName: string) {\n const method = stringHashPool?.hash(methodName) ?? methodName\n const sendEvent = async (...args: any[]) => await post(await serialize([RPCMode.event, method, ...args]))\n\n if (onlyEvents || eventNames.includes(methodName)) {\n sendEvent.asEvent = sendEvent\n return sendEvent\n }\n\n const sendCall = async (...args: any[]) => {\n const [promise, resolve, reject] = createPromise()\n const id = rpcCounter++\n\n let timeoutId: any\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n // Custom onTimeoutError handler can throw its own error too\n onTimeoutError?.(methodName, args)\n throw new Error(`rpc timeout on calling \"${methodName}\"`)\n }\n catch (e) {\n if (exceptions === true)\n reject(e)\n else\n resolve(undefined)\n }\n rpcPromiseMap.delete(id)\n\n // Garbage Collection https://jakearchibald.com/2024/garbage-collection-and-closures/\n clearTimeout(timeoutId)\n timeoutId = undefined\n }, timeout).unref?.()\n }\n\n rpcPromiseMap.set(id, { resolve, reject, timeoutId })\n const data = await serialize([RPCMode.request, id, method, ...args])\n await post(data)\n return promise\n }\n sendCall.asEvent = sendEvent\n return sendCall\n },\n }\n\n return {\n post,\n serialize,\n rpcPromiseMap,\n proxyHandler,\n registerFunctions,\n registerEventNames,\n }\n}\n\nexport function useRPC<LocalFunctions, RemoteFunctions = LocalFunctions>(\n functions: LocalFunctions,\n options: RPCOptions<RemoteFunctions>,\n): RPCReturn<RemoteFunctions> {\n const { eventNames = [] } = options\n\n const { proxyHandler } = setupRPCBasic(options, functions as any, eventNames as any)\n\n return new Proxy({}, proxyHandler)\n}\n\nexport function useRPCHub(options: RPCOptionsBasic) {\n const eventNames: string[] = []\n const functions: Record<string, any> = {}\n\n const {\n proxyHandler,\n registerFunctions,\n registerEventNames,\n } = setupRPCBasic(options, functions, eventNames)\n\n function createRPCProxy() {\n return new Proxy({}, proxyHandler)\n }\n\n return function<LocalFunctions, RemoteFunctions = LocalFunctions>(\n additionalFunctions?: LocalFunctions,\n additionalEventNames: string[] = [],\n ): RPCReturn<RemoteFunctions> {\n registerFunctions(additionalFunctions ?? {})\n registerEventNames(additionalEventNames)\n return createRPCProxy()\n }\n}\n\nexport type UseRPCHubType = ReturnType<typeof useRPCHub>\n\n// Syntax test case\n// async function _demo() {\n// const hub: UseRPCHubType = {} as any\n// const x = hub({\n// test(name: string): string {\n// return name\n// },\n// })\n// await x.test('dsd')\n// }\n"],"mappings":"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"}
@@ -1,2 +1,130 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./data/json.cjs`),t=require(`./data/is.cjs`),n=require(`./log/log.cjs`),r=require(`../bin-Ce3i6ABn.cjs`),i=require(`./data/array.cjs`),a=require(`./data/deep.cjs`),o=require(`./data/url.cjs`),s={cache:`no-cache`,redirect:`follow`,headers:{}};function c(e){let t=/:\/\/([^@]*)@/.exec(e);if(t&&t[1]){let[n,r]=t[1].split(`:`,2);return{url:e.replace(`${t[1]}@`,``),username:n,password:r}}}async function l(e,r={},o=fetch){try{t.isArray(r)&&(r=a.deepMerge({},...i.arrayFlatten(r)));let s=c(String(e));s&&(e=s.url,r=a.deepMerge({},r,m(s.username,s.password))),r.headers!=null&&!(r.headers instanceof Headers)&&(r.headers=new Headers(r.headers));let l=await o(String(e),r);if(l.status<400)return l;let u=n.DefaultLogger(`zeed:network`);try{u.warn(`Fetch of ${String(e)} returned status=${l.status}. Options:`,r),u.warn(`Response: ${await l.text()}`)}catch(e){u.error(`Exception:`,e)}}catch(e){n.DefaultLogger(`zeed:network`).error(`fetchBasic`,e)}}async function u(t,r={},i=fetch){try{let n=await l(t,[{method:`GET`,headers:{Accept:`application/json`}},r],i);if(n)return e.jsonParse(await n.text())}catch(e){n.DefaultLogger(`zeed:network`).error(`fetchJSON error:`,e)}}async function d(e,t={},r=fetch){try{let n=await l(e,[s,{method:`GET`},t],r);if(n)return await n.text()}catch(e){n.DefaultLogger(`zeed:network`).error(`fetchHTML error:`,e)}}function f(e,t=`POST`){return{method:t,...s,headers:{"Content-Type":`application/x-www-form-urlencoded; charset=utf-8`},body:o.encodeQuery(e)}}function p(t,n=`POST`){return{method:n,...s,headers:{"Content-Type":`application/json; charset=utf-8`},body:e.jsonStringifySafe(t)}}function m(e,t){return{headers:{Authorization:`Basic ${r.h(`${e}:${t}`)}`}}}exports.fetchBasic=l,exports.fetchJson=u,exports.fetchOptionsBasicAuth=m,exports.fetchOptionsFormURLEncoded=f,exports.fetchOptionsJson=p,exports.fetchText=d,exports.parseBasicAuth=c;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_data_json = require('./data/json.cjs');
3
+ const require_common_data_is = require('./data/is.cjs');
4
+ const require_common_log_log = require('./log/log.cjs');
5
+ const require_bin = require('../bin-Ddaz2lxM.cjs');
6
+ const require_common_data_array = require('./data/array.cjs');
7
+ const require_common_data_deep = require('./data/deep.cjs');
8
+ const require_common_data_url = require('./data/url.cjs');
9
+
10
+ //#region src/common/network.ts
11
+ const defaultOptions = {
12
+ cache: "no-cache",
13
+ redirect: "follow",
14
+ headers: {}
15
+ };
16
+ function parseBasicAuth(url) {
17
+ const m = /:\/\/([^@]*)@/.exec(url);
18
+ if (m && m[1]) {
19
+ const [username, password] = m[1].split(":", 2);
20
+ return {
21
+ url: url.replace(`${m[1]}@`, ""),
22
+ username,
23
+ password
24
+ };
25
+ }
26
+ }
27
+ /**
28
+ * Simplified `fetch` wrapper.
29
+ * - Accepts a single fetch options object or an array of options which will be deep-merged.
30
+ * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).
31
+ * - Normalizes headers to a `Headers` instance.
32
+ * - Returns the `Response` when status < 400, otherwise returns `undefined`.
33
+ * @category Network
34
+ */
35
+ async function fetchBasic(url, fetchOptions = {}, fetchFn = fetch) {
36
+ try {
37
+ if (require_common_data_is.isArray(fetchOptions)) fetchOptions = require_common_data_deep.deepMerge({}, ...require_common_data_array.arrayFlatten(fetchOptions));
38
+ const auth = parseBasicAuth(String(url));
39
+ if (auth) {
40
+ url = auth.url;
41
+ fetchOptions = require_common_data_deep.deepMerge({}, fetchOptions, fetchOptionsBasicAuth(auth.username, auth.password));
42
+ }
43
+ if (fetchOptions.headers != null && !(fetchOptions.headers instanceof Headers)) fetchOptions.headers = new Headers(fetchOptions.headers);
44
+ const response = await fetchFn(String(url), fetchOptions);
45
+ if (response.status < 400) return response;
46
+ const log = require_common_log_log.DefaultLogger("zeed:network");
47
+ try {
48
+ log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions);
49
+ log.warn(`Response: ${await response.text()}`);
50
+ } catch (err) {
51
+ log.error("Exception:", err);
52
+ }
53
+ } catch (err) {
54
+ require_common_log_log.DefaultLogger("zeed:network").error("fetchBasic", err);
55
+ }
56
+ }
57
+ /**
58
+ * Fetch and parse JSON.
59
+ * Returns the parsed JSON object or `undefined` on error.
60
+ * @category Network
61
+ */
62
+ async function fetchJson(url, fetchOptions = {}, fetchFn = fetch) {
63
+ try {
64
+ const res = await fetchBasic(url, [{
65
+ method: "GET",
66
+ headers: { Accept: "application/json" }
67
+ }, fetchOptions], fetchFn);
68
+ if (res) return require_common_data_json.jsonParse(await res.text());
69
+ } catch (err) {
70
+ require_common_log_log.DefaultLogger("zeed:network").error("fetchJSON error:", err);
71
+ }
72
+ }
73
+ /**
74
+ * Fetch text content.
75
+ * Returns the response text or `undefined` on error.
76
+ * @category Network
77
+ */
78
+ async function fetchText(url, fetchOptions = {}, fetchFn = fetch) {
79
+ try {
80
+ const res = await fetchBasic(url, [
81
+ defaultOptions,
82
+ { method: "GET" },
83
+ fetchOptions
84
+ ], fetchFn);
85
+ if (res) return await res.text();
86
+ } catch (err) {
87
+ require_common_log_log.DefaultLogger("zeed:network").error("fetchHTML error:", err);
88
+ }
89
+ }
90
+ /**
91
+ * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.
92
+ * @category Network
93
+ */
94
+ function fetchOptionsFormURLEncoded(data, method = "POST") {
95
+ return {
96
+ method,
97
+ ...defaultOptions,
98
+ headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" },
99
+ body: require_common_data_url.encodeQuery(data)
100
+ };
101
+ }
102
+ /**
103
+ * Options for `fetchBasic` to send JSON data.
104
+ * @category Network
105
+ */
106
+ function fetchOptionsJson(data, method = "POST") {
107
+ return {
108
+ method,
109
+ ...defaultOptions,
110
+ headers: { "Content-Type": "application/json; charset=utf-8" },
111
+ body: require_common_data_json.jsonStringifySafe(data)
112
+ };
113
+ }
114
+ /**
115
+ * Create options to add Basic Authorization header using given username/password.
116
+ * @category Network
117
+ */
118
+ function fetchOptionsBasicAuth(username, password) {
119
+ return { headers: { Authorization: `Basic ${require_bin.toBase64(`${username}:${password}`)}` } };
120
+ }
121
+
122
+ //#endregion
123
+ exports.fetchBasic = fetchBasic;
124
+ exports.fetchJson = fetchJson;
125
+ exports.fetchOptionsBasicAuth = fetchOptionsBasicAuth;
126
+ exports.fetchOptionsFormURLEncoded = fetchOptionsFormURLEncoded;
127
+ exports.fetchOptionsJson = fetchOptionsJson;
128
+ exports.fetchText = fetchText;
129
+ exports.parseBasicAuth = parseBasicAuth;
2
130
  //# sourceMappingURL=network.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.cjs","names":["isArray","deepMerge","arrayFlatten","DefaultLogger","jsonParse","encodeQuery","jsonStringifySafe","toBase64"],"sources":["../../src/common/network.ts"],"sourcesContent":["import type { Json } from './types'\nimport { arrayFlatten } from './data/array'\nimport { toBase64 } from './data/bin'\nimport { deepMerge } from './data/deep'\nimport { isArray } from './data/is'\nimport { jsonParse, jsonStringifySafe } from './data/json'\nimport { encodeQuery } from './data/url'\nimport { DefaultLogger } from './log/log'\n\n// TODO: Abort signal https://codedrivendevelopment.com/posts/everything-about-abort-signal-timeout\n\n/**\n * Options for fetch requests.\n * @category Network\n */\nexport interface fetchOptionType {\n /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n cache?: RequestCache\n /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n credentials?: RequestCredentials\n /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n destination?: RequestDestination\n /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n headers?: Record<string, string>\n /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n integrity?: string\n /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n keepalive?: boolean\n /** Returns request's HTTP method, which is \"GET\" by default. */\n method?: string\n /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n mode?: RequestMode\n /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n redirect?: RequestRedirect\n /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */\n referrer?: string\n /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n referrerPolicy?: ReferrerPolicy\n /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n signal?: AbortSignal\n /** Returns the URL of request as a string. */\n url?: string\n body?: any\n}\n\n/**\n * Type for fetch options, can be a single option or an array of options.\n * @category Network\n */\nexport type fetchOptionsType = fetchOptionType | fetchOptionsType[]\n\nconst defaultOptions: fetchOptionType = {\n cache: 'no-cache',\n redirect: 'follow',\n headers: {},\n}\n\n// Source https://developer.mozilla.org/de/docs/Web/HTTP/Methods\nexport type httpMethod\n = | 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'HEAD'\n | 'CONNECT'\n | 'OPTIONS'\n | 'TRACE'\n | 'PATCH'\n\nexport function parseBasicAuth(url: string) {\n const m = /:\\/\\/([^@]*)@/.exec(url)\n if (m && m[1]) {\n const [username, password] = m[1].split(':', 2)\n return {\n url: url.replace(`${m[1]}@`, ''),\n username,\n password,\n }\n }\n}\n\n/**\n * Simplified `fetch` wrapper.\n * - Accepts a single fetch options object or an array of options which will be deep-merged.\n * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).\n * - Normalizes headers to a `Headers` instance.\n * - Returns the `Response` when status < 400, otherwise returns `undefined`.\n * @category Network\n */\nexport async function fetchBasic(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<Response | undefined> {\n try {\n if (isArray(fetchOptions))\n fetchOptions = deepMerge({}, ...arrayFlatten(fetchOptions))\n\n const auth = parseBasicAuth(String(url))\n if (auth) {\n url = auth.url\n fetchOptions = deepMerge(\n {},\n fetchOptions,\n fetchOptionsBasicAuth(auth.username, auth.password),\n )\n }\n\n if (\n // @ts-expect-error headers\n fetchOptions.headers != null\n // @ts-expect-error headers\n && !(fetchOptions.headers instanceof Headers)\n ) {\n // @ts-expect-error headers\n fetchOptions.headers = new Headers(fetchOptions.headers)\n }\n\n // log(\"fetch\", url, fetchOptions)\n const response = await fetchFn(String(url), fetchOptions as RequestInit)\n\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n if (response.status < 400)\n return response\n\n const log = DefaultLogger('zeed:network')\n\n try {\n log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions)\n log.warn(`Response: ${await response.text()}`)\n }\n catch (err) {\n log.error('Exception:', err)\n }\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchBasic', err)\n }\n}\n/**\n * Fetch and parse JSON.\n * Returns the parsed JSON object or `undefined` on error.\n * @category Network\n */\nexport async function fetchJson<T = Json>(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<T | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n },\n fetchOptions,\n ],\n fetchFn,\n )\n if (res)\n return jsonParse(await res.text())\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchJSON error:', err)\n }\n}\n/**\n * Fetch text content.\n * Returns the response text or `undefined` on error.\n * @category Network\n */\nexport async function fetchText(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<string | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [defaultOptions, { method: 'GET' }, fetchOptions],\n fetchFn,\n )\n if (res)\n return await res.text()\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchHTML error:', err)\n }\n}\n\n///\n\n/**\n * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.\n * @category Network\n */\nexport function fetchOptionsFormURLEncoded(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n },\n body: encodeQuery(data),\n }\n}\n\n/**\n * Options for `fetchBasic` to send JSON data.\n * @category Network\n */\nexport function fetchOptionsJson(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n // Accept: \"application/json\",\n },\n body: jsonStringifySafe(data),\n }\n}\n\n/**\n * Create options to add Basic Authorization header using given username/password.\n * @category Network\n */\nexport function fetchOptionsBasicAuth(\n username: string,\n password: string,\n): fetchOptionType {\n return {\n headers: {\n Authorization: `Basic ${toBase64(`${username}:${password}`)}`,\n },\n }\n}\n"],"mappings":"oRAmDM,EAAkC,CACtC,MAAO,WACP,SAAU,SACV,QAAS,EAAE,CACZ,CAcD,SAAgB,EAAe,EAAa,CAC1C,IAAM,EAAI,gBAAgB,KAAK,EAAI,CACnC,GAAI,GAAK,EAAE,GAAI,CACb,GAAM,CAAC,EAAU,GAAY,EAAE,GAAG,MAAM,IAAK,EAAE,CAC/C,MAAO,CACL,IAAK,EAAI,QAAQ,GAAG,EAAE,GAAG,GAAI,GAAG,CAChC,WACA,WACD,EAYL,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MAC1C,CAC/B,GAAI,CACEA,EAAAA,QAAQ,EAAa,GACvB,EAAeC,EAAAA,UAAU,EAAE,CAAE,GAAGC,EAAAA,aAAa,EAAa,CAAC,EAE7D,IAAM,EAAO,EAAe,OAAO,EAAI,CAAC,CACpC,IACF,EAAM,EAAK,IACX,EAAeD,EAAAA,UACb,EAAE,CACF,EACA,EAAsB,EAAK,SAAU,EAAK,SAAS,CACpD,EAKD,EAAa,SAAW,MAErB,EAAE,EAAa,mBAAmB,WAGrC,EAAa,QAAU,IAAI,QAAQ,EAAa,QAAQ,EAI1D,IAAM,EAAW,MAAM,EAAQ,OAAO,EAAI,CAAE,EAA4B,CAGxE,GAAI,EAAS,OAAS,IACpB,OAAO,EAET,IAAM,EAAME,EAAAA,cAAc,eAAe,CAEzC,GAAI,CACF,EAAI,KAAK,YAAY,OAAO,EAAI,CAAC,mBAAmB,EAAS,OAAO,YAAa,EAAa,CAC9F,EAAI,KAAK,aAAa,MAAM,EAAS,MAAM,GAAG,OAEzC,EAAK,CACV,EAAI,MAAM,aAAc,EAAI,QAGzB,EAAK,CACEA,EAAAA,cAAc,eAAe,CACrC,MAAM,aAAc,EAAI,EAQhC,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MACjD,CACxB,GAAI,CACF,IAAM,EAAM,MAAM,EAChB,EACA,CACE,CACE,OAAQ,MACR,QAAS,CACP,OAAQ,mBACT,CACF,CACD,EACD,CACD,EACD,CACD,GAAI,EACF,OAAOC,EAAAA,UAAU,MAAM,EAAI,MAAM,CAAC,OAE/B,EAAK,CACED,EAAAA,cAAc,eAAe,CACrC,MAAM,mBAAoB,EAAI,EAQtC,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MAC5C,CAC7B,GAAI,CACF,IAAM,EAAM,MAAM,EAChB,EACA,CAAC,EAAgB,CAAE,OAAQ,MAAO,CAAE,EAAa,CACjD,EACD,CACD,GAAI,EACF,OAAO,MAAM,EAAI,MAAM,OAEpB,EAAK,CACEA,EAAAA,cAAc,eAAe,CACrC,MAAM,mBAAoB,EAAI,EAUtC,SAAgB,EACd,EACA,EAAqB,OACJ,CACjB,MAAO,CACL,SACA,GAAG,EACH,QAAS,CACP,eAAgB,mDACjB,CACD,KAAME,EAAAA,YAAY,EAAK,CACxB,CAOH,SAAgB,EACd,EACA,EAAqB,OACJ,CACjB,MAAO,CACL,SACA,GAAG,EACH,QAAS,CACP,eAAgB,kCAEjB,CACD,KAAMC,EAAAA,kBAAkB,EAAK,CAC9B,CAOH,SAAgB,EACd,EACA,EACiB,CACjB,MAAO,CACL,QAAS,CACP,cAAe,SAASC,EAAAA,EAAS,GAAG,EAAS,GAAG,IAAW,GAC5D,CACF"}
1
+ {"version":3,"file":"network.cjs","names":["isArray","deepMerge","arrayFlatten","DefaultLogger","jsonParse","encodeQuery","jsonStringifySafe","toBase64"],"sources":["../../src/common/network.ts"],"sourcesContent":["import type { Json } from './types'\nimport { arrayFlatten } from './data/array'\nimport { toBase64 } from './data/bin'\nimport { deepMerge } from './data/deep'\nimport { isArray } from './data/is'\nimport { jsonParse, jsonStringifySafe } from './data/json'\nimport { encodeQuery } from './data/url'\nimport { DefaultLogger } from './log/log'\n\n// TODO: Abort signal https://codedrivendevelopment.com/posts/everything-about-abort-signal-timeout\n\n/**\n * Options for fetch requests.\n * @category Network\n */\nexport interface fetchOptionType {\n /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n cache?: RequestCache\n /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n credentials?: RequestCredentials\n /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n destination?: RequestDestination\n /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n headers?: Record<string, string>\n /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n integrity?: string\n /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n keepalive?: boolean\n /** Returns request's HTTP method, which is \"GET\" by default. */\n method?: string\n /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n mode?: RequestMode\n /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n redirect?: RequestRedirect\n /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */\n referrer?: string\n /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n referrerPolicy?: ReferrerPolicy\n /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n signal?: AbortSignal\n /** Returns the URL of request as a string. */\n url?: string\n body?: any\n}\n\n/**\n * Type for fetch options, can be a single option or an array of options.\n * @category Network\n */\nexport type fetchOptionsType = fetchOptionType | fetchOptionsType[]\n\nconst defaultOptions: fetchOptionType = {\n cache: 'no-cache',\n redirect: 'follow',\n headers: {},\n}\n\n// Source https://developer.mozilla.org/de/docs/Web/HTTP/Methods\nexport type httpMethod\n = | 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'HEAD'\n | 'CONNECT'\n | 'OPTIONS'\n | 'TRACE'\n | 'PATCH'\n\nexport function parseBasicAuth(url: string) {\n const m = /:\\/\\/([^@]*)@/.exec(url)\n if (m && m[1]) {\n const [username, password] = m[1].split(':', 2)\n return {\n url: url.replace(`${m[1]}@`, ''),\n username,\n password,\n }\n }\n}\n\n/**\n * Simplified `fetch` wrapper.\n * - Accepts a single fetch options object or an array of options which will be deep-merged.\n * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).\n * - Normalizes headers to a `Headers` instance.\n * - Returns the `Response` when status < 400, otherwise returns `undefined`.\n * @category Network\n */\nexport async function fetchBasic(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<Response | undefined> {\n try {\n if (isArray(fetchOptions))\n fetchOptions = deepMerge({}, ...arrayFlatten(fetchOptions))\n\n const auth = parseBasicAuth(String(url))\n if (auth) {\n url = auth.url\n fetchOptions = deepMerge(\n {},\n fetchOptions,\n fetchOptionsBasicAuth(auth.username, auth.password),\n )\n }\n\n if (\n // @ts-expect-error headers\n fetchOptions.headers != null\n // @ts-expect-error headers\n && !(fetchOptions.headers instanceof Headers)\n ) {\n // @ts-expect-error headers\n fetchOptions.headers = new Headers(fetchOptions.headers)\n }\n\n // log(\"fetch\", url, fetchOptions)\n const response = await fetchFn(String(url), fetchOptions as RequestInit)\n\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n if (response.status < 400)\n return response\n\n const log = DefaultLogger('zeed:network')\n\n try {\n log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions)\n log.warn(`Response: ${await response.text()}`)\n }\n catch (err) {\n log.error('Exception:', err)\n }\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchBasic', err)\n }\n}\n/**\n * Fetch and parse JSON.\n * Returns the parsed JSON object or `undefined` on error.\n * @category Network\n */\nexport async function fetchJson<T = Json>(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<T | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n },\n fetchOptions,\n ],\n fetchFn,\n )\n if (res)\n return jsonParse(await res.text())\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchJSON error:', err)\n }\n}\n/**\n * Fetch text content.\n * Returns the response text or `undefined` on error.\n * @category Network\n */\nexport async function fetchText(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<string | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [defaultOptions, { method: 'GET' }, fetchOptions],\n fetchFn,\n )\n if (res)\n return await res.text()\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchHTML error:', err)\n }\n}\n\n///\n\n/**\n * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.\n * @category Network\n */\nexport function fetchOptionsFormURLEncoded(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n },\n body: encodeQuery(data),\n }\n}\n\n/**\n * Options for `fetchBasic` to send JSON data.\n * @category Network\n */\nexport function fetchOptionsJson(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n // Accept: \"application/json\",\n },\n body: jsonStringifySafe(data),\n }\n}\n\n/**\n * Create options to add Basic Authorization header using given username/password.\n * @category Network\n */\nexport function fetchOptionsBasicAuth(\n username: string,\n password: string,\n): fetchOptionType {\n return {\n headers: {\n Authorization: `Basic ${toBase64(`${username}:${password}`)}`,\n },\n }\n}\n"],"mappings":";;;;;;;;;;AAmDA,MAAM,iBAAkC;CACtC,OAAO;CACP,UAAU;CACV,SAAS,EAAE;CACZ;AAcD,SAAgB,eAAe,KAAa;CAC1C,MAAM,IAAI,gBAAgB,KAAK,IAAI;AACnC,KAAI,KAAK,EAAE,IAAI;EACb,MAAM,CAAC,UAAU,YAAY,EAAE,GAAG,MAAM,KAAK,EAAE;AAC/C,SAAO;GACL,KAAK,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG;GAChC;GACA;GACD;;;;;;;;;;;AAYL,eAAsB,WACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OAC1C;AAC/B,KAAI;AACF,MAAIA,+BAAQ,aAAa,CACvB,gBAAeC,mCAAU,EAAE,EAAE,GAAGC,uCAAa,aAAa,CAAC;EAE7D,MAAM,OAAO,eAAe,OAAO,IAAI,CAAC;AACxC,MAAI,MAAM;AACR,SAAM,KAAK;AACX,kBAAeD,mCACb,EAAE,EACF,cACA,sBAAsB,KAAK,UAAU,KAAK,SAAS,CACpD;;AAGH,MAEE,aAAa,WAAW,QAErB,EAAE,aAAa,mBAAmB,SAGrC,cAAa,UAAU,IAAI,QAAQ,aAAa,QAAQ;EAI1D,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,EAAE,aAA4B;AAGxE,MAAI,SAAS,SAAS,IACpB,QAAO;EAET,MAAM,MAAME,qCAAc,eAAe;AAEzC,MAAI;AACF,OAAI,KAAK,YAAY,OAAO,IAAI,CAAC,mBAAmB,SAAS,OAAO,aAAa,aAAa;AAC9F,OAAI,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG;WAEzC,KAAK;AACV,OAAI,MAAM,cAAc,IAAI;;UAGzB,KAAK;AAEV,EADYA,qCAAc,eAAe,CACrC,MAAM,cAAc,IAAI;;;;;;;;AAQhC,eAAsB,UACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OACjD;AACxB,KAAI;EACF,MAAM,MAAM,MAAM,WAChB,KACA,CACE;GACE,QAAQ;GACR,SAAS,EACP,QAAQ,oBACT;GACF,EACD,aACD,EACD,QACD;AACD,MAAI,IACF,QAAOC,mCAAU,MAAM,IAAI,MAAM,CAAC;UAE/B,KAAK;AAEV,EADYD,qCAAc,eAAe,CACrC,MAAM,oBAAoB,IAAI;;;;;;;;AAQtC,eAAsB,UACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OAC5C;AAC7B,KAAI;EACF,MAAM,MAAM,MAAM,WAChB,KACA;GAAC;GAAgB,EAAE,QAAQ,OAAO;GAAE;GAAa,EACjD,QACD;AACD,MAAI,IACF,QAAO,MAAM,IAAI,MAAM;UAEpB,KAAK;AAEV,EADYA,qCAAc,eAAe,CACrC,MAAM,oBAAoB,IAAI;;;;;;;AAUtC,SAAgB,2BACd,MACA,SAAqB,QACJ;AACjB,QAAO;EACL;EACA,GAAG;EACH,SAAS,EACP,gBAAgB,oDACjB;EACD,MAAME,oCAAY,KAAK;EACxB;;;;;;AAOH,SAAgB,iBACd,MACA,SAAqB,QACJ;AACjB,QAAO;EACL;EACA,GAAG;EACH,SAAS,EACP,gBAAgB,mCAEjB;EACD,MAAMC,2CAAkB,KAAK;EAC9B;;;;;;AAOH,SAAgB,sBACd,UACA,UACiB;AACjB,QAAO,EACL,SAAS,EACP,eAAe,SAASC,qBAAS,GAAG,SAAS,GAAG,WAAW,IAC5D,EACF"}