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
package/AGENTS.md CHANGED
@@ -1,233 +1,72 @@
1
1
  # AGENTS.md
2
2
 
3
- ## Project Overview
3
+ Guidance for coding agents working on the zeed repository. For end-user documentation see [README.md](README.md).
4
4
 
5
- Zeed is a zero-dependency TypeScript utility library designed for universal JavaScript (browsers, Node.js, Deno, and Bun). It provides core utilities for logging, messaging, schema validation, event handling, async operations, and more.
5
+ ## Project
6
6
 
7
- **Key characteristics:**
8
- - Zero runtime dependencies (all integrations are vendored or optional)
9
- - Strict TypeScript with full type inference
10
- - Tree-shakable ESM with CommonJS fallback
11
- - Platform-specific code split between `src/browser/`, `src/node/`, and `src/common/`
7
+ Zero-dependency TypeScript utility library for universal JavaScript (browser, Node, Deno, Bun).
12
8
 
13
- ## Commands
14
-
15
- ### Building and Development
16
- ```bash
17
- # Build the library (ESM + CJS with minification and types)
18
- pnpm build
19
-
20
- # Type checking without compilation
21
- pnpm check
22
-
23
- # Watch mode for development
24
- pnpm watch
25
- ```
26
-
27
- ### Testing
28
- ```bash
29
- # Run all tests (Node.js + common)
30
- pnpm test
31
-
32
- # Run tests with coverage report
33
- pnpm coverage
9
+ - Zero runtime dependencies
10
+ - Strict TypeScript, full type inference
11
+ - Tree-shakable ESM with CJS fallback
12
+ - Platform split: `src/browser/`, `src/node/`, `src/common/`
34
13
 
35
- # Run specific test file
36
- pnpm test <filename>.spec.ts
14
+ ## Commands
37
15
 
38
- # Run browser tests in different browsers
39
- pnpm test:browser # Chromium with preview
40
- pnpm test:chromium # Chromium via playwright
41
- pnpm test:firefox # Firefox via playwright
42
- pnpm test:webkit # WebKit via playwright
43
- ```
16
+ Package manager: `pnpm` (>= 10). Node >= 20. `nr` is a binary from `@antfu/ni` that runs `package.json` scripts.
44
17
 
45
- ### Linting
46
18
  ```bash
47
- # Check for linting issues
48
- pnpm lint
49
-
50
- # Auto-fix linting issues
19
+ pnpm build # tsdown build (ESM + CJS + types)
20
+ pnpm check # tsc --noEmit
21
+ pnpm watch # incremental build
22
+ pnpm test # type check + vitest run (node + common)
23
+ pnpm coverage # vitest with coverage
24
+ pnpm vitest run path/to/file.spec.ts # single test file
25
+ pnpm test:chromium # browser tests via playwright (also :firefox, :webkit)
26
+ pnpm test:browser # browser tests with preview UI
27
+ pnpm lint # eslint
51
28
  pnpm lint:fix
29
+ pnpm build:docs # typedoc -> docs/
52
30
  ```
53
31
 
