zeed 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/AGENTS.md +50 -211
  2. package/README.md +16 -0
  3. package/dist/_experiments/bitcask.cjs +243 -1
  4. package/dist/_experiments/bitcask.cjs.map +1 -1
  5. package/dist/_experiments/bitcask.mjs +230 -1
  6. package/dist/_experiments/bitcask.mjs.map +1 -1
  7. package/dist/bin-BAoS4qtm.mjs +593 -0
  8. package/dist/{bin-SPdenYkw.mjs.map → bin-BAoS4qtm.mjs.map} +1 -1
  9. package/dist/bin-Ddaz2lxM.cjs +862 -0
  10. package/dist/{bin-Ce3i6ABn.cjs.map → bin-Ddaz2lxM.cjs.map} +1 -1
  11. package/dist/browser/base64.cjs +14 -1
  12. package/dist/browser/base64.cjs.map +1 -1
  13. package/dist/browser/base64.mjs +12 -1
  14. package/dist/browser/base64.mjs.map +1 -1
  15. package/dist/browser/gravatar.cjs +186 -1
  16. package/dist/browser/gravatar.cjs.map +1 -1
  17. package/dist/browser/gravatar.mjs +184 -1
  18. package/dist/browser/gravatar.mjs.map +1 -1
  19. package/dist/browser/index.cjs +14 -1
  20. package/dist/browser/index.mjs +8 -1
  21. package/dist/browser/localstorage.cjs +46 -1
  22. package/dist/browser/localstorage.cjs.map +1 -1
  23. package/dist/browser/localstorage.mjs +45 -1
  24. package/dist/browser/localstorage.mjs.map +1 -1
  25. package/dist/browser/log/index.cjs +8 -1
  26. package/dist/browser/log/index.mjs +5 -1
  27. package/dist/browser/log/log-browser-factory.cjs +65 -1
  28. package/dist/browser/log/log-browser-factory.cjs.map +1 -1
  29. package/dist/browser/log/log-browser-factory.mjs +64 -1
  30. package/dist/browser/log/log-browser-factory.mjs.map +1 -1
  31. package/dist/browser/log/log-browser.cjs +72 -1
  32. package/dist/browser/log/log-browser.cjs.map +1 -1
  33. package/dist/browser/log/log-browser.mjs +71 -1
  34. package/dist/browser/log/log-browser.mjs.map +1 -1
  35. package/dist/browser/log/log-colors.cjs +11 -1
  36. package/dist/browser/log/log-colors.cjs.map +1 -1
  37. package/dist/browser/log/log-colors.mjs +9 -1
  38. package/dist/browser/log/log-colors.mjs.map +1 -1
  39. package/dist/browser/log/log-context-browser.cjs +25 -1
  40. package/dist/browser/log/log-context-browser.cjs.map +1 -1
  41. package/dist/browser/log/log-context-browser.mjs +23 -1
  42. package/dist/browser/log/log-context-browser.mjs.map +1 -1
  43. package/dist/chunk-DQk6qfdC.mjs +18 -0
  44. package/dist/chunk-uaV2rQ02.cjs +53 -0
  45. package/dist/common/assert.cjs +22 -1
  46. package/dist/common/assert.cjs.map +1 -1
  47. package/dist/common/assert.mjs +19 -1
  48. package/dist/common/assert.mjs.map +1 -1
  49. package/dist/common/bin/index.cjs +106 -1
  50. package/dist/common/bin/index.cjs.map +1 -1
  51. package/dist/common/bin/index.mjs +98 -1
  52. package/dist/common/bin/index.mjs.map +1 -1
  53. package/dist/common/bin/lib0/binary.cjs +146 -1
  54. package/dist/common/bin/lib0/binary.cjs.map +1 -1
  55. package/dist/common/bin/lib0/binary.mjs +80 -1
  56. package/dist/common/bin/lib0/binary.mjs.map +1 -1
  57. package/dist/common/bin/lib0/buffer.cjs +42 -1
  58. package/dist/common/bin/lib0/buffer.cjs.map +1 -1
  59. package/dist/common/bin/lib0/buffer.mjs +38 -1
  60. package/dist/common/bin/lib0/buffer.mjs.map +1 -1
  61. package/dist/common/bin/lib0/create.cjs +24 -1
  62. package/dist/common/bin/lib0/create.cjs.map +1 -1
  63. package/dist/common/bin/lib0/create.mjs +21 -1
  64. package/dist/common/bin/lib0/create.mjs.map +1 -1
  65. package/dist/common/bin/lib0/decoding.cjs +325 -1
  66. package/dist/common/bin/lib0/decoding.cjs.map +1 -1
  67. package/dist/common/bin/lib0/decoding.mjs +298 -1
  68. package/dist/common/bin/lib0/decoding.mjs.map +1 -1
  69. package/dist/common/bin/lib0/encoding.cjs +404 -1
  70. package/dist/common/bin/lib0/encoding.cjs.map +1 -1
  71. package/dist/common/bin/lib0/encoding.mjs +377 -1
  72. package/dist/common/bin/lib0/encoding.mjs.map +1 -1
  73. package/dist/common/bin/lib0/string.cjs +81 -1
  74. package/dist/common/bin/lib0/string.cjs.map +1 -1
  75. package/dist/common/bin/lib0/string.mjs +71 -1
  76. package/dist/common/bin/lib0/string.mjs.map +1 -1
  77. package/dist/common/crypto/aes-sealed.cjs +34 -1
  78. package/dist/common/crypto/aes-sealed.cjs.map +1 -1
  79. package/dist/common/crypto/aes-sealed.mjs +32 -1
  80. package/dist/common/crypto/aes-sealed.mjs.map +1 -1
  81. package/dist/common/crypto/crypto.cjs +91 -1
  82. package/dist/common/crypto/crypto.cjs.map +1 -1
  83. package/dist/common/crypto/crypto.mjs +80 -1
  84. package/dist/common/crypto/crypto.mjs.map +1 -1
  85. package/dist/common/crypto/index.cjs +23 -1
  86. package/dist/common/crypto/index.mjs +5 -1
  87. package/dist/common/crypto/xaes.cjs +128 -1
  88. package/dist/common/crypto/xaes.cjs.map +1 -1
  89. package/dist/common/crypto/xaes.mjs +123 -1
  90. package/dist/common/crypto/xaes.mjs.map +1 -1
  91. package/dist/common/csv.cjs +49 -4
  92. package/dist/common/csv.cjs.map +1 -1
  93. package/dist/common/csv.mjs +46 -4
  94. package/dist/common/csv.mjs.map +1 -1
  95. package/dist/common/data/array.cjs +299 -1
  96. package/dist/common/data/array.cjs.map +1 -1
  97. package/dist/common/data/array.mjs +274 -1
  98. package/dist/common/data/array.mjs.map +1 -1
  99. package/dist/common/data/basex-secure.cjs +30 -1
  100. package/dist/common/data/basex-secure.mjs +3 -1
  101. package/dist/common/data/basex.cjs +163 -1
  102. package/dist/common/data/basex.cjs.map +1 -1
  103. package/dist/common/data/basex.mjs +152 -1
  104. package/dist/common/data/basex.mjs.map +1 -1
  105. package/dist/common/data/bin-types.mjs +1 -1
  106. package/dist/common/data/bin.cjs +21 -1
  107. package/dist/common/data/bin.mjs +3 -1
  108. package/dist/common/data/camelcase.cjs +27 -1
  109. package/dist/common/data/camelcase.cjs.map +1 -1
  110. package/dist/common/data/camelcase.mjs +22 -1
  111. package/dist/common/data/camelcase.mjs.map +1 -1
  112. package/dist/common/data/convert.cjs +104 -1
  113. package/dist/common/data/convert.cjs.map +1 -1
  114. package/dist/common/data/convert.mjs +88 -1
  115. package/dist/common/data/convert.mjs.map +1 -1
  116. package/dist/common/data/datauri.cjs +32 -1
  117. package/dist/common/data/datauri.cjs.map +1 -1
  118. package/dist/common/data/datauri.mjs +27 -1
  119. package/dist/common/data/datauri.mjs.map +1 -1
  120. package/dist/common/data/day-legacy.cjs +148 -1
  121. package/dist/common/data/day-legacy.cjs.map +1 -1
  122. package/dist/common/data/day-legacy.mjs +143 -1
  123. package/dist/common/data/day-legacy.mjs.map +1 -1
  124. package/dist/common/data/day.cjs +335 -1
  125. package/dist/common/data/day.cjs.map +1 -1
  126. package/dist/common/data/day.mjs +305 -1
  127. package/dist/common/data/day.mjs.map +1 -1
  128. package/dist/common/data/decimal.cjs +28 -1
  129. package/dist/common/data/decimal.cjs.map +1 -1
  130. package/dist/common/data/decimal.mjs +23 -1
  131. package/dist/common/data/decimal.mjs.map +1 -1
  132. package/dist/common/data/deep.cjs +57 -1
  133. package/dist/common/data/deep.cjs.map +1 -1
  134. package/dist/common/data/deep.mjs +54 -1
  135. package/dist/common/data/deep.mjs.map +1 -1
  136. package/dist/common/data/diff.cjs +62 -1
  137. package/dist/common/data/diff.cjs.map +1 -1
  138. package/dist/common/data/diff.mjs +60 -1
  139. package/dist/common/data/diff.mjs.map +1 -1
  140. package/dist/common/data/distributed.cjs +24 -1
  141. package/dist/common/data/distributed.cjs.map +1 -1
  142. package/dist/common/data/distributed.mjs +22 -1
  143. package/dist/common/data/distributed.mjs.map +1 -1
  144. package/dist/common/data/format.cjs +63 -1
  145. package/dist/common/data/format.cjs.map +1 -1
  146. package/dist/common/data/format.mjs +59 -1
  147. package/dist/common/data/format.mjs.map +1 -1
  148. package/dist/common/data/html.cjs +13 -1
  149. package/dist/common/data/html.cjs.map +1 -1
  150. package/dist/common/data/html.mjs +10 -1
  151. package/dist/common/data/html.mjs.map +1 -1
  152. package/dist/common/data/index.cjs +296 -1
  153. package/dist/common/data/index.mjs +37 -1
  154. package/dist/common/data/is.cjs +106 -1
  155. package/dist/common/data/is.cjs.map +1 -1
  156. package/dist/common/data/is.mjs +85 -1
  157. package/dist/common/data/is.mjs.map +1 -1
  158. package/dist/common/data/json.cjs +70 -1
  159. package/dist/common/data/json.cjs.map +1 -1
  160. package/dist/common/data/json.mjs +65 -1
  161. package/dist/common/data/json.mjs.map +1 -1
  162. package/dist/common/data/list.cjs +32 -1
  163. package/dist/common/data/list.cjs.map +1 -1
  164. package/dist/common/data/list.mjs +27 -1
  165. package/dist/common/data/list.mjs.map +1 -1
  166. package/dist/common/data/lru.mjs +1 -1
  167. package/dist/common/data/math.cjs +79 -1
  168. package/dist/common/data/math.cjs.map +1 -1
  169. package/dist/common/data/math.mjs +65 -1
  170. package/dist/common/data/math.mjs.map +1 -1
  171. package/dist/common/data/message.cjs +30 -1
  172. package/dist/common/data/message.cjs.map +1 -1
  173. package/dist/common/data/message.mjs +28 -1
  174. package/dist/common/data/message.mjs.map +1 -1
  175. package/dist/common/data/object-changes.cjs +66 -1
  176. package/dist/common/data/object-changes.cjs.map +1 -1
  177. package/dist/common/data/object-changes.mjs +63 -1
  178. package/dist/common/data/object-changes.mjs.map +1 -1
  179. package/dist/common/data/object.cjs +112 -1
  180. package/dist/common/data/object.cjs.map +1 -1
  181. package/dist/common/data/object.mjs +104 -1
  182. package/dist/common/data/object.mjs.map +1 -1
  183. package/dist/common/data/orderby.cjs +42 -1
  184. package/dist/common/data/orderby.cjs.map +1 -1
  185. package/dist/common/data/orderby.mjs +37 -1
  186. package/dist/common/data/orderby.mjs.map +1 -1
  187. package/dist/common/data/path.cjs +26 -1
  188. package/dist/common/data/path.cjs.map +1 -1
  189. package/dist/common/data/path.mjs +25 -1
  190. package/dist/common/data/path.mjs.map +1 -1
  191. package/dist/common/data/regexp.cjs +12 -1
  192. package/dist/common/data/regexp.cjs.map +1 -1
  193. package/dist/common/data/regexp.mjs +10 -1
  194. package/dist/common/data/regexp.mjs.map +1 -1
  195. package/dist/common/data/rounding.cjs +107 -1
  196. package/dist/common/data/rounding.cjs.map +1 -1
  197. package/dist/common/data/rounding.mjs +95 -1
  198. package/dist/common/data/rounding.mjs.map +1 -1
  199. package/dist/common/data/signal.cjs +39 -1
  200. package/dist/common/data/signal.cjs.map +1 -1
  201. package/dist/common/data/signal.mjs +38 -1
  202. package/dist/common/data/signal.mjs.map +1 -1
  203. package/dist/common/data/sortable.cjs +35 -1
  204. package/dist/common/data/sortable.cjs.map +1 -1
  205. package/dist/common/data/sortable.mjs +31 -1
  206. package/dist/common/data/sortable.mjs.map +1 -1
  207. package/dist/common/data/sorted.cjs +54 -1
  208. package/dist/common/data/sorted.cjs.map +1 -1
  209. package/dist/common/data/sorted.mjs +53 -1
  210. package/dist/common/data/sorted.mjs.map +1 -1
  211. package/dist/common/data/string-deburr.cjs +240 -1
  212. package/dist/common/data/string-deburr.cjs.map +1 -1
  213. package/dist/common/data/string-deburr.mjs +238 -1
  214. package/dist/common/data/string-deburr.mjs.map +1 -1
  215. package/dist/common/data/string-hash-fnv.cjs +69 -1
  216. package/dist/common/data/string-hash-fnv.cjs.map +1 -1
  217. package/dist/common/data/string-hash-fnv.mjs +67 -1
  218. package/dist/common/data/string-hash-fnv.mjs.map +1 -1
  219. package/dist/common/data/string-hash-pool.cjs +28 -1
  220. package/dist/common/data/string-hash-pool.cjs.map +1 -1
  221. package/dist/common/data/string-hash-pool.mjs +27 -1
  222. package/dist/common/data/string-hash-pool.mjs.map +1 -1
  223. package/dist/common/data/url.cjs +98 -2
  224. package/dist/common/data/url.cjs.map +1 -1
  225. package/dist/common/data/url.mjs +91 -2
  226. package/dist/common/data/url.mjs.map +1 -1
  227. package/dist/common/data/utils.cjs +118 -1
  228. package/dist/common/data/utils.cjs.map +1 -1
  229. package/dist/common/data/utils.mjs +107 -1
  230. package/dist/common/data/utils.mjs.map +1 -1
  231. package/dist/common/data/wordlist.cjs +531 -1
  232. package/dist/common/data/wordlist.cjs.map +1 -1
  233. package/dist/common/data/wordlist.mjs +529 -1
  234. package/dist/common/data/wordlist.mjs.map +1 -1
  235. package/dist/common/data/xrx.cjs +96 -1
  236. package/dist/common/data/xrx.cjs.map +1 -1
  237. package/dist/common/data/xrx.mjs +92 -1
  238. package/dist/common/data/xrx.mjs.map +1 -1
  239. package/dist/common/dispose-defer.cjs +133 -1
  240. package/dist/common/dispose-defer.cjs.map +1 -1
  241. package/dist/common/dispose-defer.mjs +130 -1
  242. package/dist/common/dispose-defer.mjs.map +1 -1
  243. package/dist/common/dispose-types.mjs +1 -1
  244. package/dist/common/dispose-utils.cjs +113 -1
  245. package/dist/common/dispose-utils.cjs.map +1 -1
  246. package/dist/common/dispose-utils.mjs +106 -1
  247. package/dist/common/dispose-utils.mjs.map +1 -1
  248. package/dist/common/exec/index.cjs +24 -1
  249. package/dist/common/exec/index.d.cts +1 -1
  250. package/dist/common/exec/index.d.mts +1 -1
  251. package/dist/common/exec/index.mjs +8 -1
  252. package/dist/common/exec/mutex.cjs +44 -1
  253. package/dist/common/exec/mutex.cjs.map +1 -1
  254. package/dist/common/exec/mutex.mjs +42 -1
  255. package/dist/common/exec/mutex.mjs.map +1 -1
  256. package/dist/common/exec/pool.cjs +181 -1
  257. package/dist/common/exec/pool.cjs.map +1 -1
  258. package/dist/common/exec/pool.d.cts +1 -1
  259. package/dist/common/exec/pool.d.mts +1 -1
  260. package/dist/common/exec/pool.mjs +180 -1
  261. package/dist/common/exec/pool.mjs.map +1 -1
  262. package/dist/common/exec/progress.cjs +149 -1
  263. package/dist/common/exec/progress.cjs.map +1 -1
  264. package/dist/common/exec/progress.d.cts +1 -1
  265. package/dist/common/exec/progress.d.mts +1 -1
  266. package/dist/common/exec/progress.mjs +148 -1
  267. package/dist/common/exec/progress.mjs.map +1 -1
  268. package/dist/common/exec/promise.cjs +113 -1
  269. package/dist/common/exec/promise.cjs.map +1 -1
  270. package/dist/common/exec/promise.mjs +103 -1
  271. package/dist/common/exec/promise.mjs.map +1 -1
  272. package/dist/common/exec/queue.cjs +125 -1
  273. package/dist/common/exec/queue.cjs.map +1 -1
  274. package/dist/common/exec/queue.d.cts +1 -1
  275. package/dist/common/exec/queue.d.mts +1 -1
  276. package/dist/common/exec/queue.mjs +124 -1
  277. package/dist/common/exec/queue.mjs.map +1 -1
  278. package/dist/common/exec/throttle-debounce.cjs +114 -1
  279. package/dist/common/exec/throttle-debounce.cjs.map +1 -1
  280. package/dist/common/exec/throttle-debounce.mjs +112 -1
  281. package/dist/common/exec/throttle-debounce.mjs.map +1 -1
  282. package/dist/common/global.cjs +22 -1
  283. package/dist/common/global.cjs.map +1 -1
  284. package/dist/common/global.mjs +19 -1
  285. package/dist/common/global.mjs.map +1 -1
  286. package/dist/common/index.cjs +559 -1
  287. package/dist/common/index.d.cts +1 -1
  288. package/dist/common/index.d.mts +1 -1
  289. package/dist/common/index.mjs +89 -1
  290. package/dist/common/localhost.cjs +16 -1
  291. package/dist/common/localhost.cjs.map +1 -1
  292. package/dist/common/localhost.mjs +14 -1
  293. package/dist/common/localhost.mjs.map +1 -1
  294. package/dist/common/log/index.cjs +34 -1
  295. package/dist/common/log/index.mjs +11 -1
  296. package/dist/common/log/log-base.cjs +40 -1
  297. package/dist/common/log/log-base.cjs.map +1 -1
  298. package/dist/common/log/log-base.mjs +31 -1
  299. package/dist/common/log/log-base.mjs.map +1 -1
  300. package/dist/common/log/log-colors.cjs +92 -1
  301. package/dist/common/log/log-colors.cjs.map +1 -1
  302. package/dist/common/log/log-colors.mjs +90 -1
  303. package/dist/common/log/log-colors.mjs.map +1 -1
  304. package/dist/common/log/log-config.cjs +15 -1
  305. package/dist/common/log/log-config.cjs.map +1 -1
  306. package/dist/common/log/log-config.mjs +14 -1
  307. package/dist/common/log/log-config.mjs.map +1 -1
  308. package/dist/common/log/log-console-capture.cjs +33 -1
  309. package/dist/common/log/log-console-capture.cjs.map +1 -1
  310. package/dist/common/log/log-console-capture.mjs +32 -1
  311. package/dist/common/log/log-console-capture.mjs.map +1 -1
  312. package/dist/common/log/log-console-original.cjs +27 -1
  313. package/dist/common/log/log-console-original.cjs.map +1 -1
  314. package/dist/common/log/log-console-original.mjs +26 -1
  315. package/dist/common/log/log-console-original.mjs.map +1 -1
  316. package/dist/common/log/log-console.cjs +39 -1
  317. package/dist/common/log/log-console.cjs.map +1 -1
  318. package/dist/common/log/log-console.mjs +38 -1
  319. package/dist/common/log/log-console.mjs.map +1 -1
  320. package/dist/common/log/log-context.cjs +109 -1
  321. package/dist/common/log/log-context.cjs.map +1 -1
  322. package/dist/common/log/log-context.mjs +108 -1
  323. package/dist/common/log/log-context.mjs.map +1 -1
  324. package/dist/common/log/log-filter.cjs +80 -1
  325. package/dist/common/log/log-filter.cjs.map +1 -1
  326. package/dist/common/log/log-filter.mjs +75 -1
  327. package/dist/common/log/log-filter.mjs.map +1 -1
  328. package/dist/common/log/log-memory.cjs +45 -1
  329. package/dist/common/log/log-memory.cjs.map +1 -1
  330. package/dist/common/log/log-memory.mjs +43 -1
  331. package/dist/common/log/log-memory.mjs.map +1 -1
  332. package/dist/common/log/log-noop.cjs +17 -1
  333. package/dist/common/log/log-noop.cjs.map +1 -1
  334. package/dist/common/log/log-noop.mjs +15 -1
  335. package/dist/common/log/log-noop.mjs.map +1 -1
  336. package/dist/common/log/log.cjs +46 -1
  337. package/dist/common/log/log.cjs.map +1 -1
  338. package/dist/common/log/log.mjs +43 -1
  339. package/dist/common/log/log.mjs.map +1 -1
  340. package/dist/common/msg/channel-debug.cjs +17 -1
  341. package/dist/common/msg/channel-debug.cjs.map +1 -1
  342. package/dist/common/msg/channel-debug.d.cts +1 -1
  343. package/dist/common/msg/channel-debug.d.mts +1 -1
  344. package/dist/common/msg/channel-debug.mjs +16 -1
  345. package/dist/common/msg/channel-debug.mjs.map +1 -1
  346. package/dist/common/msg/channel-local.cjs +28 -1
  347. package/dist/common/msg/channel-local.cjs.map +1 -1
  348. package/dist/common/msg/channel-local.d.cts +1 -1
  349. package/dist/common/msg/channel-local.d.mts +1 -1
  350. package/dist/common/msg/channel-local.mjs +26 -1
  351. package/dist/common/msg/channel-local.mjs.map +1 -1
  352. package/dist/common/msg/channel-resilient.cjs +63 -1
  353. package/dist/common/msg/channel-resilient.cjs.map +1 -1
  354. package/dist/common/msg/channel-resilient.d.cts +1 -1
  355. package/dist/common/msg/channel-resilient.d.mts +1 -1
  356. package/dist/common/msg/channel-resilient.mjs +62 -1
  357. package/dist/common/msg/channel-resilient.mjs.map +1 -1
  358. package/dist/common/msg/channel-wkwebview.cjs +35 -1
  359. package/dist/common/msg/channel-wkwebview.cjs.map +1 -1
  360. package/dist/common/msg/channel-wkwebview.d.cts +2 -1
  361. package/dist/common/msg/channel-wkwebview.d.mts +2 -1
  362. package/dist/common/msg/channel-wkwebview.mjs +34 -1
  363. package/dist/common/msg/channel-wkwebview.mjs.map +1 -1
  364. package/dist/common/msg/channel.cjs +23 -1
  365. package/dist/common/msg/channel.cjs.map +1 -1
  366. package/dist/common/msg/channel.d.cts +1 -1
  367. package/dist/common/msg/channel.d.mts +1 -1
  368. package/dist/common/msg/channel.mjs +22 -1
  369. package/dist/common/msg/channel.mjs.map +1 -1
  370. package/dist/common/msg/emitter.cjs +141 -1
  371. package/dist/common/msg/emitter.cjs.map +1 -1
  372. package/dist/common/msg/emitter.d.cts +1 -1
  373. package/dist/common/msg/emitter.d.mts +1 -1
  374. package/dist/common/msg/emitter.mjs +139 -1
  375. package/dist/common/msg/emitter.mjs.map +1 -1
  376. package/dist/common/msg/encoder.cjs +38 -1
  377. package/dist/common/msg/encoder.cjs.map +1 -1
  378. package/dist/common/msg/encoder.mjs +35 -1
  379. package/dist/common/msg/encoder.mjs.map +1 -1
  380. package/dist/common/msg/index.cjs +28 -1
  381. package/dist/common/msg/index.d.cts +1 -1
  382. package/dist/common/msg/index.d.mts +1 -1
  383. package/dist/common/msg/index.mjs +11 -1
  384. package/dist/common/msg/messages.cjs +135 -1
  385. package/dist/common/msg/messages.cjs.map +1 -1
  386. package/dist/common/msg/messages.d.cts +1 -1
  387. package/dist/common/msg/messages.d.mts +1 -1
  388. package/dist/common/msg/messages.mjs +133 -1
  389. package/dist/common/msg/messages.mjs.map +1 -1
  390. package/dist/common/msg/pipe.mjs +1 -1
  391. package/dist/common/msg/pubsub.cjs +78 -1
  392. package/dist/common/msg/pubsub.cjs.map +1 -1
  393. package/dist/common/msg/pubsub.d.cts +1 -1
  394. package/dist/common/msg/pubsub.d.mts +1 -1
  395. package/dist/common/msg/pubsub.mjs +76 -1
  396. package/dist/common/msg/pubsub.mjs.map +1 -1
  397. package/dist/common/msg/rpc.cjs +142 -1
  398. package/dist/common/msg/rpc.cjs.map +1 -1
  399. package/dist/common/msg/rpc.mjs +139 -1
  400. package/dist/common/msg/rpc.mjs.map +1 -1
  401. package/dist/common/network.cjs +129 -1
  402. package/dist/common/network.cjs.map +1 -1
  403. package/dist/common/network.mjs +122 -1
  404. package/dist/common/network.mjs.map +1 -1
  405. package/dist/common/platform.cjs +92 -1
  406. package/dist/common/platform.cjs.map +1 -1
  407. package/dist/common/platform.mjs +84 -1
  408. package/dist/common/platform.mjs.map +1 -1
  409. package/dist/common/schema/_sandbox/sandbox-inherit.mjs +1 -1
  410. package/dist/common/schema/_sandbox/sandbox.mjs +1 -1
  411. package/dist/common/schema/_sandbox/sandbox.xspec.mjs +1 -1
  412. package/dist/common/schema/export-json-schema.cjs +54 -1
  413. package/dist/common/schema/export-json-schema.cjs.map +1 -1
  414. package/dist/common/schema/export-json-schema.mjs +52 -1
  415. package/dist/common/schema/export-json-schema.mjs.map +1 -1
  416. package/dist/common/schema/export-swift.cjs +30 -2
  417. package/dist/common/schema/export-swift.cjs.map +1 -1
  418. package/dist/common/schema/export-swift.mjs +29 -2
  419. package/dist/common/schema/export-swift.mjs.map +1 -1
  420. package/dist/common/schema/export-typescript.cjs +20 -2
  421. package/dist/common/schema/export-typescript.cjs.map +1 -1
  422. package/dist/common/schema/export-typescript.mjs +19 -2
  423. package/dist/common/schema/export-typescript.mjs.map +1 -1
  424. package/dist/common/schema/index.cjs +55 -1
  425. package/dist/common/schema/index.mjs +12 -1
  426. package/dist/common/schema/parse-args.cjs +62 -2
  427. package/dist/common/schema/parse-args.cjs.map +1 -1
  428. package/dist/common/schema/parse-args.mjs +60 -2
  429. package/dist/common/schema/parse-args.mjs.map +1 -1
  430. package/dist/common/schema/parse-env.cjs +48 -3
  431. package/dist/common/schema/parse-env.cjs.map +1 -1
  432. package/dist/common/schema/parse-env.mjs +46 -3
  433. package/dist/common/schema/parse-env.mjs.map +1 -1
  434. package/dist/common/schema/parse-object.cjs +122 -1
  435. package/dist/common/schema/parse-object.cjs.map +1 -1
  436. package/dist/common/schema/parse-object.mjs +119 -1
  437. package/dist/common/schema/parse-object.mjs.map +1 -1
  438. package/dist/common/schema/schema-standard.mjs +1 -1
  439. package/dist/common/schema/schema.cjs +423 -1
  440. package/dist/common/schema/schema.cjs.map +1 -1
  441. package/dist/common/schema/schema.mjs +404 -1
  442. package/dist/common/schema/schema.mjs.map +1 -1
  443. package/dist/common/schema/serialize.cjs +109 -1
  444. package/dist/common/schema/serialize.cjs.map +1 -1
  445. package/dist/common/schema/serialize.mjs +107 -1
  446. package/dist/common/schema/serialize.mjs.map +1 -1
  447. package/dist/common/schema/type-test.mjs +1 -1
  448. package/dist/common/schema/utils.cjs +25 -1
  449. package/dist/common/schema/utils.cjs.map +1 -1
  450. package/dist/common/schema/utils.mjs +19 -1
  451. package/dist/common/schema/utils.mjs.map +1 -1
  452. package/dist/common/schema/z-collection.cjs +51 -1
  453. package/dist/common/schema/z-collection.mjs +27 -1
  454. package/dist/common/schema/z.cjs +9 -1
  455. package/dist/common/schema/z.mjs +3 -1
  456. package/dist/common/storage/index.cjs +4 -1
  457. package/dist/common/storage/index.mjs +3 -1
  458. package/dist/common/storage/memstorage.cjs +26 -1
  459. package/dist/common/storage/memstorage.cjs.map +1 -1
  460. package/dist/common/storage/memstorage.mjs +25 -1
  461. package/dist/common/storage/memstorage.mjs.map +1 -1
  462. package/dist/common/test.cjs +14 -1
  463. package/dist/common/test.cjs.map +1 -1
  464. package/dist/common/test.mjs +13 -1
  465. package/dist/common/test.mjs.map +1 -1
  466. package/dist/common/time.cjs +220 -1
  467. package/dist/common/time.cjs.map +1 -1
  468. package/dist/common/time.mjs +194 -1
  469. package/dist/common/time.mjs.map +1 -1
  470. package/dist/common/timeout.cjs +27 -1
  471. package/dist/common/timeout.cjs.map +1 -1
  472. package/dist/common/timeout.mjs +25 -1
  473. package/dist/common/timeout.mjs.map +1 -1
  474. package/dist/common/types.mjs +1 -1
  475. package/dist/common/utils.cjs +7 -1
  476. package/dist/common/utils.cjs.map +1 -1
  477. package/dist/common/utils.mjs +5 -1
  478. package/dist/common/utils.mjs.map +1 -1
  479. package/dist/common/uuid.cjs +307 -1
  480. package/dist/common/uuid.cjs.map +1 -1
  481. package/dist/common/uuid.mjs +284 -1
  482. package/dist/common/uuid.mjs.map +1 -1
  483. package/dist/{index-DHXVOH8h.d.cts → index-CFkMqHvX.d.cts} +1 -2
  484. package/dist/{index-DMaPyx9O.d.mts → index-C_3Y_s6f.d.mts} +1 -2
  485. package/dist/index.all.cjs +641 -1
  486. package/dist/index.all.d.cts +1 -1
  487. package/dist/index.all.d.mts +1 -1
  488. package/dist/index.all.mjs +113 -1
  489. package/dist/index.browser.cjs +576 -1
  490. package/dist/index.browser.d.cts +1 -1
  491. package/dist/index.browser.d.mts +1 -1
  492. package/dist/index.browser.mjs +98 -1
  493. package/dist/index.jsr.cjs +57 -1
  494. package/dist/index.jsr.mjs +6 -1
  495. package/dist/index.node.cjs +628 -1
  496. package/dist/index.node.d.cts +1 -1
  497. package/dist/index.node.d.mts +1 -1
  498. package/dist/index.node.mjs +106 -1
  499. package/dist/node/args.cjs +56 -1
  500. package/dist/node/args.cjs.map +1 -1
  501. package/dist/node/args.mjs +53 -1
  502. package/dist/node/args.mjs.map +1 -1
  503. package/dist/node/clipboard.cjs +18 -1
  504. package/dist/node/clipboard.cjs.map +1 -1
  505. package/dist/node/clipboard.mjs +16 -1
  506. package/dist/node/clipboard.mjs.map +1 -1
  507. package/dist/node/crypto.cjs +28 -1
  508. package/dist/node/crypto.cjs.map +1 -1
  509. package/dist/node/crypto.mjs +24 -1
  510. package/dist/node/crypto.mjs.map +1 -1
  511. package/dist/node/env.cjs +100 -4
  512. package/dist/node/env.cjs.map +1 -1
  513. package/dist/node/env.mjs +90 -4
  514. package/dist/node/env.mjs.map +1 -1
  515. package/dist/node/files-async.cjs +66 -1
  516. package/dist/node/files-async.cjs.map +1 -1
  517. package/dist/node/files-async.mjs +60 -1
  518. package/dist/node/files-async.mjs.map +1 -1
  519. package/dist/node/files.cjs +52 -1
  520. package/dist/node/files.cjs.map +1 -1
  521. package/dist/node/files.mjs +46 -1
  522. package/dist/node/files.mjs.map +1 -1
  523. package/dist/node/filestorage.cjs +100 -1
  524. package/dist/node/filestorage.cjs.map +1 -1
  525. package/dist/node/filestorage.mjs +97 -1
  526. package/dist/node/filestorage.mjs.map +1 -1
  527. package/dist/node/fs.cjs +119 -1
  528. package/dist/node/fs.cjs.map +1 -1
  529. package/dist/node/fs.mjs +101 -1
  530. package/dist/node/fs.mjs.map +1 -1
  531. package/dist/node/glob.cjs +75 -1
  532. package/dist/node/glob.cjs.map +1 -1
  533. package/dist/node/glob.mjs +73 -1
  534. package/dist/node/glob.mjs.map +1 -1
  535. package/dist/node/index.cjs +66 -1
  536. package/dist/node/index.mjs +16 -1
  537. package/dist/node/log/index.cjs +20 -1
  538. package/dist/node/log/index.mjs +7 -1
  539. package/dist/node/log/log-context-node.cjs +39 -1
  540. package/dist/node/log/log-context-node.cjs.map +1 -1
  541. package/dist/node/log/log-context-node.mjs +35 -1
  542. package/dist/node/log/log-context-node.mjs.map +1 -1
  543. package/dist/node/log/log-file-rotation.cjs +71 -1
  544. package/dist/node/log/log-file-rotation.cjs.map +1 -1
  545. package/dist/node/log/log-file-rotation.mjs +68 -1
  546. package/dist/node/log/log-file-rotation.mjs.map +1 -1
  547. package/dist/node/log/log-file.cjs +57 -1
  548. package/dist/node/log/log-file.cjs.map +1 -1
  549. package/dist/node/log/log-file.mjs +54 -1
  550. package/dist/node/log/log-file.mjs.map +1 -1
  551. package/dist/node/log/log-node.cjs +162 -1
  552. package/dist/node/log/log-node.cjs.map +1 -1
  553. package/dist/node/log/log-node.mjs +155 -1
  554. package/dist/node/log/log-node.mjs.map +1 -1
  555. package/dist/node/log/log-rotation.cjs +543 -3
  556. package/dist/node/log/log-rotation.cjs.map +1 -1
  557. package/dist/node/log/log-rotation.mjs +538 -3
  558. package/dist/node/log/log-rotation.mjs.map +1 -1
  559. package/dist/node/log/log-util.cjs +69 -3
  560. package/dist/node/log/log-util.cjs.map +1 -1
  561. package/dist/node/log/log-util.mjs +63 -3
  562. package/dist/node/log/log-util.mjs.map +1 -1
  563. package/dist/node/open-browser.cjs +20 -1
  564. package/dist/node/open-browser.cjs.map +1 -1
  565. package/dist/node/open-browser.mjs +18 -1
  566. package/dist/node/open-browser.mjs.map +1 -1
  567. package/package.json +15 -15
  568. package/src/common/schema/README.md +247 -66
  569. package/src/eslint-defaults.js +4 -0
  570. package/src/index.spec.ts +6 -6
  571. package/dist/bin-Ce3i6ABn.cjs +0 -3
  572. package/dist/bin-SPdenYkw.mjs +0 -3
  573. package/dist/chunk-0Lt9GpW0.mjs +0 -1
  574. package/dist/chunk-D-qHiVGv.cjs +0 -1
  575. package/src/common/schema/README-SCHEMA.md +0 -0
