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":"object.mjs","names":[],"sources":["../../../src/common/data/object.ts"],"sourcesContent":["import { isArray, isBinaryArray, isObject, isPrimitive, isSymbol } from './is'\n\n/** Like `.map()` for object. Return new key and value or `undefined` to delete. */\nexport function objectMap<T = any>(\n obj: any,\n fn: (key: string, value: any) => [key: string, value: T] | T | undefined | null,\n): Record<string, T> {\n if (!isObject(obj))\n return {}\n return Object.fromEntries(\n Object.entries(obj)\n .map(([k, v]) => {\n const r = fn(k, v)\n if (isArray(r) && r.length === 2)\n return r\n return [k, r]\n })\n .filter(v => v != null),\n )\n}\n\n/** Like `.filter()` for object. */\nexport function objectFilter<T = any>(\n obj: any,\n fn: (key: string, value: any) => boolean,\n): Partial<T> {\n if (!isObject(obj))\n return {}\n return Object.fromEntries(Object.entries(obj).filter(([k, v]) => fn(k, v))) as any\n}\n\n/** Merge right into left object. If dispose is defined, it will be combined. Left can be a complex object i.e. a insantiated class. */\nexport function objectMergeDisposable<A extends object, B extends object>(\n a: A,\n b: B,\n): A & B {\n // @ts-expect-error xxx\n if (b.dispose && a.dispose) {\n // @ts-expect-error xxx\n b.dispose.add(a.dispose)\n }\n return Object.assign(a, b)\n}\n\n// export function objectMerge<A, B>(a: A, b: B): A & B {\n// return Object.assign({}, a, b)\n// }\n\nexport function objectIsEmpty(obj: object) {\n return Object.keys(obj).length <= 0\n}\n\n// https://stackoverflow.com/a/56592365/140927\nexport function objectPick<T extends object, K extends keyof T>(obj: T, ...keys: K[]) {\n return Object.fromEntries(keys.filter(key => key in obj).map(key => [key, obj[key]])) as Pick<T, K>\n}\n\nexport function objectInclusivePick<T extends object, K extends (string | number | symbol)>(obj: T, ...keys: K[]) {\n return Object.fromEntries(keys.map(key => [key, obj[key as unknown as keyof T]])) as { [key in K]: key extends keyof T ? T[key] : undefined }\n}\n\nexport function objectOmit<T extends object, K extends keyof T>(obj: T, ...keys: K[]) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key as K))) as Omit<T, K>\n}\n\n/// Convert object to plain object with max depth.\nexport function objectPlain(obj: any, opt?: {\n maxDepth?: number\n maxDepthValue?: any\n circleValue?: any\n errorTrace?: boolean\n filter?: (value: any) => boolean\n keepAsIs?: (value: any) => boolean\n transformer?: (value: any) => any | undefined\n}): any {\n const {\n maxDepth = 99,\n circleValue,\n maxDepthValue,\n errorTrace = true,\n filter = () => true,\n keepAsIs = () => false,\n transformer = () => undefined,\n } = opt ?? {}\n\n const cycle: any = []\n\n function handleObject(obj: any, depth: number): any {\n if (depth > maxDepth)\n return maxDepthValue // '*** MAX DEPTH ***'\n\n if (keepAsIs(obj))\n return obj\n\n if (!isPrimitive(obj)) {\n if (cycle.includes(obj))\n return circleValue // '*** CYCLE ***'\n cycle.push(obj)\n }\n\n if (transformer) {\n const result = transformer(obj)\n if (result !== undefined)\n return result\n }\n\n if (isSymbol(obj))\n return String(obj)\n\n if (isPrimitive(obj))\n return obj\n\n if (typeof Date !== 'undefined' && obj instanceof Date) {\n return {\n __class: 'Date',\n value: obj.toISOString(),\n }\n }\n\n if (typeof RegExp !== 'undefined' && obj instanceof RegExp) {\n return {\n __class: 'RegExp',\n source: obj.toString(),\n }\n }\n\n if (typeof Map !== 'undefined' && obj instanceof Map)\n obj = Object.fromEntries(obj)\n\n if (typeof Set !== 'undefined' && obj instanceof Set || isBinaryArray(obj))\n obj = Array.from(obj as any)\n\n if (typeof ErrorEvent !== 'undefined' && obj instanceof ErrorEvent) {\n return {\n __class: 'ErrorEvent',\n message: obj.message,\n filename: obj.filename,\n lineno: obj.lineno,\n colno: obj.colno,\n error: obj.error ? handleObject(obj.error, depth + 1) : undefined,\n }\n }\n\n if (typeof Event !== 'undefined' && obj instanceof Event) {\n return {\n __class: 'Event',\n type: obj.type,\n eventPhase: obj.eventPhase,\n bubbles: obj.bubbles,\n cancelable: obj.cancelable,\n defaultPrevented: obj.defaultPrevented,\n composed: obj.composed,\n timeStamp: obj.timeStamp,\n }\n }\n\n if (typeof Error !== 'undefined' && obj instanceof Error) {\n return {\n __class: 'Error',\n name: obj.name,\n message: obj.message,\n stack: errorTrace ? obj.stack : undefined,\n cause: (obj as any).cause ? String((obj as any).cause) : undefined,\n }\n }\n // return `${obj.name || 'Error'}: ${obj.message}${errorTrace ? `\\n${obj.stack}` : ''}`\n\n /* if (obj instanceof Element) {\n const attrs = obj.getAttributeNames().map(name => `${name}=\"${String(obj.getAttribute(name))}\"`).join(' ')\n return `<${[obj.tagName.toLocaleLowerCase(), ...attrs].join(' ')}}>`\n } */\n\n if (Array.isArray(obj)) {\n return obj\n .filter(filter)\n .map(o => handleObject(o, depth + 1))\n }\n\n // For class objects just dump the first level of primitives\n const objName = obj?.constructor?.name\n if (objName && objName !== 'Object') {\n const nobj: any = {\n __class: objName,\n // __code: obj.toString ? obj.toString() : undefined,\n }\n for (const k in obj) {\n if (obj && obj.hasOwnProperty(k) && isPrimitive(obj[k]))\n nobj[k] = obj[k]\n }\n return nobj\n }\n\n // Plain objects are recursively dumped\n const nobj: any = {}\n for (const key in obj) {\n const value = obj[key]\n if (filter(value))\n nobj[key] = handleObject(value, depth + 1)\n }\n return nobj\n\n // return undefined\n }\n\n return handleObject(obj, 0)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"object.mjs","names":[],"sources":["../../../src/common/data/object.ts"],"sourcesContent":["import { isArray, isBinaryArray, isObject, isPrimitive, isSymbol } from './is'\n\n/** Like `.map()` for object. Return new key and value or `undefined` to delete. */\nexport function objectMap<T = any>(\n obj: any,\n fn: (key: string, value: any) => [key: string, value: T] | T | undefined | null,\n): Record<string, T> {\n if (!isObject(obj))\n return {}\n return Object.fromEntries(\n Object.entries(obj)\n .map(([k, v]) => {\n const r = fn(k, v)\n if (isArray(r) && r.length === 2)\n return r\n return [k, r]\n })\n .filter(v => v != null),\n )\n}\n\n/** Like `.filter()` for object. */\nexport function objectFilter<T = any>(\n obj: any,\n fn: (key: string, value: any) => boolean,\n): Partial<T> {\n if (!isObject(obj))\n return {}\n return Object.fromEntries(Object.entries(obj).filter(([k, v]) => fn(k, v))) as any\n}\n\n/** Merge right into left object. If dispose is defined, it will be combined. Left can be a complex object i.e. a insantiated class. */\nexport function objectMergeDisposable<A extends object, B extends object>(\n a: A,\n b: B,\n): A & B {\n // @ts-expect-error xxx\n if (b.dispose && a.dispose) {\n // @ts-expect-error xxx\n b.dispose.add(a.dispose)\n }\n return Object.assign(a, b)\n}\n\n// export function objectMerge<A, B>(a: A, b: B): A & B {\n// return Object.assign({}, a, b)\n// }\n\nexport function objectIsEmpty(obj: object) {\n return Object.keys(obj).length <= 0\n}\n\n// https://stackoverflow.com/a/56592365/140927\nexport function objectPick<T extends object, K extends keyof T>(obj: T, ...keys: K[]) {\n return Object.fromEntries(keys.filter(key => key in obj).map(key => [key, obj[key]])) as Pick<T, K>\n}\n\nexport function objectInclusivePick<T extends object, K extends (string | number | symbol)>(obj: T, ...keys: K[]) {\n return Object.fromEntries(keys.map(key => [key, obj[key as unknown as keyof T]])) as { [key in K]: key extends keyof T ? T[key] : undefined }\n}\n\nexport function objectOmit<T extends object, K extends keyof T>(obj: T, ...keys: K[]) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key as K))) as Omit<T, K>\n}\n\n/// Convert object to plain object with max depth.\nexport function objectPlain(obj: any, opt?: {\n maxDepth?: number\n maxDepthValue?: any\n circleValue?: any\n errorTrace?: boolean\n filter?: (value: any) => boolean\n keepAsIs?: (value: any) => boolean\n transformer?: (value: any) => any | undefined\n}): any {\n const {\n maxDepth = 99,\n circleValue,\n maxDepthValue,\n errorTrace = true,\n filter = () => true,\n keepAsIs = () => false,\n transformer = () => undefined,\n } = opt ?? {}\n\n const cycle: any = []\n\n function handleObject(obj: any, depth: number): any {\n if (depth > maxDepth)\n return maxDepthValue // '*** MAX DEPTH ***'\n\n if (keepAsIs(obj))\n return obj\n\n if (!isPrimitive(obj)) {\n if (cycle.includes(obj))\n return circleValue // '*** CYCLE ***'\n cycle.push(obj)\n }\n\n if (transformer) {\n const result = transformer(obj)\n if (result !== undefined)\n return result\n }\n\n if (isSymbol(obj))\n return String(obj)\n\n if (isPrimitive(obj))\n return obj\n\n if (typeof Date !== 'undefined' && obj instanceof Date) {\n return {\n __class: 'Date',\n value: obj.toISOString(),\n }\n }\n\n if (typeof RegExp !== 'undefined' && obj instanceof RegExp) {\n return {\n __class: 'RegExp',\n source: obj.toString(),\n }\n }\n\n if (typeof Map !== 'undefined' && obj instanceof Map)\n obj = Object.fromEntries(obj)\n\n if (typeof Set !== 'undefined' && obj instanceof Set || isBinaryArray(obj))\n obj = Array.from(obj as any)\n\n if (typeof ErrorEvent !== 'undefined' && obj instanceof ErrorEvent) {\n return {\n __class: 'ErrorEvent',\n message: obj.message,\n filename: obj.filename,\n lineno: obj.lineno,\n colno: obj.colno,\n error: obj.error ? handleObject(obj.error, depth + 1) : undefined,\n }\n }\n\n if (typeof Event !== 'undefined' && obj instanceof Event) {\n return {\n __class: 'Event',\n type: obj.type,\n eventPhase: obj.eventPhase,\n bubbles: obj.bubbles,\n cancelable: obj.cancelable,\n defaultPrevented: obj.defaultPrevented,\n composed: obj.composed,\n timeStamp: obj.timeStamp,\n }\n }\n\n if (typeof Error !== 'undefined' && obj instanceof Error) {\n return {\n __class: 'Error',\n name: obj.name,\n message: obj.message,\n stack: errorTrace ? obj.stack : undefined,\n cause: (obj as any).cause ? String((obj as any).cause) : undefined,\n }\n }\n // return `${obj.name || 'Error'}: ${obj.message}${errorTrace ? `\\n${obj.stack}` : ''}`\n\n /* if (obj instanceof Element) {\n const attrs = obj.getAttributeNames().map(name => `${name}=\"${String(obj.getAttribute(name))}\"`).join(' ')\n return `<${[obj.tagName.toLocaleLowerCase(), ...attrs].join(' ')}}>`\n } */\n\n if (Array.isArray(obj)) {\n return obj\n .filter(filter)\n .map(o => handleObject(o, depth + 1))\n }\n\n // For class objects just dump the first level of primitives\n const objName = obj?.constructor?.name\n if (objName && objName !== 'Object') {\n const nobj: any = {\n __class: objName,\n // __code: obj.toString ? obj.toString() : undefined,\n }\n for (const k in obj) {\n if (obj && obj.hasOwnProperty(k) && isPrimitive(obj[k]))\n nobj[k] = obj[k]\n }\n return nobj\n }\n\n // Plain objects are recursively dumped\n const nobj: any = {}\n for (const key in obj) {\n const value = obj[key]\n if (filter(value))\n nobj[key] = handleObject(value, depth + 1)\n }\n return nobj\n\n // return undefined\n }\n\n return handleObject(obj, 0)\n}\n"],"mappings":"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"}
@@ -1,2 +1,43 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e=``){let[t=``,n=`asc`]=e.split(` `);return n=n.toLowerCase(),{field:t,orderby:n,asc:n!==`desc`,desc:n===`desc`}}function t(e,t=!0){return`${e} ${t?`asc`:`desc`}`}function n(e,t,n=!0){let r=e||0,i=t||0;return r>i?n?1:-1:r<i?n?-1:1:0}function r(t,...r){if(r.length>0){let i=r.map(e),a=Array.from(t);return a.sort((e,t)=>{for(let{field:r,asc:a}of i){let i=n(e[r],t[r],a);if(i!==0)return i}return 0}),a}return t}exports.cmp=n,exports.composeOrderby=t,exports.parseOrderby=e,exports.sortedOrderby=r;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/common/data/orderby.ts
4
+ function parseOrderby(value = "") {
5
+ let [field = "", orderby = "asc"] = value.split(" ");
6
+ orderby = orderby.toLowerCase();
7
+ return {
8
+ field,
9
+ orderby,
10
+ asc: orderby !== "desc",
11
+ desc: orderby === "desc"
12
+ };
13
+ }
14
+ function composeOrderby(field, asc = true) {
15
+ return `${field} ${asc ? "asc" : "desc"}`;
16
+ }
17
+ function cmp(a, b, asc = true) {
18
+ const aa = a || 0;
19
+ const bb = b || 0;
20
+ return aa > bb ? asc ? 1 : -1 : aa < bb ? asc ? -1 : 1 : 0;
21
+ }
22
+ function sortedOrderby(values, ...orderby) {
23
+ if (orderby.length > 0) {
24
+ const orderByList = orderby.map(parseOrderby);
25
+ const sortValues = Array.from(values);
26
+ sortValues.sort((a, b) => {
27
+ for (const { field, asc } of orderByList) {
28
+ const result = cmp(a[field], b[field], asc);
29
+ if (result !== 0) return result;
30
+ }
31
+ return 0;
32
+ });
33
+ return sortValues;
34
+ }
35
+ return values;
36
+ }
37
+
38
+ //#endregion
39
+ exports.cmp = cmp;
40
+ exports.composeOrderby = composeOrderby;
41
+ exports.parseOrderby = parseOrderby;
42
+ exports.sortedOrderby = sortedOrderby;
2
43
  //# sourceMappingURL=orderby.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderby.cjs","names":[],"sources":["../../../src/common/data/orderby.ts"],"sourcesContent":["export function parseOrderby(value = ''): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = '', orderby = 'asc'] = value.split(' ')\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== 'desc',\n desc: orderby === 'desc',\n }\n}\n\nexport function composeOrderby(field: string, asc = true): string {\n return `${field} ${asc ? 'asc' : 'desc'}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc = true): -1 | 0 | 1 {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0 // use Math.sign(?) for performance?\n}\n\n// todo: support localeCompare()\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n const orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n // if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n const sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (const { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0)\n return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n"],"mappings":"mEAAA,SAAgB,EAAa,EAAQ,GAKnC,CACA,GAAI,CAAC,EAAQ,GAAI,EAAU,OAAS,EAAM,MAAM,IAAI,CAEpD,MADA,GAAU,EAAQ,aAAa,CACxB,CACL,QACA,UACA,IAAK,IAAY,OACjB,KAAM,IAAY,OACnB,CAGH,SAAgB,EAAe,EAAe,EAAM,GAAc,CAChE,MAAO,GAAG,EAAM,GAAG,EAAM,MAAQ,SAInC,SAAgB,EAAI,EAAQ,EAAQ,EAAM,GAAkB,CAC1D,IAAM,EAAK,GAAK,EACV,EAAK,GAAK,EAChB,OAAO,EAAK,EAAM,EAAM,EAAI,GAAM,EAAK,EAAM,EAAM,GAAK,EAAK,EAI/D,SAAgB,EAAiB,EAAa,GAAG,EAAwB,CACvE,GAAI,EAAQ,OAAS,EAAG,CACtB,IAAM,EAAc,EAAQ,IAAI,EAAa,CAKvC,EAAa,MAAM,KAAK,EAAO,CAYrC,OAXA,EAAW,MAAM,EAAQ,IAAmB,CAC1C,IAAK,GAAM,CAAE,QAAO,SAAS,EAAa,CACxC,IAAM,EAAS,EAAI,EAAE,GAAQ,EAAE,GAAQ,EAAI,CAC3C,GAAI,IAAW,EACb,OAAO,EAEX,MAAO,IAIP,CACK,EAET,OAAO"}
