zeed 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/AGENTS.md +50 -211
  2. package/README.md +16 -0
  3. package/dist/_experiments/bitcask.cjs +243 -1
  4. package/dist/_experiments/bitcask.cjs.map +1 -1
  5. package/dist/_experiments/bitcask.mjs +230 -1
  6. package/dist/_experiments/bitcask.mjs.map +1 -1
  7. package/dist/bin-BAoS4qtm.mjs +593 -0
  8. package/dist/{bin-SPdenYkw.mjs.map → bin-BAoS4qtm.mjs.map} +1 -1
  9. package/dist/bin-Ddaz2lxM.cjs +862 -0
  10. package/dist/{bin-Ce3i6ABn.cjs.map → bin-Ddaz2lxM.cjs.map} +1 -1
  11. package/dist/browser/base64.cjs +14 -1
  12. package/dist/browser/base64.cjs.map +1 -1
  13. package/dist/browser/base64.mjs +12 -1
  14. package/dist/browser/base64.mjs.map +1 -1
  15. package/dist/browser/gravatar.cjs +186 -1
  16. package/dist/browser/gravatar.cjs.map +1 -1
  17. package/dist/browser/gravatar.mjs +184 -1
  18. package/dist/browser/gravatar.mjs.map +1 -1
  19. package/dist/browser/index.cjs +14 -1
  20. package/dist/browser/index.mjs +8 -1
  21. package/dist/browser/localstorage.cjs +46 -1
  22. package/dist/browser/localstorage.cjs.map +1 -1
  23. package/dist/browser/localstorage.mjs +45 -1
  24. package/dist/browser/localstorage.mjs.map +1 -1
  25. package/dist/browser/log/index.cjs +8 -1
  26. package/dist/browser/log/index.mjs +5 -1
  27. package/dist/browser/log/log-browser-factory.cjs +65 -1
  28. package/dist/browser/log/log-browser-factory.cjs.map +1 -1
  29. package/dist/browser/log/log-browser-factory.mjs +64 -1
  30. package/dist/browser/log/log-browser-factory.mjs.map +1 -1
  31. package/dist/browser/log/log-browser.cjs +72 -1
  32. package/dist/browser/log/log-browser.cjs.map +1 -1
  33. package/dist/browser/log/log-browser.mjs +71 -1
  34. package/dist/browser/log/log-browser.mjs.map +1 -1
  35. package/dist/browser/log/log-colors.cjs +11 -1
  36. package/dist/browser/log/log-colors.cjs.map +1 -1
  37. package/dist/browser/log/log-colors.mjs +9 -1
  38. package/dist/browser/log/log-colors.mjs.map +1 -1
  39. package/dist/browser/log/log-context-browser.cjs +25 -1
  40. package/dist/browser/log/log-context-browser.cjs.map +1 -1
  41. package/dist/browser/log/log-context-browser.mjs +23 -1
  42. package/dist/browser/log/log-context-browser.mjs.map +1 -1
  43. package/dist/chunk-DQk6qfdC.mjs +18 -0
  44. package/dist/chunk-uaV2rQ02.cjs +53 -0
  45. package/dist/common/assert.cjs +22 -1
  46. package/dist/common/assert.cjs.map +1 -1
  47. package/dist/common/assert.mjs +19 -1
  48. package/dist/common/assert.mjs.map +1 -1
  49. package/dist/common/bin/index.cjs +106 -1
  50. package/dist/common/bin/index.cjs.map +1 -1
  51. package/dist/common/bin/index.mjs +98 -1
  52. package/dist/common/bin/index.mjs.map +1 -1
  53. package/dist/common/bin/lib0/binary.cjs +146 -1
  54. package/dist/common/bin/lib0/binary.cjs.map +1 -1
  55. package/dist/common/bin/lib0/binary.mjs +80 -1
  56. package/dist/common/bin/lib0/binary.mjs.map +1 -1
  57. package/dist/common/bin/lib0/buffer.cjs +42 -1
  58. package/dist/common/bin/lib0/buffer.cjs.map +1 -1
  59. package/dist/common/bin/lib0/buffer.mjs +38 -1
  60. package/dist/common/bin/lib0/buffer.mjs.map +1 -1
  61. package/dist/common/bin/lib0/create.cjs +24 -1
  62. package/dist/common/bin/lib0/create.cjs.map +1 -1
  63. package/dist/common/bin/lib0/create.mjs +21 -1
  64. package/dist/common/bin/lib0/create.mjs.map +1 -1
  65. package/dist/common/bin/lib0/decoding.cjs +325 -1
  66. package/dist/common/bin/lib0/decoding.cjs.map +1 -1
  67. package/dist/common/bin/lib0/decoding.mjs +298 -1
  68. package/dist/common/bin/lib0/decoding.mjs.map +1 -1
  69. package/dist/common/bin/lib0/encoding.cjs +404 -1
  70. package/dist/common/bin/lib0/encoding.cjs.map +1 -1
  71. package/dist/common/bin/lib0/encoding.mjs +377 -1
  72. package/dist/common/bin/lib0/encoding.mjs.map +1 -1
  73. package/dist/common/bin/lib0/string.cjs +81 -1
  74. package/dist/common/bin/lib0/string.cjs.map +1 -1
  75. package/dist/common/bin/lib0/string.mjs +71 -1
  76. package/dist/common/bin/lib0/string.mjs.map +1 -1
  77. package/dist/common/crypto/aes-sealed.cjs +34 -1
  78. package/dist/common/crypto/aes-sealed.cjs.map +1 -1
  79. package/dist/common/crypto/aes-sealed.mjs +32 -1
  80. package/dist/common/crypto/aes-sealed.mjs.map +1 -1
  81. package/dist/common/crypto/crypto.cjs +91 -1
  82. package/dist/common/crypto/crypto.cjs.map +1 -1
  83. package/dist/common/crypto/crypto.mjs +80 -1
  84. package/dist/common/crypto/crypto.mjs.map +1 -1
  85. package/dist/common/crypto/index.cjs +23 -1
  86. package/dist/common/crypto/index.mjs +5 -1
  87. package/dist/common/crypto/xaes.cjs +128 -1
  88. package/dist/common/crypto/xaes.cjs.map +1 -1
  89. package/dist/common/crypto/xaes.mjs +123 -1
  90. package/dist/common/crypto/xaes.mjs.map +1 -1
  91. package/dist/common/csv.cjs +49 -4
  92. package/dist/common/csv.cjs.map +1 -1
  93. package/dist/common/csv.mjs +46 -4
  94. package/dist/common/csv.mjs.map +1 -1
  95. package/dist/common/data/array.cjs +299 -1
  96. package/dist/common/data/array.cjs.map +1 -1
  97. package/dist/common/data/array.mjs +274 -1
  98. package/dist/common/data/array.mjs.map +1 -1
  99. package/dist/common/data/basex-secure.cjs +30 -1
  100. package/dist/common/data/basex-secure.mjs +3 -1
  101. package/dist/common/data/basex.cjs +163 -1
  102. package/dist/common/data/basex.cjs.map +1 -1
  103. package/dist/common/data/basex.mjs +152 -1
  104. package/dist/common/data/basex.mjs.map +1 -1
  105. package/dist/common/data/bin-types.mjs +1 -1
  106. package/dist/common/data/bin.cjs +21 -1
  107. package/dist/common/data/bin.mjs +3 -1
  108. package/dist/common/data/camelcase.cjs +27 -1
  109. package/dist/common/data/camelcase.cjs.map +1 -1
  110. package/dist/common/data/camelcase.mjs +22 -1
  111. package/dist/common/data/camelcase.mjs.map +1 -1
  112. package/dist/common/data/convert.cjs +104 -1
  113. package/dist/common/data/convert.cjs.map +1 -1
  114. package/dist/common/data/convert.mjs +88 -1
  115. package/dist/common/data/convert.mjs.map +1 -1
  116. package/dist/common/data/datauri.cjs +32 -1
  117. package/dist/common/data/datauri.cjs.map +1 -1
  118. package/dist/common/data/datauri.mjs +27 -1
  119. package/dist/common/data/datauri.mjs.map +1 -1
  120. package/dist/common/data/day-legacy.cjs +148 -1
  121. package/dist/common/data/day-legacy.cjs.map +1 -1
  122. package/dist/common/data/day-legacy.mjs +143 -1
  123. package/dist/common/data/day-legacy.mjs.map +1 -1
  124. package/dist/common/data/day.cjs +335 -1
  125. package/dist/common/data/day.cjs.map +1 -1
  126. package/dist/common/data/day.mjs +305 -1
  127. package/dist/common/data/day.mjs.map +1 -1
  128. package/dist/common/data/decimal.cjs +28 -1
  129. package/dist/common/data/decimal.cjs.map +1 -1
  130. package/dist/common/data/decimal.mjs +23 -1
  131. package/dist/common/data/decimal.mjs.map +1 -1
  132. package/dist/common/data/deep.cjs +57 -1
  133. package/dist/common/data/deep.cjs.map +1 -1
  134. package/dist/common/data/deep.mjs +54 -1
  135. package/dist/common/data/deep.mjs.map +1 -1
  136. package/dist/common/data/diff.cjs +62 -1
  137. package/dist/common/data/diff.cjs.map +1 -1
  138. package/dist/common/data/diff.mjs +60 -1
  139. package/dist/common/data/diff.mjs.map +1 -1
  140. package/dist/common/data/distributed.cjs +24 -1
  141. package/dist/common/data/distributed.cjs.map +1 -1
  142. package/dist/common/data/distributed.mjs +22 -1
  143. package/dist/common/data/distributed.mjs.map +1 -1
  144. package/dist/common/data/format.cjs +63 -1
  145. package/dist/common/data/format.cjs.map +1 -1
  146. package/dist/common/data/format.mjs +59 -1
  147. package/dist/common/data/format.mjs.map +1 -1
  148. package/dist/common/data/html.cjs +13 -1
  149. package/dist/common/data/html.cjs.map +1 -1
  150. package/dist/common/data/html.mjs +10 -1
  151. package/dist/common/data/html.mjs.map +1 -1
  152. package/dist/common/data/index.cjs +296 -1
  153. package/dist/common/data/index.mjs +37 -1
  154. package/dist/common/data/is.cjs +106 -1
  155. package/dist/common/data/is.cjs.map +1 -1
  156. package/dist/common/data/is.mjs +85 -1
  157. package/dist/common/data/is.mjs.map +1 -1
  158. package/dist/common/data/json.cjs +70 -1
  159. package/dist/common/data/json.cjs.map +1 -1
  160. package/dist/common/data/json.mjs +65 -1
  161. package/dist/common/data/json.mjs.map +1 -1
  162. package/dist/common/data/list.cjs +32 -1
  163. package/dist/common/data/list.cjs.map +1 -1
  164. package/dist/common/data/list.mjs +27 -1
  165. package/dist/common/data/list.mjs.map +1 -1
  166. package/dist/common/data/lru.mjs +1 -1
  167. package/dist/common/data/math.cjs +79 -1
  168. package/dist/common/data/math.cjs.map +1 -1
  169. package/dist/common/data/math.mjs +65 -1
  170. package/dist/common/data/math.mjs.map +1 -1
  171. package/dist/common/data/message.cjs +30 -1
  172. package/dist/common/data/message.cjs.map +1 -1
  173. package/dist/common/data/message.mjs +28 -1
  174. package/dist/common/data/message.mjs.map +1 -1
  175. package/dist/common/data/object-changes.cjs +66 -1
  176. package/dist/common/data/object-changes.cjs.map +1 -1
  177. package/dist/common/data/object-changes.mjs +63 -1
  178. package/dist/common/data/object-changes.mjs.map +1 -1
  179. package/dist/common/data/object.cjs +112 -1
  180. package/dist/common/data/object.cjs.map +1 -1
  181. package/dist/common/data/object.mjs +104 -1
  182. package/dist/common/data/object.mjs.map +1 -1
  183. package/dist/common/data/orderby.cjs +42 -1
  184. package/dist/common/data/orderby.cjs.map +1 -1
  185. package/dist/common/data/orderby.mjs +37 -1
  186. package/dist/common/data/orderby.mjs.map +1 -1
  187. package/dist/common/data/path.cjs +26 -1
  188. package/dist/common/data/path.cjs.map +1 -1
  189. package/dist/common/data/path.mjs +25 -1
  190. package/dist/common/data/path.mjs.map +1 -1
  191. package/dist/common/data/regexp.cjs +12 -1
  192. package/dist/common/data/regexp.cjs.map +1 -1
  193. package/dist/common/data/regexp.mjs +10 -1
  194. package/dist/common/data/regexp.mjs.map +1 -1
  195. package/dist/common/data/rounding.cjs +107 -1
  196. package/dist/common/data/rounding.cjs.map +1 -1
  197. package/dist/common/data/rounding.mjs +95 -1
  198. package/dist/common/data/rounding.mjs.map +1 -1
  199. package/dist/common/data/signal.cjs +39 -1
  200. package/dist/common/data/signal.cjs.map +1 -1
  201. package/dist/common/data/signal.mjs +38 -1
  202. package/dist/common/data/signal.mjs.map +1 -1
  203. package/dist/common/data/sortable.cjs +35 -1
  204. package/dist/common/data/sortable.cjs.map +1 -1
  205. package/dist/common/data/sortable.mjs +31 -1
  206. package/dist/common/data/sortable.mjs.map +1 -1
  207. package/dist/common/data/sorted.cjs +54 -1
  208. package/dist/common/data/sorted.cjs.map +1 -1
  209. package/dist/common/data/sorted.mjs +53 -1
  210. package/dist/common/data/sorted.mjs.map +1 -1
  211. package/dist/common/data/string-deburr.cjs +240 -1
  212. package/dist/common/data/string-deburr.cjs.map +1 -1
  213. package/dist/common/data/string-deburr.mjs +238 -1
  214. package/dist/common/data/string-deburr.mjs.map +1 -1
  215. package/dist/common/data/string-hash-fnv.cjs +69 -1
  216. package/dist/common/data/string-hash-fnv.cjs.map +1 -1
  217. package/dist/common/data/string-hash-fnv.mjs +67 -1
  218. package/dist/common/data/string-hash-fnv.mjs.map +1 -1
  219. package/dist/common/data/string-hash-pool.cjs +28 -1
  220. package/dist/common/data/string-hash-pool.cjs.map +1 -1
  221. package/dist/common/data/string-hash-pool.mjs +27 -1
  222. package/dist/common/data/string-hash-pool.mjs.map +1 -1
  223. package/dist/common/data/url.cjs +98 -2
  224. package/dist/common/data/url.cjs.map +1 -1
  225. package/dist/common/data/url.mjs +91 -2
  226. package/dist/common/data/url.mjs.map +1 -1
  227. package/dist/common/data/utils.cjs +118 -1
  228. package/dist/common/data/utils.cjs.map +1 -1
  229. package/dist/common/data/utils.mjs +107 -1
  230. package/dist/common/data/utils.mjs.map +1 -1
  231. package/dist/common/data/wordlist.cjs +531 -1
  232. package/dist/common/data/wordlist.cjs.map +1 -1
  233. package/dist/common/data/wordlist.mjs +529 -1
  234. package/dist/common/data/wordlist.mjs.map +1 -1
  235. package/dist/common/data/xrx.cjs +96 -1
  236. package/dist/common/data/xrx.cjs.map +1 -1
  237. package/dist/common/data/xrx.mjs +92 -1
  238. package/dist/common/data/xrx.mjs.map +1 -1
  239. package/dist/common/dispose-defer.cjs +133 -1
  240. package/dist/common/dispose-defer.cjs.map +1 -1
  241. package/dist/common/dispose-defer.mjs +130 -1
  242. package/dist/common/dispose-defer.mjs.map +1 -1
  243. package/dist/common/dispose-types.mjs +1 -1
  244. package/dist/common/dispose-utils.cjs +113 -1
  245. package/dist/common/dispose-utils.cjs.map +1 -1
  246. package/dist/common/dispose-utils.mjs +106 -1
  247. package/dist/common/dispose-utils.mjs.map +1 -1
  248. package/dist/common/exec/index.cjs +24 -1
  249. package/dist/common/exec/index.d.cts +1 -1
  250. package/dist/common/exec/index.d.mts +1 -1
  251. package/dist/common/exec/index.mjs +8 -1
  252. package/dist/common/exec/mutex.cjs +44 -1
  253. package/dist/common/exec/mutex.cjs.map +1 -1
  254. package/dist/common/exec/mutex.mjs +42 -1
  255. package/dist/common/exec/mutex.mjs.map +1 -1
  256. package/dist/common/exec/pool.cjs +181 -1
  257. package/dist/common/exec/pool.cjs.map +1 -1
  258. package/dist/common/exec/pool.d.cts +1 -1
  259. package/dist/common/exec/pool.d.mts +1 -1
  260. package/dist/common/exec/pool.mjs +180 -1
  261. package/dist/common/exec/pool.mjs.map +1 -1
  262. package/dist/common/exec/progress.cjs +149 -1
  263. package/dist/common/exec/progress.cjs.map +1 -1
  264. package/dist/common/exec/progress.d.cts +1 -1
  265. package/dist/common/exec/progress.d.mts +1 -1
  266. package/dist/common/exec/progress.mjs +148 -1
  267. package/dist/common/exec/progress.mjs.map +1 -1
  268. package/dist/common/exec/promise.cjs +113 -1
  269. package/dist/common/exec/promise.cjs.map +1 -1
  270. package/dist/common/exec/promise.mjs +103 -1
  271. package/dist/common/exec/promise.mjs.map +1 -1
  272. package/dist/common/exec/queue.cjs +125 -1
  273. package/dist/common/exec/queue.cjs.map +1 -1
  274. package/dist/common/exec/queue.d.cts +1 -1
  275. package/dist/common/exec/queue.d.mts +1 -1
  276. package/dist/common/exec/queue.mjs +124 -1
  277. package/dist/common/exec/queue.mjs.map +1 -1
  278. package/dist/common/exec/throttle-debounce.cjs +114 -1
  279. package/dist/common/exec/throttle-debounce.cjs.map +1 -1
  280. package/dist/common/exec/throttle-debounce.mjs +112 -1
  281. package/dist/common/exec/throttle-debounce.mjs.map +1 -1
  282. package/dist/common/global.cjs +22 -1
  283. package/dist/common/global.cjs.map +1 -1
  284. package/dist/common/global.mjs +19 -1
  285. package/dist/common/global.mjs.map +1 -1
  286. package/dist/common/index.cjs +559 -1
  287. package/dist/common/index.d.cts +1 -1
  288. package/dist/common/index.d.mts +1 -1
  289. package/dist/common/index.mjs +89 -1
  290. package/dist/common/localhost.cjs +16 -1
  291. package/dist/common/localhost.cjs.map +1 -1
  292. package/dist/common/localhost.mjs +14 -1
  293. package/dist/common/localhost.mjs.map +1 -1
  294. package/dist/common/log/index.cjs +34 -1
  295. package/dist/common/log/index.mjs +11 -1
  296. package/dist/common/log/log-base.cjs +40 -1
  297. package/dist/common/log/log-base.cjs.map +1 -1
  298. package/dist/common/log/log-base.mjs +31 -1
  299. package/dist/common/log/log-base.mjs.map +1 -1
  300. package/dist/common/log/log-colors.cjs +92 -1
  301. package/dist/common/log/log-colors.cjs.map +1 -1
  302. package/dist/common/log/log-colors.mjs +90 -1
  303. package/dist/common/log/log-colors.mjs.map +1 -1
  304. package/dist/common/log/log-config.cjs +15 -1
  305. package/dist/common/log/log-config.cjs.map +1 -1
  306. package/dist/common/log/log-config.mjs +14 -1
  307. package/dist/common/log/log-config.mjs.map +1 -1
  308. package/dist/common/log/log-console-capture.cjs +33 -1
  309. package/dist/common/log/log-console-capture.cjs.map +1 -1
  310. package/dist/common/log/log-console-capture.mjs +32 -1
  311. package/dist/common/log/log-console-capture.mjs.map +1 -1
  312. package/dist/common/log/log-console-original.cjs +27 -1
  313. package/dist/common/log/log-console-original.cjs.map +1 -1
  314. package/dist/common/log/log-console-original.mjs +26 -1
  315. package/dist/common/log/log-console-original.mjs.map +1 -1
  316. package/dist/common/log/log-console.cjs +39 -1
  317. package/dist/common/log/log-console.cjs.map +1 -1
  318. package/dist/common/log/log-console.mjs +38 -1
  319. package/dist/common/log/log-console.mjs.map +1 -1
  320. package/dist/common/log/log-context.cjs +109 -1
  321. package/dist/common/log/log-context.cjs.map +1 -1
  322. package/dist/common/log/log-context.mjs +108 -1
  323. package/dist/common/log/log-context.mjs.map +1 -1
  324. package/dist/common/log/log-filter.cjs +80 -1
  325. package/dist/common/log/log-filter.cjs.map +1 -1
  326. package/dist/common/log/log-filter.mjs +75 -1
  327. package/dist/common/log/log-filter.mjs.map +1 -1
  328. package/dist/common/log/log-memory.cjs +45 -1
  329. package/dist/common/log/log-memory.cjs.map +1 -1
  330. package/dist/common/log/log-memory.mjs +43 -1
  331. package/dist/common/log/log-memory.mjs.map +1 -1
  332. package/dist/common/log/log-noop.cjs +17 -1
  333. package/dist/common/log/log-noop.cjs.map +1 -1
  334. package/dist/common/log/log-noop.mjs +15 -1
  335. package/dist/common/log/log-noop.mjs.map +1 -1
  336. package/dist/common/log/log.cjs +46 -1
  337. package/dist/common/log/log.cjs.map +1 -1
  338. package/dist/common/log/log.mjs +43 -1
  339. package/dist/common/log/log.mjs.map +1 -1
  340. package/dist/common/msg/channel-debug.cjs +17 -1
  341. package/dist/common/msg/channel-debug.cjs.map +1 -1
  342. package/dist/common/msg/channel-debug.d.cts +1 -1
  343. package/dist/common/msg/channel-debug.d.mts +1 -1
  344. package/dist/common/msg/channel-debug.mjs +16 -1
  345. package/dist/common/msg/channel-debug.mjs.map +1 -1
  346. package/dist/common/msg/channel-local.cjs +28 -1
  347. package/dist/common/msg/channel-local.cjs.map +1 -1
  348. package/dist/common/msg/channel-local.d.cts +1 -1
  349. package/dist/common/msg/channel-local.d.mts +1 -1
  350. package/dist/common/msg/channel-local.mjs +26 -1
  351. package/dist/common/msg/channel-local.mjs.map +1 -1
  352. package/dist/common/msg/channel-resilient.cjs +63 -1
  353. package/dist/common/msg/channel-resilient.cjs.map +1 -1
  354. package/dist/common/msg/channel-resilient.d.cts +1 -1
  355. package/dist/common/msg/channel-resilient.d.mts +1 -1
  356. package/dist/common/msg/channel-resilient.mjs +62 -1
  357. package/dist/common/msg/channel-resilient.mjs.map +1 -1
  358. package/dist/common/msg/channel-wkwebview.cjs +35 -1
  359. package/dist/common/msg/channel-wkwebview.cjs.map +1 -1
  360. package/dist/common/msg/channel-wkwebview.d.cts +2 -1
  361. package/dist/common/msg/channel-wkwebview.d.mts +2 -1
  362. package/dist/common/msg/channel-wkwebview.mjs +34 -1
  363. package/dist/common/msg/channel-wkwebview.mjs.map +1 -1
  364. package/dist/common/msg/channel.cjs +23 -1
  365. package/dist/common/msg/channel.cjs.map +1 -1
  366. package/dist/common/msg/channel.d.cts +1 -1
  367. package/dist/common/msg/channel.d.mts +1 -1
  368. package/dist/common/msg/channel.mjs +22 -1
  369. package/dist/common/msg/channel.mjs.map +1 -1
  370. package/dist/common/msg/emitter.cjs +141 -1
  371. package/dist/common/msg/emitter.cjs.map +1 -1
  372. package/dist/common/msg/emitter.d.cts +1 -1
  373. package/dist/common/msg/emitter.d.mts +1 -1
  374. package/dist/common/msg/emitter.mjs +139 -1
  375. package/dist/common/msg/emitter.mjs.map +1 -1
  376. package/dist/common/msg/encoder.cjs +38 -1
  377. package/dist/common/msg/encoder.cjs.map +1 -1
  378. package/dist/common/msg/encoder.mjs +35 -1
  379. package/dist/common/msg/encoder.mjs.map +1 -1
  380. package/dist/common/msg/index.cjs +28 -1
  381. package/dist/common/msg/index.d.cts +1 -1
  382. package/dist/common/msg/index.d.mts +1 -1
  383. package/dist/common/msg/index.mjs +11 -1
  384. package/dist/common/msg/messages.cjs +135 -1
  385. package/dist/common/msg/messages.cjs.map +1 -1
  386. package/dist/common/msg/messages.d.cts +1 -1
  387. package/dist/common/msg/messages.d.mts +1 -1
  388. package/dist/common/msg/messages.mjs +133 -1
  389. package/dist/common/msg/messages.mjs.map +1 -1
  390. package/dist/common/msg/pipe.mjs +1 -1
  391. package/dist/common/msg/pubsub.cjs +78 -1
  392. package/dist/common/msg/pubsub.cjs.map +1 -1
  393. package/dist/common/msg/pubsub.d.cts +1 -1
  394. package/dist/common/msg/pubsub.d.mts +1 -1
  395. package/dist/common/msg/pubsub.mjs +76 -1
  396. package/dist/common/msg/pubsub.mjs.map +1 -1
  397. package/dist/common/msg/rpc.cjs +142 -1
  398. package/dist/common/msg/rpc.cjs.map +1 -1
  399. package/dist/common/msg/rpc.mjs +139 -1
  400. package/dist/common/msg/rpc.mjs.map +1 -1
  401. package/dist/common/network.cjs +129 -1
  402. package/dist/common/network.cjs.map +1 -1
  403. package/dist/common/network.mjs +122 -1
  404. package/dist/common/network.mjs.map +1 -1
  405. package/dist/common/platform.cjs +92 -1
  406. package/dist/common/platform.cjs.map +1 -1
  407. package/dist/common/platform.mjs +84 -1
  408. package/dist/common/platform.mjs.map +1 -1
  409. package/dist/common/schema/_sandbox/sandbox-inherit.mjs +1 -1
  410. package/dist/common/schema/_sandbox/sandbox.mjs +1 -1
  411. package/dist/common/schema/_sandbox/sandbox.xspec.mjs +1 -1
  412. package/dist/common/schema/export-json-schema.cjs +54 -1
  413. package/dist/common/schema/export-json-schema.cjs.map +1 -1
  414. package/dist/common/schema/export-json-schema.mjs +52 -1
  415. package/dist/common/schema/export-json-schema.mjs.map +1 -1
  416. package/dist/common/schema/export-swift.cjs +30 -2
  417. package/dist/common/schema/export-swift.cjs.map +1 -1
  418. package/dist/common/schema/export-swift.mjs +29 -2
  419. package/dist/common/schema/export-swift.mjs.map +1 -1
  420. package/dist/common/schema/export-typescript.cjs +20 -2
  421. package/dist/common/schema/export-typescript.cjs.map +1 -1
  422. package/dist/common/schema/export-typescript.mjs +19 -2
  423. package/dist/common/schema/export-typescript.mjs.map +1 -1
  424. package/dist/common/schema/index.cjs +55 -1
  425. package/dist/common/schema/index.mjs +12 -1
  426. package/dist/common/schema/parse-args.cjs +62 -2
  427. package/dist/common/schema/parse-args.cjs.map +1 -1
  428. package/dist/common/schema/parse-args.mjs +60 -2
  429. package/dist/common/schema/parse-args.mjs.map +1 -1
  430. package/dist/common/schema/parse-env.cjs +48 -3
  431. package/dist/common/schema/parse-env.cjs.map +1 -1
  432. package/dist/common/schema/parse-env.mjs +46 -3
  433. package/dist/common/schema/parse-env.mjs.map +1 -1
  434. package/dist/common/schema/parse-object.cjs +122 -1
  435. package/dist/common/schema/parse-object.cjs.map +1 -1
  436. package/dist/common/schema/parse-object.mjs +119 -1
  437. package/dist/common/schema/parse-object.mjs.map +1 -1
  438. package/dist/common/schema/schema-standard.mjs +1 -1
  439. package/dist/common/schema/schema.cjs +423 -1
  440. package/dist/common/schema/schema.cjs.map +1 -1
  441. package/dist/common/schema/schema.mjs +404 -1
  442. package/dist/common/schema/schema.mjs.map +1 -1
  443. package/dist/common/schema/serialize.cjs +109 -1
  444. package/dist/common/schema/serialize.cjs.map +1 -1
  445. package/dist/common/schema/serialize.mjs +107 -1
  446. package/dist/common/schema/serialize.mjs.map +1 -1
  447. package/dist/common/schema/type-test.mjs +1 -1
  448. package/dist/common/schema/utils.cjs +25 -1
  449. package/dist/common/schema/utils.cjs.map +1 -1
  450. package/dist/common/schema/utils.mjs +19 -1
  451. package/dist/common/schema/utils.mjs.map +1 -1
  452. package/dist/common/schema/z-collection.cjs +51 -1
  453. package/dist/common/schema/z-collection.mjs +27 -1
  454. package/dist/common/schema/z.cjs +9 -1
  455. package/dist/common/schema/z.mjs +3 -1
  456. package/dist/common/storage/index.cjs +4 -1
  457. package/dist/common/storage/index.mjs +3 -1
  458. package/dist/common/storage/memstorage.cjs +26 -1
  459. package/dist/common/storage/memstorage.cjs.map +1 -1
  460. package/dist/common/storage/memstorage.mjs +25 -1
  461. package/dist/common/storage/memstorage.mjs.map +1 -1
  462. package/dist/common/test.cjs +14 -1
  463. package/dist/common/test.cjs.map +1 -1
  464. package/dist/common/test.mjs +13 -1
  465. package/dist/common/test.mjs.map +1 -1
  466. package/dist/common/time.cjs +220 -1
  467. package/dist/common/time.cjs.map +1 -1
  468. package/dist/common/time.mjs +194 -1
  469. package/dist/common/time.mjs.map +1 -1
  470. package/dist/common/timeout.cjs +27 -1
  471. package/dist/common/timeout.cjs.map +1 -1
  472. package/dist/common/timeout.mjs +25 -1
  473. package/dist/common/timeout.mjs.map +1 -1
  474. package/dist/common/types.mjs +1 -1
  475. package/dist/common/utils.cjs +7 -1
  476. package/dist/common/utils.cjs.map +1 -1
  477. package/dist/common/utils.mjs +5 -1
  478. package/dist/common/utils.mjs.map +1 -1
  479. package/dist/common/uuid.cjs +307 -1
  480. package/dist/common/uuid.cjs.map +1 -1
  481. package/dist/common/uuid.mjs +284 -1
  482. package/dist/common/uuid.mjs.map +1 -1
  483. package/dist/{index-DHXVOH8h.d.cts → index-CFkMqHvX.d.cts} +1 -2
  484. package/dist/{index-DMaPyx9O.d.mts → index-C_3Y_s6f.d.mts} +1 -2
  485. package/dist/index.all.cjs +641 -1
  486. package/dist/index.all.d.cts +1 -1
  487. package/dist/index.all.d.mts +1 -1
  488. package/dist/index.all.mjs +113 -1
  489. package/dist/index.browser.cjs +576 -1
  490. package/dist/index.browser.d.cts +1 -1
  491. package/dist/index.browser.d.mts +1 -1
  492. package/dist/index.browser.mjs +98 -1
  493. package/dist/index.jsr.cjs +57 -1
  494. package/dist/index.jsr.mjs +6 -1
  495. package/dist/index.node.cjs +628 -1
  496. package/dist/index.node.d.cts +1 -1
  497. package/dist/index.node.d.mts +1 -1
  498. package/dist/index.node.mjs +106 -1
  499. package/dist/node/args.cjs +56 -1
  500. package/dist/node/args.cjs.map +1 -1
  501. package/dist/node/args.mjs +53 -1
  502. package/dist/node/args.mjs.map +1 -1
  503. package/dist/node/clipboard.cjs +18 -1
  504. package/dist/node/clipboard.cjs.map +1 -1
  505. package/dist/node/clipboard.mjs +16 -1
  506. package/dist/node/clipboard.mjs.map +1 -1
  507. package/dist/node/crypto.cjs +28 -1
  508. package/dist/node/crypto.cjs.map +1 -1
  509. package/dist/node/crypto.mjs +24 -1
  510. package/dist/node/crypto.mjs.map +1 -1
  511. package/dist/node/env.cjs +100 -4
  512. package/dist/node/env.cjs.map +1 -1
  513. package/dist/node/env.mjs +90 -4
  514. package/dist/node/env.mjs.map +1 -1
  515. package/dist/node/files-async.cjs +66 -1
  516. package/dist/node/files-async.cjs.map +1 -1
  517. package/dist/node/files-async.mjs +60 -1
  518. package/dist/node/files-async.mjs.map +1 -1
  519. package/dist/node/files.cjs +52 -1
  520. package/dist/node/files.cjs.map +1 -1
  521. package/dist/node/files.mjs +46 -1
  522. package/dist/node/files.mjs.map +1 -1
  523. package/dist/node/filestorage.cjs +100 -1
  524. package/dist/node/filestorage.cjs.map +1 -1
  525. package/dist/node/filestorage.mjs +97 -1
  526. package/dist/node/filestorage.mjs.map +1 -1
  527. package/dist/node/fs.cjs +119 -1
  528. package/dist/node/fs.cjs.map +1 -1
  529. package/dist/node/fs.mjs +101 -1
  530. package/dist/node/fs.mjs.map +1 -1
  531. package/dist/node/glob.cjs +75 -1
  532. package/dist/node/glob.cjs.map +1 -1
  533. package/dist/node/glob.mjs +73 -1
  534. package/dist/node/glob.mjs.map +1 -1
  535. package/dist/node/index.cjs +66 -1
  536. package/dist/node/index.mjs +16 -1
  537. package/dist/node/log/index.cjs +20 -1
  538. package/dist/node/log/index.mjs +7 -1
  539. package/dist/node/log/log-context-node.cjs +39 -1
  540. package/dist/node/log/log-context-node.cjs.map +1 -1
  541. package/dist/node/log/log-context-node.mjs +35 -1
  542. package/dist/node/log/log-context-node.mjs.map +1 -1
  543. package/dist/node/log/log-file-rotation.cjs +71 -1
  544. package/dist/node/log/log-file-rotation.cjs.map +1 -1
  545. package/dist/node/log/log-file-rotation.mjs +68 -1
  546. package/dist/node/log/log-file-rotation.mjs.map +1 -1
  547. package/dist/node/log/log-file.cjs +57 -1
  548. package/dist/node/log/log-file.cjs.map +1 -1
  549. package/dist/node/log/log-file.mjs +54 -1
  550. package/dist/node/log/log-file.mjs.map +1 -1
  551. package/dist/node/log/log-node.cjs +162 -1
  552. package/dist/node/log/log-node.cjs.map +1 -1
  553. package/dist/node/log/log-node.mjs +155 -1
  554. package/dist/node/log/log-node.mjs.map +1 -1
  555. package/dist/node/log/log-rotation.cjs +543 -3
  556. package/dist/node/log/log-rotation.cjs.map +1 -1
  557. package/dist/node/log/log-rotation.mjs +538 -3
  558. package/dist/node/log/log-rotation.mjs.map +1 -1
  559. package/dist/node/log/log-util.cjs +69 -3
  560. package/dist/node/log/log-util.cjs.map +1 -1
  561. package/dist/node/log/log-util.mjs +63 -3
  562. package/dist/node/log/log-util.mjs.map +1 -1
  563. package/dist/node/open-browser.cjs +20 -1
  564. package/dist/node/open-browser.cjs.map +1 -1
  565. package/dist/node/open-browser.mjs +18 -1
  566. package/dist/node/open-browser.mjs.map +1 -1
  567. package/package.json +15 -15
  568. package/src/common/schema/README.md +247 -66
  569. package/src/eslint-defaults.js +4 -0
  570. package/src/index.spec.ts +6 -6
  571. package/dist/bin-Ce3i6ABn.cjs +0 -3
  572. package/dist/bin-SPdenYkw.mjs +0 -3
  573. package/dist/chunk-0Lt9GpW0.mjs +0 -1
  574. package/dist/chunk-D-qHiVGv.cjs +0 -1
  575. package/src/common/schema/README-SCHEMA.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"xrx.cjs","names":[],"sources":["../../../src/common/data/xrx.ts"],"sourcesContent":["/* eslint-disable no-cond-assign */\n\nconst RX_WHITESPACE = /\\\\\\s|\\s+|#[^\\n]*\\n?/g\nconst RX_REAL_GROUPS = /\\(\\?P?<(\\w{2,})>|\\((?!\\?([:!=]|<=|<!))/g\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst RX_LOOK_BEHIND = /^((?:\\(\\?[\\w$]+\\))?)\\(\\?<([=!])([\\s\\S]*?)\\)/gm\n\nexport function regExpString(rx: string | RegExp): string {\n return typeof rx === 'string' ? rx : (rx.source || '')\n}\n\nexport function regExpEscape(str: string): string {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport class XRX {\n lookBehind:any\n namedGroups: Record<string, number> = {}\n names: string[] = []\n rx: RegExp\n\n constructor(pattern: string | RegExp, flags?: string) {\n let _flags: string = flags ?? ''\n let _rx: string\n\n if (pattern instanceof RegExp) {\n if (flags == null)\n _flags = pattern.flags\n\n _rx = pattern.source\n }\n else {\n _rx = pattern\n }\n\n // eXtended / Ignore Whitespace\n const extended = _flags && _flags.includes('x')\n if (extended) {\n _flags = _flags.replace('x', '')\n _rx = _rx.replace(RX_WHITESPACE, (r) => {\n // log('rp', r)\n return r[0] === '\\\\' ? r : ''\n })\n }\n\n // Named Groups\n if (!(pattern instanceof RegExp)) {\n let index = 0\n _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {\n // log('>>>', name)\n index += 1\n if (name) {\n if (\n name !== 'index'\n && name !== 'length'\n && !this.namedGroups[name]\n ) {\n this.namedGroups[name] = index\n }\n // else\n // log.error(`Unallowed or duplicate group name: ${name}`)\n\n return '('\n }\n return str\n })\n this.names = Object.keys(this.namedGroups)\n }\n\n // http://www.rexegg.com/regex-best-trick.html\n\n _rx = regExpString(_rx)\n RX_LOOK_BEHIND.lastIndex = 0\n const parts = RX_LOOK_BEHIND.exec(_rx)\n if (parts) {\n this.lookBehind = {\n rx: new RegExp(`${parts[3]}$(?!\\\\s)`),\n expect: parts ? parts[2] === '=' : !parts,\n }\n _rx = _rx.substr(parts[0].length)\n }\n\n this.rx = new RegExp(_rx, _flags)\n }\n\n // flagsString() {\n // let hash = this.rx.toString() + '/'\n // if (this.rx.global) {\n // hash += 'g'\n // }\n // if (this.rx.multiline) {\n // hash += 'm'\n // }\n // if (this.rx.ignoreCase) {\n // hash += 'i'\n // }\n // if (this.rx.unicode) {\n // hash += 'u'\n // }\n // if (this.rx.sticky) {\n // hash += 'y'\n // }\n // }\n\n get lastIndex(): number {\n return this.rx.lastIndex\n }\n\n set lastIndex(index: number) {\n this.rx.lastIndex = index\n }\n\n _handleMatch(m: any) {\n if (this.lookBehind) {\n const leftContext = m.input.slice(0, m.index)\n if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext))\n return null\n }\n for (const name of this.names)\n m[name] = m[this.namedGroups[name]]\n\n return m\n }\n\n exec(str: string) {\n let m\n while ((m = this.rx.exec(str))) {\n if (this.rx.lastIndex === m.index)\n this.rx.lastIndex++\n m = this._handleMatch(m)\n if (m != null)\n return m\n }\n }\n\n execAll(str: string) {\n const matches = []\n let m\n this.rx.lastIndex = 0\n while ((m = this.exec(str)))\n matches.push(m)\n\n this.rx.lastIndex = 0\n // log('execAll:', matches)\n return matches\n }\n\n replace(str: string, replacement: string | ((m: string) => string)) {\n const fn = typeof replacement === 'function' ? replacement : () => replacement\n return str.replace(this.rx, (m) => {\n // m = this._handleMatch(m)\n return fn(m)\n })\n }\n}\n"],"mappings":"mEAEA,MAAM,EAAgB,uBAChB,EAAiB,0CAEjB,EAAiB,gDAEvB,SAAgB,EAAa,EAA6B,CACxD,OAAO,OAAO,GAAO,SAAW,EAAM,EAAG,QAAU,GAGrD,SAAgB,EAAa,EAAqB,CAChD,OAAO,EAAI,QAAQ,2BAA4B,OAAO,CAGxD,IAAa,EAAb,KAAiB,CACf,WACA,YAAsC,EAAE,CACxC,MAAkB,EAAE,CACpB,GAEA,YAAY,EAA0B,EAAgB,CACpD,IAAI,EAAiB,GAAS,GAC1B,EAuBJ,GArBI,aAAmB,QACjB,IACF,EAAS,EAAQ,OAEnB,EAAM,EAAQ,QAGd,EAAM,EAIS,GAAU,EAAO,SAAS,IAAI,GAE7C,EAAS,EAAO,QAAQ,IAAK,GAAG,CAChC,EAAM,EAAI,QAAQ,EAAgB,GAEzB,EAAE,KAAO,KAAO,EAAI,GAC3B,EAIA,EAAE,aAAmB,QAAS,CAChC,IAAI,EAAQ,EACZ,EAAM,EAAI,QAAQ,GAAiB,EAAK,KAEtC,GAAS,EACL,GAEA,IAAS,SACN,IAAS,UACT,CAAC,KAAK,YAAY,KAErB,KAAK,YAAY,GAAQ,GAKpB,KAEF,GACP,CACF,KAAK,MAAQ,OAAO,KAAK,KAAK,YAAY,CAK5C,EAAM,EAAa,EAAI,CACvB,EAAe,UAAY,EAC3B,IAAM,EAAQ,EAAe,KAAK,EAAI,CAClC,IACF,KAAK,WAAa,CAChB,GAAQ,OAAO,GAAG,EAAM,GAAG,UAAU,CACrC,OAAQ,EAAQ,EAAM,KAAO,IAAM,CAAC,EACrC,CACD,EAAM,EAAI,OAAO,EAAM,GAAG,OAAO,EAGnC,KAAK,GAAK,IAAI,OAAO,EAAK,EAAO,CAsBnC,IAAI,WAAoB,CACtB,OAAO,KAAK,GAAG,UAGjB,IAAI,UAAU,EAAe,CAC3B,KAAK,GAAG,UAAY,EAGtB,aAAa,EAAQ,CACnB,GAAI,KAAK,WAAY,CACnB,IAAM,EAAc,EAAE,MAAM,MAAM,EAAG,EAAE,MAAM,CAC7C,GAAI,KAAK,WAAW,SAAW,KAAK,WAAW,GAAG,KAAK,EAAY,CACjE,OAAO,KAEX,IAAK,IAAM,KAAQ,KAAK,MACtB,EAAE,GAAQ,EAAE,KAAK,YAAY,IAE/B,OAAO,EAGT,KAAK,EAAa,CAChB,IAAI,EACJ,KAAQ,EAAI,KAAK,GAAG,KAAK,EAAI,EAI3B,GAHI,KAAK,GAAG,YAAc,EAAE,OAC1B,KAAK,GAAG,YACV,EAAI,KAAK,aAAa,EAAE,CACpB,GAAK,KACP,OAAO,EAIb,QAAQ,EAAa,CACnB,IAAM,EAAU,EAAE,CACd,EAEJ,IADA,KAAK,GAAG,UAAY,EACZ,EAAI,KAAK,KAAK,EAAI,EACxB,EAAQ,KAAK,EAAE,CAIjB,MAFA,MAAK,GAAG,UAAY,EAEb,EAGT,QAAQ,EAAa,EAA+C,CAClE,IAAM,EAAK,OAAO,GAAgB,WAAa,MAAoB,EACnE,OAAO,EAAI,QAAQ,KAAK,GAAK,GAEpB,EAAG,EAAE,CACZ"}