package/dist/node/env.cjs CHANGED
@@ -1,5 +1,101 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-D-qHiVGv.cjs`);let t=require(`node:process`);t=e.n(t);let n=require(`node:fs`);n=e.n(n);let r=require(`node:path`);const i=/^\s*([\w.-]+)\s*=\s*(.*)\s*$/,a=/\\n/g,o=/\r\n|\n|\r/,s=/^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;function c(e){let t={},n=e.toString();n=n.replace(/\r\n?/g,`
2
- `);let r;for(;(r=s.exec(n))!=null;){let e=r[1],n=r[2]||``;n=n.trim();let i=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/gm,`$2`),i===`"`&&(n=n.replace(/\\n/g,`
3
- `),n=n.replace(/\\r/g,`\r`)),t[e]=n}return t}function l(e){let t={};return String(e).split(o).forEach((e,n)=>{let r=e.match(i);if(r!=null){let e=r[1],n=r[2]||``,i=n.length-1,o=n[0]===`"`&&n[i]===`"`;n[0]===`'`&&n[i]===`'`||o?(n=n.substring(1,i),o&&(n=n.replace(a,`
4
- `))):n=n.trim(),t[e]=n}}),t}function u(e,n=`.`){return(0,r.resolve)(t.default.cwd(),e??n)}function d(e,t=``){return e??=t,u(String(e).trim(),t)}const f=d;function p(e,n=t.default.env){if(n[e]!=null)return n[e];e=e.toLowerCase();for(let[t,r]of Object.entries(n))if(t.toLowerCase()===e)return r}function m(e={}){let r=e?.path??f(e?.filename??`.env`),i=e?.encoding??`utf8`;e?.debug;try{let a={};function o(e){return n.default.existsSync(e)?c(n.default.readFileSync(e,{encoding:i})):{}}Object.assign(a,o(r),o(`${r}.local`)),e.mode&&Object.assign(a,o(`${r}.${e.mode}`),o(`${r}.${e.mode}.local`));let s=e?.env??t.default.env;return Object.entries(a).forEach(([t,n])=>{typeof e?.prefix==`string`&&(t=e?.prefix+t),Object.hasOwn(s,t)||n!=null&&(s[t]=n)}),{parsed:a}}catch(e){return{error:e}}}exports.getEnvVariableRelaxed=p,exports.parseEnvString=l,exports.parseEnvStringAlt=c,exports.setupEnv=m,exports.stringToPath=u,exports.toPath=f,exports.valueToPath=d;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-uaV2rQ02.cjs');
3
+ let node_process = require("node:process");
4
+ node_process = require_chunk.__toESM(node_process, 1);
5
+ let node_fs = require("node:fs");
6
+ node_fs = require_chunk.__toESM(node_fs, 1);
7
+ let node_path = require("node:path");
8
+
9
+ //#region src/node/env.ts
10
+ const NEWLINE = "\n";
11
+ const RE_INI_KEY_VAL = /^\s*([\w.-]+)\s*=\s*(.*)\s*$/;
12
+ const RE_NEWLINES = /\\n/g;
13
+ const NEWLINES_MATCH = /\r\n|\n|\r/;
14
+ const LINE = /^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;
15
+ function parseEnvStringAlt(src) {
16
+ const obj = {};
17
+ let lines = src.toString();
18
+ lines = lines.replace(/\r\n?/g, "\n");
19
+ let match;
20
+ while ((match = LINE.exec(lines)) != null) {
21
+ const key = match[1];
22
+ let value = match[2] || "";
23
+ value = value.trim();
24
+ const maybeQuote = value[0];
25
+ value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
26
+ if (maybeQuote === "\"") {
27
+ value = value.replace(/\\n/g, "\n");
28
+ value = value.replace(/\\r/g, "\r");
29
+ }
30
+ obj[key] = value;
31
+ }
32
+ return obj;
33
+ }
34
+ function parseEnvString(src) {
35
+ const obj = {};
36
+ String(src).split(NEWLINES_MATCH).forEach((line, idx) => {
37
+ const keyValueArr = line.match(RE_INI_KEY_VAL);
38
+ if (keyValueArr != null) {
39
+ const key = keyValueArr[1];
40
+ let val = keyValueArr[2] || "";
41
+ const end = val.length - 1;
42
+ const isDoubleQuoted = val[0] === "\"" && val[end] === "\"";
43
+ if (val[0] === "'" && val[end] === "'" || isDoubleQuoted) {
44
+ val = val.substring(1, end);
45
+ if (isDoubleQuoted) val = val.replace(RE_NEWLINES, NEWLINE);
46
+ } else val = val.trim();
47
+ obj[key] = val;
48
+ }
49
+ });
50
+ return obj;
51
+ }
52
+ /**
53
+ * Return a path relative to the current working directory
54
+ */
55
+ function stringToPath(value, defaultValue = ".") {
56
+ return (0, node_path.resolve)(node_process.default.cwd(), value ?? defaultValue);
57
+ }
58
+ function valueToPath(value, defaultValue = "") {
59
+ value ??= defaultValue;
60
+ return stringToPath(String(value).trim(), defaultValue);
61
+ }
62
+ const toPath = valueToPath;
63
+ function getEnvVariableRelaxed(name, env = node_process.default.env) {
64
+ if (env[name] != null) return env[name];
65
+ name = name.toLowerCase();
66
+ for (const [k, v] of Object.entries(env)) if (k.toLowerCase() === name) return v;
67
+ }
68
+ /** Populates process.env from .env file. */
69
+ function setupEnv(options = {}) {
70
+ const dotenvPath = options?.path ?? toPath(options?.filename ?? ".env");
71
+ const encoding = options?.encoding ?? "utf8";
72
+ options?.debug;
73
+ try {
74
+ const parsed = {};
75
+ function envOf(name) {
76
+ return node_fs.default.existsSync(name) ? parseEnvStringAlt(node_fs.default.readFileSync(name, { encoding })) : {};
77
+ }
78
+ Object.assign(parsed, envOf(dotenvPath), envOf(`${dotenvPath}.local`));
79
+ if (options.mode) Object.assign(parsed, envOf(`${dotenvPath}.${options.mode}`), envOf(`${dotenvPath}.${options.mode}.local`));
80
+ const env = options?.env ?? node_process.default.env;
81
+ Object.entries(parsed).forEach(([key, value]) => {
82
+ if (typeof options?.prefix === "string") key = options?.prefix + key;
83
+ if (!Object.hasOwn(env, key)) {
84
+ if (value != null) env[key] = value;
85
+ }
86
+ });
87
+ return { parsed };
88
+ } catch (e) {
89
+ return { error: e };
90
+ }
91
+ }
92
+
93
+ //#endregion
94
+ exports.getEnvVariableRelaxed = getEnvVariableRelaxed;
95
+ exports.parseEnvString = parseEnvString;
96
+ exports.parseEnvStringAlt = parseEnvStringAlt;
97
+ exports.setupEnv = setupEnv;
98
+ exports.stringToPath = stringToPath;
99
+ exports.toPath = toPath;
100
+ exports.valueToPath = valueToPath;
5
101
  //# sourceMappingURL=env.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.cjs","names":["process","fs"],"sources":["../../src/node/env.ts"],"sourcesContent":["// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'node:fs'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\n\nconst NEWLINE = '\\n'\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst RE_INI_KEY_VAL = /^\\s*([\\w.-]+)\\s*=\\s*(.*)\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\r\\n|\\n|\\r/\n\nexport interface EnvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n mode?: string\n}\n\n// BSD-2-Clause License from here https://github.com/motdotla/dotenv/blob/master/lib/main.js#L12\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst LINE = /^\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?$/gm\n\n// https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/#env-file-syntax\nexport function parseEnvStringAlt(src: string): Record<string, string> {\n const obj: Record<string, string> = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/g, '\\n')\n\n let match\n // eslint-disable-next-line no-cond-assign\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n// Parses src into an Object\nexport function parseEnvString(src: string) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n // else {\n // log.debug(`did not match key and value when parsing line ${idx + 1}: ${line}`)\n // }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n value ??= defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parseEnvStringAlt(fs.readFileSync(name, { encoding }))\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\n\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.hasOwn(env, key)) {\n if (value != null)\n env[key] = value\n }\n // else {\n // log.debug(`\"${key}\" is already defined and will not be overwritten`)\n // }\n })\n return { parsed }\n }\n catch (e) {\n return { error: e }\n }\n}\n"],"mappings":"gNAMA,MAEM,EAAiB,+BACjB,EAAc,OACd,EAAiB,aAejB,EAAO,mIAGb,SAAgB,EAAkB,EAAqC,CACrE,IAAM,EAA8B,EAAE,CAGlC,EAAQ,EAAI,UAAU,CAG1B,EAAQ,EAAM,QAAQ,SAAU;EAAK,CAErC,IAAI,EAEJ,MAAQ,EAAQ,EAAK,KAAK,EAAM,GAAK,MAAM,CACzC,IAAM,EAAM,EAAM,GAGd,EAAS,EAAM,IAAM,GAGzB,EAAQ,EAAM,MAAM,CAGpB,IAAM,EAAa,EAAM,GAGzB,EAAQ,EAAM,QAAQ,yBAA0B,KAAK,CAGjD,IAAe,MACjB,EAAQ,EAAM,QAAQ,OAAQ;EAAK,CACnC,EAAQ,EAAM,QAAQ,OAAQ,KAAK,EAIrC,EAAI,GAAO,EAGb,OAAO,EAGT,SAAgB,EAAe,EAAa,CAC1C,IAAM,EAA8B,EAAE,CAyCtC,OAtCA,OAAO,EAAI,CACR,MAAM,EAAe,CAErB,SAAS,EAAM,IAAQ,CAEtB,IAAM,EAAc,EAAK,MAAM,EAAe,CAK9C,GAAI,GAAe,KAAM,CACvB,IAAM,EAAM,EAAY,GAEpB,EAAM,EAAY,IAAM,GACtB,EAAM,EAAI,OAAS,EACnB,EAAiB,EAAI,KAAO,KAAO,EAAI,KAAS,IAC/B,EAAI,KAAO,KAAQ,EAAI,KAAS,KAGjC,GACpB,EAAM,EAAI,UAAU,EAAG,EAAI,CAGvB,IACF,EAAM,EAAI,QAAQ,EAAa;EAAQ,GAIzC,EAAM,EAAI,MAAM,CAElB,EAAI,GAAO,IAKb,CAGG,EAMT,SAAgB,EACd,EACA,EAAe,IACP,CACR,OAAA,EAAA,EAAA,SAAeA,EAAAA,QAAQ,KAAK,CAAE,GAAS,EAAa,CAGtD,SAAgB,EAAY,EAAa,EAAe,GAAY,CAElE,MADA,KAAU,EACH,EAAa,OAAO,EAAM,CAAC,MAAM,CAAE,EAAa,CAGzD,MAAa,EAAS,EAEtB,SAAgB,EACd,EACA,EAAMA,EAAAA,QAAQ,IACM,CACpB,GAAI,EAAI,IAAS,KACf,OAAO,EAAI,GACb,EAAO,EAAK,aAAa,CACzB,IAAK,GAAM,CAAC,EAAG,KAAM,OAAO,QAAQ,EAAI,CACtC,GAAI,EAAE,aAAa,GAAK,EACtB,OAAO,EAKb,SAAgB,EAAS,EAAsB,EAAE,CAAE,CACjD,IAAM,EAAqB,GAAS,MAAQ,EAAO,GAAS,UAAY,OAAO,CACzE,EAA2B,GAAS,UAAY,OACxC,GAAS,MAEvB,GAAI,CACF,IAAM,EAAiC,EAAE,CAEzC,SAAS,EAAM,EAAc,CAC3B,OAAOC,EAAAA,QAAG,WAAW,EAAK,CACtB,EAAkBA,EAAAA,QAAG,aAAa,EAAM,CAAE,WAAU,CAAC,CAAC,CACtD,EAAE,CAGR,OAAO,OACL,EACA,EAAM,EAAW,CACjB,EAAM,GAAG,EAAW,QAAQ,CAC7B,CAEG,EAAQ,MACV,OAAO,OACL,EACA,EAAM,GAAG,EAAW,GAAG,EAAQ,OAAO,CACtC,EAAM,GAAG,EAAW,GAAG,EAAQ,KAAK,QAAQ,CAC7C,CAGH,IAAM,EAAM,GAAS,KAAOD,EAAAA,QAAQ,IAcpC,OAZA,OAAO,QAAQ,EAAO,CAAC,SAAS,CAAC,EAAK,KAAW,CAC3C,OAAO,GAAS,QAAW,WAC7B,EAAM,GAAS,OAAS,GAErB,OAAO,OAAO,EAAK,EAAI,EACtB,GAAS,OACX,EAAI,GAAO,IAKf,CACK,CAAE,SAAQ,OAEZ,EAAG,CACR,MAAO,CAAE,MAAO,EAAG"}