1
+ {"version":3,"file":"orderby.cjs","names":[],"sources":["../../../src/common/data/orderby.ts"],"sourcesContent":["export function parseOrderby(value = ''): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = '', orderby = 'asc'] = value.split(' ')\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== 'desc',\n desc: orderby === 'desc',\n }\n}\n\nexport function composeOrderby(field: string, asc = true): string {\n return `${field} ${asc ? 'asc' : 'desc'}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc = true): -1 | 0 | 1 {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0 // use Math.sign(?) for performance?\n}\n\n// todo: support localeCompare()\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n const orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n // if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n const sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (const { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0)\n return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n"],"mappings":";;;AAAA,SAAgB,aAAa,QAAQ,IAKnC;CACA,IAAI,CAAC,QAAQ,IAAI,UAAU,SAAS,MAAM,MAAM,IAAI;AACpD,WAAU,QAAQ,aAAa;AAC/B,QAAO;EACL;EACA;EACA,KAAK,YAAY;EACjB,MAAM,YAAY;EACnB;;AAGH,SAAgB,eAAe,OAAe,MAAM,MAAc;AAChE,QAAO,GAAG,MAAM,GAAG,MAAM,QAAQ;;AAInC,SAAgB,IAAI,GAAQ,GAAQ,MAAM,MAAkB;CAC1D,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,KAAK;AAChB,QAAO,KAAK,KAAM,MAAM,IAAI,KAAM,KAAK,KAAM,MAAM,KAAK,IAAK;;AAI/D,SAAgB,cAAiB,QAAa,GAAG,SAAwB;AACvE,KAAI,QAAQ,SAAS,GAAG;EACtB,MAAM,cAAc,QAAQ,IAAI,aAAa;EAK7C,MAAM,aAAa,MAAM,KAAK,OAAO;AACrC,aAAW,MAAM,GAAQ,MAAmB;AAC1C,QAAK,MAAM,EAAE,OAAO,SAAS,aAAa;IACxC,MAAM,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAC3C,QAAI,WAAW,EACb,QAAO;;AAEX,UAAO;IAIP;AACF,SAAO;;AAET,QAAO"}
@@ -1,2 +1,38 @@
1
- function e(e=``){let[t=``,n=`asc`]=e.split(` `);return n=n.toLowerCase(),{field:t,orderby:n,asc:n!==`desc`,desc:n===`desc`}}function t(e,t=!0){return`${e} ${t?`asc`:`desc`}`}function n(e,t,n=!0){let r=e||0,i=t||0;return r>i?n?1:-1:r<i?n?-1:1:0}function r(t,...r){if(r.length>0){let i=r.map(e),a=Array.from(t);return a.sort((e,t)=>{for(let{field:r,asc:a}of i){let i=n(e[r],t[r],a);if(i!==0)return i}return 0}),a}return t}export{n as cmp,t as composeOrderby,e as parseOrderby,r as sortedOrderby};
1
+ //#region src/common/data/orderby.ts
2
+ function parseOrderby(value = "") {
3
+ let [field = "", orderby = "asc"] = value.split(" ");
4
+ orderby = orderby.toLowerCase();
5
+ return {
6
+ field,
7
+ orderby,
8
+ asc: orderby !== "desc",
9
+ desc: orderby === "desc"
10
+ };
11
+ }
12
+ function composeOrderby(field, asc = true) {
13
+ return `${field} ${asc ? "asc" : "desc"}`;
14
+ }
15
+ function cmp(a, b, asc = true) {
16
+ const aa = a || 0;
17
+ const bb = b || 0;
18
+ return aa > bb ? asc ? 1 : -1 : aa < bb ? asc ? -1 : 1 : 0;
19
+ }
20
+ function sortedOrderby(values, ...orderby) {
21
+ if (orderby.length > 0) {
22
+ const orderByList = orderby.map(parseOrderby);
23
+ const sortValues = Array.from(values);
24
+ sortValues.sort((a, b) => {
25
+ for (const { field, asc } of orderByList) {
26
+ const result = cmp(a[field], b[field], asc);
27
+ if (result !== 0) return result;
28
+ }
29
+ return 0;
30
+ });
31
+ return sortValues;
32
+ }
33
+ return values;
34
+ }
35
+
36
+ //#endregion
37
+ export { cmp, composeOrderby, parseOrderby, sortedOrderby };
2
38
  //# sourceMappingURL=orderby.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderby.mjs","names":[],"sources":["../../../src/common/data/orderby.ts"],"sourcesContent":["export function parseOrderby(value = ''): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = '', orderby = 'asc'] = value.split(' ')\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== 'desc',\n desc: orderby === 'desc',\n }\n}\n\nexport function composeOrderby(field: string, asc = true): string {\n return `${field} ${asc ? 'asc' : 'desc'}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc = true): -1 | 0 | 1 {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0 // use Math.sign(?) for performance?\n}\n\n// todo: support localeCompare()\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n const orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n // if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n const sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (const { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0)\n return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n"],"mappings":"AAAA,SAAgB,EAAa,EAAQ,GAKnC,CACA,GAAI,CAAC,EAAQ,GAAI,EAAU,OAAS,EAAM,MAAM,IAAI,CAEpD,MADA,GAAU,EAAQ,aAAa,CACxB,CACL,QACA,UACA,IAAK,IAAY,OACjB,KAAM,IAAY,OACnB,CAGH,SAAgB,EAAe,EAAe,EAAM,GAAc,CAChE,MAAO,GAAG,EAAM,GAAG,EAAM,MAAQ,SAInC,SAAgB,EAAI,EAAQ,EAAQ,EAAM,GAAkB,CAC1D,IAAM,EAAK,GAAK,EACV,EAAK,GAAK,EAChB,OAAO,EAAK,EAAM,EAAM,EAAI,GAAM,EAAK,EAAM,EAAM,GAAK,EAAK,EAI/D,SAAgB,EAAiB,EAAa,GAAG,EAAwB,CACvE,GAAI,EAAQ,OAAS,EAAG,CACtB,IAAM,EAAc,EAAQ,IAAI,EAAa,CAKvC,EAAa,MAAM,KAAK,EAAO,CAYrC,OAXA,EAAW,MAAM,EAAQ,IAAmB,CAC1C,IAAK,GAAM,CAAE,QAAO,SAAS,EAAa,CACxC,IAAM,EAAS,EAAI,EAAE,GAAQ,EAAE,GAAQ,EAAI,CAC3C,GAAI,IAAW,EACb,OAAO,EAEX,MAAO,IAIP,CACK,EAET,OAAO"}