54
- ### Documentation
55
- ```bash
56
- # Generate API documentation (published to https://zeed.holtwick.de/)
57
- pnpm build:docs
58
- ```
59
-
60
- ## Architecture
61
-
62
- ### Module Structure
63
-
64
- The codebase is organized into three main areas:
65
-
66
- 1. **`src/common/`** - Platform-agnostic utilities
67
- - Core functionality that works everywhere (browser, Node.js, Deno, Bun)
68
- - Includes: schema validation, messaging, data utilities, logging foundation, etc.
69
-
70
- 2. **`src/browser/`** - Browser-specific utilities
71
- - DOM interactions, LocalStorage, browser-specific logging handlers
72
- - Example: `log-browser-factory.ts` provides colorful console output for browsers
73
-
74
- 3. **`src/node/`** - Node.js/Deno/Bun-specific utilities
75
- - File system operations, process env handling, Node-specific features
76
- - Example: `env.ts` for environment variable management
77
-
78
- ### Entry Points
79
-
80
- The library uses conditional exports for platform-specific builds:
81
-
82
- - **`src/index.all.ts`** - Full universal export (browser + node + common)
83
- - **`src/index.browser.ts`** - Browser-only build (re-exports browser + common)
84
- - **`src/index.node.ts`** - Node-only build (re-exports node + common)
85
- - **`src/index.jsr.ts`** - JSR registry specific export
86
-
87
- The `package.json` exports field automatically selects the right build:
88
- ```json
89
- {
90
- "exports": {
91
- ".": {
92
- "types": "./dist/index.all.d.mts",
93
- "require": "./dist/index.node.cjs",
94
- "node": "./dist/index.node.mjs",
95
- "default": "./dist/index.browser.mjs"
96
- }
97
- }
98
- }
99
- ```
100
-
101
- ### Key Subsystems
102
-
103
- #### Messaging (`src/common/msg/`)
104
-
105
- A layered messaging architecture for cross-context communication. See `src/common/msg/README.md` for full details.
106
-
107
- - **Emitter** - Type-safe, async event emitter for in-app communication
108
- - **Channel** - Uniform `postMessage` abstraction for data transport (WebSocket, WebRTC, WebWorker, etc.)
109
- - **PubSub** - Event-like messages over a Channel with type safety
110
- - **Messages** - RPC-like interface with Promise-based responses, timeouts, and retries
111
- - **Encoder** - Transform data for transport (JSON, encryption, etc.)
112
-
113
- Example:
114
- ```typescript
115
- interface MyMessages {
116
- echo: (data: any) => Promise<any>
117
- }
118
-
119
- const hub = useMessageHub({ channel }).send<MyMessages>()
120
- await hub.echo({ hello: 'world' })
121
- ```
122
-
123
- #### Schema Validation (`src/common/schema/`)
124
-
125
- Type-safe runtime validation with [Standard Schema](https://github.com/standard-schema/standard-schema) compatibility. Works with tRPC, TanStack Form/Router, Hono, and 40+ other libraries.
126
-
127
- - Import via `z` namespace: `import { z } from 'zeed'`
128
- - All schemas support `.parse()`, `.optional()`, `.default()`, type inference
129
- - Standard Schema interface available via `schema['~standard']`
130
- - Supports serialization/deserialization for network transport
131
-
132
- Example:
133
- ```typescript
134
- const userSchema = z.object({
135
- name: z.string(),
136
- email: z.string(),
137
- role: z.stringLiterals(['admin', 'user']),
138
- })
139
-
140
- type User = z.infer<typeof userSchema>
141
- const user = userSchema.parse(data)
142
- ```
143
-
144
- #### Logging (`src/common/log/`, `src/browser/log/`, `src/node/log/`)
145
-
146
- Universal logging system with platform-specific handlers:
147
-
148
- - **Configuration**: `ZEED=*` or `DEBUG=*` to enable logs (ZEED supersedes DEBUG)
149
- - **Level filtering**: `ZEED_LEVEL=info` to hide debug logs
150
- - **Log to file**: `ZEED_LOG=/path/to/file.log`
151
- - **Handlers**: `LoggerConsoleHandler`, `LoggerBrowserHandler`, `LoggerNodeHandler`, `LoggerFileHandler`
152
-
153
- Usage:
154
- ```typescript
155
- import { Logger } from 'zeed'
156
-
157
- const log = Logger('my-module')
158
- log('message')
159
- log.info('info')
160
- log.warn('warning')
161
- log.error('error')
32
+ ## Layout
33
+
34
+ ```text
35
+ src/
36
+ common/ platform-agnostic (schema, msg, data, log core, ...)
37
+ browser/ DOM, LocalStorage, browser log handler
38
+ node/ fs, env, node log handler
39
+ index.all.ts universal entry
40
+ index.browser.ts browser build
41
+ index.node.ts node build
42
+ index.jsr.ts JSR registry entry
162
43
  ```
163
44
 
164
- #### Data Utilities (`src/common/data/`)
165
-
166
- Extensive collection of data manipulation utilities:
167
- - **Array operations**: `arrayUnique`, `arrayShuffle`, `arrayGroupBy`
168
- - **String utilities**: `camelCase`, `snakeCase`, `slugify`
169
- - **Binary encoding**: `useBase(62)` for Base62 encoding/decoding
170
- - **Object operations**: `deepEqual`, `deepMerge`, `objectFilter`, `objectPluck`
171
- - **CRDT sorting**: `sortedItems` for conflict-free replicated data
172
-
173
- ## Development Conventions
174
-
175
- ### Code Style
176
-
177
- - **Indentation**: Always use 2 spaces (not tabs)
178
- - **TypeScript**: Strict mode enabled, use explicit types where inference isn't clear
179
- - **Imports**: Use relative imports within the same major module, exported symbols for cross-module
180
-
181
- ### Testing
182
-
183
- - All test files must end with `.spec.ts`
184
- - Tests live side-by-side with the code they test (e.g., `array.ts` → `array.spec.ts`)
185
- - Use Vitest with globals enabled (`describe`, `it`, `expect` available globally)
186
- - Aim for 100% test coverage for new utilities
187
- - Browser tests require explicit environment: `pnpm test:browser`
45
+ Conditional exports in `package.json` route consumers to the right build. Ignore `_archive/`, `dist/`, `docs/`, `demos/`.
188
46
 
189
- ### File Organization
47
+ ## Subsystems
190
48
 
191
- - Platform-specific code goes in `src/browser/` or `src/node/`
192
- - Shared code goes in `src/common/`
193
- - Each module exports through an `index.ts` barrel file
194
- - Ignore `_archive/`, `dist/`, `docs/`, and `demos/` folders
49
+ - **`common/schema/`** - Standard Schema compatible runtime validation, exposed as `z`. `z.object`, `z.string`, `z.stringLiterals`, `.parse`, `.optional`, `.default`, `z.infer`. `schema['~standard']` exposes the Standard Schema interface.
50
+ - **`common/msg/`** - Layered messaging: `Emitter` (typed events), `Channel` (postMessage abstraction), `PubSub`, `Messages` (RPC with Promise/timeout/retry), `Encoder`. See `src/common/msg/README.md`.
51
+ - **`common/log/`** + platform handlers - `Logger('name')`, levels `info`/`warn`/`error`. Env: `ZEED=*` or `DEBUG=*` (ZEED wins), `ZEED_LEVEL=info`, `ZEED_LOG=/path/file.log`. Handlers: `LoggerConsoleHandler`, `LoggerBrowserHandler`, `LoggerNodeHandler`, `LoggerFileHandler`.
52
+ - **`common/data/`** - `arrayUnique`, `arrayShuffle`, `arrayGroupBy`, `camelCase`, `snakeCase`, `slugify`, `useBase(62)`, `deepEqual`, `deepMerge`, `objectFilter`, `objectPluck`, `sortedItems` (CRDT).
195
53
 
196
- ### Type System Patterns
197
-
198
- **Use the `Type` class for runtime validation:**
199
- ```typescript
200
- // Define schema
201
- const schema = z.object({ name: z.string() })
202
-
203
- // Infer TypeScript type
204
- type Schema = z.infer<typeof schema>
205
-
206
- // Parse/validate at runtime
207
- const data = schema.parse(input)
208
- ```
209
-
210
- **Event emitters should use typed interfaces:**
211
- ```typescript
212
- interface MyEvents {
213
- inc: (count: number) => number
214
- }
215
-
216
- const e = new Emitter<MyEvents>()
217
- e.on('inc', async count => count + 1)
218
- ```
54
+ ## Conventions
219
55
 
220
- ## Build System
56
+ - 2-space indent, no tabs.
57
+ - Strict TS. Explicit types only where inference is unclear.
58
+ - Relative imports within a module, barrel imports across modules.
59
+ - Tests live next to code: `array.ts` + `array.spec.ts`. Vitest globals enabled.
60
+ - New utilities: aim for 100% coverage.
61
+ - Browser-only code in `src/browser/`, node-only in `src/node/`, everything else in `src/common/`.
62
+ - Each module has an `index.ts` barrel.
221
63
 
222
- - **Bundler**: tsdown (rolldown-based)
223
- - **Output**: ESM + CJS in `dist/` with `.mjs` / `.cjs` entry files and TypeScript declarations
224
- - **Target**: ES2022
225
- - **Features**: Tree-shaking, minification, source maps, code splitting
64
+ ## Build
226
65
 
227
- The build creates multiple entry points and emits matching declaration files such as `dist/index.all.d.mts`, `dist/index.node.d.mts`, and `dist/index.node.d.cts`.
66
+ - Bundler: `tsdown` (rolldown-based). Config in `tsdown.config.ts`.
67
+ - Output: `dist/` with `.mjs`, `.cjs`, and `.d.mts`/`.d.cts` declarations per entry (e.g. `dist/index.all.d.mts`, `dist/index.node.d.cts`).
68
+ - Features: tree-shaking, minification, source maps, code splitting.
228
69
 
229
- ## Package Management
70
+ ## Release
230
71
 
231
- - Uses `pnpm` (v10.18.0+)
232
- - Node.js >= 20 required
233
- - The `nr` alias in scripts refers to `ni run` from `@antfu/ni` package
72
+ `pnpm prep` runs lint-fix, type check, full test suite, and doc upload. `pnpm npm:release` publishes to npm. `pnpm build:docs` generates typedoc into `docs/` (published to <https://zeed.holtwick.de/>).
package/README.md CHANGED
@@ -24,24 +24,30 @@
24
24
  <td width="50%">
25
25
 
26
26
  ### 🎯 **Type-Safe**
27
+
27
28
  Strict TypeScript with full type inference
28
29
 
29
30
  ### 📦 **Zero Dependencies**
31
+
30
32
  Lightweight and completely tree-shakable
31
33
 
32
34
  ### 🌍 **Universal**
35
+
33
36
  Works in browsers, Node.js, Deno, and Bun
34
37
 
35
38
  </td>
36
39
  <td width="50%">
37
40
 
38
41
  ### ⚡ **Modern ESM**
42
+
39
43
  ES Modules with CommonJS fallback
40
44
 
41
45
  ### ✅ **Well Tested**
46
+
42
47
  Comprehensive test coverage
43
48
 
44
49
  ### 🔌 **Standard Schema**
50
+
45
51
  Compatible with tRPC, TanStack, Hono & more
46
52
 
47
53
  </td>
@@ -93,11 +99,13 @@ log.error('Error')
93
99
  By default, logs are muted. Enable them with filters:
94
100
 
95
101
  **Browser:**
102
+
96
103
  ```ts
97
104
  localStorage.zeed = '*'
98
105
  ```
99
106
 
100
107
  **Node.js:**
108
+
101
109
  ```sh
102
110
  ZEED=* node myapp.js
103
111
  ```
@@ -116,6 +124,7 @@ Write to file: `ZEED_LOG=/path/to/file.log`
116
124
  - `LoggerFileHandler(path, opt)` - File output with optional rotation
117
125
 
118
126
  **Log Rotation Example:**
127
+
119
128
  ```ts
120
129
  import { LoggerFileHandler } from 'zeed'
121
130
 
@@ -270,6 +279,7 @@ else {
270
279
  ```
271
280
 
272
281
  **Features:**
282
+
273
283
  - Primitives: `string()`, `number()`, `int()`, `boolean()`, `any()`
274
284
  - Objects: `object()`, `record()`, `pick()`, `omit()`, `extend()`, `partial()`, `required()`
275
285
  - Arrays & Tuples: `array()`, `tuple()`
@@ -289,6 +299,7 @@ else {
289
299
  <td width="50%">
290
300
 
291
301
  **🔄 CRDT Sorting**
302
+
292
303
  ```ts
293
304
  interface Row extends SortedItem {
294
305
  id: string
@@ -298,6 +309,7 @@ sortedItems(rows)
298
309
  ```
299
310
 
300
311
  **🔐 Binary Encoding**
312
+
301
313
  ```ts
302
314
  const { encode, decode } = useBase(62)
303
315
  decode(encode(data)) === data
@@ -307,12 +319,14 @@ decode(encode(data)) === data
307
319
  <td width="50%">
308
320
 
309
321
  **🔍 Deep Object Utils**
322
+
310
323
  ```ts
311
324
  deepEqual(obj1, obj2)
312
325
  deepMerge(obj1, obj2)
313
326
  ```
314
327
 
315
328
  **🧹 Resource Disposal**
329
+
316
330
  ```ts
317
331
  const dispose = useDispose()
318
332
  dispose.add(cleanup)
@@ -332,10 +346,12 @@ Zeed includes many more utilities - explore the [full API documentation](https:/
332
346
  ## 🤝 Related Projects
333
347
 
334
348
  **By the same author:**
349
+
335
350
  - [zeed-dom](https://github.com/holtwick/zeed-dom) - DOM manipulation utilities
336
351
  - [zerva](https://github.com/holtwick/zerva) - Modular server framework
337
352
 
338
353
  **Similar utility libraries:**
354
+
339
355
  - [lib0](https://github.com/dmonad/lib0) - Fundamental utility functions
340
356
  - [antfu/utils](https://github.com/antfu/utils) - Collection of common utilities
341
357
  - [vueuse](https://vueuse.org/) - Vue composition utilities
@@ -1,2 +1,244 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-D-qHiVGv.cjs`);let t=require(`fs`);t=e.n(t);let n=require(`path`);n=e.n(n);let r=require(`fs/promises`);var i=class{dirname;readWrite;syncOnPut;keydir=new Map;activeFile=null;activeFileId=0;activeOffset=0;openFiles=new Map;constructor(e,n={}){this.dirname=e,this.readWrite=n.readWrite!==!1,this.syncOnPut=n.syncOnPut===!0,t.existsSync(e)||t.mkdirSync(e,{recursive:!0}),this.loadFiles(),this.readWrite&&this.rollover()}listDataFiles(){return t.readdirSync(this.dirname).filter(e=>e.endsWith(`.data`)).sort()}loadFiles(){for(let e of this.listDataFiles()){let r=parseInt(e.split(`.`)[0],10),i=n.join(this.dirname,e),a=t.openSync(i,`r`),o=0;for(;;){let e=Buffer.alloc(17);if(t.readSync(a,e,0,17,o)<17)break;let n=e.readUInt32BE(0),i=e.readUInt32BE(4),s=e.readUInt8(8)===1,c=e.readBigUInt64BE(9),l=Buffer.alloc(n);t.readSync(a,l,0,n,o+17);let u=17+n+i;this.keydir.set(l.toString(`binary`),{fileId:r,offset:o,size:u,timestamp:c,tombstone:s}),o+=u}t.closeSync(a)}}rollover(){let e=this.listDataFiles().map(e=>parseInt(e.split(`.`)[0],10)),r=e.length?Math.max(...e)+1:1,i=`${r.toString().padStart(8,`0`)}.data`,a=n.join(this.dirname,i);this.activeFile=t.createWriteStream(a,{flags:`a`}),this.activeFileId=r,this.activeOffset=t.existsSync(a)?t.statSync(a).size:0}async put(e,n){if(!this.readWrite)throw Error(`Read-only mode`);let r=Buffer.isBuffer(e)?e:Buffer.from(e),i=Buffer.isBuffer(n)?n:Buffer.from(n),a=BigInt(Date.now()),o=Buffer.alloc(17);o.writeUInt32BE(r.length,0),o.writeUInt32BE(i.length,4),o.writeUInt8(0,8),o.writeBigUInt64BE(a,9);let s=Buffer.concat([o,r,i]),c=this.activeOffset;await new Promise((e,t)=>{this.activeFile.write(s,n=>n?t(n):e())}),this.syncOnPut&&this.activeFile&&t.fsyncSync(this.activeFile.fd),this.keydir.set(r.toString(`binary`),{fileId:this.activeFileId,offset:c,size:s.length,timestamp:a,tombstone:!1}),this.activeOffset+=s.length,this.activeOffset>32*1024*1024&&(this.activeFile.close(),this.rollover())}async get(e){let t=Buffer.isBuffer(e)?e:Buffer.from(e),i=this.keydir.get(t.toString(`binary`));if(!i||i.tombstone)return null;let a=this.openFiles.get(i.fileId);a||(a=await(0,r.open)(n.join(this.dirname,`${i.fileId.toString().padStart(8,`0`)}.data`),`r`),this.openFiles.set(i.fileId,a));let o=Buffer.alloc(17);await a.read(o,0,17,i.offset);let s=o.readUInt32BE(0),c=o.readUInt32BE(4),l=Buffer.alloc(s);await a.read(l,0,s,i.offset+17);let u=Buffer.alloc(c);return await a.read(u,0,c,i.offset+17+s),u}async delete(e){if(!this.readWrite)throw Error(`Read-only mode`);let n=Buffer.isBuffer(e)?e:Buffer.from(e),r=BigInt(Date.now()),i=Buffer.alloc(17);i.writeUInt32BE(n.length,0),i.writeUInt32BE(0,4),i.writeUInt8(1,8),i.writeBigUInt64BE(r,9);let a=Buffer.concat([i,n]),o=this.activeOffset;await new Promise((e,t)=>{this.activeFile.write(a,n=>n?t(n):e())}),this.syncOnPut&&this.activeFile&&t.fsyncSync(this.activeFile.fd),this.keydir.set(n.toString(`binary`),{fileId:this.activeFileId,offset:o,size:a.length,timestamp:r,tombstone:!0}),this.activeOffset+=a.length,this.activeOffset>32*1024*1024&&(this.activeFile.close(),this.rollover())}listKeys(){return Array.from(this.keydir.entries()).filter(([e,t])=>!t.tombstone).map(([e,t])=>e)}async fold(e,t){for(let[n,r]of this.keydir.entries())r.tombstone||(t=e(n,await this.get(n),t));return t}async merge(){let e=new Map;for(let[t,n]of this.keydir.entries())n.tombstone||e.set(t,n);let r=this.listDataFiles().map(e=>parseInt(e.split(`.`)[0],10)),i=r.length?Math.max(...r)+1:1,a=`${i.toString().padStart(8,`0`)}.data`,o=n.join(this.dirname,a),s=t.createWriteStream(o,{flags:`a`});for(let[t,n]of e.entries()){let e=await this.get(t),r=Buffer.from(t,`binary`),i=Buffer.alloc(17);i.writeUInt32BE(r.length,0),i.writeUInt32BE(e.length,4),i.writeUInt8(0,8),i.writeBigUInt64BE(n.timestamp,9);let a=Buffer.concat([i,r,e]);await new Promise((e,t)=>{s.write(a,n=>n?t(n):e())})}s.close();for(let e of r)if(e!==this.activeFileId&&e!==i)try{t.unlinkSync(n.join(this.dirname,`${e.toString().padStart(8,`0`)}.data`))}catch{}this.loadFiles()}sync(){this.activeFile&&t.fsyncSync(this.activeFile.fd)}async close(){this.activeFile&&this.activeFile.end();for(let e of this.openFiles.values())await e.close();this.openFiles.clear()}};function a(e,t){return new i(e,t)}async function o(e,t){let n=await e.get(t);return n===null?`not found`:n}async function s(e,t,n){return await e.put(t,n),`ok`}async function c(e,t){return await e.delete(t),`ok`}function l(e){return e.listKeys()}async function u(e,t,n){return await e.fold(t,n)}async function d(e){let t=new i(e,{readWrite:!0});return await t.merge(),t.close(),`ok`}function f(e){return e.sync(),`ok`}async function p(e){return await e.close(),`ok`}exports.Bitcask=i,exports.close=p,exports.del=c,exports.fold=u,exports.get=o,exports.listKeys=l,exports.merge=d,exports.open=a,exports.put=s,exports.sync=f;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-uaV2rQ02.cjs');
3
+ let fs = require("fs");
4
+ fs = require_chunk.__toESM(fs, 1);
5
+ let path = require("path");
6
+ path = require_chunk.__toESM(path, 1);
7
+ let fs_promises = require("fs/promises");
8
+
9
+ //#region src/_experiments/bitcask.ts
10
+ const ENTRY_HEADER_SIZE = 17;
11
+ var Bitcask = class {
12
+ dirname;
13
+ readWrite;
14
+ syncOnPut;
15
+ keydir = /* @__PURE__ */ new Map();
16
+ activeFile = null;
17
+ activeFileId = 0;
18
+ activeOffset = 0;
19
+ openFiles = /* @__PURE__ */ new Map();
20
+ constructor(dirname, opts = {}) {
21
+ this.dirname = dirname;
22
+ this.readWrite = opts.readWrite !== false;
23
+ this.syncOnPut = opts.syncOnPut === true;
24
+ if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true });
25
+ this.loadFiles();
26
+ if (this.readWrite) this.rollover();
27
+ }
28
+ listDataFiles() {
29
+ return fs.readdirSync(this.dirname).filter((f) => f.endsWith(".data")).sort();
30
+ }
31
+ loadFiles() {
32
+ for (const fname of this.listDataFiles()) {
33
+ const fileId = parseInt(fname.split(".")[0], 10);
34
+ const filePath = path.join(this.dirname, fname);
35
+ const fd = fs.openSync(filePath, "r");
36
+ let offset = 0;
37
+ while (true) {
38
+ const header = Buffer.alloc(ENTRY_HEADER_SIZE);
39
+ if (fs.readSync(fd, header, 0, ENTRY_HEADER_SIZE, offset) < ENTRY_HEADER_SIZE) break;
40
+ const keySize = header.readUInt32BE(0);
41
+ const valueSize = header.readUInt32BE(4);
42
+ const tombstone = header.readUInt8(8) === 1;
43
+ const timestamp = header.readBigUInt64BE(9);
44
+ const key = Buffer.alloc(keySize);
45
+ fs.readSync(fd, key, 0, keySize, offset + ENTRY_HEADER_SIZE);
46
+ const entrySize = ENTRY_HEADER_SIZE + keySize + valueSize;
47
+ this.keydir.set(key.toString("binary"), {
48
+ fileId,
49
+ offset,
50
+ size: entrySize,
51
+ timestamp,
52
+ tombstone
53
+ });
54
+ offset += entrySize;
55
+ }
56
+ fs.closeSync(fd);
57
+ }
58
+ }
59
+ rollover() {
60
+ const fileIds = this.listDataFiles().map((f) => parseInt(f.split(".")[0], 10));
61
+ const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1;
62
+ const fname = `${nextId.toString().padStart(8, "0")}.data`;
63
+ const filePath = path.join(this.dirname, fname);
64
+ this.activeFile = fs.createWriteStream(filePath, { flags: "a" });
65
+ this.activeFileId = nextId;
66
+ this.activeOffset = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0;
67
+ }
68
+ async put(key, value) {
69
+ if (!this.readWrite) throw new Error("Read-only mode");
70
+ const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
71
+ const valueBuf = Buffer.isBuffer(value) ? value : Buffer.from(value);
72
+ const timestamp = BigInt(Date.now());
73
+ const tombstone = 0;
74
+ const header = Buffer.alloc(ENTRY_HEADER_SIZE);
75
+ header.writeUInt32BE(keyBuf.length, 0);
76
+ header.writeUInt32BE(valueBuf.length, 4);
77
+ header.writeUInt8(tombstone, 8);
78
+ header.writeBigUInt64BE(timestamp, 9);
79
+ const entry = Buffer.concat([
80
+ header,
81
+ keyBuf,
82
+ valueBuf
83
+ ]);
84
+ const offset = this.activeOffset;
85
+ await new Promise((resolve, reject) => {
86
+ this.activeFile.write(entry, (err) => err ? reject(err) : resolve());
87
+ });
88
+ if (this.syncOnPut && this.activeFile) fs.fsyncSync(this.activeFile.fd);
89
+ this.keydir.set(keyBuf.toString("binary"), {
90
+ fileId: this.activeFileId,
91
+ offset,
92
+ size: entry.length,
93
+ timestamp,
94
+ tombstone: false
95
+ });
96
+ this.activeOffset += entry.length;
97
+ if (this.activeOffset > 32 * 1024 * 1024) {
98
+ this.activeFile.close();
99
+ this.rollover();
100
+ }
101
+ }
102
+ async get(key) {
103
+ const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
104
+ const meta = this.keydir.get(keyBuf.toString("binary"));
105
+ if (!meta || meta.tombstone) return null;
106
+ let fh = this.openFiles.get(meta.fileId);
107
+ if (!fh) {
108
+ fh = await (0, fs_promises.open)(path.join(this.dirname, `${meta.fileId.toString().padStart(8, "0")}.data`), "r");
109
+ this.openFiles.set(meta.fileId, fh);
110
+ }
111
+ const header = Buffer.alloc(ENTRY_HEADER_SIZE);
112
+ await fh.read(header, 0, ENTRY_HEADER_SIZE, meta.offset);
113
+ const keySize = header.readUInt32BE(0);
114
+ const valueSize = header.readUInt32BE(4);
115
+ const keyRead = Buffer.alloc(keySize);
116
+ await fh.read(keyRead, 0, keySize, meta.offset + ENTRY_HEADER_SIZE);
117
+ const value = Buffer.alloc(valueSize);
118
+ await fh.read(value, 0, valueSize, meta.offset + ENTRY_HEADER_SIZE + keySize);
119
+ return value;
120
+ }
121
+ async delete(key) {
122
+ if (!this.readWrite) throw new Error("Read-only mode");
123
+ const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
124
+ const timestamp = BigInt(Date.now());
125
+ const tombstone = 1;
126
+ const header = Buffer.alloc(ENTRY_HEADER_SIZE);
127
+ header.writeUInt32BE(keyBuf.length, 0);
128
+ header.writeUInt32BE(0, 4);
129
+ header.writeUInt8(tombstone, 8);
130
+ header.writeBigUInt64BE(timestamp, 9);
131
+ const entry = Buffer.concat([header, keyBuf]);
132
+ const offset = this.activeOffset;
133
+ await new Promise((resolve, reject) => {
134
+ this.activeFile.write(entry, (err) => err ? reject(err) : resolve());
135
+ });
136
+ if (this.syncOnPut && this.activeFile) fs.fsyncSync(this.activeFile.fd);
137
+ this.keydir.set(keyBuf.toString("binary"), {
138
+ fileId: this.activeFileId,
139
+ offset,
140
+ size: entry.length,
141
+ timestamp,
142
+ tombstone: true
143
+ });
144
+ this.activeOffset += entry.length;
145
+ if (this.activeOffset > 32 * 1024 * 1024) {
146
+ this.activeFile.close();
147
+ this.rollover();
148
+ }
149
+ }
150
+ listKeys() {
151
+ return Array.from(this.keydir.entries()).filter(([_, v]) => !v.tombstone).map(([k, _]) => k);
152
+ }
153
+ async fold(fn, acc0) {
154
+ for (const [k, meta] of this.keydir.entries()) if (!meta.tombstone) acc0 = fn(k, await this.get(k), acc0);
155
+ return acc0;
156
+ }
157
+ async merge() {
158
+ const live = /* @__PURE__ */ new Map();
159
+ for (const [k, meta] of this.keydir.entries()) if (!meta.tombstone) live.set(k, meta);
160
+ const fileIds = this.listDataFiles().map((f) => parseInt(f.split(".")[0], 10));
161
+ const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1;
162
+ const fname = `${nextId.toString().padStart(8, "0")}.data`;
163
+ const filePath = path.join(this.dirname, fname);
164
+ const f = fs.createWriteStream(filePath, { flags: "a" });
165
+ for (const [k, meta] of live.entries()) {
166
+ const v = await this.get(k);
167
+ const keyBuf = Buffer.from(k, "binary");
168
+ const header = Buffer.alloc(ENTRY_HEADER_SIZE);
169
+ header.writeUInt32BE(keyBuf.length, 0);
170
+ header.writeUInt32BE(v.length, 4);
171
+ header.writeUInt8(0, 8);
172
+ header.writeBigUInt64BE(meta.timestamp, 9);
173
+ const entry = Buffer.concat([
174
+ header,
175
+ keyBuf,
176
+ v
177
+ ]);
178
+ await new Promise((resolve, reject) => {
179
+ f.write(entry, (err) => err ? reject(err) : resolve());
180
+ });
181
+ }
182
+ f.close();
183
+ for (const fid of fileIds) if (fid !== this.activeFileId && fid !== nextId) try {
184
+ fs.unlinkSync(path.join(this.dirname, `${fid.toString().padStart(8, "0")}.data`));
185
+ } catch {}
186
+ this.loadFiles();
187
+ }
188
+ sync() {
189
+ if (this.activeFile) fs.fsyncSync(this.activeFile.fd);
190
+ }
191
+ async close() {
192
+ if (this.activeFile) this.activeFile.end();
193
+ for (const fh of this.openFiles.values()) await fh.close();
194
+ this.openFiles.clear();
195
+ }
196
+ };
197
+ function open(dirname, opts) {
198
+ return new Bitcask(dirname, opts);
199
+ }
200
+ async function get(handle, key) {
201
+ const v = await handle.get(key);
202
+ return v === null ? "not found" : v;
203
+ }
204
+ async function put(handle, key, value) {
205
+ await handle.put(key, value);
206
+ return "ok";
207
+ }
208
+ async function del(handle, key) {
209
+ await handle.delete(key);
210
+ return "ok";
211
+ }
212
+ function listKeys(handle) {
213
+ return handle.listKeys();
214
+ }
215
+ async function fold(handle, fn, acc0) {
216
+ return await handle.fold(fn, acc0);
217
+ }
218
+ async function merge(dirname) {
219
+ const h = new Bitcask(dirname, { readWrite: true });
220
+ await h.merge();
221
+ h.close();
222
+ return "ok";
223
+ }
224
+ function sync(handle) {
225
+ handle.sync();
226
+ return "ok";
227
+ }
228
+ async function close(handle) {
229
+ await handle.close();
230
+ return "ok";
231
+ }
232
+
233
+ //#endregion
234
+ exports.Bitcask = Bitcask;
235
+ exports.close = close;
236
+ exports.del = del;
237
+ exports.fold = fold;
238
+ exports.get = get;
239
+ exports.listKeys = listKeys;
240
+ exports.merge = merge;
241
+ exports.open = open;
242
+ exports.put = put;
243
+ exports.sync = sync;
2
244
  //# sourceMappingURL=bitcask.cjs.map