1
+ {"version":3,"file":"env.cjs","names":["process","fs"],"sources":["../../src/node/env.ts"],"sourcesContent":["// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'node:fs'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\n\nconst NEWLINE = '\\n'\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst RE_INI_KEY_VAL = /^\\s*([\\w.-]+)\\s*=\\s*(.*)\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\r\\n|\\n|\\r/\n\nexport interface EnvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n mode?: string\n}\n\n// BSD-2-Clause License from here https://github.com/motdotla/dotenv/blob/master/lib/main.js#L12\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst LINE = /^\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?$/gm\n\n// https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/#env-file-syntax\nexport function parseEnvStringAlt(src: string): Record<string, string> {\n const obj: Record<string, string> = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/g, '\\n')\n\n let match\n // eslint-disable-next-line no-cond-assign\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n// Parses src into an Object\nexport function parseEnvString(src: string) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n // else {\n // log.debug(`did not match key and value when parsing line ${idx + 1}: ${line}`)\n // }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n value ??= defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parseEnvStringAlt(fs.readFileSync(name, { encoding }))\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\n\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.hasOwn(env, key)) {\n if (value != null)\n env[key] = value\n }\n // else {\n // log.debug(`\"${key}\" is already defined and will not be overwritten`)\n // }\n })\n return { parsed }\n }\n catch (e) {\n return { error: e }\n }\n}\n"],"mappings":";;;;;;;;;AAMA,MAAM,UAAU;AAEhB,MAAM,iBAAiB;AACvB,MAAM,cAAc;AACpB,MAAM,iBAAiB;AAevB,MAAM,OAAO;AAGb,SAAgB,kBAAkB,KAAqC;CACrE,MAAM,MAA8B,EAAE;CAGtC,IAAI,QAAQ,IAAI,UAAU;AAG1B,SAAQ,MAAM,QAAQ,UAAU,KAAK;CAErC,IAAI;AAEJ,SAAQ,QAAQ,KAAK,KAAK,MAAM,KAAK,MAAM;EACzC,MAAM,MAAM,MAAM;EAGlB,IAAI,QAAS,MAAM,MAAM;AAGzB,UAAQ,MAAM,MAAM;EAGpB,MAAM,aAAa,MAAM;AAGzB,UAAQ,MAAM,QAAQ,0BAA0B,KAAK;AAGrD,MAAI,eAAe,MAAK;AACtB,WAAQ,MAAM,QAAQ,QAAQ,KAAK;AACnC,WAAQ,MAAM,QAAQ,QAAQ,KAAK;;AAIrC,MAAI,OAAO;;AAGb,QAAO;;AAGT,SAAgB,eAAe,KAAa;CAC1C,MAAM,MAA8B,EAAE;AAGtC,QAAO,IAAI,CACR,MAAM,eAAe,CAErB,SAAS,MAAM,QAAQ;EAEtB,MAAM,cAAc,KAAK,MAAM,eAAe;AAK9C,MAAI,eAAe,MAAM;GACvB,MAAM,MAAM,YAAY;GAExB,IAAI,MAAM,YAAY,MAAM;GAC5B,MAAM,MAAM,IAAI,SAAS;GACzB,MAAM,iBAAiB,IAAI,OAAO,QAAO,IAAI,SAAS;AAItD,OAHuB,IAAI,OAAO,OAAQ,IAAI,SAAS,OAGjC,gBAAgB;AACpC,UAAM,IAAI,UAAU,GAAG,IAAI;AAG3B,QAAI,eACF,OAAM,IAAI,QAAQ,aAAa,QAAQ;SAIzC,OAAM,IAAI,MAAM;AAElB,OAAI,OAAO;;GAKb;AAGJ,QAAO;;;;;AAMT,SAAgB,aACd,OACA,eAAe,KACP;AACR,+BAAeA,qBAAQ,KAAK,EAAE,SAAS,aAAa;;AAGtD,SAAgB,YAAY,OAAa,eAAe,IAAY;AAClE,WAAU;AACV,QAAO,aAAa,OAAO,MAAM,CAAC,MAAM,EAAE,aAAa;;AAGzD,MAAa,SAAS;AAEtB,SAAgB,sBACd,MACA,MAAMA,qBAAQ,KACM;AACpB,KAAI,IAAI,SAAS,KACf,QAAO,IAAI;AACb,QAAO,KAAK,aAAa;AACzB,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,CACtC,KAAI,EAAE,aAAa,KAAK,KACtB,QAAO;;;AAKb,SAAgB,SAAS,UAAsB,EAAE,EAAE;CACjD,MAAM,aAAqB,SAAS,QAAQ,OAAO,SAAS,YAAY,OAAO;CAC/E,MAAM,WAA2B,SAAS,YAAY;AACxC,UAAS;AAEvB,KAAI;EACF,MAAM,SAAiC,EAAE;EAEzC,SAAS,MAAM,MAAc;AAC3B,UAAOC,gBAAG,WAAW,KAAK,GACtB,kBAAkBA,gBAAG,aAAa,MAAM,EAAE,UAAU,CAAC,CAAC,GACtD,EAAE;;AAGR,SAAO,OACL,QACA,MAAM,WAAW,EACjB,MAAM,GAAG,WAAW,QAAQ,CAC7B;AAED,MAAI,QAAQ,KACV,QAAO,OACL,QACA,MAAM,GAAG,WAAW,GAAG,QAAQ,OAAO,EACtC,MAAM,GAAG,WAAW,GAAG,QAAQ,KAAK,QAAQ,CAC7C;EAGH,MAAM,MAAM,SAAS,OAAOD,qBAAQ;AAEpC,SAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW;AAC/C,OAAI,OAAO,SAAS,WAAW,SAC7B,OAAM,SAAS,SAAS;AAE1B,OAAI,CAAC,OAAO,OAAO,KAAK,IAAI,EAC1B;QAAI,SAAS,KACX,KAAI,OAAO;;IAKf;AACF,SAAO,EAAE,QAAQ;UAEZ,GAAG;AACR,SAAO,EAAE,OAAO,GAAG"}
package/dist/node/env.mjs CHANGED
@@ -1,5 +1,91 @@
1
- import e from"node:process";import t from"node:fs";import{resolve as n}from"node:path";const r=/^\s*([\w.-]+)\s*=\s*(.*)\s*$/,i=/\\n/g,a=/\r\n|\n|\r/,o=/^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;function s(e){let t={},n=e.toString();n=n.replace(/\r\n?/g,`
2
- `);let r;for(;(r=o.exec(n))!=null;){let e=r[1],n=r[2]||``;n=n.trim();let i=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/gm,`$2`),i===`"`&&(n=n.replace(/\\n/g,`
3
- `),n=n.replace(/\\r/g,`\r`)),t[e]=n}return t}function c(e){let t={};return String(e).split(a).forEach((e,n)=>{let a=e.match(r);if(a!=null){let e=a[1],n=a[2]||``,r=n.length-1,o=n[0]===`"`&&n[r]===`"`;n[0]===`'`&&n[r]===`'`||o?(n=n.substring(1,r),o&&(n=n.replace(i,`
4
- `))):n=n.trim(),t[e]=n}}),t}function l(t,r=`.`){return n(e.cwd(),t??r)}function u(e,t=``){return e??=t,l(String(e).trim(),t)}const d=u;function f(t,n=e.env){if(n[t]!=null)return n[t];t=t.toLowerCase();for(let[e,r]of Object.entries(n))if(e.toLowerCase()===t)return r}function p(n={}){let r=n?.path??d(n?.filename??`.env`),i=n?.encoding??`utf8`;n?.debug;try{let a={};function o(e){return t.existsSync(e)?s(t.readFileSync(e,{encoding:i})):{}}Object.assign(a,o(r),o(`${r}.local`)),n.mode&&Object.assign(a,o(`${r}.${n.mode}`),o(`${r}.${n.mode}.local`));let c=n?.env??e.env;return Object.entries(a).forEach(([e,t])=>{typeof n?.prefix==`string`&&(e=n?.prefix+e),Object.hasOwn(c,e)||t!=null&&(c[e]=t)}),{parsed:a}}catch(e){return{error:e}}}export{f as getEnvVariableRelaxed,c as parseEnvString,s as parseEnvStringAlt,p as setupEnv,l as stringToPath,d as toPath,u as valueToPath};
1
+ import process from "node:process";
2
+ import fs from "node:fs";
3
+ import { resolve } from "node:path";
4
+
5
+ //#region src/node/env.ts
6
+ const NEWLINE = "\n";
7
+ const RE_INI_KEY_VAL = /^\s*([\w.-]+)\s*=\s*(.*)\s*$/;
8
+ const RE_NEWLINES = /\\n/g;
9
+ const NEWLINES_MATCH = /\r\n|\n|\r/;
10
+ const LINE = /^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;
11
+ function parseEnvStringAlt(src) {
12
+ const obj = {};
13
+ let lines = src.toString();
14
+ lines = lines.replace(/\r\n?/g, "\n");
15
+ let match;
16
+ while ((match = LINE.exec(lines)) != null) {
17
+ const key = match[1];
18
+ let value = match[2] || "";
19
+ value = value.trim();
20
+ const maybeQuote = value[0];
21
+ value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
22
+ if (maybeQuote === "\"") {
23
+ value = value.replace(/\\n/g, "\n");
24
+ value = value.replace(/\\r/g, "\r");
25
+ }
26
+ obj[key] = value;
27
+ }
28
+ return obj;
29
+ }
30
+ function parseEnvString(src) {
31
+ const obj = {};
32
+ String(src).split(NEWLINES_MATCH).forEach((line, idx) => {
33
+ const keyValueArr = line.match(RE_INI_KEY_VAL);
34
+ if (keyValueArr != null) {
35
+ const key = keyValueArr[1];
36
+ let val = keyValueArr[2] || "";
37
+ const end = val.length - 1;
38
+ const isDoubleQuoted = val[0] === "\"" && val[end] === "\"";
39
+ if (val[0] === "'" && val[end] === "'" || isDoubleQuoted) {
40
+ val = val.substring(1, end);
41
+ if (isDoubleQuoted) val = val.replace(RE_NEWLINES, NEWLINE);
42
+ } else val = val.trim();
43
+ obj[key] = val;
44
+ }
45
+ });
46
+ return obj;
47
+ }
48
+ /**
49
+ * Return a path relative to the current working directory
50
+ */
51
+ function stringToPath(value, defaultValue = ".") {
52
+ return resolve(process.cwd(), value ?? defaultValue);
53
+ }
54
+ function valueToPath(value, defaultValue = "") {
55
+ value ??= defaultValue;
56
+ return stringToPath(String(value).trim(), defaultValue);
57
+ }
58
+ const toPath = valueToPath;
59
+ function getEnvVariableRelaxed(name, env = process.env) {
60
+ if (env[name] != null) return env[name];
61
+ name = name.toLowerCase();
62
+ for (const [k, v] of Object.entries(env)) if (k.toLowerCase() === name) return v;
63
+ }
64
+ /** Populates process.env from .env file. */
65
+ function setupEnv(options = {}) {
66
+ const dotenvPath = options?.path ?? toPath(options?.filename ?? ".env");
67
+ const encoding = options?.encoding ?? "utf8";
68
+ options?.debug;
69
+ try {
70
+ const parsed = {};
71
+ function envOf(name) {
72
+ return fs.existsSync(name) ? parseEnvStringAlt(fs.readFileSync(name, { encoding })) : {};
73
+ }
74
+ Object.assign(parsed, envOf(dotenvPath), envOf(`${dotenvPath}.local`));
75
+ if (options.mode) Object.assign(parsed, envOf(`${dotenvPath}.${options.mode}`), envOf(`${dotenvPath}.${options.mode}.local`));
76
+ const env = options?.env ?? process.env;
77
+ Object.entries(parsed).forEach(([key, value]) => {
78
+ if (typeof options?.prefix === "string") key = options?.prefix + key;
79
+ if (!Object.hasOwn(env, key)) {
80
+ if (value != null) env[key] = value;
81
+ }
82
+ });
83
+ return { parsed };
84
+ } catch (e) {
85
+ return { error: e };
86
+ }
87
+ }
88
+
89
+ //#endregion
90
+ export { getEnvVariableRelaxed, parseEnvString, parseEnvStringAlt, setupEnv, stringToPath, toPath, valueToPath };
5
91
  //# sourceMappingURL=env.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.mjs","names":[],"sources":["../../src/node/env.ts"],"sourcesContent":["// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'node:fs'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\n\nconst NEWLINE = '\\n'\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst RE_INI_KEY_VAL = /^\\s*([\\w.-]+)\\s*=\\s*(.*)\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\r\\n|\\n|\\r/\n\nexport interface EnvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n mode?: string\n}\n\n// BSD-2-Clause License from here https://github.com/motdotla/dotenv/blob/master/lib/main.js#L12\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst LINE = /^\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?$/gm\n\n// https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/#env-file-syntax\nexport function parseEnvStringAlt(src: string): Record<string, string> {\n const obj: Record<string, string> = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/g, '\\n')\n\n let match\n // eslint-disable-next-line no-cond-assign\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n// Parses src into an Object\nexport function parseEnvString(src: string) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n // else {\n // log.debug(`did not match key and value when parsing line ${idx + 1}: ${line}`)\n // }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n value ??= defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parseEnvStringAlt(fs.readFileSync(name, { encoding }))\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\n\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.hasOwn(env, key)) {\n if (value != null)\n env[key] = value\n }\n // else {\n // log.debug(`\"${key}\" is already defined and will not be overwritten`)\n // }\n })\n return { parsed }\n }\n catch (e) {\n return { error: e }\n }\n}\n"],"mappings":"uFAMA,MAEM,EAAiB,+BACjB,EAAc,OACd,EAAiB,aAejB,EAAO,mIAGb,SAAgB,EAAkB,EAAqC,CACrE,IAAM,EAA8B,EAAE,CAGlC,EAAQ,EAAI,UAAU,CAG1B,EAAQ,EAAM,QAAQ,SAAU;EAAK,CAErC,IAAI,EAEJ,MAAQ,EAAQ,EAAK,KAAK,EAAM,GAAK,MAAM,CACzC,IAAM,EAAM,EAAM,GAGd,EAAS,EAAM,IAAM,GAGzB,EAAQ,EAAM,MAAM,CAGpB,IAAM,EAAa,EAAM,GAGzB,EAAQ,EAAM,QAAQ,yBAA0B,KAAK,CAGjD,IAAe,MACjB,EAAQ,EAAM,QAAQ,OAAQ;EAAK,CACnC,EAAQ,EAAM,QAAQ,OAAQ,KAAK,EAIrC,EAAI,GAAO,EAGb,OAAO,EAGT,SAAgB,EAAe,EAAa,CAC1C,IAAM,EAA8B,EAAE,CAyCtC,OAtCA,OAAO,EAAI,CACR,MAAM,EAAe,CAErB,SAAS,EAAM,IAAQ,CAEtB,IAAM,EAAc,EAAK,MAAM,EAAe,CAK9C,GAAI,GAAe,KAAM,CACvB,IAAM,EAAM,EAAY,GAEpB,EAAM,EAAY,IAAM,GACtB,EAAM,EAAI,OAAS,EACnB,EAAiB,EAAI,KAAO,KAAO,EAAI,KAAS,IAC/B,EAAI,KAAO,KAAQ,EAAI,KAAS,KAGjC,GACpB,EAAM,EAAI,UAAU,EAAG,EAAI,CAGvB,IACF,EAAM,EAAI,QAAQ,EAAa;EAAQ,GAIzC,EAAM,EAAI,MAAM,CAElB,EAAI,GAAO,IAKb,CAGG,EAMT,SAAgB,EACd,EACA,EAAe,IACP,CACR,OAAO,EAAQ,EAAQ,KAAK,CAAE,GAAS,EAAa,CAGtD,SAAgB,EAAY,EAAa,EAAe,GAAY,CAElE,MADA,KAAU,EACH,EAAa,OAAO,EAAM,CAAC,MAAM,CAAE,EAAa,CAGzD,MAAa,EAAS,EAEtB,SAAgB,EACd,EACA,EAAM,EAAQ,IACM,CACpB,GAAI,EAAI,IAAS,KACf,OAAO,EAAI,GACb,EAAO,EAAK,aAAa,CACzB,IAAK,GAAM,CAAC,EAAG,KAAM,OAAO,QAAQ,EAAI,CACtC,GAAI,EAAE,aAAa,GAAK,EACtB,OAAO,EAKb,SAAgB,EAAS,EAAsB,EAAE,CAAE,CACjD,IAAM,EAAqB,GAAS,MAAQ,EAAO,GAAS,UAAY,OAAO,CACzE,EAA2B,GAAS,UAAY,OACxC,GAAS,MAEvB,GAAI,CACF,IAAM,EAAiC,EAAE,CAEzC,SAAS,EAAM,EAAc,CAC3B,OAAO,EAAG,WAAW,EAAK,CACtB,EAAkB,EAAG,aAAa,EAAM,CAAE,WAAU,CAAC,CAAC,CACtD,EAAE,CAGR,OAAO,OACL,EACA,EAAM,EAAW,CACjB,EAAM,GAAG,EAAW,QAAQ,CAC7B,CAEG,EAAQ,MACV,OAAO,OACL,EACA,EAAM,GAAG,EAAW,GAAG,EAAQ,OAAO,CACtC,EAAM,GAAG,EAAW,GAAG,EAAQ,KAAK,QAAQ,CAC7C,CAGH,IAAM,EAAM,GAAS,KAAO,EAAQ,IAcpC,OAZA,OAAO,QAAQ,EAAO,CAAC,SAAS,CAAC,EAAK,KAAW,CAC3C,OAAO,GAAS,QAAW,WAC7B,EAAM,GAAS,OAAS,GAErB,OAAO,OAAO,EAAK,EAAI,EACtB,GAAS,OACX,EAAI,GAAO,IAKf,CACK,CAAE,SAAQ,OAEZ,EAAG,CACR,MAAO,CAAE,MAAO,EAAG"}