1
+ {"version":3,"file":"orderby.mjs","names":[],"sources":["../../../src/common/data/orderby.ts"],"sourcesContent":["export function parseOrderby(value = ''): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = '', orderby = 'asc'] = value.split(' ')\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== 'desc',\n desc: orderby === 'desc',\n }\n}\n\nexport function composeOrderby(field: string, asc = true): string {\n return `${field} ${asc ? 'asc' : 'desc'}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc = true): -1 | 0 | 1 {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0 // use Math.sign(?) for performance?\n}\n\n// todo: support localeCompare()\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n const orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n // if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n const sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (const { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0)\n return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n"],"mappings":";AAAA,SAAgB,aAAa,QAAQ,IAKnC;CACA,IAAI,CAAC,QAAQ,IAAI,UAAU,SAAS,MAAM,MAAM,IAAI;AACpD,WAAU,QAAQ,aAAa;AAC/B,QAAO;EACL;EACA;EACA,KAAK,YAAY;EACjB,MAAM,YAAY;EACnB;;AAGH,SAAgB,eAAe,OAAe,MAAM,MAAc;AAChE,QAAO,GAAG,MAAM,GAAG,MAAM,QAAQ;;AAInC,SAAgB,IAAI,GAAQ,GAAQ,MAAM,MAAkB;CAC1D,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,KAAK;AAChB,QAAO,KAAK,KAAM,MAAM,IAAI,KAAM,KAAK,KAAM,MAAM,KAAK,IAAK;;AAI/D,SAAgB,cAAiB,QAAa,GAAG,SAAwB;AACvE,KAAI,QAAQ,SAAS,GAAG;EACtB,MAAM,cAAc,QAAQ,IAAI,aAAa;EAK7C,MAAM,aAAa,MAAM,KAAK,OAAO;AACrC,aAAW,MAAM,GAAQ,MAAmB;AAC1C,QAAK,MAAM,EAAE,OAAO,SAAS,aAAa;IACxC,MAAM,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAC3C,QAAI,WAAW,EACb,QAAO;;AAEX,UAAO;IAIP;AACF,SAAO;;AAET,QAAO"}
@@ -1,2 +1,27 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./regexp.cjs`),t=/^\.+/,n=/\.+$/,r=/[<>:"/\\|?*\u0000-\u001F\u0080-\u009F]+/g;function i(){return r}function a(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}function o(r,o=`_`){if(typeof r!=`string`)throw TypeError(`Expected a string`);if(i().test(o))throw Error(`Replacement string cannot contain reserved filename characters`);let s=`(${e.escapeRegExp(o)})+`;return r=r.replace(i(),o).replace(t,o).replace(n,``).replace(new RegExp(s,`gm`),o).trim(),r=a().test(r)?r+o:r,r.slice(0,100)}exports.toValidFilename=o;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_data_regexp = require('./regexp.cjs');
3
+
4
+ //#region src/common/data/path.ts
5
+ const MAX_FILENAME_LENGTH = 100;
6
+ const reRelativePath = /^\.+/;
7
+ const reTrailingPeriods = /\.+$/;
8
+ const reFilenameIllegal = /[<>:"/\\|?*\u0000-\u001F\u0080-\u009F]+/g;
9
+ function filenameReservedRegex() {
10
+ return reFilenameIllegal;
11
+ }
12
+ function windowsReservedNameRegex() {
13
+ return /^(con|prn|aux|nul|com\d|lpt\d)$/i;
14
+ }
15
+ /** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */
16
+ function toValidFilename(string, replacement = "_") {
17
+ if (typeof string !== "string") throw new TypeError("Expected a string");
18
+ if (filenameReservedRegex().test(replacement)) throw new Error("Replacement string cannot contain reserved filename characters");
19
+ const reReplacement = `(${require_common_data_regexp.escapeRegExp(replacement)})+`;
20
+ string = string.replace(filenameReservedRegex(), replacement).replace(reRelativePath, replacement).replace(reTrailingPeriods, "").replace(new RegExp(reReplacement, "gm"), replacement).trim();
21
+ string = windowsReservedNameRegex().test(string) ? string + replacement : string;
22
+ return string.slice(0, MAX_FILENAME_LENGTH);
23
+ }
24
+
25
+ //#endregion
26
+ exports.toValidFilename = toValidFilename;
2
27
  //# sourceMappingURL=path.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.cjs","names":["escapeRegExp"],"sources":["../../../src/common/data/path.ts"],"sourcesContent":["// https://github.com/sindresorhus/filenamify/blob/main/filenamify.js\n/* eslint-disable no-control-regex */\n\nimport { escapeRegExp } from './regexp'\n\nconst MAX_FILENAME_LENGTH = 100\n\n// const reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g\nconst reRelativePath = /^\\.+/\nconst reTrailingPeriods = /\\.+$/\nconst reFilenameIllegal = /[<>:\"/\\\\|?*\\u0000-\\u001F\\u0080-\\u009F]+/g // https://superuser.com/questions/358855/what-characters-are-safe-in-cross-platform-file-names-for-linux-windows-and-os/358861#358861\n\nfunction filenameReservedRegex() {\n return reFilenameIllegal // /[<>:\"/\\\\|?*\\u0000-\\u001F]/g\n}\n\nfunction windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i\n}\n\n/** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */\nexport function toValidFilename(string: string, replacement = '_'): string | never {\n if (typeof string !== 'string')\n throw new TypeError('Expected a string')\n\n if (filenameReservedRegex().test(replacement))\n throw new Error('Replacement string cannot contain reserved filename characters')\n\n const reReplacement = `(${escapeRegExp(replacement)})+`\n\n string = string\n .replace(filenameReservedRegex(), replacement)\n .replace(reRelativePath, replacement)\n .replace(reTrailingPeriods, '')\n .replace(new RegExp(reReplacement, 'gm'), replacement) // collapse\n .trim()\n\n string = windowsReservedNameRegex().test(string) ? string + replacement : string\n\n return string.slice(0, MAX_FILENAME_LENGTH)\n}\n"],"mappings":"mGAQM,EAAiB,OACjB,EAAoB,OACpB,EAAoB,2CAE1B,SAAS,GAAwB,CAC/B,OAAO,EAGT,SAAS,GAA2B,CAClC,MAAO,mCAIT,SAAgB,EAAgB,EAAgB,EAAc,IAAqB,CACjF,GAAI,OAAO,GAAW,SACpB,MAAU,UAAU,oBAAoB,CAE1C,GAAI,GAAuB,CAAC,KAAK,EAAY,CAC3C,MAAU,MAAM,iEAAiE,CAEnF,IAAM,EAAgB,IAAIA,EAAAA,aAAa,EAAY,CAAC,IAWpD,MATA,GAAS,EACN,QAAQ,GAAuB,CAAE,EAAY,CAC7C,QAAQ,EAAgB,EAAY,CACpC,QAAQ,EAAmB,GAAG,CAC9B,QAAQ,IAAI,OAAO,EAAe,KAAK,CAAE,EAAY,CACrD,MAAM,CAET,EAAS,GAA0B,CAAC,KAAK,EAAO,CAAG,EAAS,EAAc,EAEnE,EAAO,MAAM,EAAG,IAAoB"}
1
+ {"version":3,"file":"path.cjs","names":["escapeRegExp"],"sources":["../../../src/common/data/path.ts"],"sourcesContent":["// https://github.com/sindresorhus/filenamify/blob/main/filenamify.js\n/* eslint-disable no-control-regex */\n\nimport { escapeRegExp } from './regexp'\n\nconst MAX_FILENAME_LENGTH = 100\n\n// const reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g\nconst reRelativePath = /^\\.+/\nconst reTrailingPeriods = /\\.+$/\nconst reFilenameIllegal = /[<>:\"/\\\\|?*\\u0000-\\u001F\\u0080-\\u009F]+/g // https://superuser.com/questions/358855/what-characters-are-safe-in-cross-platform-file-names-for-linux-windows-and-os/358861#358861\n\nfunction filenameReservedRegex() {\n return reFilenameIllegal // /[<>:\"/\\\\|?*\\u0000-\\u001F]/g\n}\n\nfunction windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i\n}\n\n/** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */\nexport function toValidFilename(string: string, replacement = '_'): string | never {\n if (typeof string !== 'string')\n throw new TypeError('Expected a string')\n\n if (filenameReservedRegex().test(replacement))\n throw new Error('Replacement string cannot contain reserved filename characters')\n\n const reReplacement = `(${escapeRegExp(replacement)})+`\n\n string = string\n .replace(filenameReservedRegex(), replacement)\n .replace(reRelativePath, replacement)\n .replace(reTrailingPeriods, '')\n .replace(new RegExp(reReplacement, 'gm'), replacement) // collapse\n .trim()\n\n string = windowsReservedNameRegex().test(string) ? string + replacement : string\n\n return string.slice(0, MAX_FILENAME_LENGTH)\n}\n"],"mappings":";;;;AAKA,MAAM,sBAAsB;AAG5B,MAAM,iBAAiB;AACvB,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAS,wBAAwB;AAC/B,QAAO;;AAGT,SAAS,2BAA2B;AAClC,QAAO;;;AAIT,SAAgB,gBAAgB,QAAgB,cAAc,KAAqB;AACjF,KAAI,OAAO,WAAW,SACpB,OAAM,IAAI,UAAU,oBAAoB;AAE1C,KAAI,uBAAuB,CAAC,KAAK,YAAY,CAC3C,OAAM,IAAI,MAAM,iEAAiE;CAEnF,MAAM,gBAAgB,IAAIA,wCAAa,YAAY,CAAC;AAEpD,UAAS,OACN,QAAQ,uBAAuB,EAAE,YAAY,CAC7C,QAAQ,gBAAgB,YAAY,CACpC,QAAQ,mBAAmB,GAAG,CAC9B,QAAQ,IAAI,OAAO,eAAe,KAAK,EAAE,YAAY,CACrD,MAAM;AAET,UAAS,0BAA0B,CAAC,KAAK,OAAO,GAAG,SAAS,cAAc;AAE1E,QAAO,OAAO,MAAM,GAAG,oBAAoB"}
@@ -1,2 +1,26 @@
1
- import{escapeRegExp as e}from"./regexp.mjs";const t=/^\.+/,n=/\.+$/,r=/[<>:"/\\|?*\u0000-\u001F\u0080-\u009F]+/g;function i(){return r}function a(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}function o(r,o=`_`){if(typeof r!=`string`)throw TypeError(`Expected a string`);if(i().test(o))throw Error(`Replacement string cannot contain reserved filename characters`);let s=`(${e(o)})+`;return r=r.replace(i(),o).replace(t,o).replace(n,``).replace(new RegExp(s,`gm`),o).trim(),r=a().test(r)?r+o:r,r.slice(0,100)}export{o as toValidFilename};
1
+ import { escapeRegExp } from "./regexp.mjs";
2
+
3
+ //#region src/common/data/path.ts
4
+ const MAX_FILENAME_LENGTH = 100;
5
+ const reRelativePath = /^\.+/;
6
+ const reTrailingPeriods = /\.+$/;
7
+ const reFilenameIllegal = /[<>:"/\\|?*\u0000-\u001F\u0080-\u009F]+/g;
8
+ function filenameReservedRegex() {
9
+ return reFilenameIllegal;
10
+ }
11
+ function windowsReservedNameRegex() {
12
+ return /^(con|prn|aux|nul|com\d|lpt\d)$/i;
13
+ }
14
+ /** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */
15
+ function toValidFilename(string, replacement = "_") {
16
+ if (typeof string !== "string") throw new TypeError("Expected a string");
17
+ if (filenameReservedRegex().test(replacement)) throw new Error("Replacement string cannot contain reserved filename characters");
18
+ const reReplacement = `(${escapeRegExp(replacement)})+`;
19
+ string = string.replace(filenameReservedRegex(), replacement).replace(reRelativePath, replacement).replace(reTrailingPeriods, "").replace(new RegExp(reReplacement, "gm"), replacement).trim();
20
+ string = windowsReservedNameRegex().test(string) ? string + replacement : string;
21
+ return string.slice(0, MAX_FILENAME_LENGTH);
22
+ }
23
+
24
+ //#endregion
25
+ export { toValidFilename };
2
26
  //# sourceMappingURL=path.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.mjs","names":[],"sources":["../../../src/common/data/path.ts"],"sourcesContent":["// https://github.com/sindresorhus/filenamify/blob/main/filenamify.js\n/* eslint-disable no-control-regex */\n\nimport { escapeRegExp } from './regexp'\n\nconst MAX_FILENAME_LENGTH = 100\n\n// const reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g\nconst reRelativePath = /^\\.+/\nconst reTrailingPeriods = /\\.+$/\nconst reFilenameIllegal = /[<>:\"/\\\\|?*\\u0000-\\u001F\\u0080-\\u009F]+/g // https://superuser.com/questions/358855/what-characters-are-safe-in-cross-platform-file-names-for-linux-windows-and-os/358861#358861\n\nfunction filenameReservedRegex() {\n return reFilenameIllegal // /[<>:\"/\\\\|?*\\u0000-\\u001F]/g\n}\n\nfunction windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i\n}\n\n/** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */\nexport function toValidFilename(string: string, replacement = '_'): string | never {\n if (typeof string !== 'string')\n throw new TypeError('Expected a string')\n\n if (filenameReservedRegex().test(replacement))\n throw new Error('Replacement string cannot contain reserved filename characters')\n\n const reReplacement = `(${escapeRegExp(replacement)})+`\n\n string = string\n .replace(filenameReservedRegex(), replacement)\n .replace(reRelativePath, replacement)\n .replace(reTrailingPeriods, '')\n .replace(new RegExp(reReplacement, 'gm'), replacement) // collapse\n .trim()\n\n string = windowsReservedNameRegex().test(string) ? string + replacement : string\n\n return string.slice(0, MAX_FILENAME_LENGTH)\n}\n"],"mappings":"4CAKA,MAGM,EAAiB,OACjB,EAAoB,OACpB,EAAoB,2CAE1B,SAAS,GAAwB,CAC/B,OAAO,EAGT,SAAS,GAA2B,CAClC,MAAO,mCAIT,SAAgB,EAAgB,EAAgB,EAAc,IAAqB,CACjF,GAAI,OAAO,GAAW,SACpB,MAAU,UAAU,oBAAoB,CAE1C,GAAI,GAAuB,CAAC,KAAK,EAAY,CAC3C,MAAU,MAAM,iEAAiE,CAEnF,IAAM,EAAgB,IAAI,EAAa,EAAY,CAAC,IAWpD,MATA,GAAS,EACN,QAAQ,GAAuB,CAAE,EAAY,CAC7C,QAAQ,EAAgB,EAAY,CACpC,QAAQ,EAAmB,GAAG,CAC9B,QAAQ,IAAI,OAAO,EAAe,KAAK,CAAE,EAAY,CACrD,MAAM,CAET,EAAS,GAA0B,CAAC,KAAK,EAAO,CAAG,EAAS,EAAc,EAEnE,EAAO,MAAM,EAAG,IAAoB"}
1
+ {"version":3,"file":"path.mjs","names":[],"sources":["../../../src/common/data/path.ts"],"sourcesContent":["// https://github.com/sindresorhus/filenamify/blob/main/filenamify.js\n/* eslint-disable no-control-regex */\n\nimport { escapeRegExp } from './regexp'\n\nconst MAX_FILENAME_LENGTH = 100\n\n// const reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g\nconst reRelativePath = /^\\.+/\nconst reTrailingPeriods = /\\.+$/\nconst reFilenameIllegal = /[<>:\"/\\\\|?*\\u0000-\\u001F\\u0080-\\u009F]+/g // https://superuser.com/questions/358855/what-characters-are-safe-in-cross-platform-file-names-for-linux-windows-and-os/358861#358861\n\nfunction filenameReservedRegex() {\n return reFilenameIllegal // /[<>:\"/\\\\|?*\\u0000-\\u001F]/g\n}\n\nfunction windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i\n}\n\n/** Ensure a valid file name. Unsupported characters get a `replacement`, default: `_` */\nexport function toValidFilename(string: string, replacement = '_'): string | never {\n if (typeof string !== 'string')\n throw new TypeError('Expected a string')\n\n if (filenameReservedRegex().test(replacement))\n throw new Error('Replacement string cannot contain reserved filename characters')\n\n const reReplacement = `(${escapeRegExp(replacement)})+`\n\n string = string\n .replace(filenameReservedRegex(), replacement)\n .replace(reRelativePath, replacement)\n .replace(reTrailingPeriods, '')\n .replace(new RegExp(reReplacement, 'gm'), replacement) // collapse\n .trim()\n\n string = windowsReservedNameRegex().test(string) ? string + replacement : string\n\n return string.slice(0, MAX_FILENAME_LENGTH)\n}\n"],"mappings":";;;AAKA,MAAM,sBAAsB;AAG5B,MAAM,iBAAiB;AACvB,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAS,wBAAwB;AAC/B,QAAO;;AAGT,SAAS,2BAA2B;AAClC,QAAO;;;AAIT,SAAgB,gBAAgB,QAAgB,cAAc,KAAqB;AACjF,KAAI,OAAO,WAAW,SACpB,OAAM,IAAI,UAAU,oBAAoB;AAE1C,KAAI,uBAAuB,CAAC,KAAK,YAAY,CAC3C,OAAM,IAAI,MAAM,iEAAiE;CAEnF,MAAM,gBAAgB,IAAI,aAAa,YAAY,CAAC;AAEpD,UAAS,OACN,QAAQ,uBAAuB,EAAE,YAAY,CAC7C,QAAQ,gBAAgB,YAAY,CACpC,QAAQ,mBAAmB,GAAG,CAC9B,QAAQ,IAAI,OAAO,eAAe,KAAK,EAAE,YAAY,CACrD,MAAM;AAET,UAAS,0BAA0B,CAAC,KAAK,OAAO,GAAG,SAAS,cAAc;AAE1E,QAAO,OAAO,MAAM,GAAG,oBAAoB"}
@@ -1,2 +1,13 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=/[\\\-[\]/{}()*+?.^$|]/g;function t(t){return t?t instanceof RegExp?t.source:t.replace(e,`\\$&`):``}exports.escapeRegExp=t;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/common/data/regexp.ts
4
+ const rxEscape = /[\\\-[\]/{}()*+?.^$|]/g;
5
+ function escapeRegExp(value) {
6
+ if (!value) return "";
7
+ if (value instanceof RegExp) return value.source;
8
+ return value.replace(rxEscape, "\\$&");
9
+ }
10
+
11
+ //#endregion
12
+ exports.escapeRegExp = escapeRegExp;
2
13
  //# sourceMappingURL=regexp.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.cjs","names":[],"sources":["../../../src/common/data/regexp.ts"],"sourcesContent":["const rxEscape = /[\\\\\\-[\\]/{}()*+?.^$|]/g // Finds: \\ - [ ] / { } ( ) * + ? . ^ $ |\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value)\n return ''\n if (value instanceof RegExp)\n return value.source\n return value.replace(rxEscape, '\\\\$&')\n}\n"],"mappings":"mEAAA,MAAM,EAAW,yBAEjB,SAAgB,EAAa,EAAgC,CAK3D,OAJK,EAED,aAAiB,OACZ,EAAM,OACR,EAAM,QAAQ,EAAU,OAAO,CAH7B"}
1
+ {"version":3,"file":"regexp.cjs","names":[],"sources":["../../../src/common/data/regexp.ts"],"sourcesContent":["const rxEscape = /[\\\\\\-[\\]/{}()*+?.^$|]/g // Finds: \\ - [ ] / { } ( ) * + ? . ^ $ |\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value)\n return ''\n if (value instanceof RegExp)\n return value.source\n return value.replace(rxEscape, '\\\\$&')\n}\n"],"mappings":";;;AAAA,MAAM,WAAW;AAEjB,SAAgB,aAAa,OAAgC;AAC3D,KAAI,CAAC,MACH,QAAO;AACT,KAAI,iBAAiB,OACnB,QAAO,MAAM;AACf,QAAO,MAAM,QAAQ,UAAU,OAAO"}
@@ -1,2 +1,11 @@
1
- const e=/[\\\-[\]/{}()*+?.^$|]/g;function t(t){return t?t instanceof RegExp?t.source:t.replace(e,`\\$&`):``}export{t as escapeRegExp};
1
+ //#region src/common/data/regexp.ts
2
+ const rxEscape = /[\\\-[\]/{}()*+?.^$|]/g;
3
+ function escapeRegExp(value) {
4
+ if (!value) return "";
5
+ if (value instanceof RegExp) return value.source;
6
+ return value.replace(rxEscape, "\\$&");
7
+ }
8
+
9
+ //#endregion
10
+ export { escapeRegExp };
2
11
  //# sourceMappingURL=regexp.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.mjs","names":[],"sources":["../../../src/common/data/regexp.ts"],"sourcesContent":["const rxEscape = /[\\\\\\-[\\]/{}()*+?.^$|]/g // Finds: \\ - [ ] / { } ( ) * + ? . ^ $ |\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value)\n return ''\n if (value instanceof RegExp)\n return value.source\n return value.replace(rxEscape, '\\\\$&')\n}\n"],"mappings":"AAAA,MAAM,EAAW,yBAEjB,SAAgB,EAAa,EAAgC,CAK3D,OAJK,EAED,aAAiB,OACZ,EAAM,OACR,EAAM,QAAQ,EAAU,OAAO,CAH7B"}
1
+ {"version":3,"file":"regexp.mjs","names":[],"sources":["../../../src/common/data/regexp.ts"],"sourcesContent":["const rxEscape = /[\\\\\\-[\\]/{}()*+?.^$|]/g // Finds: \\ - [ ] / { } ( ) * + ? . ^ $ |\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value)\n return ''\n if (value instanceof RegExp)\n return value.source\n return value.replace(rxEscape, '\\\\$&')\n}\n"],"mappings":";AAAA,MAAM,WAAW;AAEjB,SAAgB,aAAa,OAAgC;AAC3D,KAAI,CAAC,MACH,QAAO;AACT,KAAI,iBAAiB,OACnB,QAAO,MAAM;AACf,QAAO,MAAM,QAAQ,UAAU,OAAO"}
@@ -1,2 +1,108 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./math.cjs`);function t(e){return Math.abs(e)%1==.5}function n(e){return e%2==0}const r=e=>Math.ceil(e),i=e=>Math.floor(e),a=e=>Math.round(e),o=e=>{let r=Math.round(e);return t(e)&&n(r)?r-1:r},s=e=>t(e)?Math.sign(e)*Math.ceil(Math.abs(e)):Math.round(e),c=e=>t(e)?Math.floor(e):Math.round(e),l=e=>{let r=Math.round(e);return t(e)?n(r)?r:r-1:r},u=e=>t(e)?Math.sign(e)*Math.floor(Math.abs(e)):Math.round(e);function d(t,n=100,r=0){let i=[...t],a=t.length,o=[];o.fill(0,a);let s=e.sum(i);if(s!==0){let e=10**r,t=n*e,c=0;for(let t=a-1;t>=0;t--)i[t]=n*i[t]/s,c+=o[t]=Math.round(i[t]*e);if(c!==t){let n=c-t,r=Math.abs(n),s=i.map((t,n)=>Math.abs(o[n]-i[n]*e));for(;r>0;){let e=0,n=s[0];for(let r=1;r<a;r++)if(n<s[r]){if(c>t&&o[r]-1<0)continue;e=r,n=s[r]}c>t?--o[e]:o[e]+=1,--s[e],r--}}if(e>1)return o.map(t=>+(t/e).toFixed(r))}return o}function f(e,t,n=100,r=0){return d(e.map(e=>e[t]),n,r).map((n,r)=>({...e[r],[t]:n}))}exports.isEven=n,exports.isHalf=t,exports.roundArrayOfNumbersToMatchSum=d,exports.roundArrayOfObjectsToMatchSum=f,exports.roundDown=i,exports.roundHalfAwayFromZero=s,exports.roundHalfDown=c,exports.roundHalfEven=l,exports.roundHalfOdd=o,exports.roundHalfTowardsZero=u,exports.roundHalfUp=a,exports.roundUp=r;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_data_math = require('./math.cjs');
3
+
4
+ //#region src/common/data/rounding.ts
5
+ function isHalf(value) {
6
+ return Math.abs(value) % 1 === .5;
7
+ }
8
+ function isEven(value) {
9
+ return value % 2 === 0;
10
+ }
11
+ const roundUp = (value) => Math.ceil(value);
12
+ const roundDown = (value) => Math.floor(value);
13
+ const roundHalfUp = (value) => Math.round(value);
14
+ /**
15
+ * Round a number with half values to nearest odd integer.
16
+ */
17
+ const roundHalfOdd = (value) => {
18
+ const rounded = Math.round(value);
19
+ if (!isHalf(value)) return rounded;
20
+ return isEven(rounded) ? rounded - 1 : rounded;
21
+ };
22
+ /**
23
+ * Round a number with half values to nearest integer farthest from zero.
24
+ */
25
+ const roundHalfAwayFromZero = (value) => {
26
+ return isHalf(value) ? Math.sign(value) * Math.ceil(Math.abs(value)) : Math.round(value);
27
+ };
28
+ /**
29
+ * Round a number with half values down.
30
+ */
31
+ const roundHalfDown = (value) => isHalf(value) ? Math.floor(value) : Math.round(value);
32
+ /**
33
+ * Round a number with half values to nearest even integer.
34
+ * https://wiki.c2.com/?BankersRounding
35
+ */
36
+ const roundHalfEven = (value) => {
37
+ const rounded = Math.round(value);
38
+ if (!isHalf(value)) return rounded;
39
+ return isEven(rounded) ? rounded : rounded - 1;
40
+ };
41
+ /**
42
+ * Round a number with half values to nearest integer closest to zero.
43
+ */
44
+ const roundHalfTowardsZero = (value) => isHalf(value) ? Math.sign(value) * Math.floor(Math.abs(value)) : Math.round(value);
45
+ /**
46
+ * This is useful for percentages that should sum up to 100.
47
+ * But can also be fine tuned.
48
+ *
49
+ * Original from https://github.com/super-ienien/percent-round
50
+ */
51
+ function roundArrayOfNumbersToMatchSum(ipt, max = 100, decimalPlaces = 0) {
52
+ const iptPercents = [...ipt];
53
+ const length = ipt.length;
54
+ const out = [];
55
+ out.fill(0, length);
56
+ const total = require_common_data_math.sum(iptPercents);
57
+ if (total !== 0) {
58
+ const powDecimalPlaces = 10 ** decimalPlaces;
59
+ const pow100 = max * powDecimalPlaces;
60
+ let check100 = 0;
61
+ for (let i = length - 1; i >= 0; i--) {
62
+ iptPercents[i] = max * iptPercents[i] / total;
63
+ check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces);
64
+ }
65
+ if (check100 !== pow100) {
66
+ const totalDiff = check100 - pow100;
67
+ const roundGrain = 1;
68
+ let grainCount = Math.abs(totalDiff);
69
+ const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces));
70
+ while (grainCount > 0) {
71
+ let idx = 0;
72
+ let maxDiff = diffs[0];
73
+ for (let i = 1; i < length; i++) if (maxDiff < diffs[i]) {
74
+ if (check100 > pow100 && out[i] - roundGrain < 0) continue;
75
+ idx = i;
76
+ maxDiff = diffs[i];
77
+ }
78
+ if (check100 > pow100) out[idx] -= roundGrain;
79
+ else out[idx] += roundGrain;
80
+ diffs[idx] -= roundGrain;
81
+ grainCount--;
82
+ }
83
+ }
84
+ if (powDecimalPlaces > 1) return out.map((n) => +(n / powDecimalPlaces).toFixed(decimalPlaces));
85
+ }
86
+ return out;
87
+ }
88
+ function roundArrayOfObjectsToMatchSum(arr, name, max = 100, decimalPlaces = 0) {
89
+ return roundArrayOfNumbersToMatchSum(arr.map((o) => o[name]), max, decimalPlaces).map((o, i) => ({
90
+ ...arr[i],
91
+ [name]: o
92
+ }));
93
+ }
94
+
95
+ //#endregion
96
+ exports.isEven = isEven;
97
+ exports.isHalf = isHalf;
98
+ exports.roundArrayOfNumbersToMatchSum = roundArrayOfNumbersToMatchSum;
99
+ exports.roundArrayOfObjectsToMatchSum = roundArrayOfObjectsToMatchSum;
100
+ exports.roundDown = roundDown;
101
+ exports.roundHalfAwayFromZero = roundHalfAwayFromZero;
102
+ exports.roundHalfDown = roundHalfDown;
103
+ exports.roundHalfEven = roundHalfEven;
104
+ exports.roundHalfOdd = roundHalfOdd;
105
+ exports.roundHalfTowardsZero = roundHalfTowardsZero;
106
+ exports.roundHalfUp = roundHalfUp;
107
+ exports.roundUp = roundUp;
2
108
  //# sourceMappingURL=rounding.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rounding.cjs","names":["sum"],"sources":["../../../src/common/data/rounding.ts"],"sourcesContent":["// From https://v2.dinerojs.com/docs/api/formatting/to-unit MIT\n\nimport { sum } from './math'\n\nexport type RoundingMode = (value: number) => number\n\nexport function isHalf(value: number): boolean {\n return Math.abs(value) % 1 === 0.5\n}\nexport function isEven(value: number): boolean {\n return value % 2 === 0\n}\n\nexport const roundUp: RoundingMode = value => Math.ceil(value)\nexport const roundDown: RoundingMode = value => Math.floor(value)\nexport const roundHalfUp: RoundingMode = value => Math.round(value)\n\n/**\n * Round a number with half values to nearest odd integer.\n */\nexport const roundHalfOdd: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded - 1 : rounded\n}\n\n/**\n * Round a number with half values to nearest integer farthest from zero.\n */\nexport const roundHalfAwayFromZero: RoundingMode = (value) => {\n return isHalf(value)\n ? Math.sign(value) * Math.ceil(Math.abs(value))\n : Math.round(value)\n}\n\n/**\n * Round a number with half values down.\n */\nexport const roundHalfDown: RoundingMode = value =>\n isHalf(value) ? Math.floor(value) : Math.round(value)\n\n/**\n * Round a number with half values to nearest even integer.\n * https://wiki.c2.com/?BankersRounding\n */\nexport const roundHalfEven: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded : rounded - 1\n}\n\n/**\n * Round a number with half values to nearest integer closest to zero.\n */\nexport const roundHalfTowardsZero: RoundingMode = value =>\n isHalf(value)\n ? Math.sign(value) * Math.floor(Math.abs(value))\n : Math.round(value)\n\n/**\n * This is useful for percentages that should sum up to 100.\n * But can also be fine tuned.\n *\n * Original from https://github.com/super-ienien/percent-round\n */\nexport function roundArrayOfNumbersToMatchSum(ipt: number[], max = 100, decimalPlaces = 0) {\n const iptPercents: number[] = [...ipt]\n const length = ipt.length\n const out: number[] = []\n out.fill(0, length)\n\n const total = sum(iptPercents)\n\n if (total !== 0) {\n const powDecimalPlaces = 10 ** decimalPlaces\n const pow100 = max * powDecimalPlaces\n let check100 = 0\n for (let i = length - 1; i >= 0; i--) {\n iptPercents[i] = max * iptPercents[i] / total\n check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces)\n }\n\n if (check100 !== pow100) {\n const totalDiff = (check100 - pow100)\n const roundGrain = 1\n let grainCount = Math.abs(totalDiff)\n const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces))\n\n while (grainCount > 0) {\n let idx = 0\n let maxDiff = diffs[0]\n for (let i = 1; i < length; i++) {\n if (maxDiff < diffs[i]) {\n // avoid negative result\n if (check100 > pow100 && out[i] - roundGrain < 0)\n continue\n idx = i\n maxDiff = diffs[i]\n }\n }\n if (check100 > pow100)\n out[idx] -= roundGrain\n else\n out[idx] += roundGrain\n\n diffs[idx] -= roundGrain\n grainCount--\n }\n }\n\n if (powDecimalPlaces > 1)\n return out.map(n => +((n / powDecimalPlaces).toFixed(decimalPlaces)))\n }\n\n return out\n}\n\nexport function roundArrayOfObjectsToMatchSum<T extends Record<string, any>>(arr: T[], name: string, max = 100, decimalPlaces = 0): T[] {\n return roundArrayOfNumbersToMatchSum(arr.map(o => o[name]), max, decimalPlaces)\n .map((o, i) => ({\n ...arr[i],\n [name]: o,\n }))\n}\n"],"mappings":"iGAMA,SAAgB,EAAO,EAAwB,CAC7C,OAAO,KAAK,IAAI,EAAM,CAAG,GAAM,GAEjC,SAAgB,EAAO,EAAwB,CAC7C,OAAO,EAAQ,GAAM,EAGvB,MAAa,EAAwB,GAAS,KAAK,KAAK,EAAM,CACjD,EAA0B,GAAS,KAAK,MAAM,EAAM,CACpD,EAA4B,GAAS,KAAK,MAAM,EAAM,CAKtD,EAA8B,GAAU,CACnD,IAAM,EAAU,KAAK,MAAM,EAAM,CAIjC,OAHK,EAAO,EAAM,EAGX,EAAO,EAAQ,CAAG,EAAU,EAAI,GAM5B,EAAuC,GAC3C,EAAO,EAAM,CAChB,KAAK,KAAK,EAAM,CAAG,KAAK,KAAK,KAAK,IAAI,EAAM,CAAC,CAC7C,KAAK,MAAM,EAAM,CAMV,EAA8B,GACzC,EAAO,EAAM,CAAG,KAAK,MAAM,EAAM,CAAG,KAAK,MAAM,EAAM,CAM1C,EAA+B,GAAU,CACpD,IAAM,EAAU,KAAK,MAAM,EAAM,CAIjC,OAHK,EAAO,EAAM,CAGX,EAAO,EAAQ,CAAG,EAAU,EAAU,EAFpC,GAQE,EAAqC,GAChD,EAAO,EAAM,CACT,KAAK,KAAK,EAAM,CAAG,KAAK,MAAM,KAAK,IAAI,EAAM,CAAC,CAC9C,KAAK,MAAM,EAAM,CAQvB,SAAgB,EAA8B,EAAe,EAAM,IAAK,EAAgB,EAAG,CACzF,IAAM,EAAwB,CAAC,GAAG,EAAI,CAChC,EAAS,EAAI,OACb,EAAgB,EAAE,CACxB,EAAI,KAAK,EAAG,EAAO,CAEnB,IAAM,EAAQA,EAAAA,IAAI,EAAY,CAE9B,GAAI,IAAU,EAAG,CACf,IAAM,EAAmB,IAAM,EACzB,EAAS,EAAM,EACjB,EAAW,EACf,IAAK,IAAI,EAAI,EAAS,EAAG,GAAK,EAAG,IAC/B,EAAY,GAAK,EAAM,EAAY,GAAK,EACxC,GAAY,EAAI,GAAK,KAAK,MAAM,EAAY,GAAK,EAAiB,CAGpE,GAAI,IAAa,EAAQ,CACvB,IAAM,EAAa,EAAW,EAE1B,EAAa,KAAK,IAAI,EAAU,CAC9B,EAAQ,EAAY,KAAK,EAAG,IAAM,KAAK,IAAI,EAAI,GAAK,EAAY,GAAK,EAAiB,CAAC,CAE7F,KAAO,EAAa,GAAG,CACrB,IAAI,EAAM,EACN,EAAU,EAAM,GACpB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,GAAI,EAAU,EAAM,GAAI,CAEtB,GAAI,EAAW,GAAU,EAAI,GAAK,EAAa,EAC7C,SACF,EAAM,EACN,EAAU,EAAM,GAGhB,EAAW,EACb,IAAI,GAEJ,EAAI,IAAQ,EAEd,IAAM,GACN,KAIJ,GAAI,EAAmB,EACrB,OAAO,EAAI,IAAI,GAAK,EAAG,EAAI,GAAkB,QAAQ,EAAc,CAAE,CAGzE,OAAO,EAGT,SAAgB,EAA6D,EAAU,EAAc,EAAM,IAAK,EAAgB,EAAQ,CACtI,OAAO,EAA8B,EAAI,IAAI,GAAK,EAAE,GAAM,CAAE,EAAK,EAAc,CAC5E,KAAK,EAAG,KAAO,CACd,GAAG,EAAI,IACN,GAAO,EACT,EAAE"}