1
+ {"version":3,"file":"xrx.cjs","names":[],"sources":["../../../src/common/data/xrx.ts"],"sourcesContent":["/* eslint-disable no-cond-assign */\n\nconst RX_WHITESPACE = /\\\\\\s|\\s+|#[^\\n]*\\n?/g\nconst RX_REAL_GROUPS = /\\(\\?P?<(\\w{2,})>|\\((?!\\?([:!=]|<=|<!))/g\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst RX_LOOK_BEHIND = /^((?:\\(\\?[\\w$]+\\))?)\\(\\?<([=!])([\\s\\S]*?)\\)/gm\n\nexport function regExpString(rx: string | RegExp): string {\n return typeof rx === 'string' ? rx : (rx.source || '')\n}\n\nexport function regExpEscape(str: string): string {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport class XRX {\n lookBehind:any\n namedGroups: Record<string, number> = {}\n names: string[] = []\n rx: RegExp\n\n constructor(pattern: string | RegExp, flags?: string) {\n let _flags: string = flags ?? ''\n let _rx: string\n\n if (pattern instanceof RegExp) {\n if (flags == null)\n _flags = pattern.flags\n\n _rx = pattern.source\n }\n else {\n _rx = pattern\n }\n\n // eXtended / Ignore Whitespace\n const extended = _flags && _flags.includes('x')\n if (extended) {\n _flags = _flags.replace('x', '')\n _rx = _rx.replace(RX_WHITESPACE, (r) => {\n // log('rp', r)\n return r[0] === '\\\\' ? r : ''\n })\n }\n\n // Named Groups\n if (!(pattern instanceof RegExp)) {\n let index = 0\n _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {\n // log('>>>', name)\n index += 1\n if (name) {\n if (\n name !== 'index'\n && name !== 'length'\n && !this.namedGroups[name]\n ) {\n this.namedGroups[name] = index\n }\n // else\n // log.error(`Unallowed or duplicate group name: ${name}`)\n\n return '('\n }\n return str\n })\n this.names = Object.keys(this.namedGroups)\n }\n\n // http://www.rexegg.com/regex-best-trick.html\n\n _rx = regExpString(_rx)\n RX_LOOK_BEHIND.lastIndex = 0\n const parts = RX_LOOK_BEHIND.exec(_rx)\n if (parts) {\n this.lookBehind = {\n rx: new RegExp(`${parts[3]}$(?!\\\\s)`),\n expect: parts ? parts[2] === '=' : !parts,\n }\n _rx = _rx.substr(parts[0].length)\n }\n\n this.rx = new RegExp(_rx, _flags)\n }\n\n // flagsString() {\n // let hash = this.rx.toString() + '/'\n // if (this.rx.global) {\n // hash += 'g'\n // }\n // if (this.rx.multiline) {\n // hash += 'm'\n // }\n // if (this.rx.ignoreCase) {\n // hash += 'i'\n // }\n // if (this.rx.unicode) {\n // hash += 'u'\n // }\n // if (this.rx.sticky) {\n // hash += 'y'\n // }\n // }\n\n get lastIndex(): number {\n return this.rx.lastIndex\n }\n\n set lastIndex(index: number) {\n this.rx.lastIndex = index\n }\n\n _handleMatch(m: any) {\n if (this.lookBehind) {\n const leftContext = m.input.slice(0, m.index)\n if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext))\n return null\n }\n for (const name of this.names)\n m[name] = m[this.namedGroups[name]]\n\n return m\n }\n\n exec(str: string) {\n let m\n while ((m = this.rx.exec(str))) {\n if (this.rx.lastIndex === m.index)\n this.rx.lastIndex++\n m = this._handleMatch(m)\n if (m != null)\n return m\n }\n }\n\n execAll(str: string) {\n const matches = []\n let m\n this.rx.lastIndex = 0\n while ((m = this.exec(str)))\n matches.push(m)\n\n this.rx.lastIndex = 0\n // log('execAll:', matches)\n return matches\n }\n\n replace(str: string, replacement: string | ((m: string) => string)) {\n const fn = typeof replacement === 'function' ? replacement : () => replacement\n return str.replace(this.rx, (m) => {\n // m = this._handleMatch(m)\n return fn(m)\n })\n }\n}\n"],"mappings":";;;AAEA,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AAEvB,MAAM,iBAAiB;AAEvB,SAAgB,aAAa,IAA6B;AACxD,QAAO,OAAO,OAAO,WAAW,KAAM,GAAG,UAAU;;AAGrD,SAAgB,aAAa,KAAqB;AAChD,QAAO,IAAI,QAAQ,4BAA4B,OAAO;;AAGxD,IAAa,MAAb,MAAiB;CACf;CACA,cAAsC,EAAE;CACxC,QAAkB,EAAE;CACpB;CAEA,YAAY,SAA0B,OAAgB;EACpD,IAAI,SAAiB,SAAS;EAC9B,IAAI;AAEJ,MAAI,mBAAmB,QAAQ;AAC7B,OAAI,SAAS,KACX,UAAS,QAAQ;AAEnB,SAAM,QAAQ;QAGd,OAAM;AAKR,MADiB,UAAU,OAAO,SAAS,IAAI,EACjC;AACZ,YAAS,OAAO,QAAQ,KAAK,GAAG;AAChC,SAAM,IAAI,QAAQ,gBAAgB,MAAM;AAEtC,WAAO,EAAE,OAAO,OAAO,IAAI;KAC3B;;AAIJ,MAAI,EAAE,mBAAmB,SAAS;GAChC,IAAI,QAAQ;AACZ,SAAM,IAAI,QAAQ,iBAAiB,KAAK,SAAS;AAE/C,aAAS;AACT,QAAI,MAAM;AACR,SACE,SAAS,WACN,SAAS,YACT,CAAC,KAAK,YAAY,MAErB,MAAK,YAAY,QAAQ;AAK3B,YAAO;;AAET,WAAO;KACP;AACF,QAAK,QAAQ,OAAO,KAAK,KAAK,YAAY;;AAK5C,QAAM,aAAa,IAAI;AACvB,iBAAe,YAAY;EAC3B,MAAM,QAAQ,eAAe,KAAK,IAAI;AACtC,MAAI,OAAO;AACT,QAAK,aAAa;IAChB,IAAI,IAAI,OAAO,GAAG,MAAM,GAAG,UAAU;IACrC,QAAQ,QAAQ,MAAM,OAAO,MAAM,CAAC;IACrC;AACD,SAAM,IAAI,OAAO,MAAM,GAAG,OAAO;;AAGnC,OAAK,KAAK,IAAI,OAAO,KAAK,OAAO;;CAsBnC,IAAI,YAAoB;AACtB,SAAO,KAAK,GAAG;;CAGjB,IAAI,UAAU,OAAe;AAC3B,OAAK,GAAG,YAAY;;CAGtB,aAAa,GAAQ;AACnB,MAAI,KAAK,YAAY;GACnB,MAAM,cAAc,EAAE,MAAM,MAAM,GAAG,EAAE,MAAM;AAC7C,OAAI,KAAK,WAAW,WAAW,KAAK,WAAW,GAAG,KAAK,YAAY,CACjE,QAAO;;AAEX,OAAK,MAAM,QAAQ,KAAK,MACtB,GAAE,QAAQ,EAAE,KAAK,YAAY;AAE/B,SAAO;;CAGT,KAAK,KAAa;EAChB,IAAI;AACJ,SAAQ,IAAI,KAAK,GAAG,KAAK,IAAI,EAAG;AAC9B,OAAI,KAAK,GAAG,cAAc,EAAE,MAC1B,MAAK,GAAG;AACV,OAAI,KAAK,aAAa,EAAE;AACxB,OAAI,KAAK,KACP,QAAO;;;CAIb,QAAQ,KAAa;EACnB,MAAM,UAAU,EAAE;EAClB,IAAI;AACJ,OAAK,GAAG,YAAY;AACpB,SAAQ,IAAI,KAAK,KAAK,IAAI,CACxB,SAAQ,KAAK,EAAE;AAEjB,OAAK,GAAG,YAAY;AAEpB,SAAO;;CAGT,QAAQ,KAAa,aAA+C;EAClE,MAAM,KAAK,OAAO,gBAAgB,aAAa,oBAAoB;AACnE,SAAO,IAAI,QAAQ,KAAK,KAAK,MAAM;AAEjC,UAAO,GAAG,EAAE;IACZ"}
@@ -1,2 +1,93 @@
1
- const e=/\\\s|\s+|#[^\n]*\n?/g,t=/\(\?P?<(\w{2,})>|\((?!\?([:!=]|<=|<!))/g,n=/^((?:\(\?[\w$]+\))?)\(\?<([=!])([\s\S]*?)\)/gm;function r(e){return typeof e==`string`?e:e.source||``}function i(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`)}var a=class{lookBehind;namedGroups={};names=[];rx;constructor(i,a){let o=a??``,s;if(i instanceof RegExp?(a??(o=i.flags),s=i.source):s=i,o&&o.includes(`x`)&&(o=o.replace(`x`,``),s=s.replace(e,e=>e[0]===`\\`?e:``)),!(i instanceof RegExp)){let e=0;s=s.replace(t,(t,n)=>(e+=1,n?(n!==`index`&&n!==`length`&&!this.namedGroups[n]&&(this.namedGroups[n]=e),`(`):t)),this.names=Object.keys(this.namedGroups)}s=r(s),n.lastIndex=0;let c=n.exec(s);c&&(this.lookBehind={rx:RegExp(`${c[3]}$(?!\\s)`),expect:c?c[2]===`=`:!c},s=s.substr(c[0].length)),this.rx=new RegExp(s,o)}get lastIndex(){return this.rx.lastIndex}set lastIndex(e){this.rx.lastIndex=e}_handleMatch(e){if(this.lookBehind){let t=e.input.slice(0,e.index);if(this.lookBehind.expect!==this.lookBehind.rx.test(t))return null}for(let t of this.names)e[t]=e[this.namedGroups[t]];return e}exec(e){let t;for(;t=this.rx.exec(e);)if(this.rx.lastIndex===t.index&&this.rx.lastIndex++,t=this._handleMatch(t),t!=null)return t}execAll(e){let t=[],n;for(this.rx.lastIndex=0;n=this.exec(e);)t.push(n);return this.rx.lastIndex=0,t}replace(e,t){let n=typeof t==`function`?t:()=>t;return e.replace(this.rx,e=>n(e))}};export{a as XRX,i as regExpEscape,r as regExpString};
1
+ //#region src/common/data/xrx.ts
2
+ const RX_WHITESPACE = /\\\s|\s+|#[^\n]*\n?/g;
3
+ const RX_REAL_GROUPS = /\(\?P?<(\w{2,})>|\((?!\?([:!=]|<=|<!))/g;
4
+ const RX_LOOK_BEHIND = /^((?:\(\?[\w$]+\))?)\(\?<([=!])([\s\S]*?)\)/gm;
5
+ function regExpString(rx) {
6
+ return typeof rx === "string" ? rx : rx.source || "";
7
+ }
8
+ function regExpEscape(str) {
9
+ return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
10
+ }
11
+ var XRX = class {
12
+ lookBehind;
13
+ namedGroups = {};
14
+ names = [];
15
+ rx;
16
+ constructor(pattern, flags) {
17
+ let _flags = flags ?? "";
18
+ let _rx;
19
+ if (pattern instanceof RegExp) {
20
+ if (flags == null) _flags = pattern.flags;
21
+ _rx = pattern.source;
22
+ } else _rx = pattern;
23
+ if (_flags && _flags.includes("x")) {
24
+ _flags = _flags.replace("x", "");
25
+ _rx = _rx.replace(RX_WHITESPACE, (r) => {
26
+ return r[0] === "\\" ? r : "";
27
+ });
28
+ }
29
+ if (!(pattern instanceof RegExp)) {
30
+ let index = 0;
31
+ _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {
32
+ index += 1;
33
+ if (name) {
34
+ if (name !== "index" && name !== "length" && !this.namedGroups[name]) this.namedGroups[name] = index;
35
+ return "(";
36
+ }
37
+ return str;
38
+ });
39
+ this.names = Object.keys(this.namedGroups);
40
+ }
41
+ _rx = regExpString(_rx);
42
+ RX_LOOK_BEHIND.lastIndex = 0;
43
+ const parts = RX_LOOK_BEHIND.exec(_rx);
44
+ if (parts) {
45
+ this.lookBehind = {
46
+ rx: new RegExp(`${parts[3]}$(?!\\s)`),
47
+ expect: parts ? parts[2] === "=" : !parts
48
+ };
49
+ _rx = _rx.substr(parts[0].length);
50
+ }
51
+ this.rx = new RegExp(_rx, _flags);
52
+ }
53
+ get lastIndex() {
54
+ return this.rx.lastIndex;
55
+ }
56
+ set lastIndex(index) {
57
+ this.rx.lastIndex = index;
58
+ }
59
+ _handleMatch(m) {
60
+ if (this.lookBehind) {
61
+ const leftContext = m.input.slice(0, m.index);
62
+ if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext)) return null;
63
+ }
64
+ for (const name of this.names) m[name] = m[this.namedGroups[name]];
65
+ return m;
66
+ }
67
+ exec(str) {
68
+ let m;
69
+ while (m = this.rx.exec(str)) {
70
+ if (this.rx.lastIndex === m.index) this.rx.lastIndex++;
71
+ m = this._handleMatch(m);
72
+ if (m != null) return m;
73
+ }
74
+ }
75
+ execAll(str) {
76
+ const matches = [];
77
+ let m;
78
+ this.rx.lastIndex = 0;
79
+ while (m = this.exec(str)) matches.push(m);
80
+ this.rx.lastIndex = 0;
81
+ return matches;
82
+ }
83
+ replace(str, replacement) {
84
+ const fn = typeof replacement === "function" ? replacement : () => replacement;
85
+ return str.replace(this.rx, (m) => {
86
+ return fn(m);
87
+ });
88
+ }
89
+ };
90
+
91
+ //#endregion
92
+ export { XRX, regExpEscape, regExpString };
2
93
  //# sourceMappingURL=xrx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"xrx.mjs","names":[],"sources":["../../../src/common/data/xrx.ts"],"sourcesContent":["/* eslint-disable no-cond-assign */\n\nconst RX_WHITESPACE = /\\\\\\s|\\s+|#[^\\n]*\\n?/g\nconst RX_REAL_GROUPS = /\\(\\?P?<(\\w{2,})>|\\((?!\\?([:!=]|<=|<!))/g\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst RX_LOOK_BEHIND = /^((?:\\(\\?[\\w$]+\\))?)\\(\\?<([=!])([\\s\\S]*?)\\)/gm\n\nexport function regExpString(rx: string | RegExp): string {\n return typeof rx === 'string' ? rx : (rx.source || '')\n}\n\nexport function regExpEscape(str: string): string {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport class XRX {\n lookBehind:any\n namedGroups: Record<string, number> = {}\n names: string[] = []\n rx: RegExp\n\n constructor(pattern: string | RegExp, flags?: string) {\n let _flags: string = flags ?? ''\n let _rx: string\n\n if (pattern instanceof RegExp) {\n if (flags == null)\n _flags = pattern.flags\n\n _rx = pattern.source\n }\n else {\n _rx = pattern\n }\n\n // eXtended / Ignore Whitespace\n const extended = _flags && _flags.includes('x')\n if (extended) {\n _flags = _flags.replace('x', '')\n _rx = _rx.replace(RX_WHITESPACE, (r) => {\n // log('rp', r)\n return r[0] === '\\\\' ? r : ''\n })\n }\n\n // Named Groups\n if (!(pattern instanceof RegExp)) {\n let index = 0\n _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {\n // log('>>>', name)\n index += 1\n if (name) {\n if (\n name !== 'index'\n && name !== 'length'\n && !this.namedGroups[name]\n ) {\n this.namedGroups[name] = index\n }\n // else\n // log.error(`Unallowed or duplicate group name: ${name}`)\n\n return '('\n }\n return str\n })\n this.names = Object.keys(this.namedGroups)\n }\n\n // http://www.rexegg.com/regex-best-trick.html\n\n _rx = regExpString(_rx)\n RX_LOOK_BEHIND.lastIndex = 0\n const parts = RX_LOOK_BEHIND.exec(_rx)\n if (parts) {\n this.lookBehind = {\n rx: new RegExp(`${parts[3]}$(?!\\\\s)`),\n expect: parts ? parts[2] === '=' : !parts,\n }\n _rx = _rx.substr(parts[0].length)\n }\n\n this.rx = new RegExp(_rx, _flags)\n }\n\n // flagsString() {\n // let hash = this.rx.toString() + '/'\n // if (this.rx.global) {\n // hash += 'g'\n // }\n // if (this.rx.multiline) {\n // hash += 'm'\n // }\n // if (this.rx.ignoreCase) {\n // hash += 'i'\n // }\n // if (this.rx.unicode) {\n // hash += 'u'\n // }\n // if (this.rx.sticky) {\n // hash += 'y'\n // }\n // }\n\n get lastIndex(): number {\n return this.rx.lastIndex\n }\n\n set lastIndex(index: number) {\n this.rx.lastIndex = index\n }\n\n _handleMatch(m: any) {\n if (this.lookBehind) {\n const leftContext = m.input.slice(0, m.index)\n if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext))\n return null\n }\n for (const name of this.names)\n m[name] = m[this.namedGroups[name]]\n\n return m\n }\n\n exec(str: string) {\n let m\n while ((m = this.rx.exec(str))) {\n if (this.rx.lastIndex === m.index)\n this.rx.lastIndex++\n m = this._handleMatch(m)\n if (m != null)\n return m\n }\n }\n\n execAll(str: string) {\n const matches = []\n let m\n this.rx.lastIndex = 0\n while ((m = this.exec(str)))\n matches.push(m)\n\n this.rx.lastIndex = 0\n // log('execAll:', matches)\n return matches\n }\n\n replace(str: string, replacement: string | ((m: string) => string)) {\n const fn = typeof replacement === 'function' ? replacement : () => replacement\n return str.replace(this.rx, (m) => {\n // m = this._handleMatch(m)\n return fn(m)\n })\n }\n}\n"],"mappings":"AAEA,MAAM,EAAgB,uBAChB,EAAiB,0CAEjB,EAAiB,gDAEvB,SAAgB,EAAa,EAA6B,CACxD,OAAO,OAAO,GAAO,SAAW,EAAM,EAAG,QAAU,GAGrD,SAAgB,EAAa,EAAqB,CAChD,OAAO,EAAI,QAAQ,2BAA4B,OAAO,CAGxD,IAAa,EAAb,KAAiB,CACf,WACA,YAAsC,EAAE,CACxC,MAAkB,EAAE,CACpB,GAEA,YAAY,EAA0B,EAAgB,CACpD,IAAI,EAAiB,GAAS,GAC1B,EAuBJ,GArBI,aAAmB,QACjB,IACF,EAAS,EAAQ,OAEnB,EAAM,EAAQ,QAGd,EAAM,EAIS,GAAU,EAAO,SAAS,IAAI,GAE7C,EAAS,EAAO,QAAQ,IAAK,GAAG,CAChC,EAAM,EAAI,QAAQ,EAAgB,GAEzB,EAAE,KAAO,KAAO,EAAI,GAC3B,EAIA,EAAE,aAAmB,QAAS,CAChC,IAAI,EAAQ,EACZ,EAAM,EAAI,QAAQ,GAAiB,EAAK,KAEtC,GAAS,EACL,GAEA,IAAS,SACN,IAAS,UACT,CAAC,KAAK,YAAY,KAErB,KAAK,YAAY,GAAQ,GAKpB,KAEF,GACP,CACF,KAAK,MAAQ,OAAO,KAAK,KAAK,YAAY,CAK5C,EAAM,EAAa,EAAI,CACvB,EAAe,UAAY,EAC3B,IAAM,EAAQ,EAAe,KAAK,EAAI,CAClC,IACF,KAAK,WAAa,CAChB,GAAQ,OAAO,GAAG,EAAM,GAAG,UAAU,CACrC,OAAQ,EAAQ,EAAM,KAAO,IAAM,CAAC,EACrC,CACD,EAAM,EAAI,OAAO,EAAM,GAAG,OAAO,EAGnC,KAAK,GAAK,IAAI,OAAO,EAAK,EAAO,CAsBnC,IAAI,WAAoB,CACtB,OAAO,KAAK,GAAG,UAGjB,IAAI,UAAU,EAAe,CAC3B,KAAK,GAAG,UAAY,EAGtB,aAAa,EAAQ,CACnB,GAAI,KAAK,WAAY,CACnB,IAAM,EAAc,EAAE,MAAM,MAAM,EAAG,EAAE,MAAM,CAC7C,GAAI,KAAK,WAAW,SAAW,KAAK,WAAW,GAAG,KAAK,EAAY,CACjE,OAAO,KAEX,IAAK,IAAM,KAAQ,KAAK,MACtB,EAAE,GAAQ,EAAE,KAAK,YAAY,IAE/B,OAAO,EAGT,KAAK,EAAa,CAChB,IAAI,EACJ,KAAQ,EAAI,KAAK,GAAG,KAAK,EAAI,EAI3B,GAHI,KAAK,GAAG,YAAc,EAAE,OAC1B,KAAK,GAAG,YACV,EAAI,KAAK,aAAa,EAAE,CACpB,GAAK,KACP,OAAO,EAIb,QAAQ,EAAa,CACnB,IAAM,EAAU,EAAE,CACd,EAEJ,IADA,KAAK,GAAG,UAAY,EACZ,EAAI,KAAK,KAAK,EAAI,EACxB,EAAQ,KAAK,EAAE,CAIjB,MAFA,MAAK,GAAG,UAAY,EAEb,EAGT,QAAQ,EAAa,EAA+C,CAClE,IAAM,EAAK,OAAO,GAAgB,WAAa,MAAoB,EACnE,OAAO,EAAI,QAAQ,KAAK,GAAK,GAEpB,EAAG,EAAE,CACZ"}