1
+ {"version":3,"file":"env.mjs","names":[],"sources":["../../src/node/env.ts"],"sourcesContent":["// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'node:fs'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\n\nconst NEWLINE = '\\n'\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst RE_INI_KEY_VAL = /^\\s*([\\w.-]+)\\s*=\\s*(.*)\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\r\\n|\\n|\\r/\n\nexport interface EnvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n mode?: string\n}\n\n// BSD-2-Clause License from here https://github.com/motdotla/dotenv/blob/master/lib/main.js#L12\n// eslint-disable-next-line regexp/no-super-linear-backtracking\nconst LINE = /^\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?$/gm\n\n// https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/#env-file-syntax\nexport function parseEnvStringAlt(src: string): Record<string, string> {\n const obj: Record<string, string> = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/g, '\\n')\n\n let match\n // eslint-disable-next-line no-cond-assign\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n// Parses src into an Object\nexport function parseEnvString(src: string) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n // else {\n // log.debug(`did not match key and value when parsing line ${idx + 1}: ${line}`)\n // }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n value ??= defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parseEnvStringAlt(fs.readFileSync(name, { encoding }))\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\n\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.hasOwn(env, key)) {\n if (value != null)\n env[key] = value\n }\n // else {\n // log.debug(`\"${key}\" is already defined and will not be overwritten`)\n // }\n })\n return { parsed }\n }\n catch (e) {\n return { error: e }\n }\n}\n"],"mappings":";;;;;AAMA,MAAM,UAAU;AAEhB,MAAM,iBAAiB;AACvB,MAAM,cAAc;AACpB,MAAM,iBAAiB;AAevB,MAAM,OAAO;AAGb,SAAgB,kBAAkB,KAAqC;CACrE,MAAM,MAA8B,EAAE;CAGtC,IAAI,QAAQ,IAAI,UAAU;AAG1B,SAAQ,MAAM,QAAQ,UAAU,KAAK;CAErC,IAAI;AAEJ,SAAQ,QAAQ,KAAK,KAAK,MAAM,KAAK,MAAM;EACzC,MAAM,MAAM,MAAM;EAGlB,IAAI,QAAS,MAAM,MAAM;AAGzB,UAAQ,MAAM,MAAM;EAGpB,MAAM,aAAa,MAAM;AAGzB,UAAQ,MAAM,QAAQ,0BAA0B,KAAK;AAGrD,MAAI,eAAe,MAAK;AACtB,WAAQ,MAAM,QAAQ,QAAQ,KAAK;AACnC,WAAQ,MAAM,QAAQ,QAAQ,KAAK;;AAIrC,MAAI,OAAO;;AAGb,QAAO;;AAGT,SAAgB,eAAe,KAAa;CAC1C,MAAM,MAA8B,EAAE;AAGtC,QAAO,IAAI,CACR,MAAM,eAAe,CAErB,SAAS,MAAM,QAAQ;EAEtB,MAAM,cAAc,KAAK,MAAM,eAAe;AAK9C,MAAI,eAAe,MAAM;GACvB,MAAM,MAAM,YAAY;GAExB,IAAI,MAAM,YAAY,MAAM;GAC5B,MAAM,MAAM,IAAI,SAAS;GACzB,MAAM,iBAAiB,IAAI,OAAO,QAAO,IAAI,SAAS;AAItD,OAHuB,IAAI,OAAO,OAAQ,IAAI,SAAS,OAGjC,gBAAgB;AACpC,UAAM,IAAI,UAAU,GAAG,IAAI;AAG3B,QAAI,eACF,OAAM,IAAI,QAAQ,aAAa,QAAQ;SAIzC,OAAM,IAAI,MAAM;AAElB,OAAI,OAAO;;GAKb;AAGJ,QAAO;;;;;AAMT,SAAgB,aACd,OACA,eAAe,KACP;AACR,QAAO,QAAQ,QAAQ,KAAK,EAAE,SAAS,aAAa;;AAGtD,SAAgB,YAAY,OAAa,eAAe,IAAY;AAClE,WAAU;AACV,QAAO,aAAa,OAAO,MAAM,CAAC,MAAM,EAAE,aAAa;;AAGzD,MAAa,SAAS;AAEtB,SAAgB,sBACd,MACA,MAAM,QAAQ,KACM;AACpB,KAAI,IAAI,SAAS,KACf,QAAO,IAAI;AACb,QAAO,KAAK,aAAa;AACzB,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,CACtC,KAAI,EAAE,aAAa,KAAK,KACtB,QAAO;;;AAKb,SAAgB,SAAS,UAAsB,EAAE,EAAE;CACjD,MAAM,aAAqB,SAAS,QAAQ,OAAO,SAAS,YAAY,OAAO;CAC/E,MAAM,WAA2B,SAAS,YAAY;AACxC,UAAS;AAEvB,KAAI;EACF,MAAM,SAAiC,EAAE;EAEzC,SAAS,MAAM,MAAc;AAC3B,UAAO,GAAG,WAAW,KAAK,GACtB,kBAAkB,GAAG,aAAa,MAAM,EAAE,UAAU,CAAC,CAAC,GACtD,EAAE;;AAGR,SAAO,OACL,QACA,MAAM,WAAW,EACjB,MAAM,GAAG,WAAW,QAAQ,CAC7B;AAED,MAAI,QAAQ,KACV,QAAO,OACL,QACA,MAAM,GAAG,WAAW,GAAG,QAAQ,OAAO,EACtC,MAAM,GAAG,WAAW,GAAG,QAAQ,KAAK,QAAQ,CAC7C;EAGH,MAAM,MAAM,SAAS,OAAO,QAAQ;AAEpC,SAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW;AAC/C,OAAI,OAAO,SAAS,WAAW,SAC7B,OAAM,SAAS,SAAS;AAE1B,OAAI,CAAC,OAAO,OAAO,KAAK,IAAI,EAC1B;QAAI,SAAS,KACX,KAAI,OAAO;;IAKf;AACF,SAAO,EAAE,QAAQ;UAEZ,GAAG;AACR,SAAO,EAAE,OAAO,GAAG"}
@@ -1,2 +1,67 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-D-qHiVGv.cjs`),t=require(`./fs.cjs`),n=require(`./glob.cjs`);let r=require(`node:process`);r=e.n(r);let i=require(`node:path`),a=require(`node:fs/promises`);async function o(e){try{return await(0,a.stat)(e)}catch{}}async function s(e){let t=await o(e);if(t==null)return;let{mtimeMs:n,size:r}=t;return`${e}|${n}|${r}`}async function c(e,n=``,r=!0){let s=[],l=await(0,a.readdir)((0,i.resolve)(e,n));if(l!=null&&l.length>0)for(let a of l){if(a=(0,i.join)(n,a),r&&t.isHiddenPath(a))continue;let l=await o((0,i.join)(e,a));l&&l.isDirectory()?s=[...s,...await c(e,a)||[]]:s.push(a)}return s}async function l(e={}){let{pattern:t,filter:i,basePath:a=r.default.cwd(),ignoreHidden:o=!1}=e,s=await c(a,``,o);if(s=s.filter(e=>!(o&&(e.startsWith(`.`)||e.includes(`/.`)))),t&&(typeof t==`string`&&(t=n.globToRegExp(t)),t instanceof RegExp)){let e=t;e.lastIndex=0,s=s.filter(t=>e.test(t))}return i&&(s=s.filter(i)),s}exports.filesAsync=l,exports.getFingerprintAsync=s,exports.getStatAsync=o,exports.walkSyncAsync=c;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-uaV2rQ02.cjs');
3
+ const require_node_fs = require('./fs.cjs');
4
+ const require_node_glob = require('./glob.cjs');
5
+ let node_process = require("node:process");
6
+ node_process = require_chunk.__toESM(node_process, 1);
7
+ let node_path = require("node:path");
8
+ let node_fs_promises = require("node:fs/promises");
9
+
10
+ //#region src/node/files-async.ts
11
+ /**
12
+ * Retrieves the file system stats for the specified path asynchronously.
13
+ * @param path - The path to the file or directory.
14
+ * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.
15
+ */
16
+ async function getStatAsync(path) {
17
+ try {
18
+ return await (0, node_fs_promises.stat)(path);
19
+ } catch (err) {}
20
+ }
21
+ /**
22
+ * Retrieves the fingerprint of a file asynchronously.
23
+ * The fingerprint is a string representation of the file's path, modification time, and size.
24
+ *
25
+ * @param path - The path of the file.
26
+ * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.
27
+ */
28
+ async function getFingerprintAsync(path) {
29
+ const stat = await getStatAsync(path);
30
+ if (stat == null) return;
31
+ const { mtimeMs, size } = stat;
32
+ return `${path}|${mtimeMs}|${size}`;
33
+ }
34
+ async function walkSyncAsync(rootFolder, subFolder = "", ignoreHidden = true) {
35
+ let resultPaths = [];
36
+ const paths = await (0, node_fs_promises.readdir)((0, node_path.resolve)(rootFolder, subFolder));
37
+ if (paths != null && paths.length > 0) for (let file of paths) {
38
+ file = (0, node_path.join)(subFolder, file);
39
+ if (ignoreHidden && require_node_fs.isHiddenPath(file)) continue;
40
+ const stat = await getStatAsync((0, node_path.join)(rootFolder, file));
41
+ if (stat && stat.isDirectory()) resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []];
42
+ else resultPaths.push(file);
43
+ }
44
+ return resultPaths;
45
+ }
46
+ async function filesAsync(opt = {}) {
47
+ let { pattern, filter, basePath = node_process.default.cwd(), ignoreHidden = false } = opt;
48
+ let paths = await walkSyncAsync(basePath, "", ignoreHidden);
49
+ paths = paths.filter((path) => !(ignoreHidden && (path.startsWith(".") || path.includes("/."))));
50
+ if (pattern) {
51
+ if (typeof pattern === "string") pattern = require_node_glob.globToRegExp(pattern);
52
+ if (pattern instanceof RegExp) {
53
+ const rx = pattern;
54
+ rx.lastIndex = 0;
55
+ paths = paths.filter((path) => rx.test(path));
56
+ }
57
+ }
58
+ if (filter) paths = paths.filter(filter);
59
+ return paths;
60
+ }
61
+
62
+ //#endregion
63
+ exports.filesAsync = filesAsync;
64
+ exports.getFingerprintAsync = getFingerprintAsync;
65
+ exports.getStatAsync = getStatAsync;
66
+ exports.walkSyncAsync = walkSyncAsync;
2
67
  //# sourceMappingURL=files-async.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-async.cjs","names":["isHiddenPath","process","globToRegExp"],"sources":["../../src/node/files-async.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\n/**\n * Base stats interface for file system objects.\n * @category FileSystem\n */\nexport interface StatsBase {\n isFile: () => boolean\n isDirectory: () => boolean\n isBlockDevice: () => boolean\n isCharacterDevice: () => boolean\n isSymbolicLink: () => boolean\n isFIFO: () => boolean\n isSocket: () => boolean\n dev: number\n ino: number\n mode: number\n nlink: number\n uid: number\n gid: number\n rdev: number\n size: number\n blksize: number\n blocks: number\n atimeMs: number\n mtimeMs: number\n ctimeMs: number\n birthtimeMs: number\n atime: Date\n mtime: Date\n ctime: Date\n birthtime: Date\n}\n\n/**\n * Retrieves the file system stats for the specified path asynchronously.\n * @param path - The path to the file or directory.\n * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.\n */\nexport async function getStatAsync(path: string): Promise<StatsBase | undefined> {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\n/**\n * Retrieves the fingerprint of a file asynchronously.\n * The fingerprint is a string representation of the file's path, modification time, and size.\n *\n * @param path - The path of the file.\n * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.\n */\nexport async function getFingerprintAsync(path: string): Promise<string | undefined> {\n const stat = await getStatAsync(path)\n if (stat == null)\n return\n const { mtimeMs, size } = stat\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n"],"mappings":"0PA2CA,eAAsB,EAAa,EAA8C,CAC/E,GAAI,CACF,OAAO,MAAA,EAAA,EAAA,MAAW,EAAK,MAEb,GAUd,eAAsB,EAAoB,EAA2C,CACnF,IAAM,EAAO,MAAM,EAAa,EAAK,CACrC,GAAI,GAAQ,KACV,OACF,GAAM,CAAE,UAAS,QAAS,EAC1B,MAAO,GAAG,EAAK,GAAG,EAAQ,GAAG,IAG/B,eAAsB,EAAc,EAAoB,EAAY,GAAI,EAAe,GAAM,CAC3F,IAAI,EAAwB,EAAE,CACxB,EAAQ,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAsB,EAAY,EAAU,CAAC,CAC3D,GAAI,GAAS,MAAQ,EAAM,OAAS,EAClC,IAAK,IAAI,KAAQ,EAAO,CAEtB,GADA,GAAA,EAAA,EAAA,MAAY,EAAW,EAAK,CACxB,GAAgBA,EAAAA,aAAa,EAAK,CACpC,SAEF,IAAM,EAAO,MAAM,GAAA,EAAA,EAAA,MADG,EAAY,EAAK,CACE,CACrC,GAAQ,EAAK,aAAa,CAC5B,EAAc,CAAC,GAAG,EAAa,GAAG,MAAM,EAAc,EAAY,EAAK,EAAI,EAAE,CAAC,CAE9E,EAAY,KAAK,EAAK,CAG5B,OAAO,EAGT,eAAsB,EAAW,EAK7B,EAAE,CAAE,CACN,GAAI,CACF,UACA,SACA,WAAWC,EAAAA,QAAQ,KAAK,CACxB,eAAe,IACb,EAEA,EAAQ,MAAM,EAAc,EAAU,GAAI,EAAa,CAO3D,GALA,EAAQ,EAAM,OACZ,GACE,EAAE,IAAiB,EAAK,WAAW,IAAI,EAAI,EAAK,SAAS,KAAK,GACjE,CAEG,IACE,OAAO,GAAY,WACrB,EAAUC,EAAAA,aAAa,EAAQ,EAC7B,aAAmB,QAAQ,CAC7B,IAAM,EAAK,EACX,EAAG,UAAY,EACf,EAAQ,EAAM,OAAO,GAAQ,EAAG,KAAK,EAAK,CAAC,CAO/C,OAHI,IACF,EAAQ,EAAM,OAAO,EAAO,EAEvB"}
1
+ {"version":3,"file":"files-async.cjs","names":["isHiddenPath","process","globToRegExp"],"sources":["../../src/node/files-async.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\n/**\n * Base stats interface for file system objects.\n * @category FileSystem\n */\nexport interface StatsBase {\n isFile: () => boolean\n isDirectory: () => boolean\n isBlockDevice: () => boolean\n isCharacterDevice: () => boolean\n isSymbolicLink: () => boolean\n isFIFO: () => boolean\n isSocket: () => boolean\n dev: number\n ino: number\n mode: number\n nlink: number\n uid: number\n gid: number\n rdev: number\n size: number\n blksize: number\n blocks: number\n atimeMs: number\n mtimeMs: number\n ctimeMs: number\n birthtimeMs: number\n atime: Date\n mtime: Date\n ctime: Date\n birthtime: Date\n}\n\n/**\n * Retrieves the file system stats for the specified path asynchronously.\n * @param path - The path to the file or directory.\n * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.\n */\nexport async function getStatAsync(path: string): Promise<StatsBase | undefined> {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\n/**\n * Retrieves the fingerprint of a file asynchronously.\n * The fingerprint is a string representation of the file's path, modification time, and size.\n *\n * @param path - The path of the file.\n * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.\n */\nexport async function getFingerprintAsync(path: string): Promise<string | undefined> {\n const stat = await getStatAsync(path)\n if (stat == null)\n return\n const { mtimeMs, size } = stat\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,eAAsB,aAAa,MAA8C;AAC/E,KAAI;AACF,SAAO,iCAAW,KAAK;UAElB,KAAK;;;;;;;;;AAUd,eAAsB,oBAAoB,MAA2C;CACnF,MAAM,OAAO,MAAM,aAAa,KAAK;AACrC,KAAI,QAAQ,KACV;CACF,MAAM,EAAE,SAAS,SAAS;AAC1B,QAAO,GAAG,KAAK,GAAG,QAAQ,GAAG;;AAG/B,eAAsB,cAAc,YAAoB,YAAY,IAAI,eAAe,MAAM;CAC3F,IAAI,cAAwB,EAAE;CAC9B,MAAM,QAAQ,2DAAsB,YAAY,UAAU,CAAC;AAC3D,KAAI,SAAS,QAAQ,MAAM,SAAS,EAClC,MAAK,IAAI,QAAQ,OAAO;AACtB,6BAAY,WAAW,KAAK;AAC5B,MAAI,gBAAgBA,6BAAa,KAAK,CACpC;EAEF,MAAM,OAAO,MAAM,iCADG,YAAY,KAAK,CACE;AACzC,MAAI,QAAQ,KAAK,aAAa,CAC5B,eAAc,CAAC,GAAG,aAAa,GAAG,MAAM,cAAc,YAAY,KAAK,IAAI,EAAE,CAAC;MAE9E,aAAY,KAAK,KAAK;;AAG5B,QAAO;;AAGT,eAAsB,WAAW,MAK7B,EAAE,EAAE;CACN,IAAI,EACF,SACA,QACA,WAAWC,qBAAQ,KAAK,EACxB,eAAe,UACb;CAEJ,IAAI,QAAQ,MAAM,cAAc,UAAU,IAAI,aAAa;AAE3D,SAAQ,MAAM,QACZ,SACE,EAAE,iBAAiB,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK,GACjE;AAED,KAAI,SAAS;AACX,MAAI,OAAO,YAAY,SACrB,WAAUC,+BAAa,QAAQ;AACjC,MAAI,mBAAmB,QAAQ;GAC7B,MAAM,KAAK;AACX,MAAG,YAAY;AACf,WAAQ,MAAM,QAAO,SAAQ,GAAG,KAAK,KAAK,CAAC;;;AAI/C,KAAI,OACF,SAAQ,MAAM,OAAO,OAAO;AAE9B,QAAO"}
@@ -1,2 +1,61 @@
1
- import{isHiddenPath as e}from"./fs.mjs";import{globToRegExp as t}from"./glob.mjs";import n from"node:process";import{join as r,resolve as i}from"node:path";import{readdir as a,stat as o}from"node:fs/promises";async function s(e){try{return await o(e)}catch{}}async function c(e){let t=await s(e);if(t==null)return;let{mtimeMs:n,size:r}=t;return`${e}|${n}|${r}`}async function l(t,n=``,o=!0){let c=[],u=await a(i(t,n));if(u!=null&&u.length>0)for(let i of u){if(i=r(n,i),o&&e(i))continue;let a=await s(r(t,i));a&&a.isDirectory()?c=[...c,...await l(t,i)||[]]:c.push(i)}return c}async function u(e={}){let{pattern:r,filter:i,basePath:a=n.cwd(),ignoreHidden:o=!1}=e,s=await l(a,``,o);if(s=s.filter(e=>!(o&&(e.startsWith(`.`)||e.includes(`/.`)))),r&&(typeof r==`string`&&(r=t(r)),r instanceof RegExp)){let e=r;e.lastIndex=0,s=s.filter(t=>e.test(t))}return i&&(s=s.filter(i)),s}export{u as filesAsync,c as getFingerprintAsync,s as getStatAsync,l as walkSyncAsync};
1
+ import { isHiddenPath } from "./fs.mjs";
2
+ import { globToRegExp } from "./glob.mjs";
3
+ import process from "node:process";
4
+ import { join, resolve } from "node:path";
5
+ import { readdir, stat } from "node:fs/promises";
6
+
7
+ //#region src/node/files-async.ts
8
+ /**
9
+ * Retrieves the file system stats for the specified path asynchronously.
10
+ * @param path - The path to the file or directory.
11
+ * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.
12
+ */
13
+ async function getStatAsync(path) {
14
+ try {
15
+ return await stat(path);
16
+ } catch (err) {}
17
+ }
18
+ /**
19
+ * Retrieves the fingerprint of a file asynchronously.
20
+ * The fingerprint is a string representation of the file's path, modification time, and size.
21
+ *
22
+ * @param path - The path of the file.
23
+ * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.
24
+ */
25
+ async function getFingerprintAsync(path) {
26
+ const stat = await getStatAsync(path);
27
+ if (stat == null) return;
28
+ const { mtimeMs, size } = stat;
29
+ return `${path}|${mtimeMs}|${size}`;
30
+ }
31
+ async function walkSyncAsync(rootFolder, subFolder = "", ignoreHidden = true) {
32
+ let resultPaths = [];
33
+ const paths = await readdir(resolve(rootFolder, subFolder));
34
+ if (paths != null && paths.length > 0) for (let file of paths) {
35
+ file = join(subFolder, file);
36
+ if (ignoreHidden && isHiddenPath(file)) continue;
37
+ const stat = await getStatAsync(join(rootFolder, file));
38
+ if (stat && stat.isDirectory()) resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []];
39
+ else resultPaths.push(file);
40
+ }
41
+ return resultPaths;
42
+ }
43
+ async function filesAsync(opt = {}) {
44
+ let { pattern, filter, basePath = process.cwd(), ignoreHidden = false } = opt;
45
+ let paths = await walkSyncAsync(basePath, "", ignoreHidden);
46
+ paths = paths.filter((path) => !(ignoreHidden && (path.startsWith(".") || path.includes("/."))));
47
+ if (pattern) {
48
+ if (typeof pattern === "string") pattern = globToRegExp(pattern);
49
+ if (pattern instanceof RegExp) {
50
+ const rx = pattern;
51
+ rx.lastIndex = 0;
52
+ paths = paths.filter((path) => rx.test(path));
53
+ }
54
+ }
55
+ if (filter) paths = paths.filter(filter);
56
+ return paths;
57
+ }
58
+
59
+ //#endregion
60
+ export { filesAsync, getFingerprintAsync, getStatAsync, walkSyncAsync };
2
61
  //# sourceMappingURL=files-async.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-async.mjs","names":[],"sources":["../../src/node/files-async.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\n/**\n * Base stats interface for file system objects.\n * @category FileSystem\n */\nexport interface StatsBase {\n isFile: () => boolean\n isDirectory: () => boolean\n isBlockDevice: () => boolean\n isCharacterDevice: () => boolean\n isSymbolicLink: () => boolean\n isFIFO: () => boolean\n isSocket: () => boolean\n dev: number\n ino: number\n mode: number\n nlink: number\n uid: number\n gid: number\n rdev: number\n size: number\n blksize: number\n blocks: number\n atimeMs: number\n mtimeMs: number\n ctimeMs: number\n birthtimeMs: number\n atime: Date\n mtime: Date\n ctime: Date\n birthtime: Date\n}\n\n/**\n * Retrieves the file system stats for the specified path asynchronously.\n * @param path - The path to the file or directory.\n * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.\n */\nexport async function getStatAsync(path: string): Promise<StatsBase | undefined> {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\n/**\n * Retrieves the fingerprint of a file asynchronously.\n * The fingerprint is a string representation of the file's path, modification time, and size.\n *\n * @param path - The path of the file.\n * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.\n */\nexport async function getFingerprintAsync(path: string): Promise<string | undefined> {\n const stat = await getStatAsync(path)\n if (stat == null)\n return\n const { mtimeMs, size } = stat\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n"],"mappings":"iNA2CA,eAAsB,EAAa,EAA8C,CAC/E,GAAI,CACF,OAAO,MAAM,EAAK,EAAK,MAEb,GAUd,eAAsB,EAAoB,EAA2C,CACnF,IAAM,EAAO,MAAM,EAAa,EAAK,CACrC,GAAI,GAAQ,KACV,OACF,GAAM,CAAE,UAAS,QAAS,EAC1B,MAAO,GAAG,EAAK,GAAG,EAAQ,GAAG,IAG/B,eAAsB,EAAc,EAAoB,EAAY,GAAI,EAAe,GAAM,CAC3F,IAAI,EAAwB,EAAE,CACxB,EAAQ,MAAM,EAAQ,EAAQ,EAAY,EAAU,CAAC,CAC3D,GAAI,GAAS,MAAQ,EAAM,OAAS,EAClC,IAAK,IAAI,KAAQ,EAAO,CAEtB,GADA,EAAO,EAAK,EAAW,EAAK,CACxB,GAAgB,EAAa,EAAK,CACpC,SAEF,IAAM,EAAO,MAAM,EADF,EAAK,EAAY,EAAK,CACE,CACrC,GAAQ,EAAK,aAAa,CAC5B,EAAc,CAAC,GAAG,EAAa,GAAG,MAAM,EAAc,EAAY,EAAK,EAAI,EAAE,CAAC,CAE9E,EAAY,KAAK,EAAK,CAG5B,OAAO,EAGT,eAAsB,EAAW,EAK7B,EAAE,CAAE,CACN,GAAI,CACF,UACA,SACA,WAAW,EAAQ,KAAK,CACxB,eAAe,IACb,EAEA,EAAQ,MAAM,EAAc,EAAU,GAAI,EAAa,CAO3D,GALA,EAAQ,EAAM,OACZ,GACE,EAAE,IAAiB,EAAK,WAAW,IAAI,EAAI,EAAK,SAAS,KAAK,GACjE,CAEG,IACE,OAAO,GAAY,WACrB,EAAU,EAAa,EAAQ,EAC7B,aAAmB,QAAQ,CAC7B,IAAM,EAAK,EACX,EAAG,UAAY,EACf,EAAQ,EAAM,OAAO,GAAQ,EAAG,KAAK,EAAK,CAAC,CAO/C,OAHI,IACF,EAAQ,EAAM,OAAO,EAAO,EAEvB"}
1
+ {"version":3,"file":"files-async.mjs","names":[],"sources":["../../src/node/files-async.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\n/**\n * Base stats interface for file system objects.\n * @category FileSystem\n */\nexport interface StatsBase {\n isFile: () => boolean\n isDirectory: () => boolean\n isBlockDevice: () => boolean\n isCharacterDevice: () => boolean\n isSymbolicLink: () => boolean\n isFIFO: () => boolean\n isSocket: () => boolean\n dev: number\n ino: number\n mode: number\n nlink: number\n uid: number\n gid: number\n rdev: number\n size: number\n blksize: number\n blocks: number\n atimeMs: number\n mtimeMs: number\n ctimeMs: number\n birthtimeMs: number\n atime: Date\n mtime: Date\n ctime: Date\n birthtime: Date\n}\n\n/**\n * Retrieves the file system stats for the specified path asynchronously.\n * @param path - The path to the file or directory.\n * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.\n */\nexport async function getStatAsync(path: string): Promise<StatsBase | undefined> {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\n/**\n * Retrieves the fingerprint of a file asynchronously.\n * The fingerprint is a string representation of the file's path, modification time, and size.\n *\n * @param path - The path of the file.\n * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.\n */\nexport async function getFingerprintAsync(path: string): Promise<string | undefined> {\n const stat = await getStatAsync(path)\n if (stat == null)\n return\n const { mtimeMs, size } = stat\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n"],"mappings":";;;;;;;;;;;;AA2CA,eAAsB,aAAa,MAA8C;AAC/E,KAAI;AACF,SAAO,MAAM,KAAK,KAAK;UAElB,KAAK;;;;;;;;;AAUd,eAAsB,oBAAoB,MAA2C;CACnF,MAAM,OAAO,MAAM,aAAa,KAAK;AACrC,KAAI,QAAQ,KACV;CACF,MAAM,EAAE,SAAS,SAAS;AAC1B,QAAO,GAAG,KAAK,GAAG,QAAQ,GAAG;;AAG/B,eAAsB,cAAc,YAAoB,YAAY,IAAI,eAAe,MAAM;CAC3F,IAAI,cAAwB,EAAE;CAC9B,MAAM,QAAQ,MAAM,QAAQ,QAAQ,YAAY,UAAU,CAAC;AAC3D,KAAI,SAAS,QAAQ,MAAM,SAAS,EAClC,MAAK,IAAI,QAAQ,OAAO;AACtB,SAAO,KAAK,WAAW,KAAK;AAC5B,MAAI,gBAAgB,aAAa,KAAK,CACpC;EAEF,MAAM,OAAO,MAAM,aADF,KAAK,YAAY,KAAK,CACE;AACzC,MAAI,QAAQ,KAAK,aAAa,CAC5B,eAAc,CAAC,GAAG,aAAa,GAAG,MAAM,cAAc,YAAY,KAAK,IAAI,EAAE,CAAC;MAE9E,aAAY,KAAK,KAAK;;AAG5B,QAAO;;AAGT,eAAsB,WAAW,MAK7B,EAAE,EAAE;CACN,IAAI,EACF,SACA,QACA,WAAW,QAAQ,KAAK,EACxB,eAAe,UACb;CAEJ,IAAI,QAAQ,MAAM,cAAc,UAAU,IAAI,aAAa;AAE3D,SAAQ,MAAM,QACZ,SACE,EAAE,iBAAiB,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK,GACjE;AAED,KAAI,SAAS;AACX,MAAI,OAAO,YAAY,SACrB,WAAU,aAAa,QAAQ;AACjC,MAAI,mBAAmB,QAAQ;GAC7B,MAAM,KAAK;AACX,MAAG,YAAY;AACf,WAAQ,MAAM,QAAO,SAAQ,GAAG,KAAK,KAAK,CAAC;;;AAI/C,KAAI,OACF,SAAQ,MAAM,OAAO,OAAO;AAE9B,QAAO"}
@@ -1,2 +1,53 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-D-qHiVGv.cjs`),t=require(`./fs.cjs`),n=require(`./glob.cjs`);let r=require(`node:process`);r=e.n(r);let i=require(`node:fs`),a=require(`node:path`);function o(e){try{return(0,i.statSync)(e)}catch{}}function s(e){let{mtimeMs:t,size:n}=o(e)??{};return`${e}|${t}|${n}`}function c(e,n=``,r=!0){let s=[],l=(0,i.readdirSync)((0,a.resolve)(e,n));if(l!=null&&l.length>0)for(let i of l){if(i=(0,a.join)(n,i),r&&t.isHiddenPath(i))continue;let l=o((0,a.join)(e,i));l&&l.isDirectory()?s=[...s,...c(e,i)||[]]:s.push(i)}return s}function l(e={}){let{pattern:t,filter:i,basePath:a=r.default.cwd(),ignoreHidden:o=!1}=e,s=c(a,``,o);if(s=s.filter(e=>!(o&&(e.startsWith(`.`)||e.includes(`/.`)))),t&&(typeof t==`string`&&(t=n.globToRegExp(t)),t instanceof RegExp)){let e=t;e.lastIndex=0,s=s.filter(t=>e.test(t))}return i&&(s=s.filter(i)),s}exports.files=l,exports.getFingerprint=s,exports.getStat=o,exports.walkSync=c;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-uaV2rQ02.cjs');
3
+ const require_node_fs = require('./fs.cjs');
4
+ const require_node_glob = require('./glob.cjs');
5
+ let node_process = require("node:process");
6
+ node_process = require_chunk.__toESM(node_process, 1);
7
+ let node_fs = require("node:fs");
8
+ let node_path = require("node:path");
9
+
10
+ //#region src/node/files.ts
11
+ function getStat(path) {
12
+ try {
13
+ return (0, node_fs.statSync)(path);
14
+ } catch (err) {}
15
+ }
16
+ function getFingerprint(path) {
17
+ const { mtimeMs, size } = getStat(path) ?? {};
18
+ return `${path}|${mtimeMs}|${size}`;
19
+ }
20
+ function walkSync(rootFolder, subFolder = "", ignoreHidden = true) {
21
+ let resultPaths = [];
22
+ const paths = (0, node_fs.readdirSync)((0, node_path.resolve)(rootFolder, subFolder));
23
+ if (paths != null && paths.length > 0) for (let file of paths) {
24
+ file = (0, node_path.join)(subFolder, file);
25
+ if (ignoreHidden && require_node_fs.isHiddenPath(file)) continue;
26
+ const stat = getStat((0, node_path.join)(rootFolder, file));
27
+ if (stat && stat.isDirectory()) resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []];
28
+ else resultPaths.push(file);
29
+ }
30
+ return resultPaths;
31
+ }
32
+ function files(opt = {}) {
33
+ let { pattern, filter, basePath = node_process.default.cwd(), ignoreHidden = false } = opt;
34
+ let paths = walkSync(basePath, "", ignoreHidden);
35
+ paths = paths.filter((path) => !(ignoreHidden && (path.startsWith(".") || path.includes("/."))));
36
+ if (pattern) {
37
+ if (typeof pattern === "string") pattern = require_node_glob.globToRegExp(pattern);
38
+ if (pattern instanceof RegExp) {
39
+ const rx = pattern;
40
+ rx.lastIndex = 0;
41
+ paths = paths.filter((path) => rx.test(path));
42
+ }
43
+ }
44
+ if (filter) paths = paths.filter(filter);
45
+ return paths;
46
+ }
47
+
48
+ //#endregion
49
+ exports.files = files;
50
+ exports.getFingerprint = getFingerprint;
51
+ exports.getStat = getStat;
52
+ exports.walkSync = walkSync;
2
53
  //# sourceMappingURL=files.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.cjs","names":["isHiddenPath","process","globToRegExp"],"sources":["../../src/node/files.ts"],"sourcesContent":["import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string): any {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n"],"mappings":"iPAMA,SAAgB,EAAQ,EAAmB,CACzC,GAAI,CACF,OAAA,EAAA,EAAA,UAAgB,EAAK,MAEX,GAGd,SAAgB,EAAe,EAAc,CAC3C,GAAM,CAAE,UAAS,QAAS,EAAQ,EAAK,EAAI,EAAE,CAC7C,MAAO,GAAG,EAAK,GAAG,EAAQ,GAAG,IAG/B,SAAgB,EAAS,EAAoB,EAAY,GAAI,EAAe,GAAM,CAChF,IAAI,EAAwB,EAAE,CACxB,GAAA,EAAA,EAAA,cAAA,EAAA,EAAA,SAA4B,EAAY,EAAU,CAAC,CACzD,GAAI,GAAS,MAAQ,EAAM,OAAS,EAClC,IAAK,IAAI,KAAQ,EAAO,CAEtB,GADA,GAAA,EAAA,EAAA,MAAY,EAAW,EAAK,CACxB,GAAgBA,EAAAA,aAAa,EAAK,CACpC,SAEF,IAAM,EAAO,GAAA,EAAA,EAAA,MADS,EAAY,EAAK,CACT,CAC1B,GAAQ,EAAK,aAAa,CAC5B,EAAc,CAAC,GAAG,EAAa,GAAG,EAAS,EAAY,EAAK,EAAI,EAAE,CAAC,CAEnE,EAAY,KAAK,EAAK,CAG5B,OAAO,EAGT,SAAgB,EAAM,EAKlB,EAAE,CAAE,CACN,GAAI,CACF,UACA,SACA,WAAWC,EAAAA,QAAQ,KAAK,CACxB,eAAe,IACb,EAEA,EAAQ,EAAS,EAAU,GAAI,EAAa,CAOhD,GALA,EAAQ,EAAM,OACZ,GACE,EAAE,IAAiB,EAAK,WAAW,IAAI,EAAI,EAAK,SAAS,KAAK,GACjE,CAEG,IACE,OAAO,GAAY,WACrB,EAAUC,EAAAA,aAAa,EAAQ,EAC7B,aAAmB,QAAQ,CAC7B,IAAM,EAAK,EACX,EAAG,UAAY,EACf,EAAQ,EAAM,OAAO,GAAQ,EAAG,KAAK,EAAK,CAAC,CAO/C,OAHI,IACF,EAAQ,EAAM,OAAO,EAAO,EAEvB"}