1
+ {"version":3,"file":"rounding.cjs","names":["sum"],"sources":["../../../src/common/data/rounding.ts"],"sourcesContent":["// From https://v2.dinerojs.com/docs/api/formatting/to-unit MIT\n\nimport { sum } from './math'\n\nexport type RoundingMode = (value: number) => number\n\nexport function isHalf(value: number): boolean {\n return Math.abs(value) % 1 === 0.5\n}\nexport function isEven(value: number): boolean {\n return value % 2 === 0\n}\n\nexport const roundUp: RoundingMode = value => Math.ceil(value)\nexport const roundDown: RoundingMode = value => Math.floor(value)\nexport const roundHalfUp: RoundingMode = value => Math.round(value)\n\n/**\n * Round a number with half values to nearest odd integer.\n */\nexport const roundHalfOdd: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded - 1 : rounded\n}\n\n/**\n * Round a number with half values to nearest integer farthest from zero.\n */\nexport const roundHalfAwayFromZero: RoundingMode = (value) => {\n return isHalf(value)\n ? Math.sign(value) * Math.ceil(Math.abs(value))\n : Math.round(value)\n}\n\n/**\n * Round a number with half values down.\n */\nexport const roundHalfDown: RoundingMode = value =>\n isHalf(value) ? Math.floor(value) : Math.round(value)\n\n/**\n * Round a number with half values to nearest even integer.\n * https://wiki.c2.com/?BankersRounding\n */\nexport const roundHalfEven: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded : rounded - 1\n}\n\n/**\n * Round a number with half values to nearest integer closest to zero.\n */\nexport const roundHalfTowardsZero: RoundingMode = value =>\n isHalf(value)\n ? Math.sign(value) * Math.floor(Math.abs(value))\n : Math.round(value)\n\n/**\n * This is useful for percentages that should sum up to 100.\n * But can also be fine tuned.\n *\n * Original from https://github.com/super-ienien/percent-round\n */\nexport function roundArrayOfNumbersToMatchSum(ipt: number[], max = 100, decimalPlaces = 0) {\n const iptPercents: number[] = [...ipt]\n const length = ipt.length\n const out: number[] = []\n out.fill(0, length)\n\n const total = sum(iptPercents)\n\n if (total !== 0) {\n const powDecimalPlaces = 10 ** decimalPlaces\n const pow100 = max * powDecimalPlaces\n let check100 = 0\n for (let i = length - 1; i >= 0; i--) {\n iptPercents[i] = max * iptPercents[i] / total\n check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces)\n }\n\n if (check100 !== pow100) {\n const totalDiff = (check100 - pow100)\n const roundGrain = 1\n let grainCount = Math.abs(totalDiff)\n const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces))\n\n while (grainCount > 0) {\n let idx = 0\n let maxDiff = diffs[0]\n for (let i = 1; i < length; i++) {\n if (maxDiff < diffs[i]) {\n // avoid negative result\n if (check100 > pow100 && out[i] - roundGrain < 0)\n continue\n idx = i\n maxDiff = diffs[i]\n }\n }\n if (check100 > pow100)\n out[idx] -= roundGrain\n else\n out[idx] += roundGrain\n\n diffs[idx] -= roundGrain\n grainCount--\n }\n }\n\n if (powDecimalPlaces > 1)\n return out.map(n => +((n / powDecimalPlaces).toFixed(decimalPlaces)))\n }\n\n return out\n}\n\nexport function roundArrayOfObjectsToMatchSum<T extends Record<string, any>>(arr: T[], name: string, max = 100, decimalPlaces = 0): T[] {\n return roundArrayOfNumbersToMatchSum(arr.map(o => o[name]), max, decimalPlaces)\n .map((o, i) => ({\n ...arr[i],\n [name]: o,\n }))\n}\n"],"mappings":";;;;AAMA,SAAgB,OAAO,OAAwB;AAC7C,QAAO,KAAK,IAAI,MAAM,GAAG,MAAM;;AAEjC,SAAgB,OAAO,OAAwB;AAC7C,QAAO,QAAQ,MAAM;;AAGvB,MAAa,WAAwB,UAAS,KAAK,KAAK,MAAM;AAC9D,MAAa,aAA0B,UAAS,KAAK,MAAM,MAAM;AACjE,MAAa,eAA4B,UAAS,KAAK,MAAM,MAAM;;;;AAKnE,MAAa,gBAA8B,UAAU;CACnD,MAAM,UAAU,KAAK,MAAM,MAAM;AACjC,KAAI,CAAC,OAAO,MAAM,CAChB,QAAO;AAET,QAAO,OAAO,QAAQ,GAAG,UAAU,IAAI;;;;;AAMzC,MAAa,yBAAuC,UAAU;AAC5D,QAAO,OAAO,MAAM,GAChB,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,GAC7C,KAAK,MAAM,MAAM;;;;;AAMvB,MAAa,iBAA8B,UACzC,OAAO,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM,MAAM;;;;;AAMvD,MAAa,iBAA+B,UAAU;CACpD,MAAM,UAAU,KAAK,MAAM,MAAM;AACjC,KAAI,CAAC,OAAO,MAAM,CAChB,QAAO;AAET,QAAO,OAAO,QAAQ,GAAG,UAAU,UAAU;;;;;AAM/C,MAAa,wBAAqC,UAChD,OAAO,MAAM,GACT,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,GAC9C,KAAK,MAAM,MAAM;;;;;;;AAQvB,SAAgB,8BAA8B,KAAe,MAAM,KAAK,gBAAgB,GAAG;CACzF,MAAM,cAAwB,CAAC,GAAG,IAAI;CACtC,MAAM,SAAS,IAAI;CACnB,MAAM,MAAgB,EAAE;AACxB,KAAI,KAAK,GAAG,OAAO;CAEnB,MAAM,QAAQA,6BAAI,YAAY;AAE9B,KAAI,UAAU,GAAG;EACf,MAAM,mBAAmB,MAAM;EAC/B,MAAM,SAAS,MAAM;EACrB,IAAI,WAAW;AACf,OAAK,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,eAAY,KAAK,MAAM,YAAY,KAAK;AACxC,eAAY,IAAI,KAAK,KAAK,MAAM,YAAY,KAAK,iBAAiB;;AAGpE,MAAI,aAAa,QAAQ;GACvB,MAAM,YAAa,WAAW;GAC9B,MAAM,aAAa;GACnB,IAAI,aAAa,KAAK,IAAI,UAAU;GACpC,MAAM,QAAQ,YAAY,KAAK,GAAG,MAAM,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK,iBAAiB,CAAC;AAE7F,UAAO,aAAa,GAAG;IACrB,IAAI,MAAM;IACV,IAAI,UAAU,MAAM;AACpB,SAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,KAAI,UAAU,MAAM,IAAI;AAEtB,SAAI,WAAW,UAAU,IAAI,KAAK,aAAa,EAC7C;AACF,WAAM;AACN,eAAU,MAAM;;AAGpB,QAAI,WAAW,OACb,KAAI,QAAQ;QAEZ,KAAI,QAAQ;AAEd,UAAM,QAAQ;AACd;;;AAIJ,MAAI,mBAAmB,EACrB,QAAO,IAAI,KAAI,MAAK,EAAG,IAAI,kBAAkB,QAAQ,cAAc,CAAE;;AAGzE,QAAO;;AAGT,SAAgB,8BAA6D,KAAU,MAAc,MAAM,KAAK,gBAAgB,GAAQ;AACtI,QAAO,8BAA8B,IAAI,KAAI,MAAK,EAAE,MAAM,EAAE,KAAK,cAAc,CAC5E,KAAK,GAAG,OAAO;EACd,GAAG,IAAI;GACN,OAAO;EACT,EAAE"}
@@ -1,2 +1,96 @@
1
- import{sum as e}from"./math.mjs";function t(e){return Math.abs(e)%1==.5}function n(e){return e%2==0}const r=e=>Math.ceil(e),i=e=>Math.floor(e),a=e=>Math.round(e),o=e=>{let r=Math.round(e);return t(e)&&n(r)?r-1:r},s=e=>t(e)?Math.sign(e)*Math.ceil(Math.abs(e)):Math.round(e),c=e=>t(e)?Math.floor(e):Math.round(e),l=e=>{let r=Math.round(e);return t(e)?n(r)?r:r-1:r},u=e=>t(e)?Math.sign(e)*Math.floor(Math.abs(e)):Math.round(e);function d(t,n=100,r=0){let i=[...t],a=t.length,o=[];o.fill(0,a);let s=e(i);if(s!==0){let e=10**r,t=n*e,c=0;for(let t=a-1;t>=0;t--)i[t]=n*i[t]/s,c+=o[t]=Math.round(i[t]*e);if(c!==t){let n=c-t,r=Math.abs(n),s=i.map((t,n)=>Math.abs(o[n]-i[n]*e));for(;r>0;){let e=0,n=s[0];for(let r=1;r<a;r++)if(n<s[r]){if(c>t&&o[r]-1<0)continue;e=r,n=s[r]}c>t?--o[e]:o[e]+=1,--s[e],r--}}if(e>1)return o.map(t=>+(t/e).toFixed(r))}return o}function f(e,t,n=100,r=0){return d(e.map(e=>e[t]),n,r).map((n,r)=>({...e[r],[t]:n}))}export{n as isEven,t as isHalf,d as roundArrayOfNumbersToMatchSum,f as roundArrayOfObjectsToMatchSum,i as roundDown,s as roundHalfAwayFromZero,c as roundHalfDown,l as roundHalfEven,o as roundHalfOdd,u as roundHalfTowardsZero,a as roundHalfUp,r as roundUp};
1
+ import { sum } from "./math.mjs";
2
+
3
+ //#region src/common/data/rounding.ts
4
+ function isHalf(value) {
5
+ return Math.abs(value) % 1 === .5;
6
+ }
7
+ function isEven(value) {
8
+ return value % 2 === 0;
9
+ }
10
+ const roundUp = (value) => Math.ceil(value);
11
+ const roundDown = (value) => Math.floor(value);
12
+ const roundHalfUp = (value) => Math.round(value);
13
+ /**
14
+ * Round a number with half values to nearest odd integer.
15
+ */
16
+ const roundHalfOdd = (value) => {
17
+ const rounded = Math.round(value);
18
+ if (!isHalf(value)) return rounded;
19
+ return isEven(rounded) ? rounded - 1 : rounded;
20
+ };
21
+ /**
22
+ * Round a number with half values to nearest integer farthest from zero.
23
+ */
24
+ const roundHalfAwayFromZero = (value) => {
25
+ return isHalf(value) ? Math.sign(value) * Math.ceil(Math.abs(value)) : Math.round(value);
26
+ };
27
+ /**
28
+ * Round a number with half values down.
29
+ */
30
+ const roundHalfDown = (value) => isHalf(value) ? Math.floor(value) : Math.round(value);
31
+ /**
32
+ * Round a number with half values to nearest even integer.
33
+ * https://wiki.c2.com/?BankersRounding
34
+ */
35
+ const roundHalfEven = (value) => {
36
+ const rounded = Math.round(value);
37
+ if (!isHalf(value)) return rounded;
38
+ return isEven(rounded) ? rounded : rounded - 1;
39
+ };
40
+ /**
41
+ * Round a number with half values to nearest integer closest to zero.
42
+ */
43
+ const roundHalfTowardsZero = (value) => isHalf(value) ? Math.sign(value) * Math.floor(Math.abs(value)) : Math.round(value);
44
+ /**
45
+ * This is useful for percentages that should sum up to 100.
46
+ * But can also be fine tuned.
47
+ *
48
+ * Original from https://github.com/super-ienien/percent-round
49
+ */
50
+ function roundArrayOfNumbersToMatchSum(ipt, max = 100, decimalPlaces = 0) {
51
+ const iptPercents = [...ipt];
52
+ const length = ipt.length;
53
+ const out = [];
54
+ out.fill(0, length);
55
+ const total = sum(iptPercents);
56
+ if (total !== 0) {
57
+ const powDecimalPlaces = 10 ** decimalPlaces;
58
+ const pow100 = max * powDecimalPlaces;
59
+ let check100 = 0;
60
+ for (let i = length - 1; i >= 0; i--) {
61
+ iptPercents[i] = max * iptPercents[i] / total;
62
+ check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces);
63
+ }
64
+ if (check100 !== pow100) {
65
+ const totalDiff = check100 - pow100;
66
+ const roundGrain = 1;
67
+ let grainCount = Math.abs(totalDiff);
68
+ const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces));
69
+ while (grainCount > 0) {
70
+ let idx = 0;
71
+ let maxDiff = diffs[0];
72
+ for (let i = 1; i < length; i++) if (maxDiff < diffs[i]) {
73
+ if (check100 > pow100 && out[i] - roundGrain < 0) continue;
74
+ idx = i;
75
+ maxDiff = diffs[i];
76
+ }
77
+ if (check100 > pow100) out[idx] -= roundGrain;
78
+ else out[idx] += roundGrain;
79
+ diffs[idx] -= roundGrain;
80
+ grainCount--;
81
+ }
82
+ }
83
+ if (powDecimalPlaces > 1) return out.map((n) => +(n / powDecimalPlaces).toFixed(decimalPlaces));
84
+ }
85
+ return out;
86
+ }
87
+ function roundArrayOfObjectsToMatchSum(arr, name, max = 100, decimalPlaces = 0) {
88
+ return roundArrayOfNumbersToMatchSum(arr.map((o) => o[name]), max, decimalPlaces).map((o, i) => ({
89
+ ...arr[i],
90
+ [name]: o
91
+ }));
92
+ }
93
+
94
+ //#endregion
95
+ export { isEven, isHalf, roundArrayOfNumbersToMatchSum, roundArrayOfObjectsToMatchSum, roundDown, roundHalfAwayFromZero, roundHalfDown, roundHalfEven, roundHalfOdd, roundHalfTowardsZero, roundHalfUp, roundUp };
2
96
  //# sourceMappingURL=rounding.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rounding.mjs","names":[],"sources":["../../../src/common/data/rounding.ts"],"sourcesContent":["// From https://v2.dinerojs.com/docs/api/formatting/to-unit MIT\n\nimport { sum } from './math'\n\nexport type RoundingMode = (value: number) => number\n\nexport function isHalf(value: number): boolean {\n return Math.abs(value) % 1 === 0.5\n}\nexport function isEven(value: number): boolean {\n return value % 2 === 0\n}\n\nexport const roundUp: RoundingMode = value => Math.ceil(value)\nexport const roundDown: RoundingMode = value => Math.floor(value)\nexport const roundHalfUp: RoundingMode = value => Math.round(value)\n\n/**\n * Round a number with half values to nearest odd integer.\n */\nexport const roundHalfOdd: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded - 1 : rounded\n}\n\n/**\n * Round a number with half values to nearest integer farthest from zero.\n */\nexport const roundHalfAwayFromZero: RoundingMode = (value) => {\n return isHalf(value)\n ? Math.sign(value) * Math.ceil(Math.abs(value))\n : Math.round(value)\n}\n\n/**\n * Round a number with half values down.\n */\nexport const roundHalfDown: RoundingMode = value =>\n isHalf(value) ? Math.floor(value) : Math.round(value)\n\n/**\n * Round a number with half values to nearest even integer.\n * https://wiki.c2.com/?BankersRounding\n */\nexport const roundHalfEven: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded : rounded - 1\n}\n\n/**\n * Round a number with half values to nearest integer closest to zero.\n */\nexport const roundHalfTowardsZero: RoundingMode = value =>\n isHalf(value)\n ? Math.sign(value) * Math.floor(Math.abs(value))\n : Math.round(value)\n\n/**\n * This is useful for percentages that should sum up to 100.\n * But can also be fine tuned.\n *\n * Original from https://github.com/super-ienien/percent-round\n */\nexport function roundArrayOfNumbersToMatchSum(ipt: number[], max = 100, decimalPlaces = 0) {\n const iptPercents: number[] = [...ipt]\n const length = ipt.length\n const out: number[] = []\n out.fill(0, length)\n\n const total = sum(iptPercents)\n\n if (total !== 0) {\n const powDecimalPlaces = 10 ** decimalPlaces\n const pow100 = max * powDecimalPlaces\n let check100 = 0\n for (let i = length - 1; i >= 0; i--) {\n iptPercents[i] = max * iptPercents[i] / total\n check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces)\n }\n\n if (check100 !== pow100) {\n const totalDiff = (check100 - pow100)\n const roundGrain = 1\n let grainCount = Math.abs(totalDiff)\n const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces))\n\n while (grainCount > 0) {\n let idx = 0\n let maxDiff = diffs[0]\n for (let i = 1; i < length; i++) {\n if (maxDiff < diffs[i]) {\n // avoid negative result\n if (check100 > pow100 && out[i] - roundGrain < 0)\n continue\n idx = i\n maxDiff = diffs[i]\n }\n }\n if (check100 > pow100)\n out[idx] -= roundGrain\n else\n out[idx] += roundGrain\n\n diffs[idx] -= roundGrain\n grainCount--\n }\n }\n\n if (powDecimalPlaces > 1)\n return out.map(n => +((n / powDecimalPlaces).toFixed(decimalPlaces)))\n }\n\n return out\n}\n\nexport function roundArrayOfObjectsToMatchSum<T extends Record<string, any>>(arr: T[], name: string, max = 100, decimalPlaces = 0): T[] {\n return roundArrayOfNumbersToMatchSum(arr.map(o => o[name]), max, decimalPlaces)\n .map((o, i) => ({\n ...arr[i],\n [name]: o,\n }))\n}\n"],"mappings":"iCAMA,SAAgB,EAAO,EAAwB,CAC7C,OAAO,KAAK,IAAI,EAAM,CAAG,GAAM,GAEjC,SAAgB,EAAO,EAAwB,CAC7C,OAAO,EAAQ,GAAM,EAGvB,MAAa,EAAwB,GAAS,KAAK,KAAK,EAAM,CACjD,EAA0B,GAAS,KAAK,MAAM,EAAM,CACpD,EAA4B,GAAS,KAAK,MAAM,EAAM,CAKtD,EAA8B,GAAU,CACnD,IAAM,EAAU,KAAK,MAAM,EAAM,CAIjC,OAHK,EAAO,EAAM,EAGX,EAAO,EAAQ,CAAG,EAAU,EAAI,GAM5B,EAAuC,GAC3C,EAAO,EAAM,CAChB,KAAK,KAAK,EAAM,CAAG,KAAK,KAAK,KAAK,IAAI,EAAM,CAAC,CAC7C,KAAK,MAAM,EAAM,CAMV,EAA8B,GACzC,EAAO,EAAM,CAAG,KAAK,MAAM,EAAM,CAAG,KAAK,MAAM,EAAM,CAM1C,EAA+B,GAAU,CACpD,IAAM,EAAU,KAAK,MAAM,EAAM,CAIjC,OAHK,EAAO,EAAM,CAGX,EAAO,EAAQ,CAAG,EAAU,EAAU,EAFpC,GAQE,EAAqC,GAChD,EAAO,EAAM,CACT,KAAK,KAAK,EAAM,CAAG,KAAK,MAAM,KAAK,IAAI,EAAM,CAAC,CAC9C,KAAK,MAAM,EAAM,CAQvB,SAAgB,EAA8B,EAAe,EAAM,IAAK,EAAgB,EAAG,CACzF,IAAM,EAAwB,CAAC,GAAG,EAAI,CAChC,EAAS,EAAI,OACb,EAAgB,EAAE,CACxB,EAAI,KAAK,EAAG,EAAO,CAEnB,IAAM,EAAQ,EAAI,EAAY,CAE9B,GAAI,IAAU,EAAG,CACf,IAAM,EAAmB,IAAM,EACzB,EAAS,EAAM,EACjB,EAAW,EACf,IAAK,IAAI,EAAI,EAAS,EAAG,GAAK,EAAG,IAC/B,EAAY,GAAK,EAAM,EAAY,GAAK,EACxC,GAAY,EAAI,GAAK,KAAK,MAAM,EAAY,GAAK,EAAiB,CAGpE,GAAI,IAAa,EAAQ,CACvB,IAAM,EAAa,EAAW,EAE1B,EAAa,KAAK,IAAI,EAAU,CAC9B,EAAQ,EAAY,KAAK,EAAG,IAAM,KAAK,IAAI,EAAI,GAAK,EAAY,GAAK,EAAiB,CAAC,CAE7F,KAAO,EAAa,GAAG,CACrB,IAAI,EAAM,EACN,EAAU,EAAM,GACpB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,GAAI,EAAU,EAAM,GAAI,CAEtB,GAAI,EAAW,GAAU,EAAI,GAAK,EAAa,EAC7C,SACF,EAAM,EACN,EAAU,EAAM,GAGhB,EAAW,EACb,IAAI,GAEJ,EAAI,IAAQ,EAEd,IAAM,GACN,KAIJ,GAAI,EAAmB,EACrB,OAAO,EAAI,IAAI,GAAK,EAAG,EAAI,GAAkB,QAAQ,EAAc,CAAE,CAGzE,OAAO,EAGT,SAAgB,EAA6D,EAAU,EAAc,EAAM,IAAK,EAAgB,EAAQ,CACtI,OAAO,EAA8B,EAAI,IAAI,GAAK,EAAE,GAAM,CAAE,EAAK,EAAc,CAC5E,KAAK,EAAG,KAAO,CACd,GAAG,EAAI,IACN,GAAO,EACT,EAAE"}