1
+ {"version":3,"file":"xrx.mjs","names":[],"sources":["../../../src/common/data/xrx.ts"],"sourcesContent":["/* eslint-disable no-cond-assign */\n\nconst RX_WHITESPACE = /\\\\\\s|\\s+|#[^\\n]*\\n?/g\nconst RX_REAL_GROUPS = /\\(\\?P?<(\\w{2,})>|\\((?!\\?([:!=]|<=|<!))/g\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst RX_LOOK_BEHIND = /^((?:\\(\\?[\\w$]+\\))?)\\(\\?<([=!])([\\s\\S]*?)\\)/gm\n\nexport function regExpString(rx: string | RegExp): string {\n return typeof rx === 'string' ? rx : (rx.source || '')\n}\n\nexport function regExpEscape(str: string): string {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport class XRX {\n lookBehind:any\n namedGroups: Record<string, number> = {}\n names: string[] = []\n rx: RegExp\n\n constructor(pattern: string | RegExp, flags?: string) {\n let _flags: string = flags ?? ''\n let _rx: string\n\n if (pattern instanceof RegExp) {\n if (flags == null)\n _flags = pattern.flags\n\n _rx = pattern.source\n }\n else {\n _rx = pattern\n }\n\n // eXtended / Ignore Whitespace\n const extended = _flags && _flags.includes('x')\n if (extended) {\n _flags = _flags.replace('x', '')\n _rx = _rx.replace(RX_WHITESPACE, (r) => {\n // log('rp', r)\n return r[0] === '\\\\' ? r : ''\n })\n }\n\n // Named Groups\n if (!(pattern instanceof RegExp)) {\n let index = 0\n _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {\n // log('>>>', name)\n index += 1\n if (name) {\n if (\n name !== 'index'\n && name !== 'length'\n && !this.namedGroups[name]\n ) {\n this.namedGroups[name] = index\n }\n // else\n // log.error(`Unallowed or duplicate group name: ${name}`)\n\n return '('\n }\n return str\n })\n this.names = Object.keys(this.namedGroups)\n }\n\n // http://www.rexegg.com/regex-best-trick.html\n\n _rx = regExpString(_rx)\n RX_LOOK_BEHIND.lastIndex = 0\n const parts = RX_LOOK_BEHIND.exec(_rx)\n if (parts) {\n this.lookBehind = {\n rx: new RegExp(`${parts[3]}$(?!\\\\s)`),\n expect: parts ? parts[2] === '=' : !parts,\n }\n _rx = _rx.substr(parts[0].length)\n }\n\n this.rx = new RegExp(_rx, _flags)\n }\n\n // flagsString() {\n // let hash = this.rx.toString() + '/'\n // if (this.rx.global) {\n // hash += 'g'\n // }\n // if (this.rx.multiline) {\n // hash += 'm'\n // }\n // if (this.rx.ignoreCase) {\n // hash += 'i'\n // }\n // if (this.rx.unicode) {\n // hash += 'u'\n // }\n // if (this.rx.sticky) {\n // hash += 'y'\n // }\n // }\n\n get lastIndex(): number {\n return this.rx.lastIndex\n }\n\n set lastIndex(index: number) {\n this.rx.lastIndex = index\n }\n\n _handleMatch(m: any) {\n if (this.lookBehind) {\n const leftContext = m.input.slice(0, m.index)\n if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext))\n return null\n }\n for (const name of this.names)\n m[name] = m[this.namedGroups[name]]\n\n return m\n }\n\n exec(str: string) {\n let m\n while ((m = this.rx.exec(str))) {\n if (this.rx.lastIndex === m.index)\n this.rx.lastIndex++\n m = this._handleMatch(m)\n if (m != null)\n return m\n }\n }\n\n execAll(str: string) {\n const matches = []\n let m\n this.rx.lastIndex = 0\n while ((m = this.exec(str)))\n matches.push(m)\n\n this.rx.lastIndex = 0\n // log('execAll:', matches)\n return matches\n }\n\n replace(str: string, replacement: string | ((m: string) => string)) {\n const fn = typeof replacement === 'function' ? replacement : () => replacement\n return str.replace(this.rx, (m) => {\n // m = this._handleMatch(m)\n return fn(m)\n })\n }\n}\n"],"mappings":";AAEA,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AAEvB,MAAM,iBAAiB;AAEvB,SAAgB,aAAa,IAA6B;AACxD,QAAO,OAAO,OAAO,WAAW,KAAM,GAAG,UAAU;;AAGrD,SAAgB,aAAa,KAAqB;AAChD,QAAO,IAAI,QAAQ,4BAA4B,OAAO;;AAGxD,IAAa,MAAb,MAAiB;CACf;CACA,cAAsC,EAAE;CACxC,QAAkB,EAAE;CACpB;CAEA,YAAY,SAA0B,OAAgB;EACpD,IAAI,SAAiB,SAAS;EAC9B,IAAI;AAEJ,MAAI,mBAAmB,QAAQ;AAC7B,OAAI,SAAS,KACX,UAAS,QAAQ;AAEnB,SAAM,QAAQ;QAGd,OAAM;AAKR,MADiB,UAAU,OAAO,SAAS,IAAI,EACjC;AACZ,YAAS,OAAO,QAAQ,KAAK,GAAG;AAChC,SAAM,IAAI,QAAQ,gBAAgB,MAAM;AAEtC,WAAO,EAAE,OAAO,OAAO,IAAI;KAC3B;;AAIJ,MAAI,EAAE,mBAAmB,SAAS;GAChC,IAAI,QAAQ;AACZ,SAAM,IAAI,QAAQ,iBAAiB,KAAK,SAAS;AAE/C,aAAS;AACT,QAAI,MAAM;AACR,SACE,SAAS,WACN,SAAS,YACT,CAAC,KAAK,YAAY,MAErB,MAAK,YAAY,QAAQ;AAK3B,YAAO;;AAET,WAAO;KACP;AACF,QAAK,QAAQ,OAAO,KAAK,KAAK,YAAY;;AAK5C,QAAM,aAAa,IAAI;AACvB,iBAAe,YAAY;EAC3B,MAAM,QAAQ,eAAe,KAAK,IAAI;AACtC,MAAI,OAAO;AACT,QAAK,aAAa;IAChB,IAAI,IAAI,OAAO,GAAG,MAAM,GAAG,UAAU;IACrC,QAAQ,QAAQ,MAAM,OAAO,MAAM,CAAC;IACrC;AACD,SAAM,IAAI,OAAO,MAAM,GAAG,OAAO;;AAGnC,OAAK,KAAK,IAAI,OAAO,KAAK,OAAO;;CAsBnC,IAAI,YAAoB;AACtB,SAAO,KAAK,GAAG;;CAGjB,IAAI,UAAU,OAAe;AAC3B,OAAK,GAAG,YAAY;;CAGtB,aAAa,GAAQ;AACnB,MAAI,KAAK,YAAY;GACnB,MAAM,cAAc,EAAE,MAAM,MAAM,GAAG,EAAE,MAAM;AAC7C,OAAI,KAAK,WAAW,WAAW,KAAK,WAAW,GAAG,KAAK,YAAY,CACjE,QAAO;;AAEX,OAAK,MAAM,QAAQ,KAAK,MACtB,GAAE,QAAQ,EAAE,KAAK,YAAY;AAE/B,SAAO;;CAGT,KAAK,KAAa;EAChB,IAAI;AACJ,SAAQ,IAAI,KAAK,GAAG,KAAK,IAAI,EAAG;AAC9B,OAAI,KAAK,GAAG,cAAc,EAAE,MAC1B,MAAK,GAAG;AACV,OAAI,KAAK,aAAa,EAAE;AACxB,OAAI,KAAK,KACP,QAAO;;;CAIb,QAAQ,KAAa;EACnB,MAAM,UAAU,EAAE;EAClB,IAAI;AACJ,OAAK,GAAG,YAAY;AACpB,SAAQ,IAAI,KAAK,KAAK,IAAI,CACxB,SAAQ,KAAK,EAAE;AAEjB,OAAK,GAAG,YAAY;AAEpB,SAAO;;CAGT,QAAQ,KAAa,aAA+C;EAClE,MAAM,KAAK,OAAO,gBAAgB,aAAa,oBAAoB;AACnE,SAAO,IAAI,QAAQ,KAAK,KAAK,MAAM;AAEjC,UAAO,GAAG,EAAE;IACZ"}
@@ -1,2 +1,134 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./data/is.cjs`),t=require(`./log/log.cjs`),n=require(`./data/array.cjs`),r=require(`./exec/promise.cjs`);function i(){try{Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`)}catch{}}function a(e){let t;if(typeof e==`function`?t=e():typeof e.dispose==`function`&&(t=e.dispose()),r.isPromise(t))return t}function o(o){o!=null&&(e.isString(o)?o={name:o}:`debug`in o&&`label`in o&&(o={name:o.label,log:o})),i();let s=o?.name,c=o?.log??t.DefaultLogger(`zeed:dispose`),l=0,u=[];function d(e){if(e!=null&&u.includes(e)){n.arrayFilterInPlace(u,t=>t!==e);let t=a(e);if(r.isPromise(t))return t}}function f(e){if(e!=null)return u.unshift(e),()=>d(e)}function p(e=!1){s&&c.debug(`dispose "${s}": ${u.length} entries`),l+=1;let t=[];for(;u.length>0;){let n=u[0],i=d(n);if(r.isPromise(i)){if(e)throw Error(`Async disposable found: ${n} -> ${i}`);t.push(i)}}if(t.length>0)return Promise.all(t)}function m(){p(!0)}return Object.assign(p,{get disposed(){return l},add:f,remove:d,track:f,untrack:d,dispose:p,disposeSync:m,sync:m,exec:p,getSize(){return u.length},isDisposed(){return l>0&&u.length===0},[Symbol.dispose](){return p()},async[Symbol.asyncDispose](){return await p()}})}function s(e={}){let{mode:t=`fifo`}=e,a=[];i();let o=async(e=!1)=>{for(;a.length>0;){let t=a[0];if(n.arrayFilterInPlace(a,e=>e!==t),typeof t==`function`){let n=t();if(r.isPromise(n)){if(e)throw Error(`Expected sync only function, but found async: ${t}`);await n}}else if(typeof t.dispose==`function`){let n=t.dispose();if(r.isPromise(n)){if(e)throw Error(`Expected sync only function, but found async: ${t}`);await n}}else throw TypeError(`Unhandled disposable: ${t}`)}};return Object.assign(o,{add:e=>{t===`lifo`?a.unshift(e):a.push(e)},exec:o,getSize(){return a.length}})}exports.polyfillUsing=i,exports.useDefer=s,exports.useDispose=o;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_data_is = require('./data/is.cjs');
3
+ const require_common_log_log = require('./log/log.cjs');
4
+ const require_common_data_array = require('./data/array.cjs');
5
+ const require_common_exec_promise = require('./exec/promise.cjs');
6
+
7
+ //#region src/common/dispose-defer.ts
8
+ function polyfillUsing() {
9
+ try {
10
+ Symbol.dispose ??= Symbol("Symbol.dispose");
11
+ Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
12
+ } catch (_) {}
13
+ }
14
+ /** Different kinds of implementations have grown, this should unify them */
15
+ function callDisposable(disposable) {
16
+ let result;
17
+ if (typeof disposable === "function") result = disposable();
18
+ else if (typeof disposable.dispose === "function") result = disposable.dispose();
19
+ if (require_common_exec_promise.isPromise(result)) return result;
20
+ }
21
+ function useDispose(opt) {
22
+ if (opt != null) {
23
+ if (require_common_data_is.isString(opt)) opt = { name: opt };
24
+ else if ("debug" in opt && "label" in opt) opt = {
25
+ name: opt.label,
26
+ log: opt
27
+ };
28
+ }
29
+ polyfillUsing();
30
+ const name = opt?.name;
31
+ const log = opt?.log ?? require_common_log_log.DefaultLogger("zeed:dispose");
32
+ let _disposed = 0;
33
+ const tracked = [];
34
+ function untrack(disposable) {
35
+ if (disposable != null && tracked.includes(disposable)) {
36
+ require_common_data_array.arrayFilterInPlace(tracked, (el) => el !== disposable);
37
+ const result = callDisposable(disposable);
38
+ if (require_common_exec_promise.isPromise(result)) return result;
39
+ }
40
+ }
41
+ function track(obj) {
42
+ if (obj == null) return;
43
+ tracked.unshift(obj);
44
+ return () => untrack(obj);
45
+ }
46
+ /** Dispose all tracked entries */
47
+ function dispose(strictSync = false) {
48
+ if (name) log.debug(`dispose "${name}": ${tracked.length} entries`);
49
+ _disposed += 1;
50
+ const promises = [];
51
+ while (tracked.length > 0) {
52
+ const fn = tracked[0];
53
+ const result = untrack(fn);
54
+ if (require_common_exec_promise.isPromise(result)) if (strictSync) throw new Error(`Async disposable found: ${fn} -> ${result}`);
55
+ else promises.push(result);
56
+ }
57
+ if (promises.length > 0) return Promise.all(promises);
58
+ }
59
+ /** Dispose all tracked entries in synchronous way. */
60
+ function disposeSync() {
61
+ dispose(true);
62
+ }
63
+ return Object.assign(dispose, {
64
+ get disposed() {
65
+ return _disposed;
66
+ },
67
+ add: track,
68
+ remove: untrack,
69
+ track,
70
+ untrack,
71
+ dispose,
72
+ disposeSync,
73
+ sync: disposeSync,
74
+ exec: dispose,
75
+ getSize() {
76
+ return tracked.length;
77
+ },
78
+ isDisposed() {
79
+ return _disposed > 0 && tracked.length === 0;
80
+ },
81
+ [Symbol.dispose]() {
82
+ return dispose();
83
+ },
84
+ async [Symbol.asyncDispose]() {
85
+ return await dispose();
86
+ }
87
+ });
88
+ }
89
+ function useDefer(config = {}) {
90
+ const { mode = "fifo" } = config;
91
+ const steps = [];
92
+ polyfillUsing();
93
+ /**
94
+ * Executes all steps. If all steps are not Promises, they are executed immediately,
95
+ * otherwise a Promise is returned.
96
+ * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.
97
+ */
98
+ const exec = async (expectSync = false) => {
99
+ while (steps.length > 0) {
100
+ const step = steps[0];
101
+ require_common_data_array.arrayFilterInPlace(steps, (el) => el !== step);
102
+ if (typeof step === "function") {
103
+ const result = step();
104
+ if (require_common_exec_promise.isPromise(result)) {
105
+ if (expectSync) throw new Error(`Expected sync only function, but found async: ${step}`);
106
+ await result;
107
+ }
108
+ } else if (typeof step.dispose === "function") {
109
+ const result = step.dispose();
110
+ if (require_common_exec_promise.isPromise(result)) {
111
+ if (expectSync) throw new Error(`Expected sync only function, but found async: ${step}`);
112
+ await result;
113
+ }
114
+ } else throw new TypeError(`Unhandled disposable: ${step}`);
115
+ }
116
+ };
117
+ const add = (obj) => {
118
+ if (mode === "lifo") steps.unshift(obj);
119
+ else steps.push(obj);
120
+ };
121
+ return Object.assign(exec, {
122
+ add,
123
+ exec,
124
+ getSize() {
125
+ return steps.length;
126
+ }
127
+ });
128
+ }
129
+
130
+ //#endregion
131
+ exports.polyfillUsing = polyfillUsing;
132
+ exports.useDefer = useDefer;
133
+ exports.useDispose = useDispose;
2
134
  //# sourceMappingURL=dispose-defer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispose-defer.cjs","names":["isPromise","isString","DefaultLogger"],"sources":["../../src/common/dispose-defer.ts"],"sourcesContent":["import type { DisposerFunction } from './dispose-types'\nimport type { LoggerInterface } from './log/log-base'\nimport { arrayFilterInPlace } from './data/array'\nimport { isString } from './data/is'\nimport { isPromise } from './exec/promise'\nimport { DefaultLogger } from './log/log'\n\nexport function polyfillUsing() {\n try {\n // @ts-expect-error just a polyfill\n Symbol.dispose ??= Symbol('Symbol.dispose')\n // @ts-expect-error just a polyfill\n Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n }\n catch (_) { }\n}\n\n// Symbol.dispose ??= Symbol('Symbol.dispose')\n// Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n\n/** A disposable entry: either a function or an object with a dispose() method. */\ntype DisposableEntry = DisposerFunction | { dispose: DisposerFunction }\n\n/** Different kinds of implementations have grown, this should unify them */\nfunction callDisposable(disposable: DisposableEntry): Promise<void> | void {\n let result\n\n if (typeof disposable === 'function')\n result = disposable()\n else if (typeof disposable.dispose === 'function')\n result = disposable.dispose()\n\n if (isPromise(result))\n return result\n}\n\nexport interface UseDisposeConfig {\n name?: string\n log?: LoggerInterface\n}\n\nexport function useDispose(opt?: string | UseDisposeConfig | LoggerInterface) {\n if (opt != null) {\n if (isString(opt))\n opt = { name: opt }\n else if ('debug' in opt && 'label' in opt)\n opt = { name: opt.label, log: opt }\n }\n\n polyfillUsing()\n\n const name = opt?.name\n const log = opt?.log ?? DefaultLogger('zeed:dispose')\n\n let _disposed = 0\n\n const tracked: DisposableEntry[] = []\n\n function untrack(disposable: DisposableEntry): Promise<void> | void {\n if (disposable != null && tracked.includes(disposable)) {\n arrayFilterInPlace(tracked, el => el !== disposable)\n const result = callDisposable(disposable)\n if (isPromise(result))\n return result\n }\n }\n\n function track(obj?: DisposableEntry): DisposerFunction | undefined {\n if (obj == null)\n return\n tracked.unshift(obj) // LIFO\n return () => untrack(obj)\n }\n\n /** Dispose all tracked entries */\n function dispose(strictSync = false): Promise<any> | void {\n if (name)\n log.debug(`dispose \"${name}\": ${tracked.length} entries`)\n\n _disposed += 1\n\n const promises: any[] = []\n while (tracked.length > 0) {\n const fn = tracked[0]\n const result = untrack(fn) // LIFO\n if (isPromise(result)) {\n if (strictSync)\n throw new Error(`Async disposable found: ${fn} -> ${result}`)\n else\n promises.push(result)\n }\n }\n\n if (promises.length > 0)\n return Promise.all(promises)\n }\n\n /** Dispose all tracked entries in synchronous way. */\n function disposeSync(): void {\n dispose(true)\n }\n\n return Object.assign(dispose, {\n /** Counter that increments each time dispose has been called */\n get disposed() {\n return _disposed\n },\n\n add: track,\n remove: untrack,\n\n /** @deprecated use add */\n track,\n\n /** @deprecated use remove */\n untrack,\n\n dispose,\n disposeSync,\n sync: disposeSync,\n\n /** @deprecated use dispose */\n exec: dispose,\n getSize() {\n return tracked.length\n },\n isDisposed() {\n return _disposed > 0 && tracked.length === 0\n },\n\n [Symbol.dispose]() {\n return dispose()\n },\n\n async [Symbol.asyncDispose]() {\n return await dispose()\n },\n\n })\n}\n\nexport type UseDispose = ReturnType<typeof useDispose>\n\nexport function useDefer(\n config: {\n mode?: 'lifo' | 'fifo'\n } = {},\n) {\n const { mode = 'fifo' } = config\n const steps: DisposableEntry[] = []\n\n polyfillUsing()\n\n /**\n * Executes all steps. If all steps are not Promises, they are executed immediately,\n * otherwise a Promise is returned.\n * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.\n */\n const exec = async (expectSync = false) => {\n while (steps.length > 0) {\n const step = steps[0]\n arrayFilterInPlace(steps, el => el !== step)\n if (typeof step === 'function') {\n const result = step()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else if (typeof step.dispose === 'function') {\n // Handle objects with a dispose() method (consistent with useDispose)\n const result = step.dispose()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else {\n throw new TypeError(`Unhandled disposable: ${step}`)\n }\n }\n }\n\n const add = (obj: DisposableEntry) => {\n if (mode === 'lifo')\n steps.unshift(obj)\n else\n steps.push(obj)\n }\n\n return Object.assign(exec, {\n add,\n exec,\n getSize() {\n return steps.length\n },\n })\n}\n\nexport type UseDefer = ReturnType<typeof useDefer>\n"],"mappings":"6LAOA,SAAgB,GAAgB,CAC9B,GAAI,CAEF,OAAO,UAAY,OAAO,iBAAiB,CAE3C,OAAO,eAAiB,OAAO,sBAAsB,MAE7C,GAUZ,SAAS,EAAe,EAAmD,CACzE,IAAI,EAOJ,GALI,OAAO,GAAe,WACxB,EAAS,GAAY,CACd,OAAO,EAAW,SAAY,aACrC,EAAS,EAAW,SAAS,EAE3BA,EAAAA,UAAU,EAAO,CACnB,OAAO,EAQX,SAAgB,EAAW,EAAmD,CACxE,GAAO,OACLC,EAAAA,SAAS,EAAI,CACf,EAAM,CAAE,KAAM,EAAK,CACZ,UAAW,GAAO,UAAW,IACpC,EAAM,CAAE,KAAM,EAAI,MAAO,IAAK,EAAK,GAGvC,GAAe,CAEf,IAAM,EAAO,GAAK,KACZ,EAAM,GAAK,KAAOC,EAAAA,cAAc,eAAe,CAEjD,EAAY,EAEV,EAA6B,EAAE,CAErC,SAAS,EAAQ,EAAmD,CAClE,GAAI,GAAc,MAAQ,EAAQ,SAAS,EAAW,CAAE,CACtD,EAAA,mBAAmB,EAAS,GAAM,IAAO,EAAW,CACpD,IAAM,EAAS,EAAe,EAAW,CACzC,GAAIF,EAAAA,UAAU,EAAO,CACnB,OAAO,GAIb,SAAS,EAAM,EAAqD,CAC9D,MAAO,KAGX,OADA,EAAQ,QAAQ,EAAI,KACP,EAAQ,EAAI,CAI3B,SAAS,EAAQ,EAAa,GAA4B,CACpD,GACF,EAAI,MAAM,YAAY,EAAK,KAAK,EAAQ,OAAO,UAAU,CAE3D,GAAa,EAEb,IAAM,EAAkB,EAAE,CAC1B,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAK,EAAQ,GACb,EAAS,EAAQ,EAAG,CAC1B,GAAIA,EAAAA,UAAU,EAAO,CACnB,IAAI,EACF,MAAU,MAAM,2BAA2B,EAAG,MAAM,IAAS,CAE7D,EAAS,KAAK,EAAO,EAI3B,GAAI,EAAS,OAAS,EACpB,OAAO,QAAQ,IAAI,EAAS,CAIhC,SAAS,GAAoB,CAC3B,EAAQ,GAAK,CAGf,OAAO,OAAO,OAAO,EAAS,CAE5B,IAAI,UAAW,CACb,OAAO,GAGT,IAAK,EACL,OAAQ,EAGR,QAGA,UAEA,UACA,cACA,KAAM,EAGN,KAAM,EACN,SAAU,CACR,OAAO,EAAQ,QAEjB,YAAa,CACX,OAAO,EAAY,GAAK,EAAQ,SAAW,GAG7C,CAAC,OAAO,UAAW,CACjB,OAAO,GAAS,EAGlB,MAAO,OAAO,eAAgB,CAC5B,OAAO,MAAM,GAAS,EAGzB,CAAC,CAKJ,SAAgB,EACd,EAEI,EAAE,CACN,CACA,GAAM,CAAE,OAAO,QAAW,EACpB,EAA2B,EAAE,CAEnC,GAAe,CAOf,IAAM,EAAO,MAAO,EAAa,KAAU,CACzC,KAAO,EAAM,OAAS,GAAG,CACvB,IAAM,EAAO,EAAM,GAEnB,GADA,EAAA,mBAAmB,EAAO,GAAM,IAAO,EAAK,CACxC,OAAO,GAAS,WAAY,CAC9B,IAAM,EAAS,GAAM,CACrB,GAAIA,EAAAA,UAAU,EAAO,CAAE,CACrB,GAAI,EACF,MAAU,MACR,iDAAiD,IAClD,CAEH,MAAM,WAGD,OAAO,EAAK,SAAY,WAAY,CAE3C,IAAM,EAAS,EAAK,SAAS,CAC7B,GAAIA,EAAAA,UAAU,EAAO,CAAE,CACrB,GAAI,EACF,MAAU,MACR,iDAAiD,IAClD,CAEH,MAAM,QAIR,MAAU,UAAU,yBAAyB,IAAO,GAY1D,OAAO,OAAO,OAAO,EAAM,CACzB,IARW,GAAyB,CAChC,IAAS,OACX,EAAM,QAAQ,EAAI,CAElB,EAAM,KAAK,EAAI,EAKjB,OACA,SAAU,CACR,OAAO,EAAM,QAEhB,CAAC"}