1
+ {"version":3,"file":"files.cjs","names":["isHiddenPath","process","globToRegExp"],"sources":["../../src/node/files.ts"],"sourcesContent":["import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string): any {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n"],"mappings":";;;;;;;;;;AAMA,SAAgB,QAAQ,MAAmB;AACzC,KAAI;AACF,+BAAgB,KAAK;UAEhB,KAAK;;AAGd,SAAgB,eAAe,MAAc;CAC3C,MAAM,EAAE,SAAS,SAAS,QAAQ,KAAK,IAAI,EAAE;AAC7C,QAAO,GAAG,KAAK,GAAG,QAAQ,GAAG;;AAG/B,SAAgB,SAAS,YAAoB,YAAY,IAAI,eAAe,MAAM;CAChF,IAAI,cAAwB,EAAE;CAC9B,MAAM,wDAA4B,YAAY,UAAU,CAAC;AACzD,KAAI,SAAS,QAAQ,MAAM,SAAS,EAClC,MAAK,IAAI,QAAQ,OAAO;AACtB,6BAAY,WAAW,KAAK;AAC5B,MAAI,gBAAgBA,6BAAa,KAAK,CACpC;EAEF,MAAM,OAAO,4BADS,YAAY,KAAK,CACT;AAC9B,MAAI,QAAQ,KAAK,aAAa,CAC5B,eAAc,CAAC,GAAG,aAAa,GAAG,SAAS,YAAY,KAAK,IAAI,EAAE,CAAC;MAEnE,aAAY,KAAK,KAAK;;AAG5B,QAAO;;AAGT,SAAgB,MAAM,MAKlB,EAAE,EAAE;CACN,IAAI,EACF,SACA,QACA,WAAWC,qBAAQ,KAAK,EACxB,eAAe,UACb;CAEJ,IAAI,QAAQ,SAAS,UAAU,IAAI,aAAa;AAEhD,SAAQ,MAAM,QACZ,SACE,EAAE,iBAAiB,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK,GACjE;AAED,KAAI,SAAS;AACX,MAAI,OAAO,YAAY,SACrB,WAAUC,+BAAa,QAAQ;AACjC,MAAI,mBAAmB,QAAQ;GAC7B,MAAM,KAAK;AACX,MAAG,YAAY;AACf,WAAQ,MAAM,QAAO,SAAQ,GAAG,KAAK,KAAK,CAAC;;;AAI/C,KAAI,OACF,SAAQ,MAAM,OAAO,OAAO;AAE9B,QAAO"}