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,4 +1,539 @@
1
- import e from"node:process";import{access as t,constants as n,createReadStream as r,createWriteStream as i}from"node:fs";import{sep as a}from"node:path";import{mkdir as o,open as s,readFile as c,rename as l,stat as u,unlink as d,writeFile as f}from"node:fs/promises";import{exec as p}from"node:child_process";import{Writable as m}from"node:stream";import{setTimeout as h}from"node:timers";import{TextDecoder as g}from"node:util";import{createGzip as _}from"node:zlib";async function v(e){return new Promise(r=>t(e,n.F_OK,e=>r(!e)))}var y=class extends Error{code=`RFS-TOO-MANY`;constructor(){super(`Too many destination file attempts`)}},b=class extends m{createGzip;exec;file;filename;finished;fsCreateReadStream;fsCreateWriteStream;fsOpen;fsReadFile;fsStat;fsUnlink;generator;last;maxTimeout;next;options;size;stdout;prev;rotation;initPromise;timeout;timeoutPromise;constructor(t,n){let{encoding:a,history:o,maxFiles:l,maxSize:f,path:m}=n;super({decodeStrings:!0,defaultEncoding:a}),this.createGzip=_,this.exec=p,this.filename=(m||``)+t(null),this.fsCreateReadStream=r,this.fsCreateWriteStream=i,this.fsOpen=s,this.fsReadFile=c,this.fsStat=u,this.fsUnlink=d,this.generator=t,this.maxTimeout=2147483640,this.options=n,this.stdout=e.stdout,this.file=null,this.initPromise=null,this.timeout=null,this.timeoutPromise=null,this.prev=null,this.next=null,this.rotation=null,this.last=``,this.finished=!1,this.size=0,(l||f)&&(n.history=(m||``)+(o||`${this.generator(null)}.txt`)),this.on(`close`,()=>this.finished?null:this.emit(`finish`)),this.on(`finish`,()=>this.finished=this.clear()),(async()=>{try{this.initPromise=this.init(),await this.initPromise,this.initPromise=null}catch{}})()}_destroy(e,t){this.refinal(e,t)}_final(e){this.refinal(void 0,e)}_write(e,t,n){this.rewrite([{chunk:e,encoding:t}],0,n)}_writev(e,t){this.rewrite(e,0,t)}async refinal(e,t){try{this.clear(),this.initPromise&&await this.initPromise,this.timeoutPromise&&await this.timeoutPromise,await this.reclose()}catch(n){return t(e||n)}t(e)}async rewrite(e,t,n){let{size:r,teeToStdout:i}=this.options;try{this.initPromise&&await this.initPromise;for(let t=0;t<e.length;++t){let{chunk:n}=e[t];this.size+=n.length,this.timeoutPromise&&await this.timeoutPromise,await this.file.write(n),i&&!this.stdout.destroyed&&this.stdout.write(n),r&&this.size>=r&&await this.rotate()}}catch(e){return n(e)}n()}async init(){let{immutable:t,initialRotation:n,interval:r,size:i}=this.options;if(t)return new Promise((t,n)=>e.nextTick(()=>this.immutate(!0).then(t).catch(e=>n(e))));let a;try{a=await u(this.filename)}catch(e){if(e.code!==`ENOENT`)throw e;return this.reopen(0)}if(!a.isFile())throw Error(`Can't write on: ${this.filename} (it is not a file)`);if(n){this.intervalBounds(this.now());let e=this.prev;if(this.intervalBounds(new Date(a.mtime.getTime())),e!==this.prev)return this.rotate()}return this.size=a.size,!i||a.size<i?this.reopen(a.size):(r&&this.intervalBounds(this.now()),this.rotate())}async makePath(e){return await o(e.split(a).slice(0,-1).join(a),{recursive:!0}),e}async reopen(e){let t;try{t=await s(this.filename,`a`,this.options.mode)}catch(e){if(e.code!==`ENOENT`)throw e;await this.makePath(this.filename),t=await s(this.filename,`a`,this.options.mode)}this.file=t,this.size=e,this.interval(),this.emit(`open`,this.filename)}async reclose(){let{file:e}=this;if(e)return this.file=null,e.close()}now(){return new Date}async rotate(){let{immutable:e,rotate:t}=this.options;return this.size=0,this.rotation=this.now(),this.clear(),this.emit(`rotation`),await this.reclose(),t?this.classical():e?this.immutate(!1):this.move()}async findName(){let{interval:e,path:t,intervalBoundary:n}=this.options;for(let r=1;r<1e3;++r){let i=(t||``)+this.generator(e&&n?new Date(this.prev):this.rotation,r);if(!await v(i))return i}throw new y}async move(){let{compress:e}=this.options,t=await this.findName();return await this.touch(t),e?await this.compress(t):await l(this.filename,t),this.rotated(t)}async touch(e){let t;try{t=await this.fsOpen(e,`a`)}catch(n){if(n.code!==`ENOENT`)throw n;await this.makePath(e),t=await s(e,`a`)}return await t.close(),this.unlink(e)}async classical(){let{compress:e,path:t,rotate:n=0}=this.options,r=``;for(let i=n;i>0;--i){let n=t+this.generator(i),a=i===1?this.filename:t+this.generator(i-1);if(await v(a))if(r||=n,i===1&&e)await this.compress(n);else try{await l(a,n)}catch(e){if(e.code!==`ENOENT`)throw e;await this.makePath(n),await l(a,n)}}return this.rotated(r)}clear(){return this.timeout&&=(clearTimeout(this.timeout),null),!0}intervalBoundsBig(e){let t=this.options.intervalUTC?e.getUTCFullYear():e.getFullYear(),n=this.options.intervalUTC?e.getUTCMonth():e.getMonth(),r=this.options.intervalUTC?e.getUTCDate():e.getDate(),i=this.options.intervalUTC?e.getUTCHours():e.getHours(),{num:a,unit:o}=this.options.interval;o===`M`?(r=1,i=0):i=o===`d`?0:Number.parseInt(i/a,10)*a,this.prev=new Date(t,n,r,i,0,0,0).getTime(),o===`M`?n+=a:o===`d`?r+=a:i+=a,this.next=new Date(t,n,r,i,0,0,0).getTime()}intervalBounds(e){let t=this.options.interval.unit;if(t===`M`||t===`d`||t===`h`)this.intervalBoundsBig(e);else{let n=1e3*this.options.interval.num;t===`m`&&(n*=60),this.prev=Number.parseInt(String(e.getTime()/n),10)*n,this.next=this.prev+n}return new Date(this.prev)}interval(){if(!this.options.interval)return;this.intervalBounds(this.now());let e=async()=>{let t=this.next-this.now().getTime();if(t<=0)try{this.timeoutPromise=this.rotate(),await this.timeoutPromise,this.timeoutPromise=null}catch{}else this.timeout=h(e,t>this.maxTimeout?this.maxTimeout:t),this.timeout&&typeof this.timeout.unref==`function`&&this.timeout.unref()};e()}async compress(e){let{compress:t}=this.options;return typeof t==`function`?await new Promise((n,r)=>{this.exec(t(this.filename,e),(e,t,i)=>{this.emit(`external`,t,i),e?r(e):n()})}):await this.gzip(e),this.unlink(this.filename)}async gzip(e){let{mode:t}=this.options,n=t?{mode:t}:{},r=this.fsCreateReadStream(this.filename,{}),i=this.fsCreateWriteStream(e,n),a=this.createGzip();return new Promise((e,t)=>{r.once(`error`,t),i.once(`error`,t),a.once(`error`,t),i.once(`finish`,e),r.pipe(a).pipe(i)})}async rotated(e){let{maxFiles:t,maxSize:n}=this.options;return(t||n)&&await this.history(e),this.emit(`rotated`,e),this.reopen(0)}async history(e){let{history:t,maxFiles:n,maxSize:r}=this.options,i=[],a=[e];try{t&&(a=[...(await this.fsReadFile(t,`utf8`)).toString().split(`
2
- `),e])}catch(e){if(e.code!==`ENOENT`)throw e}for(let e of a)if(e)try{let t=await this.fsStat(e);t.isFile()?i.push({name:e,size:t.size,time:t.mtime.getTime()}):this.emit(`warning`,Error(`File '${e}' contained in history is not a regular file`))}catch(e){if(e.code!==`ENOENT`)throw e}if(i.sort((e,t)=>e.time-t.time),n)for(;i.length>n;){let e=i.shift();e&&await this.unlink(e.name),e&&this.emit(`removed`,e.name,!0)}if(r)for(;i.reduce((e,t)=>e+t.size,0)>r;){let e=i.shift();e&&await this.unlink(e.name),e&&this.emit(`removed`,e.name,!1)}t&&await f(t,`${i.map(e=>e.name).join(`
3
- `)}\n`,`utf-8`),this.emit(`history`)}async immutate(e){let{size:t}=this.options,n=this.now();for(let r=1;r<1e3;++r){let i=0,a;this.filename=this.options.path+this.generator(n,r);try{a=await this.fsStat(this.filename)}catch(e){if(e.code!==`ENOENT`)throw e}if(a){if(i=a.size,!a.isFile())throw Error(`Can't write on: '${this.filename}' (it is not a file)`);if(t&&i>=t)continue}if(e)return this.last=this.filename,this.reopen(i);await this.rotated(this.last),this.last=this.filename;return}throw new y}async unlink(e){try{await this.fsUnlink(e)}catch(e){if(e.code!==`ENOENT`)throw e;this.emit(`warning`,e)}}};function x(e){return(t,n,r)=>{let i=Number.parseInt(String(r),10);if(t!==`number`||Number.isNaN(i)||i<=0)throw Error(`'${e}' option must be a positive integer number`)}}function S(e,t){return(n,r,i)=>{if(n!==`string`)throw Error(`Don't know how to handle 'options.${String(e)}' type: ${n}`);r[e]=t(i)}}function C(e,t,n){let r={};if(r.num=Number.parseInt(e,10),Number.isNaN(r.num))throw Error(`Unknown 'options.${t}' format: ${e}`);if(r.num<=0)throw Error(`A positive integer number is expected for 'options.${t}'`);if(r.unit=e.replace(/^[ 0]*/g,``).substr(`${r.num}`.length,1),r.unit.length===0)throw Error(`Missing unit for 'options.${t}'`);if(!n[r.unit])throw Error(`Unknown 'options.${t}' unit: ${r.unit}`);return r}const w={M:!0,d:!0,h:!0,m:!0,s:!0};function T(e,t,n){if(Number.parseInt(n/e.num,10)*e.num!==n)throw Error(`An integer divider of ${n} is expected as ${t} for 'options.interval'`)}function E(e){let t=C(e,`interval`,w);switch(t.unit){case`h`:T(t,`hours`,24);break;case`m`:T(t,`minutes`,60);break;case`s`:T(t,`seconds`,60);break}return t}const D={B:!0,G:!0,K:!0,M:!0};function O(e){let t=C(e,`size`,D);return t.unit===`K`?t.num*1024:t.unit===`M`?t.num*1048576:t.unit===`G`?t.num*1073741824:t.num}const k={encoding:(e,t,n)=>new g(n),immutable:()=>{},initialRotation:()=>{},interval:S(`interval`,E),intervalBoundary:()=>{},intervalUTC:()=>{},maxFiles:x(`maxFiles`),maxSize:S(`maxSize`,O),mode:()=>{},omitExtension:()=>{},rotate:x(`rotate`),size:S(`size`,O),teeToStdout:()=>{},compress:(e,t,n)=>{if(n!==!1){if(!n)throw Error(`A value for 'options.compress' must be specified`);if(e===`boolean`)return t.compress=(e,t)=>`cat ${e} | gzip -c9 > ${t}`;if(e!==`function`){if(e!==`string`)throw Error(`Don't know how to handle 'options.compress' type: ${e}`);if(n!==`gzip`)throw Error(`Don't know how to handle compression method: ${n}`)}}},history:e=>{if(e!==`string`)throw Error(`Don't know how to handle 'options.history' type: ${e}`)},path:(e,t,n)=>{if(e!==`string`)throw Error(`Don't know how to handle 'options.path' type: ${e}`);n.at(-1)!==a&&(t.path=n+a)}};function A(e){let t={};for(let n of Object.keys(e)){let r=n,i=e[r],a=typeof i;if(t[r]=i,!(r in k))throw Error(`Unknown option: ${r}`);k[r](a,t,i)}return t.path||=``,t.interval||(delete t.immutable,delete t.initialRotation,delete t.intervalBoundary,delete t.intervalUTC),t.rotate&&(delete t.history,delete t.immutable,delete t.maxFiles,delete t.maxSize,delete t.intervalBoundary,delete t.intervalUTC),t.immutable&&delete t.compress,t.intervalBoundary||delete t.initialRotation,t}function j(e,t,n){return(r,i)=>{let a=i||0;return a?`${e}.${a}${t&&!n?`.gz`:``}`:e}}function M(e,t,n){let r=e=>(e>9?``:`0`)+e;return(i,a)=>{if(!i)return e;let o=typeof i==`number`?new Date(i):i,s=`${o.getFullYear()}${r(o.getMonth()+1)}`,c=r(o.getDate()),l=r(o.getHours()),u=r(o.getMinutes());return`${s+c}-${l}${u}-${r(a||0)}-${e}${t&&!n?`.gz`:``}`}}function N(e,t){if(t===void 0)t={};else if(typeof t!=`object`)throw Error(`The "options" argument must be of type object. Received type ${typeof t}`);let n=A(t),{compress:r,omitExtension:i}=n,a;if(typeof e==`string`)a=n.rotate?j(e,!!r,!!i):M(e,!!r,!!i);else if(typeof e==`function`)a=e;else throw Error(`The "filename" argument must be one of type string or function. Received type ${typeof e}`);return new b(a,n)}export{b as RotatingFileStream,y as RotatingFileStreamError,N as createRotationStream};
1
+ import process from "node:process";
2
+ import { access, constants, createReadStream, createWriteStream } from "node:fs";
3
+ import { sep } from "node:path";
4
+ import { mkdir, open, readFile, rename, stat, unlink, writeFile } from "node:fs/promises";
5
+ import { exec } from "node:child_process";
6
+ import { Writable } from "node:stream";
7
+ import { setTimeout } from "node:timers";
8
+ import { TextDecoder } from "node:util";
9
+ import { createGzip } from "node:zlib";
10
+
11
+ //#region src/node/log/log-rotation.ts
12
+ async function exists(filename) {
13
+ return new Promise((resolve) => access(filename, constants.F_OK, (error) => resolve(!error)));
14
+ }
15
+ var RotatingFileStreamError = class extends Error {
16
+ code = "RFS-TOO-MANY";
17
+ constructor() {
18
+ super("Too many destination file attempts");
19
+ }
20
+ };
21
+ var RotatingFileStream = class extends Writable {
22
+ createGzip;
23
+ exec;
24
+ file;
25
+ filename;
26
+ finished;
27
+ fsCreateReadStream;
28
+ fsCreateWriteStream;
29
+ fsOpen;
30
+ fsReadFile;
31
+ fsStat;
32
+ fsUnlink;
33
+ generator;
34
+ last;
35
+ maxTimeout;
36
+ next;
37
+ options;
38
+ size;
39
+ stdout;
40
+ prev;
41
+ rotation;
42
+ initPromise;
43
+ timeout;
44
+ timeoutPromise;
45
+ constructor(generator, options) {
46
+ const { encoding, history, maxFiles, maxSize, path } = options;
47
+ super({
48
+ decodeStrings: true,
49
+ defaultEncoding: encoding
50
+ });
51
+ this.createGzip = createGzip;
52
+ this.exec = exec;
53
+ this.filename = (path || "") + generator(null);
54
+ this.fsCreateReadStream = createReadStream;
55
+ this.fsCreateWriteStream = createWriteStream;
56
+ this.fsOpen = open;
57
+ this.fsReadFile = readFile;
58
+ this.fsStat = stat;
59
+ this.fsUnlink = unlink;
60
+ this.generator = generator;
61
+ this.maxTimeout = 2147483640;
62
+ this.options = options;
63
+ this.stdout = process.stdout;
64
+ this.file = null;
65
+ this.initPromise = null;
66
+ this.timeout = null;
67
+ this.timeoutPromise = null;
68
+ this.prev = null;
69
+ this.next = null;
70
+ this.rotation = null;
71
+ this.last = "";
72
+ this.finished = false;
73
+ this.size = 0;
74
+ if (maxFiles || maxSize) options.history = (path || "") + (history || `${this.generator(null)}.txt`);
75
+ this.on("close", () => this.finished ? null : this.emit("finish"));
76
+ this.on("finish", () => this.finished = this.clear());
77
+ (async () => {
78
+ try {
79
+ this.initPromise = this.init();
80
+ await this.initPromise;
81
+ this.initPromise = null;
82
+ } catch (e) {}
83
+ })();
84
+ }
85
+ _destroy(error, callback) {
86
+ this.refinal(error, callback);
87
+ }
88
+ _final(callback) {
89
+ this.refinal(void 0, callback);
90
+ }
91
+ _write(chunk, encoding, callback) {
92
+ this.rewrite([{
93
+ chunk,
94
+ encoding
95
+ }], 0, callback);
96
+ }
97
+ _writev(chunks, callback) {
98
+ this.rewrite(chunks, 0, callback);
99
+ }
100
+ async refinal(error, callback) {
101
+ try {
102
+ this.clear();
103
+ if (this.initPromise) await this.initPromise;
104
+ if (this.timeoutPromise) await this.timeoutPromise;
105
+ await this.reclose();
106
+ } catch (e) {
107
+ return callback(error || e);
108
+ }
109
+ callback(error);
110
+ }
111
+ async rewrite(chunks, index, callback) {
112
+ const { size, teeToStdout } = this.options;
113
+ try {
114
+ if (this.initPromise) await this.initPromise;
115
+ for (let i = 0; i < chunks.length; ++i) {
116
+ const { chunk } = chunks[i];
117
+ this.size += chunk.length;
118
+ if (this.timeoutPromise) await this.timeoutPromise;
119
+ await this.file.write(chunk);
120
+ if (teeToStdout && !this.stdout.destroyed) this.stdout.write(chunk);
121
+ if (size && this.size >= size) await this.rotate();
122
+ }
123
+ } catch (e) {
124
+ return callback(e);
125
+ }
126
+ callback();
127
+ }
128
+ async init() {
129
+ const { immutable, initialRotation, interval, size } = this.options;
130
+ if (immutable) return new Promise((resolve, reject) => process.nextTick(() => this.immutate(true).then(resolve).catch((err) => reject(err))));
131
+ let stats;
132
+ try {
133
+ stats = await stat(this.filename);
134
+ } catch (e) {
135
+ if (e.code !== "ENOENT") throw e;
136
+ return this.reopen(0);
137
+ }
138
+ if (!stats.isFile()) throw new Error(`Can't write on: ${this.filename} (it is not a file)`);
139
+ if (initialRotation) {
140
+ this.intervalBounds(this.now());
141
+ const prev = this.prev;
142
+ this.intervalBounds(new Date(stats.mtime.getTime()));
143
+ if (prev !== this.prev) return this.rotate();
144
+ }
145
+ this.size = stats.size;
146
+ if (!size || stats.size < size) return this.reopen(stats.size);
147
+ if (interval) this.intervalBounds(this.now());
148
+ return this.rotate();
149
+ }
150
+ async makePath(name) {
151
+ await mkdir(name.split(sep).slice(0, -1).join(sep), { recursive: true });
152
+ return name;
153
+ }
154
+ async reopen(size) {
155
+ let file;
156
+ try {
157
+ file = await open(this.filename, "a", this.options.mode);
158
+ } catch (e) {
159
+ if (e.code !== "ENOENT") throw e;
160
+ await this.makePath(this.filename);
161
+ file = await open(this.filename, "a", this.options.mode);
162
+ }
163
+ this.file = file;
164
+ this.size = size;
165
+ this.interval();
166
+ this.emit("open", this.filename);
167
+ }
168
+ async reclose() {
169
+ const { file } = this;
170
+ if (!file) return;
171
+ this.file = null;
172
+ return file.close();
173
+ }
174
+ now() {
175
+ return /* @__PURE__ */ new Date();
176
+ }
177
+ async rotate() {
178
+ const { immutable, rotate } = this.options;
179
+ this.size = 0;
180
+ this.rotation = this.now();
181
+ this.clear();
182
+ this.emit("rotation");
183
+ await this.reclose();
184
+ if (rotate) return this.classical();
185
+ if (immutable) return this.immutate(false);
186
+ return this.move();
187
+ }
188
+ async findName() {
189
+ const { interval, path, intervalBoundary } = this.options;
190
+ for (let index = 1; index < 1e3; ++index) {
191
+ const filename = (path || "") + this.generator(interval && intervalBoundary ? new Date(this.prev) : this.rotation, index);
192
+ if (!await exists(filename)) return filename;
193
+ }
194
+ throw new RotatingFileStreamError();
195
+ }
196
+ async move() {
197
+ const { compress } = this.options;
198
+ const filename = await this.findName();
199
+ await this.touch(filename);
200
+ if (compress) await this.compress(filename);
201
+ else await rename(this.filename, filename);
202
+ return this.rotated(filename);
203
+ }
204
+ async touch(filename) {
205
+ let file;
206
+ try {
207
+ file = await this.fsOpen(filename, "a");
208
+ } catch (e) {
209
+ if (e.code !== "ENOENT") throw e;
210
+ await this.makePath(filename);
211
+ file = await open(filename, "a");
212
+ }
213
+ await file.close();
214
+ return this.unlink(filename);
215
+ }
216
+ async classical() {
217
+ const { compress, path, rotate = 0 } = this.options;
218
+ let rotatedName = "";
219
+ for (let count = rotate; count > 0; --count) {
220
+ const currName = path + this.generator(count);
221
+ const prevName = count === 1 ? this.filename : path + this.generator(count - 1);
222
+ if (!await exists(prevName)) continue;
223
+ if (!rotatedName) rotatedName = currName;
224
+ if (count === 1 && compress) await this.compress(currName);
225
+ else try {
226
+ await rename(prevName, currName);
227
+ } catch (e) {
228
+ if (e.code !== "ENOENT") throw e;
229
+ await this.makePath(currName);
230
+ await rename(prevName, currName);
231
+ }
232
+ }
233
+ return this.rotated(rotatedName);
234
+ }
235
+ clear() {
236
+ if (this.timeout) {
237
+ clearTimeout(this.timeout);
238
+ this.timeout = null;
239
+ }
240
+ return true;
241
+ }
242
+ intervalBoundsBig(now) {
243
+ const year = this.options.intervalUTC ? now.getUTCFullYear() : now.getFullYear();
244
+ let month = this.options.intervalUTC ? now.getUTCMonth() : now.getMonth();
245
+ let day = this.options.intervalUTC ? now.getUTCDate() : now.getDate();
246
+ let hours = this.options.intervalUTC ? now.getUTCHours() : now.getHours();
247
+ const { num, unit } = this.options.interval;
248
+ if (unit === "M") {
249
+ day = 1;
250
+ hours = 0;
251
+ } else if (unit === "d") hours = 0;
252
+ else hours = Number.parseInt(hours / num, 10) * num;
253
+ this.prev = new Date(year, month, day, hours, 0, 0, 0).getTime();
254
+ if (unit === "M") month += num;
255
+ else if (unit === "d") day += num;
256
+ else hours += num;
257
+ this.next = new Date(year, month, day, hours, 0, 0, 0).getTime();
258
+ }
259
+ intervalBounds(now) {
260
+ const unit = this.options.interval.unit;
261
+ if (unit === "M" || unit === "d" || unit === "h") this.intervalBoundsBig(now);
262
+ else {
263
+ let period = 1e3 * this.options.interval.num;
264
+ if (unit === "m") period *= 60;
265
+ this.prev = Number.parseInt(String(now.getTime() / period), 10) * period;
266
+ this.next = this.prev + period;
267
+ }
268
+ return new Date(this.prev);
269
+ }
270
+ interval() {
271
+ if (!this.options.interval) return;
272
+ this.intervalBounds(this.now());
273
+ const set = async () => {
274
+ const time = this.next - this.now().getTime();
275
+ if (time <= 0) try {
276
+ this.timeoutPromise = this.rotate();
277
+ await this.timeoutPromise;
278
+ this.timeoutPromise = null;
279
+ } catch (e) {}
280
+ else {
281
+ this.timeout = setTimeout(set, time > this.maxTimeout ? this.maxTimeout : time);
282
+ if (this.timeout && typeof this.timeout.unref === "function") this.timeout.unref();
283
+ }
284
+ };
285
+ set();
286
+ }
287
+ async compress(filename) {
288
+ const { compress } = this.options;
289
+ if (typeof compress === "function") await new Promise((resolve, reject) => {
290
+ this.exec(compress(this.filename, filename), (error, stdout, stderr) => {
291
+ this.emit("external", stdout, stderr);
292
+ error ? reject(error) : resolve();
293
+ });
294
+ });
295
+ else await this.gzip(filename);
296
+ return this.unlink(this.filename);
297
+ }
298
+ async gzip(filename) {
299
+ const { mode } = this.options;
300
+ const options = mode ? { mode } : {};
301
+ const inp = this.fsCreateReadStream(this.filename, {});
302
+ const out = this.fsCreateWriteStream(filename, options);
303
+ const zip = this.createGzip();
304
+ return new Promise((resolve, reject) => {
305
+ inp.once("error", reject);
306
+ out.once("error", reject);
307
+ zip.once("error", reject);
308
+ out.once("finish", resolve);
309
+ inp.pipe(zip).pipe(out);
310
+ });
311
+ }
312
+ async rotated(filename) {
313
+ const { maxFiles, maxSize } = this.options;
314
+ if (maxFiles || maxSize) await this.history(filename);
315
+ this.emit("rotated", filename);
316
+ return this.reopen(0);
317
+ }
318
+ async history(filename) {
319
+ const { history, maxFiles, maxSize } = this.options;
320
+ const res = [];
321
+ let files = [filename];
322
+ try {
323
+ if (history) files = [...(await this.fsReadFile(history, "utf8")).toString().split("\n"), filename];
324
+ } catch (e) {
325
+ if (e.code !== "ENOENT") throw e;
326
+ }
327
+ for (const file of files) if (file) try {
328
+ const stats = await this.fsStat(file);
329
+ if (stats.isFile()) res.push({
330
+ name: file,
331
+ size: stats.size,
332
+ time: stats.mtime.getTime()
333
+ });
334
+ else this.emit("warning", /* @__PURE__ */ new Error(`File '${file}' contained in history is not a regular file`));
335
+ } catch (e) {
336
+ if (e.code !== "ENOENT") throw e;
337
+ }
338
+ res.sort((a, b) => a.time - b.time);
339
+ if (maxFiles) while (res.length > maxFiles) {
340
+ const file = res.shift();
341
+ if (file) await this.unlink(file.name);
342
+ if (file) this.emit("removed", file.name, true);
343
+ }
344
+ if (maxSize) while (res.reduce((size, file) => size + file.size, 0) > maxSize) {
345
+ const file = res.shift();
346
+ if (file) await this.unlink(file.name);
347
+ if (file) this.emit("removed", file.name, false);
348
+ }
349
+ if (history) await writeFile(history, `${res.map((e) => e.name).join("\n")}\n`, "utf-8");
350
+ this.emit("history");
351
+ }
352
+ async immutate(first) {
353
+ const { size } = this.options;
354
+ const now = this.now();
355
+ for (let index = 1; index < 1e3; ++index) {
356
+ let fileSize = 0;
357
+ let stats;
358
+ this.filename = this.options.path + this.generator(now, index);
359
+ try {
360
+ stats = await this.fsStat(this.filename);
361
+ } catch (e) {
362
+ if (e.code !== "ENOENT") throw e;
363
+ }
364
+ if (stats) {
365
+ fileSize = stats.size;
366
+ if (!stats.isFile()) throw new Error(`Can't write on: '${this.filename}' (it is not a file)`);
367
+ if (size && fileSize >= size) continue;
368
+ }
369
+ if (first) {
370
+ this.last = this.filename;
371
+ return this.reopen(fileSize);
372
+ }
373
+ await this.rotated(this.last);
374
+ this.last = this.filename;
375
+ return;
376
+ }
377
+ throw new RotatingFileStreamError();
378
+ }
379
+ async unlink(filename) {
380
+ try {
381
+ await this.fsUnlink(filename);
382
+ } catch (e) {
383
+ if (e.code !== "ENOENT") throw e;
384
+ this.emit("warning", e);
385
+ }
386
+ }
387
+ };
388
+ function buildNumberCheck(field) {
389
+ return (type, options, value) => {
390
+ const converted = Number.parseInt(String(value), 10);
391
+ if (type !== "number" || Number.isNaN(converted) || converted <= 0) throw new Error(`'${field}' option must be a positive integer number`);
392
+ };
393
+ }
394
+ function buildStringCheck(field, check) {
395
+ return (type, options, value) => {
396
+ if (type !== "string") throw new Error(`Don't know how to handle 'options.${String(field)}' type: ${type}`);
397
+ options[field] = check(value);
398
+ };
399
+ }
400
+ function checkMeasure(value, what, units) {
401
+ const ret = {};
402
+ ret.num = Number.parseInt(value, 10);
403
+ if (Number.isNaN(ret.num)) throw new Error(`Unknown 'options.${what}' format: ${value}`);
404
+ if (ret.num <= 0) throw new Error(`A positive integer number is expected for 'options.${what}'`);
405
+ ret.unit = value.replace(/^[ 0]*/g, "").substr(`${ret.num}`.length, 1);
406
+ if (ret.unit.length === 0) throw new Error(`Missing unit for 'options.${what}'`);
407
+ if (!units[ret.unit]) throw new Error(`Unknown 'options.${what}' unit: ${ret.unit}`);
408
+ return ret;
409
+ }
410
+ const intervalUnits = {
411
+ M: true,
412
+ d: true,
413
+ h: true,
414
+ m: true,
415
+ s: true
416
+ };
417
+ function checkIntervalUnit(ret, unit, amount) {
418
+ if (Number.parseInt(amount / ret.num, 10) * ret.num !== amount) throw new Error(`An integer divider of ${amount} is expected as ${unit} for 'options.interval'`);
419
+ }
420
+ function checkInterval(value) {
421
+ const ret = checkMeasure(value, "interval", intervalUnits);
422
+ switch (ret.unit) {
423
+ case "h":
424
+ checkIntervalUnit(ret, "hours", 24);
425
+ break;
426
+ case "m":
427
+ checkIntervalUnit(ret, "minutes", 60);
428
+ break;
429
+ case "s":
430
+ checkIntervalUnit(ret, "seconds", 60);
431
+ break;
432
+ }
433
+ return ret;
434
+ }
435
+ const sizeUnits = {
436
+ B: true,
437
+ G: true,
438
+ K: true,
439
+ M: true
440
+ };
441
+ function checkSize(value) {
442
+ const ret = checkMeasure(value, "size", sizeUnits);
443
+ if (ret.unit === "K") return ret.num * 1024;
444
+ if (ret.unit === "M") return ret.num * 1048576;
445
+ if (ret.unit === "G") return ret.num * 1073741824;
446
+ return ret.num;
447
+ }
448
+ const checks = {
449
+ encoding: (type, options, value) => new TextDecoder(value),
450
+ immutable: () => {},
451
+ initialRotation: () => {},
452
+ interval: buildStringCheck("interval", checkInterval),
453
+ intervalBoundary: () => {},
454
+ intervalUTC: () => {},
455
+ maxFiles: buildNumberCheck("maxFiles"),
456
+ maxSize: buildStringCheck("maxSize", checkSize),
457
+ mode: () => {},
458
+ omitExtension: () => {},
459
+ rotate: buildNumberCheck("rotate"),
460
+ size: buildStringCheck("size", checkSize),
461
+ teeToStdout: () => {},
462
+ compress: (type, options, value) => {
463
+ if (value === false) return;
464
+ if (!value) throw new Error("A value for 'options.compress' must be specified");
465
+ if (type === "boolean") return options.compress = (source, dest) => `cat ${source} | gzip -c9 > ${dest}`;
466
+ if (type === "function") return;
467
+ if (type !== "string") throw new Error(`Don't know how to handle 'options.compress' type: ${type}`);
468
+ if (value !== "gzip") throw new Error(`Don't know how to handle compression method: ${value}`);
469
+ },
470
+ history: (type) => {
471
+ if (type !== "string") throw new Error(`Don't know how to handle 'options.history' type: ${type}`);
472
+ },
473
+ path: (type, options, value) => {
474
+ if (type !== "string") throw new Error(`Don't know how to handle 'options.path' type: ${type}`);
475
+ if (value.at(-1) !== sep) options.path = value + sep;
476
+ }
477
+ };
478
+ function checkOpts(options) {
479
+ const ret = {};
480
+ for (const k of Object.keys(options)) {
481
+ const opt = k;
482
+ const value = options[opt];
483
+ const type = typeof value;
484
+ ret[opt] = value;
485
+ if (!(opt in checks)) throw new Error(`Unknown option: ${opt}`);
486
+ checks[opt](type, ret, value);
487
+ }
488
+ if (!ret.path) ret.path = "";
489
+ if (!ret.interval) {
490
+ delete ret.immutable;
491
+ delete ret.initialRotation;
492
+ delete ret.intervalBoundary;
493
+ delete ret.intervalUTC;
494
+ }
495
+ if (ret.rotate) {
496
+ delete ret.history;
497
+ delete ret.immutable;
498
+ delete ret.maxFiles;
499
+ delete ret.maxSize;
500
+ delete ret.intervalBoundary;
501
+ delete ret.intervalUTC;
502
+ }
503
+ if (ret.immutable) delete ret.compress;
504
+ if (!ret.intervalBoundary) delete ret.initialRotation;
505
+ return ret;
506
+ }
507
+ function createClassical(filename, compress, omitExtension) {
508
+ return (time, index) => {
509
+ const idx = index || 0;
510
+ return idx ? `${filename}.${idx}${compress && !omitExtension ? ".gz" : ""}` : filename;
511
+ };
512
+ }
513
+ function createGenerator(filename, compress, omitExtension) {
514
+ const pad = (num) => (num > 9 ? "" : "0") + num;
515
+ return (time, index) => {
516
+ if (!time) return filename;
517
+ const t = typeof time === "number" ? new Date(time) : time;
518
+ const month = `${t.getFullYear()}${pad(t.getMonth() + 1)}`;
519
+ const day = pad(t.getDate());
520
+ const hour = pad(t.getHours());
521
+ const minute = pad(t.getMinutes());
522
+ return `${month + day}-${hour}${minute}-${pad(index || 0)}-${filename}${compress && !omitExtension ? ".gz" : ""}`;
523
+ };
524
+ }
525
+ function createRotationStream(filename, options) {
526
+ if (typeof options === "undefined") options = {};
527
+ else if (typeof options !== "object") throw new Error(`The "options" argument must be of type object. Received type ${typeof options}`);
528
+ const opts = checkOpts(options);
529
+ const { compress, omitExtension } = opts;
530
+ let generator;
531
+ if (typeof filename === "string") generator = opts.rotate ? createClassical(filename, !!compress, !!omitExtension) : createGenerator(filename, !!compress, !!omitExtension);
532
+ else if (typeof filename === "function") generator = filename;
533
+ else throw new Error(`The "filename" argument must be one of type string or function. Received type ${typeof filename}`);
534
+ return new RotatingFileStream(generator, opts);
535
+ }
536
+
537
+ //#endregion
538
+ export { RotatingFileStream, RotatingFileStreamError, createRotationStream };
4
539
  //# sourceMappingURL=log-rotation.mjs.map