1
+ {"version":3,"file":"dispose-defer.cjs","names":["isPromise","isString","DefaultLogger"],"sources":["../../src/common/dispose-defer.ts"],"sourcesContent":["import type { DisposerFunction } from './dispose-types'\nimport type { LoggerInterface } from './log/log-base'\nimport { arrayFilterInPlace } from './data/array'\nimport { isString } from './data/is'\nimport { isPromise } from './exec/promise'\nimport { DefaultLogger } from './log/log'\n\nexport function polyfillUsing() {\n try {\n // @ts-expect-error just a polyfill\n Symbol.dispose ??= Symbol('Symbol.dispose')\n // @ts-expect-error just a polyfill\n Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n }\n catch (_) { }\n}\n\n// Symbol.dispose ??= Symbol('Symbol.dispose')\n// Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n\n/** A disposable entry: either a function or an object with a dispose() method. */\ntype DisposableEntry = DisposerFunction | { dispose: DisposerFunction }\n\n/** Different kinds of implementations have grown, this should unify them */\nfunction callDisposable(disposable: DisposableEntry): Promise<void> | void {\n let result\n\n if (typeof disposable === 'function')\n result = disposable()\n else if (typeof disposable.dispose === 'function')\n result = disposable.dispose()\n\n if (isPromise(result))\n return result\n}\n\nexport interface UseDisposeConfig {\n name?: string\n log?: LoggerInterface\n}\n\nexport function useDispose(opt?: string | UseDisposeConfig | LoggerInterface) {\n if (opt != null) {\n if (isString(opt))\n opt = { name: opt }\n else if ('debug' in opt && 'label' in opt)\n opt = { name: opt.label, log: opt }\n }\n\n polyfillUsing()\n\n const name = opt?.name\n const log = opt?.log ?? DefaultLogger('zeed:dispose')\n\n let _disposed = 0\n\n const tracked: DisposableEntry[] = []\n\n function untrack(disposable: DisposableEntry): Promise<void> | void {\n if (disposable != null && tracked.includes(disposable)) {\n arrayFilterInPlace(tracked, el => el !== disposable)\n const result = callDisposable(disposable)\n if (isPromise(result))\n return result\n }\n }\n\n function track(obj?: DisposableEntry): DisposerFunction | undefined {\n if (obj == null)\n return\n tracked.unshift(obj) // LIFO\n return () => untrack(obj)\n }\n\n /** Dispose all tracked entries */\n function dispose(strictSync = false): Promise<any> | void {\n if (name)\n log.debug(`dispose \"${name}\": ${tracked.length} entries`)\n\n _disposed += 1\n\n const promises: any[] = []\n while (tracked.length > 0) {\n const fn = tracked[0]\n const result = untrack(fn) // LIFO\n if (isPromise(result)) {\n if (strictSync)\n throw new Error(`Async disposable found: ${fn} -> ${result}`)\n else\n promises.push(result)\n }\n }\n\n if (promises.length > 0)\n return Promise.all(promises)\n }\n\n /** Dispose all tracked entries in synchronous way. */\n function disposeSync(): void {\n dispose(true)\n }\n\n return Object.assign(dispose, {\n /** Counter that increments each time dispose has been called */\n get disposed() {\n return _disposed\n },\n\n add: track,\n remove: untrack,\n\n /** @deprecated use add */\n track,\n\n /** @deprecated use remove */\n untrack,\n\n dispose,\n disposeSync,\n sync: disposeSync,\n\n /** @deprecated use dispose */\n exec: dispose,\n getSize() {\n return tracked.length\n },\n isDisposed() {\n return _disposed > 0 && tracked.length === 0\n },\n\n [Symbol.dispose]() {\n return dispose()\n },\n\n async [Symbol.asyncDispose]() {\n return await dispose()\n },\n\n })\n}\n\nexport type UseDispose = ReturnType<typeof useDispose>\n\nexport function useDefer(\n config: {\n mode?: 'lifo' | 'fifo'\n } = {},\n) {\n const { mode = 'fifo' } = config\n const steps: DisposableEntry[] = []\n\n polyfillUsing()\n\n /**\n * Executes all steps. If all steps are not Promises, they are executed immediately,\n * otherwise a Promise is returned.\n * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.\n */\n const exec = async (expectSync = false) => {\n while (steps.length > 0) {\n const step = steps[0]\n arrayFilterInPlace(steps, el => el !== step)\n if (typeof step === 'function') {\n const result = step()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else if (typeof step.dispose === 'function') {\n // Handle objects with a dispose() method (consistent with useDispose)\n const result = step.dispose()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else {\n throw new TypeError(`Unhandled disposable: ${step}`)\n }\n }\n }\n\n const add = (obj: DisposableEntry) => {\n if (mode === 'lifo')\n steps.unshift(obj)\n else\n steps.push(obj)\n }\n\n return Object.assign(exec, {\n add,\n exec,\n getSize() {\n return steps.length\n },\n })\n}\n\nexport type UseDefer = ReturnType<typeof useDefer>\n"],"mappings":"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"}
@@ -1,2 +1,131 @@
1
- import{isString as e}from"./data/is.mjs";import{DefaultLogger as t}from"./log/log.mjs";import{arrayFilterInPlace as n}from"./data/array.mjs";import{isPromise as r}from"./exec/promise.mjs";function i(){try{Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`)}catch{}}function a(e){let t;if(typeof e==`function`?t=e():typeof e.dispose==`function`&&(t=e.dispose()),r(t))return t}function o(o){o!=null&&(e(o)?o={name:o}:`debug`in o&&`label`in o&&(o={name:o.label,log:o})),i();let s=o?.name,c=o?.log??t(`zeed:dispose`),l=0,u=[];function d(e){if(e!=null&&u.includes(e)){n(u,t=>t!==e);let t=a(e);if(r(t))return t}}function f(e){if(e!=null)return u.unshift(e),()=>d(e)}function p(e=!1){s&&c.debug(`dispose "${s}": ${u.length} entries`),l+=1;let t=[];for(;u.length>0;){let n=u[0],i=d(n);if(r(i)){if(e)throw Error(`Async disposable found: ${n} -> ${i}`);t.push(i)}}if(t.length>0)return Promise.all(t)}function m(){p(!0)}return Object.assign(p,{get disposed(){return l},add:f,remove:d,track:f,untrack:d,dispose:p,disposeSync:m,sync:m,exec:p,getSize(){return u.length},isDisposed(){return l>0&&u.length===0},[Symbol.dispose](){return p()},async[Symbol.asyncDispose](){return await p()}})}function s(e={}){let{mode:t=`fifo`}=e,a=[];i();let o=async(e=!1)=>{for(;a.length>0;){let t=a[0];if(n(a,e=>e!==t),typeof t==`function`){let n=t();if(r(n)){if(e)throw Error(`Expected sync only function, but found async: ${t}`);await n}}else if(typeof t.dispose==`function`){let n=t.dispose();if(r(n)){if(e)throw Error(`Expected sync only function, but found async: ${t}`);await n}}else throw TypeError(`Unhandled disposable: ${t}`)}};return Object.assign(o,{add:e=>{t===`lifo`?a.unshift(e):a.push(e)},exec:o,getSize(){return a.length}})}export{i as polyfillUsing,s as useDefer,o as useDispose};
1
+ import { isString } from "./data/is.mjs";
2
+ import { DefaultLogger } from "./log/log.mjs";
3
+ import { arrayFilterInPlace } from "./data/array.mjs";
4
+ import { isPromise } from "./exec/promise.mjs";
5
+
6
+ //#region src/common/dispose-defer.ts
7
+ function polyfillUsing() {
8
+ try {
9
+ Symbol.dispose ??= Symbol("Symbol.dispose");
10
+ Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
11
+ } catch (_) {}
12
+ }
13
+ /** Different kinds of implementations have grown, this should unify them */
14
+ function callDisposable(disposable) {
15
+ let result;
16
+ if (typeof disposable === "function") result = disposable();
17
+ else if (typeof disposable.dispose === "function") result = disposable.dispose();
18
+ if (isPromise(result)) return result;
19
+ }
20
+ function useDispose(opt) {
21
+ if (opt != null) {
22
+ if (isString(opt)) opt = { name: opt };
23
+ else if ("debug" in opt && "label" in opt) opt = {
24
+ name: opt.label,
25
+ log: opt
26
+ };
27
+ }
28
+ polyfillUsing();
29
+ const name = opt?.name;
30
+ const log = opt?.log ?? DefaultLogger("zeed:dispose");
31
+ let _disposed = 0;
32
+ const tracked = [];
33
+ function untrack(disposable) {
34
+ if (disposable != null && tracked.includes(disposable)) {
35
+ arrayFilterInPlace(tracked, (el) => el !== disposable);
36
+ const result = callDisposable(disposable);
37
+ if (isPromise(result)) return result;
38
+ }
39
+ }
40
+ function track(obj) {
41
+ if (obj == null) return;
42
+ tracked.unshift(obj);
43
+ return () => untrack(obj);
44
+ }
45
+ /** Dispose all tracked entries */
46
+ function dispose(strictSync = false) {
47
+ if (name) log.debug(`dispose "${name}": ${tracked.length} entries`);
48
+ _disposed += 1;
49
+ const promises = [];
50
+ while (tracked.length > 0) {
51
+ const fn = tracked[0];
52
+ const result = untrack(fn);
53
+ if (isPromise(result)) if (strictSync) throw new Error(`Async disposable found: ${fn} -> ${result}`);
54
+ else promises.push(result);
55
+ }
56
+ if (promises.length > 0) return Promise.all(promises);
57
+ }
58
+ /** Dispose all tracked entries in synchronous way. */
59
+ function disposeSync() {
60
+ dispose(true);
61
+ }
62
+ return Object.assign(dispose, {
63
+ get disposed() {
64
+ return _disposed;
65
+ },
66
+ add: track,
67
+ remove: untrack,
68
+ track,
69
+ untrack,
70
+ dispose,
71
+ disposeSync,
72
+ sync: disposeSync,
73
+ exec: dispose,
74
+ getSize() {
75
+ return tracked.length;
76
+ },
77
+ isDisposed() {
78
+ return _disposed > 0 && tracked.length === 0;
79
+ },
80
+ [Symbol.dispose]() {
81
+ return dispose();
82
+ },
83
+ async [Symbol.asyncDispose]() {
84
+ return await dispose();
85
+ }
86
+ });
87
+ }
88
+ function useDefer(config = {}) {
89
+ const { mode = "fifo" } = config;
90
+ const steps = [];
91
+ polyfillUsing();
92
+ /**
93
+ * Executes all steps. If all steps are not Promises, they are executed immediately,
94
+ * otherwise a Promise is returned.
95
+ * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.
96
+ */
97
+ const exec = async (expectSync = false) => {
98
+ while (steps.length > 0) {
99
+ const step = steps[0];
100
+ arrayFilterInPlace(steps, (el) => el !== step);
101
+ if (typeof step === "function") {
102
+ const result = step();
103
+ if (isPromise(result)) {
104
+ if (expectSync) throw new Error(`Expected sync only function, but found async: ${step}`);
105
+ await result;
106
+ }
107
+ } else if (typeof step.dispose === "function") {
108
+ const result = step.dispose();
109
+ if (isPromise(result)) {
110
+ if (expectSync) throw new Error(`Expected sync only function, but found async: ${step}`);
111
+ await result;
112
+ }
113
+ } else throw new TypeError(`Unhandled disposable: ${step}`);
114
+ }
115
+ };
116
+ const add = (obj) => {
117
+ if (mode === "lifo") steps.unshift(obj);
118
+ else steps.push(obj);
119
+ };
120
+ return Object.assign(exec, {
121
+ add,
122
+ exec,
123
+ getSize() {
124
+ return steps.length;
125
+ }
126
+ });
127
+ }
128
+
129
+ //#endregion
130
+ export { polyfillUsing, useDefer, useDispose };
2
131
  //# sourceMappingURL=dispose-defer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispose-defer.mjs","names":[],"sources":["../../src/common/dispose-defer.ts"],"sourcesContent":["import type { DisposerFunction } from './dispose-types'\nimport type { LoggerInterface } from './log/log-base'\nimport { arrayFilterInPlace } from './data/array'\nimport { isString } from './data/is'\nimport { isPromise } from './exec/promise'\nimport { DefaultLogger } from './log/log'\n\nexport function polyfillUsing() {\n try {\n // @ts-expect-error just a polyfill\n Symbol.dispose ??= Symbol('Symbol.dispose')\n // @ts-expect-error just a polyfill\n Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n }\n catch (_) { }\n}\n\n// Symbol.dispose ??= Symbol('Symbol.dispose')\n// Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n\n/** A disposable entry: either a function or an object with a dispose() method. */\ntype DisposableEntry = DisposerFunction | { dispose: DisposerFunction }\n\n/** Different kinds of implementations have grown, this should unify them */\nfunction callDisposable(disposable: DisposableEntry): Promise<void> | void {\n let result\n\n if (typeof disposable === 'function')\n result = disposable()\n else if (typeof disposable.dispose === 'function')\n result = disposable.dispose()\n\n if (isPromise(result))\n return result\n}\n\nexport interface UseDisposeConfig {\n name?: string\n log?: LoggerInterface\n}\n\nexport function useDispose(opt?: string | UseDisposeConfig | LoggerInterface) {\n if (opt != null) {\n if (isString(opt))\n opt = { name: opt }\n else if ('debug' in opt && 'label' in opt)\n opt = { name: opt.label, log: opt }\n }\n\n polyfillUsing()\n\n const name = opt?.name\n const log = opt?.log ?? DefaultLogger('zeed:dispose')\n\n let _disposed = 0\n\n const tracked: DisposableEntry[] = []\n\n function untrack(disposable: DisposableEntry): Promise<void> | void {\n if (disposable != null && tracked.includes(disposable)) {\n arrayFilterInPlace(tracked, el => el !== disposable)\n const result = callDisposable(disposable)\n if (isPromise(result))\n return result\n }\n }\n\n function track(obj?: DisposableEntry): DisposerFunction | undefined {\n if (obj == null)\n return\n tracked.unshift(obj) // LIFO\n return () => untrack(obj)\n }\n\n /** Dispose all tracked entries */\n function dispose(strictSync = false): Promise<any> | void {\n if (name)\n log.debug(`dispose \"${name}\": ${tracked.length} entries`)\n\n _disposed += 1\n\n const promises: any[] = []\n while (tracked.length > 0) {\n const fn = tracked[0]\n const result = untrack(fn) // LIFO\n if (isPromise(result)) {\n if (strictSync)\n throw new Error(`Async disposable found: ${fn} -> ${result}`)\n else\n promises.push(result)\n }\n }\n\n if (promises.length > 0)\n return Promise.all(promises)\n }\n\n /** Dispose all tracked entries in synchronous way. */\n function disposeSync(): void {\n dispose(true)\n }\n\n return Object.assign(dispose, {\n /** Counter that increments each time dispose has been called */\n get disposed() {\n return _disposed\n },\n\n add: track,\n remove: untrack,\n\n /** @deprecated use add */\n track,\n\n /** @deprecated use remove */\n untrack,\n\n dispose,\n disposeSync,\n sync: disposeSync,\n\n /** @deprecated use dispose */\n exec: dispose,\n getSize() {\n return tracked.length\n },\n isDisposed() {\n return _disposed > 0 && tracked.length === 0\n },\n\n [Symbol.dispose]() {\n return dispose()\n },\n\n async [Symbol.asyncDispose]() {\n return await dispose()\n },\n\n })\n}\n\nexport type UseDispose = ReturnType<typeof useDispose>\n\nexport function useDefer(\n config: {\n mode?: 'lifo' | 'fifo'\n } = {},\n) {\n const { mode = 'fifo' } = config\n const steps: DisposableEntry[] = []\n\n polyfillUsing()\n\n /**\n * Executes all steps. If all steps are not Promises, they are executed immediately,\n * otherwise a Promise is returned.\n * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.\n */\n const exec = async (expectSync = false) => {\n while (steps.length > 0) {\n const step = steps[0]\n arrayFilterInPlace(steps, el => el !== step)\n if (typeof step === 'function') {\n const result = step()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else if (typeof step.dispose === 'function') {\n // Handle objects with a dispose() method (consistent with useDispose)\n const result = step.dispose()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else {\n throw new TypeError(`Unhandled disposable: ${step}`)\n }\n }\n }\n\n const add = (obj: DisposableEntry) => {\n if (mode === 'lifo')\n steps.unshift(obj)\n else\n steps.push(obj)\n }\n\n return Object.assign(exec, {\n add,\n exec,\n getSize() {\n return steps.length\n },\n })\n}\n\nexport type UseDefer = ReturnType<typeof useDefer>\n"],"mappings":"4LAOA,SAAgB,GAAgB,CAC9B,GAAI,CAEF,OAAO,UAAY,OAAO,iBAAiB,CAE3C,OAAO,eAAiB,OAAO,sBAAsB,MAE7C,GAUZ,SAAS,EAAe,EAAmD,CACzE,IAAI,EAOJ,GALI,OAAO,GAAe,WACxB,EAAS,GAAY,CACd,OAAO,EAAW,SAAY,aACrC,EAAS,EAAW,SAAS,EAE3B,EAAU,EAAO,CACnB,OAAO,EAQX,SAAgB,EAAW,EAAmD,CACxE,GAAO,OACL,EAAS,EAAI,CACf,EAAM,CAAE,KAAM,EAAK,CACZ,UAAW,GAAO,UAAW,IACpC,EAAM,CAAE,KAAM,EAAI,MAAO,IAAK,EAAK,GAGvC,GAAe,CAEf,IAAM,EAAO,GAAK,KACZ,EAAM,GAAK,KAAO,EAAc,eAAe,CAEjD,EAAY,EAEV,EAA6B,EAAE,CAErC,SAAS,EAAQ,EAAmD,CAClE,GAAI,GAAc,MAAQ,EAAQ,SAAS,EAAW,CAAE,CACtD,EAAmB,EAAS,GAAM,IAAO,EAAW,CACpD,IAAM,EAAS,EAAe,EAAW,CACzC,GAAI,EAAU,EAAO,CACnB,OAAO,GAIb,SAAS,EAAM,EAAqD,CAC9D,MAAO,KAGX,OADA,EAAQ,QAAQ,EAAI,KACP,EAAQ,EAAI,CAI3B,SAAS,EAAQ,EAAa,GAA4B,CACpD,GACF,EAAI,MAAM,YAAY,EAAK,KAAK,EAAQ,OAAO,UAAU,CAE3D,GAAa,EAEb,IAAM,EAAkB,EAAE,CAC1B,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAK,EAAQ,GACb,EAAS,EAAQ,EAAG,CAC1B,GAAI,EAAU,EAAO,CACnB,IAAI,EACF,MAAU,MAAM,2BAA2B,EAAG,MAAM,IAAS,CAE7D,EAAS,KAAK,EAAO,EAI3B,GAAI,EAAS,OAAS,EACpB,OAAO,QAAQ,IAAI,EAAS,CAIhC,SAAS,GAAoB,CAC3B,EAAQ,GAAK,CAGf,OAAO,OAAO,OAAO,EAAS,CAE5B,IAAI,UAAW,CACb,OAAO,GAGT,IAAK,EACL,OAAQ,EAGR,QAGA,UAEA,UACA,cACA,KAAM,EAGN,KAAM,EACN,SAAU,CACR,OAAO,EAAQ,QAEjB,YAAa,CACX,OAAO,EAAY,GAAK,EAAQ,SAAW,GAG7C,CAAC,OAAO,UAAW,CACjB,OAAO,GAAS,EAGlB,MAAO,OAAO,eAAgB,CAC5B,OAAO,MAAM,GAAS,EAGzB,CAAC,CAKJ,SAAgB,EACd,EAEI,EAAE,CACN,CACA,GAAM,CAAE,OAAO,QAAW,EACpB,EAA2B,EAAE,CAEnC,GAAe,CAOf,IAAM,EAAO,MAAO,EAAa,KAAU,CACzC,KAAO,EAAM,OAAS,GAAG,CACvB,IAAM,EAAO,EAAM,GAEnB,GADA,EAAmB,EAAO,GAAM,IAAO,EAAK,CACxC,OAAO,GAAS,WAAY,CAC9B,IAAM,EAAS,GAAM,CACrB,GAAI,EAAU,EAAO,CAAE,CACrB,GAAI,EACF,MAAU,MACR,iDAAiD,IAClD,CAEH,MAAM,WAGD,OAAO,EAAK,SAAY,WAAY,CAE3C,IAAM,EAAS,EAAK,SAAS,CAC7B,GAAI,EAAU,EAAO,CAAE,CACrB,GAAI,EACF,MAAU,MACR,iDAAiD,IAClD,CAEH,MAAM,QAIR,MAAU,UAAU,yBAAyB,IAAO,GAY1D,OAAO,OAAO,OAAO,EAAM,CACzB,IARW,GAAyB,CAChC,IAAS,OACX,EAAM,QAAQ,EAAI,CAElB,EAAM,KAAK,EAAI,EAKjB,OACA,SAAU,CACR,OAAO,EAAM,QAEhB,CAAC"}