1
+ {"version":3,"file":"rounding.mjs","names":[],"sources":["../../../src/common/data/rounding.ts"],"sourcesContent":["// From https://v2.dinerojs.com/docs/api/formatting/to-unit MIT\n\nimport { sum } from './math'\n\nexport type RoundingMode = (value: number) => number\n\nexport function isHalf(value: number): boolean {\n return Math.abs(value) % 1 === 0.5\n}\nexport function isEven(value: number): boolean {\n return value % 2 === 0\n}\n\nexport const roundUp: RoundingMode = value => Math.ceil(value)\nexport const roundDown: RoundingMode = value => Math.floor(value)\nexport const roundHalfUp: RoundingMode = value => Math.round(value)\n\n/**\n * Round a number with half values to nearest odd integer.\n */\nexport const roundHalfOdd: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded - 1 : rounded\n}\n\n/**\n * Round a number with half values to nearest integer farthest from zero.\n */\nexport const roundHalfAwayFromZero: RoundingMode = (value) => {\n return isHalf(value)\n ? Math.sign(value) * Math.ceil(Math.abs(value))\n : Math.round(value)\n}\n\n/**\n * Round a number with half values down.\n */\nexport const roundHalfDown: RoundingMode = value =>\n isHalf(value) ? Math.floor(value) : Math.round(value)\n\n/**\n * Round a number with half values to nearest even integer.\n * https://wiki.c2.com/?BankersRounding\n */\nexport const roundHalfEven: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded : rounded - 1\n}\n\n/**\n * Round a number with half values to nearest integer closest to zero.\n */\nexport const roundHalfTowardsZero: RoundingMode = value =>\n isHalf(value)\n ? Math.sign(value) * Math.floor(Math.abs(value))\n : Math.round(value)\n\n/**\n * This is useful for percentages that should sum up to 100.\n * But can also be fine tuned.\n *\n * Original from https://github.com/super-ienien/percent-round\n */\nexport function roundArrayOfNumbersToMatchSum(ipt: number[], max = 100, decimalPlaces = 0) {\n const iptPercents: number[] = [...ipt]\n const length = ipt.length\n const out: number[] = []\n out.fill(0, length)\n\n const total = sum(iptPercents)\n\n if (total !== 0) {\n const powDecimalPlaces = 10 ** decimalPlaces\n const pow100 = max * powDecimalPlaces\n let check100 = 0\n for (let i = length - 1; i >= 0; i--) {\n iptPercents[i] = max * iptPercents[i] / total\n check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces)\n }\n\n if (check100 !== pow100) {\n const totalDiff = (check100 - pow100)\n const roundGrain = 1\n let grainCount = Math.abs(totalDiff)\n const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces))\n\n while (grainCount > 0) {\n let idx = 0\n let maxDiff = diffs[0]\n for (let i = 1; i < length; i++) {\n if (maxDiff < diffs[i]) {\n // avoid negative result\n if (check100 > pow100 && out[i] - roundGrain < 0)\n continue\n idx = i\n maxDiff = diffs[i]\n }\n }\n if (check100 > pow100)\n out[idx] -= roundGrain\n else\n out[idx] += roundGrain\n\n diffs[idx] -= roundGrain\n grainCount--\n }\n }\n\n if (powDecimalPlaces > 1)\n return out.map(n => +((n / powDecimalPlaces).toFixed(decimalPlaces)))\n }\n\n return out\n}\n\nexport function roundArrayOfObjectsToMatchSum<T extends Record<string, any>>(arr: T[], name: string, max = 100, decimalPlaces = 0): T[] {\n return roundArrayOfNumbersToMatchSum(arr.map(o => o[name]), max, decimalPlaces)\n .map((o, i) => ({\n ...arr[i],\n [name]: o,\n }))\n}\n"],"mappings":";;;AAMA,SAAgB,OAAO,OAAwB;AAC7C,QAAO,KAAK,IAAI,MAAM,GAAG,MAAM;;AAEjC,SAAgB,OAAO,OAAwB;AAC7C,QAAO,QAAQ,MAAM;;AAGvB,MAAa,WAAwB,UAAS,KAAK,KAAK,MAAM;AAC9D,MAAa,aAA0B,UAAS,KAAK,MAAM,MAAM;AACjE,MAAa,eAA4B,UAAS,KAAK,MAAM,MAAM;;;;AAKnE,MAAa,gBAA8B,UAAU;CACnD,MAAM,UAAU,KAAK,MAAM,MAAM;AACjC,KAAI,CAAC,OAAO,MAAM,CAChB,QAAO;AAET,QAAO,OAAO,QAAQ,GAAG,UAAU,IAAI;;;;;AAMzC,MAAa,yBAAuC,UAAU;AAC5D,QAAO,OAAO,MAAM,GAChB,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,GAC7C,KAAK,MAAM,MAAM;;;;;AAMvB,MAAa,iBAA8B,UACzC,OAAO,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM,MAAM;;;;;AAMvD,MAAa,iBAA+B,UAAU;CACpD,MAAM,UAAU,KAAK,MAAM,MAAM;AACjC,KAAI,CAAC,OAAO,MAAM,CAChB,QAAO;AAET,QAAO,OAAO,QAAQ,GAAG,UAAU,UAAU;;;;;AAM/C,MAAa,wBAAqC,UAChD,OAAO,MAAM,GACT,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,GAC9C,KAAK,MAAM,MAAM;;;;;;;AAQvB,SAAgB,8BAA8B,KAAe,MAAM,KAAK,gBAAgB,GAAG;CACzF,MAAM,cAAwB,CAAC,GAAG,IAAI;CACtC,MAAM,SAAS,IAAI;CACnB,MAAM,MAAgB,EAAE;AACxB,KAAI,KAAK,GAAG,OAAO;CAEnB,MAAM,QAAQ,IAAI,YAAY;AAE9B,KAAI,UAAU,GAAG;EACf,MAAM,mBAAmB,MAAM;EAC/B,MAAM,SAAS,MAAM;EACrB,IAAI,WAAW;AACf,OAAK,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,eAAY,KAAK,MAAM,YAAY,KAAK;AACxC,eAAY,IAAI,KAAK,KAAK,MAAM,YAAY,KAAK,iBAAiB;;AAGpE,MAAI,aAAa,QAAQ;GACvB,MAAM,YAAa,WAAW;GAC9B,MAAM,aAAa;GACnB,IAAI,aAAa,KAAK,IAAI,UAAU;GACpC,MAAM,QAAQ,YAAY,KAAK,GAAG,MAAM,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK,iBAAiB,CAAC;AAE7F,UAAO,aAAa,GAAG;IACrB,IAAI,MAAM;IACV,IAAI,UAAU,MAAM;AACpB,SAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,KAAI,UAAU,MAAM,IAAI;AAEtB,SAAI,WAAW,UAAU,IAAI,KAAK,aAAa,EAC7C;AACF,WAAM;AACN,eAAU,MAAM;;AAGpB,QAAI,WAAW,OACb,KAAI,QAAQ;QAEZ,KAAI,QAAQ;AAEd,UAAM,QAAQ;AACd;;;AAIJ,MAAI,mBAAmB,EACrB,QAAO,IAAI,KAAI,MAAK,EAAG,IAAI,kBAAkB,QAAQ,cAAc,CAAE;;AAGzE,QAAO;;AAGT,SAAgB,8BAA6D,KAAU,MAAc,MAAM,KAAK,gBAAgB,GAAQ;AACtI,QAAO,8BAA8B,IAAI,KAAI,MAAK,EAAE,MAAM,EAAE,KAAK,cAAc,CAC5E,KAAK,GAAG,OAAO;EACd,GAAG,IAAI;GACN,OAAO;EACT,EAAE"}