1
+ {"version":3,"file":"dispose-defer.mjs","names":[],"sources":["../../src/common/dispose-defer.ts"],"sourcesContent":["import type { DisposerFunction } from './dispose-types'\nimport type { LoggerInterface } from './log/log-base'\nimport { arrayFilterInPlace } from './data/array'\nimport { isString } from './data/is'\nimport { isPromise } from './exec/promise'\nimport { DefaultLogger } from './log/log'\n\nexport function polyfillUsing() {\n try {\n // @ts-expect-error just a polyfill\n Symbol.dispose ??= Symbol('Symbol.dispose')\n // @ts-expect-error just a polyfill\n Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n }\n catch (_) { }\n}\n\n// Symbol.dispose ??= Symbol('Symbol.dispose')\n// Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n\n/** A disposable entry: either a function or an object with a dispose() method. */\ntype DisposableEntry = DisposerFunction | { dispose: DisposerFunction }\n\n/** Different kinds of implementations have grown, this should unify them */\nfunction callDisposable(disposable: DisposableEntry): Promise<void> | void {\n let result\n\n if (typeof disposable === 'function')\n result = disposable()\n else if (typeof disposable.dispose === 'function')\n result = disposable.dispose()\n\n if (isPromise(result))\n return result\n}\n\nexport interface UseDisposeConfig {\n name?: string\n log?: LoggerInterface\n}\n\nexport function useDispose(opt?: string | UseDisposeConfig | LoggerInterface) {\n if (opt != null) {\n if (isString(opt))\n opt = { name: opt }\n else if ('debug' in opt && 'label' in opt)\n opt = { name: opt.label, log: opt }\n }\n\n polyfillUsing()\n\n const name = opt?.name\n const log = opt?.log ?? DefaultLogger('zeed:dispose')\n\n let _disposed = 0\n\n const tracked: DisposableEntry[] = []\n\n function untrack(disposable: DisposableEntry): Promise<void> | void {\n if (disposable != null && tracked.includes(disposable)) {\n arrayFilterInPlace(tracked, el => el !== disposable)\n const result = callDisposable(disposable)\n if (isPromise(result))\n return result\n }\n }\n\n function track(obj?: DisposableEntry): DisposerFunction | undefined {\n if (obj == null)\n return\n tracked.unshift(obj) // LIFO\n return () => untrack(obj)\n }\n\n /** Dispose all tracked entries */\n function dispose(strictSync = false): Promise<any> | void {\n if (name)\n log.debug(`dispose \"${name}\": ${tracked.length} entries`)\n\n _disposed += 1\n\n const promises: any[] = []\n while (tracked.length > 0) {\n const fn = tracked[0]\n const result = untrack(fn) // LIFO\n if (isPromise(result)) {\n if (strictSync)\n throw new Error(`Async disposable found: ${fn} -> ${result}`)\n else\n promises.push(result)\n }\n }\n\n if (promises.length > 0)\n return Promise.all(promises)\n }\n\n /** Dispose all tracked entries in synchronous way. */\n function disposeSync(): void {\n dispose(true)\n }\n\n return Object.assign(dispose, {\n /** Counter that increments each time dispose has been called */\n get disposed() {\n return _disposed\n },\n\n add: track,\n remove: untrack,\n\n /** @deprecated use add */\n track,\n\n /** @deprecated use remove */\n untrack,\n\n dispose,\n disposeSync,\n sync: disposeSync,\n\n /** @deprecated use dispose */\n exec: dispose,\n getSize() {\n return tracked.length\n },\n isDisposed() {\n return _disposed > 0 && tracked.length === 0\n },\n\n [Symbol.dispose]() {\n return dispose()\n },\n\n async [Symbol.asyncDispose]() {\n return await dispose()\n },\n\n })\n}\n\nexport type UseDispose = ReturnType<typeof useDispose>\n\nexport function useDefer(\n config: {\n mode?: 'lifo' | 'fifo'\n } = {},\n) {\n const { mode = 'fifo' } = config\n const steps: DisposableEntry[] = []\n\n polyfillUsing()\n\n /**\n * Executes all steps. If all steps are not Promises, they are executed immediately,\n * otherwise a Promise is returned.\n * Note: useDefer defaults to FIFO order; use mode: 'lifo' for LIFO (stack) order.\n */\n const exec = async (expectSync = false) => {\n while (steps.length > 0) {\n const step = steps[0]\n arrayFilterInPlace(steps, el => el !== step)\n if (typeof step === 'function') {\n const result = step()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else if (typeof step.dispose === 'function') {\n // Handle objects with a dispose() method (consistent with useDispose)\n const result = step.dispose()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else {\n throw new TypeError(`Unhandled disposable: ${step}`)\n }\n }\n }\n\n const add = (obj: DisposableEntry) => {\n if (mode === 'lifo')\n steps.unshift(obj)\n else\n steps.push(obj)\n }\n\n return Object.assign(exec, {\n add,\n exec,\n getSize() {\n return steps.length\n },\n })\n}\n\nexport type UseDefer = ReturnType<typeof useDefer>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- export{};
1
+ export { };