@design-edito/tools 0.4.4 → 0.4.6

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 (526) hide show
  1. package/TODO.md +269 -0
  2. package/agnostic/arrays/dedupe/index.js +9 -9
  3. package/agnostic/arrays/dedupe/index.test.js +24 -0
  4. package/agnostic/arrays/find-duplicates/index.js +34 -24
  5. package/agnostic/arrays/find-duplicates/index.test.js +31 -0
  6. package/agnostic/arrays/index.d.ts +1 -1
  7. package/agnostic/arrays/index.js +1 -1
  8. package/agnostic/arrays/is-array-of/index.js +28 -26
  9. package/agnostic/arrays/is-array-of/index.test.js +56 -0
  10. package/agnostic/arrays/make/index.js +11 -8
  11. package/agnostic/arrays/make/index.test.js +10 -0
  12. package/agnostic/arrays/random-pick/index.js +40 -9
  13. package/agnostic/arrays/random-pick/index.test.js +23 -0
  14. package/agnostic/arrays/shuffle/index.js +15 -13
  15. package/agnostic/arrays/shuffle/index.test.js +14 -0
  16. package/agnostic/booleans/is-falsy/index.js +26 -12
  17. package/agnostic/booleans/is-falsy/index.test.js +26 -0
  18. package/agnostic/colors/channels/index.js +145 -19
  19. package/agnostic/colors/channels/index.test.js +64 -0
  20. package/agnostic/colors/contrast/index.js +23 -30
  21. package/agnostic/colors/contrast/index.test.js +21 -0
  22. package/agnostic/colors/convert/index.js +839 -46
  23. package/agnostic/colors/convert/index.test.js +98 -0
  24. package/agnostic/colors/cssColorsMap.js +153 -0
  25. package/agnostic/colors/distance/index.js +65 -53
  26. package/agnostic/colors/distance/index.test.js +21 -0
  27. package/agnostic/colors/grayscale/index.js +96 -137
  28. package/agnostic/colors/grayscale/index.test.js +34 -0
  29. package/agnostic/colors/invert/index.js +33 -44
  30. package/agnostic/colors/invert/index.test.js +31 -0
  31. package/agnostic/colors/lerp/index.js +74 -88
  32. package/agnostic/colors/lerp/index.test.js +55 -0
  33. package/agnostic/colors/luminance/index.js +19 -13
  34. package/agnostic/colors/luminance/index.test.js +30 -0
  35. package/agnostic/colors/palette/index.js +80 -87
  36. package/agnostic/colors/palette/index.test.js +35 -0
  37. package/agnostic/colors/rotate/index.js +41 -14
  38. package/agnostic/colors/rotate/index.test.js +45 -0
  39. package/agnostic/colors/tidy/index.js +80 -12
  40. package/agnostic/colors/tidy/index.test.js +45 -0
  41. package/agnostic/colors/typechecks/index.js +196 -25
  42. package/agnostic/colors/typechecks/index.test.js +113 -0
  43. package/agnostic/colors/types.js +1 -0
  44. package/agnostic/css/bem/index.js +135 -160
  45. package/agnostic/css/clss/index.js +66 -7
  46. package/agnostic/css/clss/index.test.js +60 -0
  47. package/agnostic/css/generate-nice-color/index.js +26 -73
  48. package/agnostic/css/generate-nice-color/index.test.js +8 -0
  49. package/agnostic/css/index.d.ts +1 -1
  50. package/agnostic/css/index.js +1 -1
  51. package/agnostic/css/is-valid-css-class-name/index.js +15 -9
  52. package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
  53. package/agnostic/css/scale/index.js +37 -37
  54. package/agnostic/css/scale/index.test.js +71 -0
  55. package/agnostic/css/styles-set/index.js +151 -169
  56. package/agnostic/errors/register/index.js +45 -51
  57. package/agnostic/errors/unknown-to-string/index.js +18 -7
  58. package/agnostic/errors/unknown-to-string/index.test.js +35 -0
  59. package/agnostic/html/get-node-ancestors/index.js +31 -8
  60. package/agnostic/html/get-node-ancestors/index.test.js +58 -0
  61. package/agnostic/html/get-position-inside-parent/index.js +13 -10
  62. package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
  63. package/agnostic/html/hyper-json/cast/index.js +137 -24
  64. package/agnostic/html/hyper-json/index.js +23 -50
  65. package/agnostic/html/hyper-json/method/index.js +10 -7
  66. package/agnostic/html/hyper-json/serialize/index.js +91 -11
  67. package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +16 -24
  68. package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +30 -24
  69. package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +15 -24
  70. package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +36 -24
  71. package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +47 -24
  72. package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +50 -24
  73. package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +11 -24
  74. package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +49 -24
  75. package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +24 -24
  76. package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +28 -24
  77. package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +21 -24
  78. package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +73 -26
  79. package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +24 -24
  80. package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +93 -28
  81. package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +22 -24
  82. package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +14 -14
  83. package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +14 -14
  84. package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +39 -24
  85. package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +18 -24
  86. package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +23 -24
  87. package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +33 -24
  88. package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +11 -24
  89. package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +35 -24
  90. package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +15 -24
  91. package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +19 -24
  92. package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +61 -24
  93. package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +25 -24
  94. package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +11 -24
  95. package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +28 -24
  96. package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +11 -24
  97. package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +58 -24
  98. package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +30 -24
  99. package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +34 -24
  100. package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +56 -26
  101. package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +34 -24
  102. package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +31 -24
  103. package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +58 -24
  104. package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +237 -26
  105. package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +93 -24
  106. package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +22 -24
  107. package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +24 -24
  108. package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +12 -24
  109. package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +12 -24
  110. package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +19 -24
  111. package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +30 -24
  112. package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +12 -24
  113. package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +11 -24
  114. package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +12 -24
  115. package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +12 -24
  116. package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +12 -24
  117. package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +12 -24
  118. package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +12 -24
  119. package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +86 -24
  120. package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +16 -24
  121. package/agnostic/html/hyper-json/smart-tags/index.js +31 -10
  122. package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +14 -11
  123. package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +14 -11
  124. package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +13 -24
  125. package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +26 -24
  126. package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +20 -24
  127. package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +59 -24
  128. package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +1 -1
  129. package/agnostic/html/hyper-json/smart-tags/isolated/index.js +1 -1
  130. package/agnostic/html/hyper-json/smart-tags/isolated/nodelist/index.js +20 -24
  131. package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +10 -11
  132. package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +18 -24
  133. package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +14 -24
  134. package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +45 -25
  135. package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +18 -24
  136. package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +20 -24
  137. package/agnostic/html/hyper-json/transformer/index.js +113 -9
  138. package/agnostic/html/hyper-json/tree/index.js +423 -24
  139. package/agnostic/html/hyper-json/types/index.js +28 -7
  140. package/agnostic/html/hyper-json/utils/index.js +516 -24
  141. package/agnostic/html/index.d.ts +2 -2
  142. package/agnostic/html/index.js +2 -2
  143. package/agnostic/html/insert-node/index.js +28 -7
  144. package/agnostic/html/insert-node/index.test.js +73 -0
  145. package/agnostic/html/placeholders/index.js +26 -31
  146. package/agnostic/html/replace-in-element/index.js +31 -25
  147. package/agnostic/html/replace-in-element/index.test.js +80 -0
  148. package/agnostic/html/selector-to-element/index.js +53 -33
  149. package/agnostic/html/selector-to-element/index.test.js +69 -0
  150. package/agnostic/html/string-to-nodes/index.js +24 -19
  151. package/agnostic/html/string-to-nodes/index.test.js +54 -0
  152. package/agnostic/index.d.ts +1 -1
  153. package/agnostic/index.js +1 -1
  154. package/agnostic/misc/assert/index.js +60 -58
  155. package/agnostic/misc/cast/index.js +132 -23
  156. package/agnostic/misc/cast/index.test.js +134 -0
  157. package/agnostic/misc/connection/index.js +55 -30
  158. package/agnostic/misc/connection/index.test.js +143 -0
  159. package/agnostic/misc/crawler/index.js +68 -44
  160. package/agnostic/misc/crawler/index.test.js +56 -0
  161. package/agnostic/misc/crossenv/detect-runtime/index.js +41 -16
  162. package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
  163. package/agnostic/misc/crossenv/types.js +21 -7
  164. package/agnostic/misc/crossenv/window/index.js +49 -13
  165. package/agnostic/misc/crossenv/window/index.test.js +24 -0
  166. package/agnostic/misc/data-size/index.js +182 -296
  167. package/agnostic/misc/data-size/index.test.js +100 -0
  168. package/agnostic/misc/data-size/types.js +1 -0
  169. package/agnostic/misc/index.d.ts +1 -1
  170. package/agnostic/misc/index.js +1 -1
  171. package/agnostic/misc/is-constructor-function/index.js +13 -7
  172. package/agnostic/misc/is-constructor-function/index.test.js +36 -0
  173. package/agnostic/misc/is-nullish/index.js +26 -11
  174. package/agnostic/misc/is-nullish/index.test.js +44 -0
  175. package/agnostic/misc/logs/logger/index.js +115 -142
  176. package/agnostic/misc/logs/make-text-block/index.js +14 -7
  177. package/agnostic/misc/logs/styles/index.js +30 -7
  178. package/agnostic/misc/lorem-ipsum/index.js +51 -186
  179. package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
  180. package/agnostic/misc/normalize-extension/index.js +99 -90
  181. package/agnostic/misc/normalize-extension/index.test.js +40 -0
  182. package/agnostic/misc/outcome/index.js +21 -11
  183. package/agnostic/misc/outcome/index.test.js +40 -0
  184. package/agnostic/numbers/absolute-modulo/index.js +10 -7
  185. package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
  186. package/agnostic/numbers/approximate-rational/index.js +86 -71
  187. package/agnostic/numbers/approximate-rational/index.test.js +90 -0
  188. package/agnostic/numbers/clamp/index.js +13 -7
  189. package/agnostic/numbers/clamp/index.test.js +24 -0
  190. package/agnostic/numbers/geometric-progressions/index.js +26 -7
  191. package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
  192. package/agnostic/numbers/index.d.ts +1 -1
  193. package/agnostic/numbers/index.js +1 -1
  194. package/agnostic/numbers/interpolate/index.js +25 -12
  195. package/agnostic/numbers/interpolate/index.test.js +40 -0
  196. package/agnostic/numbers/round/index.js +33 -11
  197. package/agnostic/numbers/round/index.test.js +56 -0
  198. package/agnostic/objects/deep-get-property/index.js +30 -26
  199. package/agnostic/objects/deep-get-property/index.test.js +59 -0
  200. package/agnostic/objects/enums/is-in-enum/index.js +18 -7
  201. package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
  202. package/agnostic/objects/flatten-getters/index.js +15 -16
  203. package/agnostic/objects/flatten-getters/index.test.js +78 -0
  204. package/agnostic/objects/index.d.ts +3 -3
  205. package/agnostic/objects/index.js +3 -3
  206. package/agnostic/objects/is-object/index.js +18 -9
  207. package/agnostic/objects/is-object/index.test.js +60 -0
  208. package/agnostic/objects/is-record/index.js +13 -7
  209. package/agnostic/objects/is-record/index.test.js +48 -0
  210. package/agnostic/objects/record-format/index.js +18 -14
  211. package/agnostic/objects/record-format/index.test.js +92 -0
  212. package/agnostic/objects/record-map/index.js +18 -7
  213. package/agnostic/objects/record-map/index.test.js +56 -0
  214. package/agnostic/objects/sort-keys/index.js +15 -13
  215. package/agnostic/objects/sort-keys/index.test.js +37 -0
  216. package/agnostic/objects/validation/index.js +21 -10
  217. package/agnostic/objects/validation/index.test.js +72 -0
  218. package/agnostic/optim/index.d.ts +1 -1
  219. package/agnostic/optim/index.js +1 -1
  220. package/agnostic/optim/memoize/index.js +24 -18
  221. package/agnostic/optim/memoize/index.test.js +30 -0
  222. package/agnostic/optim/throttle-debounce/index.js +120 -104
  223. package/agnostic/optim/throttle-debounce/index.test.js +44 -0
  224. package/agnostic/optim/throttle-debounce/types.js +1 -0
  225. package/agnostic/random/hex-char/index.js +9 -9
  226. package/agnostic/random/hex-char/index.test.js +20 -0
  227. package/agnostic/random/index.d.ts +1 -1
  228. package/agnostic/random/index.js +1 -1
  229. package/agnostic/random/random/index.js +19 -9
  230. package/agnostic/random/random/index.test.js +73 -0
  231. package/agnostic/random/uuid/index.js +31 -12
  232. package/agnostic/random/uuid/index.test.js +45 -0
  233. package/agnostic/regexps/index.js +126 -86
  234. package/agnostic/regexps/index.test.js +108 -0
  235. package/agnostic/sanitization/file-name/index.js +25 -7
  236. package/agnostic/sanitization/file-name/index.test.js +23 -0
  237. package/agnostic/sanitization/html/index.js +172 -116
  238. package/agnostic/sanitization/path/index.js +23 -13
  239. package/agnostic/sanitization/path/index.test.js +18 -0
  240. package/agnostic/sanitization/types.js +1 -0
  241. package/agnostic/sanitization/user-input/index.js +36 -26
  242. package/agnostic/sanitization/user-input/index.test.js +31 -0
  243. package/agnostic/strings/char-codes/index.js +123 -57
  244. package/agnostic/strings/matches/index.js +38 -11
  245. package/agnostic/strings/normalize-indent/index.js +34 -18
  246. package/agnostic/strings/parse-table/index.js +153 -84
  247. package/agnostic/strings/replace-all/index.js +36 -17
  248. package/agnostic/strings/to-alphanum/index.js +23 -10
  249. package/agnostic/strings/trim/index.js +24 -9
  250. package/agnostic/time/dates/format-date/index.js +140 -74
  251. package/agnostic/time/duration/index.js +106 -142
  252. package/agnostic/time/timeout/index.js +24 -18
  253. package/agnostic/time/transitions/index.js +200 -156
  254. package/agnostic/time/wait/index.js +11 -7
  255. package/agnostic/typescript/types.js +1 -0
  256. package/components/BeforeAfter/index.controlled.js +95 -0
  257. package/components/BeforeAfter/index.js +54 -152
  258. package/components/BeforeAfter/utils.js +9 -0
  259. package/components/Disclaimer/index.js +50 -9
  260. package/components/Drawer/index.js +82 -88
  261. package/components/EventListener/index.js +29 -47
  262. package/components/Gallery/index.js +146 -190
  263. package/components/Gallery/utils.js +12 -0
  264. package/components/Image/index.js +67 -106
  265. package/components/IntersectionObserver/index.js +62 -9
  266. package/components/Overlayer/index.js +59 -66
  267. package/components/Paginator/index.js +125 -9
  268. package/components/ResizeObserver/index.js +68 -9
  269. package/components/ResizeObserver/style.module.css +0 -0
  270. package/components/Scrllgngn/index.js +176 -183
  271. package/components/ScrollListener/index.js +97 -171
  272. package/components/ScrollListener/utils.js +51 -0
  273. package/components/Sequencer/index.controlled.js +67 -0
  274. package/components/Sequencer/index.js +105 -160
  275. package/components/ShadowRoot/index.js +42 -63
  276. package/components/Subtitles/index.js +107 -13
  277. package/components/Subtitles/types.js +1 -0
  278. package/components/Subtitles/utils.js +102 -0
  279. package/components/Theatre/index.js +89 -9
  280. package/components/UIModule/index.js +156 -146
  281. package/components/Video/index.d.ts +10 -0
  282. package/components/Video/index.js +292 -503
  283. package/components/Video/utils.js +137 -0
  284. package/components/_WIP_AudioQuote/index.js +1 -0
  285. package/components/_WIP_Icon/index.js +1 -0
  286. package/components/index.d.ts +2 -2
  287. package/components/index.js +2 -2
  288. package/components/public-classnames.js +18 -0
  289. package/components/utils/index.js +12 -7
  290. package/components/utils/types.js +1 -0
  291. package/index.d.ts +1 -2
  292. package/index.js +1 -2
  293. package/node/@aws-s3/index.test.js +6 -0
  294. package/node/@aws-s3/storage/directory/copy-dir/index.js +68 -9
  295. package/node/@aws-s3/storage/directory/index.d.ts +1 -1
  296. package/node/@aws-s3/storage/directory/index.js +1 -1
  297. package/node/@aws-s3/storage/directory/list/index.js +33 -9
  298. package/node/@aws-s3/storage/directory/move-dir/index.js +69 -9
  299. package/node/@aws-s3/storage/directory/remove-dir/index.js +59 -9
  300. package/node/@aws-s3/storage/file/copy/index.js +43 -9
  301. package/node/@aws-s3/storage/file/download/index.js +30 -9
  302. package/node/@aws-s3/storage/file/exists/index.js +37 -9
  303. package/node/@aws-s3/storage/file/index.d.ts +1 -1
  304. package/node/@aws-s3/storage/file/index.js +1 -1
  305. package/node/@aws-s3/storage/file/move/index.js +60 -9
  306. package/node/@aws-s3/storage/file/remove/index.js +38 -9
  307. package/node/@aws-s3/storage/file/stat/index.js +34 -9
  308. package/node/@aws-s3/storage/file/upload/index.js +55 -9
  309. package/node/@design-edito/index.js +1 -0
  310. package/node/@express/@multer/index.js +61 -45
  311. package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -21
  312. package/node/@google-cloud/storage/directory/copy-dir/index.js +38 -9
  313. package/node/@google-cloud/storage/directory/list/index.js +29 -9
  314. package/node/@google-cloud/storage/directory/move-dir/index.js +45 -9
  315. package/node/@google-cloud/storage/directory/remove-dir/index.js +36 -9
  316. package/node/@google-cloud/storage/file/copy/index.js +37 -9
  317. package/node/@google-cloud/storage/file/download/index.js +28 -9
  318. package/node/@google-cloud/storage/file/exists/index.js +26 -9
  319. package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -27
  320. package/node/@google-cloud/storage/file/get-metadata/index.js +28 -23
  321. package/node/@google-cloud/storage/file/get-permissions/index.js +25 -23
  322. package/node/@google-cloud/storage/file/index.d.ts +1 -1
  323. package/node/@google-cloud/storage/file/index.js +1 -1
  324. package/node/@google-cloud/storage/file/move/index.js +40 -9
  325. package/node/@google-cloud/storage/file/remove/index.js +36 -9
  326. package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -29
  327. package/node/@google-cloud/storage/file/stat/index.js +35 -9
  328. package/node/@google-cloud/storage/file/update-metadata/index.js +30 -23
  329. package/node/@google-cloud/storage/file/upload/index.js +47 -9
  330. package/node/cloud-storage/clients/index.js +35 -13
  331. package/node/cloud-storage/operations/copy-dir/index.js +30 -34
  332. package/node/cloud-storage/operations/copy-file/index.js +30 -34
  333. package/node/cloud-storage/operations/download-file/index.js +30 -34
  334. package/node/cloud-storage/operations/exists-file/index.js +30 -34
  335. package/node/cloud-storage/operations/list-dir/index.js +29 -34
  336. package/node/cloud-storage/operations/move-dir/index.js +30 -34
  337. package/node/cloud-storage/operations/move-file/index.js +30 -34
  338. package/node/cloud-storage/operations/remove-dir/index.js +29 -34
  339. package/node/cloud-storage/operations/remove-file/index.js +29 -34
  340. package/node/cloud-storage/operations/stat-file/index.js +29 -34
  341. package/node/cloud-storage/operations/upload-file/index.js +30 -34
  342. package/node/encryption/@aes-256-gcm/buffer/index.js +31 -26
  343. package/node/encryption/@aes-256-gcm/index.d.ts +1 -1
  344. package/node/encryption/@aes-256-gcm/index.js +1 -1
  345. package/node/encryption/@aes-256-gcm/uint8-array/index.js +57 -11
  346. package/node/encryption/key/index.js +19 -14
  347. package/node/files/is-in-directory/index.js +11 -10
  348. package/node/files/read-write/index.js +11 -17
  349. package/node/files/subpaths/index.js +156 -113
  350. package/node/ftps/directory/copy-dir/index.js +58 -9
  351. package/node/ftps/directory/index.d.ts +1 -1
  352. package/node/ftps/directory/index.js +1 -1
  353. package/node/ftps/directory/list/index.js +25 -9
  354. package/node/ftps/directory/move-dir/index.js +41 -9
  355. package/node/ftps/directory/remove-dir/index.js +42 -9
  356. package/node/ftps/file/copy/index.js +45 -9
  357. package/node/ftps/file/download/index.js +30 -9
  358. package/node/ftps/file/exists/index.js +39 -9
  359. package/node/ftps/file/index.d.ts +1 -1
  360. package/node/ftps/file/index.js +1 -1
  361. package/node/ftps/file/move/index.js +49 -9
  362. package/node/ftps/file/remove/index.js +40 -9
  363. package/node/ftps/file/stat/index.js +31 -9
  364. package/node/ftps/file/upload/index.js +44 -9
  365. package/node/images/create/index.js +10 -18
  366. package/node/images/format/index.js +264 -251
  367. package/node/images/index.d.ts +1 -1
  368. package/node/images/index.js +1 -1
  369. package/node/images/metadata/index.js +10 -18
  370. package/node/images/transform/index.js +168 -203
  371. package/node/images/transform/operations/blur/index.js +12 -10
  372. package/node/images/transform/operations/brighten/index.js +12 -10
  373. package/node/images/transform/operations/extend/index.js +26 -17
  374. package/node/images/transform/operations/extract/index.js +17 -10
  375. package/node/images/transform/operations/flatten/index.js +21 -17
  376. package/node/images/transform/operations/flip/index.js +3 -7
  377. package/node/images/transform/operations/flop/index.js +3 -7
  378. package/node/images/transform/operations/hue/index.js +14 -10
  379. package/node/images/transform/operations/index.d.ts +2 -2
  380. package/node/images/transform/operations/index.js +2 -2
  381. package/node/images/transform/operations/level/index.js +15 -10
  382. package/node/images/transform/operations/lighten/index.js +14 -10
  383. package/node/images/transform/operations/normalize/index.js +15 -10
  384. package/node/images/transform/operations/overlay/index.js +90 -17
  385. package/node/images/transform/operations/resize/index.js +47 -17
  386. package/node/images/transform/operations/rotate/index.js +21 -17
  387. package/node/images/transform/operations/saturate/index.js +16 -10
  388. package/node/images/types.js +34 -9
  389. package/node/images/utils/index.js +85 -19
  390. package/node/index.d.ts +3 -3
  391. package/node/index.js +3 -3
  392. package/node/process/on-exit/index.js +45 -28
  393. package/node/process/prompt-continue/index.js +29 -16
  394. package/node/process/spawner/index.js +104 -80
  395. package/node/sftp/directory/copy-dir/index.js +55 -9
  396. package/node/sftp/directory/list/index.js +23 -9
  397. package/node/sftp/directory/move-dir/index.js +38 -9
  398. package/node/sftp/directory/remove-dir/index.js +42 -9
  399. package/node/sftp/file/copy/index.js +40 -9
  400. package/node/sftp/file/download/index.js +27 -9
  401. package/node/sftp/file/exists/index.js +30 -9
  402. package/node/sftp/file/index.d.ts +2 -2
  403. package/node/sftp/file/index.js +2 -2
  404. package/node/sftp/file/move/index.js +42 -9
  405. package/node/sftp/file/remove/index.js +33 -9
  406. package/node/sftp/file/stat/index.js +28 -9
  407. package/node/sftp/file/upload/index.js +36 -9
  408. package/package.json +1 -8
  409. package/chunks/chunk-2FNCUXAX.js +0 -27
  410. package/chunks/chunk-2GJSPEO4.js +0 -31
  411. package/chunks/chunk-2IGP6V77.js +0 -22
  412. package/chunks/chunk-3QI2MSDK.js +0 -34
  413. package/chunks/chunk-3RNLPW7B.js +0 -101
  414. package/chunks/chunk-3RZMW72G.js +0 -33
  415. package/chunks/chunk-4KLCJX2T.js +0 -36
  416. package/chunks/chunk-4LTN4SCD.js +0 -55
  417. package/chunks/chunk-4Q4T7QQO.js +0 -27
  418. package/chunks/chunk-4Q5TKOIG.js +0 -53
  419. package/chunks/chunk-57YKZBJR.js +0 -29
  420. package/chunks/chunk-5H3IRSOB.js +0 -8
  421. package/chunks/chunk-5NTPCRFH.js +0 -32
  422. package/chunks/chunk-5TM235Z3.js +0 -40
  423. package/chunks/chunk-5WVGUZL5.js +0 -35
  424. package/chunks/chunk-6XL25OZX.js +0 -12
  425. package/chunks/chunk-75BICI4L.js +0 -20
  426. package/chunks/chunk-77SWZUHV.js +0 -31
  427. package/chunks/chunk-AC4UMIWM.js +0 -124
  428. package/chunks/chunk-AG4VERYN.js +0 -25
  429. package/chunks/chunk-AP3VYSVF.js +0 -36
  430. package/chunks/chunk-ASXK7XCC.js +0 -18
  431. package/chunks/chunk-AVIMGMTP.js +0 -17
  432. package/chunks/chunk-B4HGXMP3.js +0 -20
  433. package/chunks/chunk-B5V7D2ZL.js +0 -77
  434. package/chunks/chunk-B6653QJD.js +0 -37
  435. package/chunks/chunk-BCX4HPD7.js +0 -33
  436. package/chunks/chunk-CVMYA5XK.js +0 -632
  437. package/chunks/chunk-DMWGHBIL.js +0 -25
  438. package/chunks/chunk-DNIOWD7K.js +0 -8
  439. package/chunks/chunk-E2ZY3SEW.js +0 -26
  440. package/chunks/chunk-E6MSDKON.js +0 -13
  441. package/chunks/chunk-E7BBN5JC.js +0 -22
  442. package/chunks/chunk-EX2QKFY5.js +0 -41
  443. package/chunks/chunk-EYYNCLVR.js +0 -33
  444. package/chunks/chunk-F2YJXIT7.js +0 -78
  445. package/chunks/chunk-FSNNEPY5.js +0 -37
  446. package/chunks/chunk-GG4EFNMU.js +0 -89
  447. package/chunks/chunk-GQBFMP6N.js +0 -32
  448. package/chunks/chunk-H3HRQ52T.js +0 -32
  449. package/chunks/chunk-H4PP6AHP.js +0 -15
  450. package/chunks/chunk-HC6ZOHCS.js +0 -14
  451. package/chunks/chunk-HMMPT3UM.js +0 -47
  452. package/chunks/chunk-HQLRJ7XW.js +0 -12
  453. package/chunks/chunk-HYGUIF2O.js +0 -23
  454. package/chunks/chunk-HYPEWMYZ.js +0 -10
  455. package/chunks/chunk-I5MRXMHR.js +0 -32
  456. package/chunks/chunk-I6ZP5T5V.js +0 -10
  457. package/chunks/chunk-IEZ3O5OF.js +0 -40
  458. package/chunks/chunk-IPRWXI27.js +0 -31
  459. package/chunks/chunk-IRKZUMWZ.js +0 -38
  460. package/chunks/chunk-ISJONMNA.js +0 -16
  461. package/chunks/chunk-JB27MAKY.js +0 -22
  462. package/chunks/chunk-JZ6GM444.js +0 -43
  463. package/chunks/chunk-K5UF634H.js +0 -25
  464. package/chunks/chunk-LEBGVBYD.js +0 -138
  465. package/chunks/chunk-LJ5MGLLU.js +0 -56
  466. package/chunks/chunk-LUAYN7VJ.js +0 -27
  467. package/chunks/chunk-MDVGDZU6.js +0 -25
  468. package/chunks/chunk-ML22TIBW.js +0 -37
  469. package/chunks/chunk-MO4TRYNI.js +0 -29
  470. package/chunks/chunk-MSU7JU63.js +0 -49
  471. package/chunks/chunk-NIBRPZJD.js +0 -58
  472. package/chunks/chunk-O32IRXDX.js +0 -78
  473. package/chunks/chunk-OAX7GS7C.js +0 -36
  474. package/chunks/chunk-OBSTP7YR.js +0 -257
  475. package/chunks/chunk-OFCSIK6J.js +0 -13
  476. package/chunks/chunk-OFYGPRWE.js +0 -21
  477. package/chunks/chunk-OGBUSUE6.js +0 -12
  478. package/chunks/chunk-OSAXBA7G.js +0 -10
  479. package/chunks/chunk-OT7QXCH6.js +0 -23
  480. package/chunks/chunk-P4J6S2WQ.js +0 -64
  481. package/chunks/chunk-PUQUSA6S.js +0 -12
  482. package/chunks/chunk-PYJKFOMV.js +0 -193
  483. package/chunks/chunk-QHEWBOQI.js +0 -19
  484. package/chunks/chunk-QXAJXTXV.js +0 -19
  485. package/chunks/chunk-R3AWQXMY.js +0 -20
  486. package/chunks/chunk-R66GH2MQ.js +0 -38
  487. package/chunks/chunk-RART44AF.js +0 -21
  488. package/chunks/chunk-REXSJULD.js +0 -28
  489. package/chunks/chunk-RJRNYRPM.js +0 -23
  490. package/chunks/chunk-RKX6KLPQ.js +0 -47
  491. package/chunks/chunk-RW7VAKJW.js +0 -15
  492. package/chunks/chunk-RZOR7ZC3.js +0 -35
  493. package/chunks/chunk-S2UZ3HZR.js +0 -31
  494. package/chunks/chunk-SYH5LYQC.js +0 -28
  495. package/chunks/chunk-TAXFCVFE.js +0 -30
  496. package/chunks/chunk-TNZGRXKJ.js +0 -24
  497. package/chunks/chunk-TRFZSKNB.js +0 -32
  498. package/chunks/chunk-U664BT44.js +0 -45
  499. package/chunks/chunk-U6SGKHHA.js +0 -32
  500. package/chunks/chunk-UTQNGKGQ.js +0 -60
  501. package/chunks/chunk-VPBZS3S4.js +0 -27
  502. package/chunks/chunk-W5A2TON3.js +0 -10
  503. package/chunks/chunk-W7PJ5NQQ.js +0 -23
  504. package/chunks/chunk-WGRQXVBK.js +0 -207
  505. package/chunks/chunk-WIFHP4X7.js +0 -56
  506. package/chunks/chunk-WL4WNJ2Y.js +0 -39
  507. package/chunks/chunk-WNDMYNDU.js +0 -8
  508. package/chunks/chunk-WSFCRVEQ.js +0 -9
  509. package/chunks/chunk-WZS4Q3G3.js +0 -36
  510. package/chunks/chunk-X4YSGOKG.js +0 -2673
  511. package/chunks/chunk-XA4HVHJ4.js +0 -18
  512. package/chunks/chunk-XEQ2PBT2.js +0 -20
  513. package/chunks/chunk-XFB4PUXO.js +0 -78
  514. package/chunks/chunk-XIIJYVJZ.js +0 -15
  515. package/chunks/chunk-XNF5MLCQ.js +0 -14
  516. package/chunks/chunk-XQUMWHCH.js +0 -25
  517. package/chunks/chunk-YA2YCZUF.js +0 -8
  518. package/chunks/chunk-YDIBNEGA.js +0 -9
  519. package/chunks/chunk-YHMR7IBA.js +0 -24
  520. package/chunks/chunk-YWSXCFYY.js +0 -61
  521. package/chunks/chunk-YY3TSU22.js +0 -48
  522. package/chunks/chunk-ZAP3ELDE.js +0 -40
  523. package/chunks/chunk-ZJNQRKEJ.js +0 -105
  524. package/chunks/chunk-ZJR5ASR3.js +0 -26
  525. package/chunks/index.d.ts +0 -1
  526. package/chunks/index.js +0 -1
@@ -1,9 +1,37 @@
1
- import {
2
- exists
3
- } from "../../../../../chunks/chunk-RZOR7ZC3.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- exists
9
- };
1
+ import { HeadObjectCommand } from '@aws-sdk/client-s3';
2
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
3
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
4
+ /**
5
+ * Checks whether an object exists in a specified S3 bucket (AWS SDK v3).
6
+ *
7
+ * @param {S3Client} client - The v3 S3 client instance.
8
+ * @param {string} bucketName - The name of the S3 bucket.
9
+ * @param {string} sourcePath - The key of the object to test.
10
+ * @param {ExistsOptions} [options] - Optional configuration.
11
+ * @param {Omit<HeadObjectCommandInput,'Bucket'|'Key'>} [options.headObjectOptions] - Extra `HeadObject` params.
12
+ * @returns {Promise<Outcome.Either<boolean, string>>}
13
+ * - Success: `Outcome.makeSuccess(true)` if the object exists,
14
+ * `Outcome.makeSuccess(false)` if it does not.
15
+ * - Failure: `Outcome.makeFailure(errStr)` for unexpected errors.
16
+ */
17
+ export async function exists(client, bucketName, sourcePath, options) {
18
+ const { headObjectOptions } = options ?? {};
19
+ try {
20
+ await client.send(new HeadObjectCommand({
21
+ Bucket: bucketName,
22
+ Key: sourcePath,
23
+ ...headObjectOptions
24
+ }));
25
+ return Outcome.makeSuccess(true);
26
+ }
27
+ catch (err) {
28
+ const notFound = err.$metadata?.httpStatusCode === 404
29
+ || err.name === 'NotFound'
30
+ || err.Code === 'NotFound' // some SDKs emit Code
31
+ || err.Code === 'NoSuchKey';
32
+ if (notFound) {
33
+ return Outcome.makeSuccess(false);
34
+ }
35
+ return Outcome.makeFailure(unknownToString(err));
36
+ }
37
+ }
@@ -1,6 +1,6 @@
1
- export * as copy from './copy/index.js'
2
1
  export * as download from './download/index.js'
3
2
  export * as exists from './exists/index.js'
3
+ export * as copy from './copy/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
@@ -1,6 +1,6 @@
1
- export * as copy from './copy/index.js'
2
1
  export * as download from './download/index.js'
3
2
  export * as exists from './exists/index.js'
3
+ export * as copy from './copy/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
@@ -1,9 +1,60 @@
1
- import {
2
- move
3
- } from "../../../../../chunks/chunk-LJ5MGLLU.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- move
9
- };
1
+ import { HeadObjectCommand, CopyObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
2
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
3
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
4
+ /**
5
+ * Moves an object from one key to another within the same S3 bucket (AWS SDK v3).
6
+ *
7
+ * The function copies the object from `sourcePath` to `targetPath` and, upon
8
+ * successful copy, deletes the original object.
9
+ *
10
+ * @param {S3Client} client - The S3 client instance.
11
+ * @param {string} bucketName - The name of the bucket.
12
+ * @param {string} sourcePath - The source object's key.
13
+ * @param {string} targetPath - The destination object's key.
14
+ * @param {MoveOptions} [options] - Optional copy/delete behaviour.
15
+ * @param {Omit<CopyObjectCommandInput,'Bucket'|'Key'|'CopySource'>} [options.copyOptions] - Extra copy params.
16
+ * @param {Omit<DeleteObjectCommandInput,'Bucket'|'Key'>} [options.deleteOptions] - Extra delete params.
17
+ * @param {boolean} [options.overwrite=false] - Whether to overwrite an existing `targetPath`.
18
+ * @returns {Promise<Outcome.Either<true, string>>}
19
+ * - Success: `Outcome.makeSuccess(true)`
20
+ * - Failure: `Outcome.makeFailure(errStr)`
21
+ */
22
+ export async function move(client, bucketName, sourcePath, targetPath, options) {
23
+ const { copyOptions, deleteOptions, overwrite = false } = options ?? {};
24
+ try {
25
+ // Abort early if destination exists and overwrite is disabled
26
+ if (!overwrite) {
27
+ try {
28
+ await client.send(new HeadObjectCommand({ Bucket: bucketName, Key: targetPath }));
29
+ return Outcome.makeFailure(`Object already exists at ${targetPath}.`);
30
+ }
31
+ catch (err) {
32
+ const notFound = err.$metadata?.httpStatusCode === 404
33
+ || err.name === 'NotFound'
34
+ || err.Code === 'NotFound'
35
+ || err.Code === 'NoSuchKey';
36
+ if (!notFound) {
37
+ return Outcome.makeFailure(unknownToString(err));
38
+ }
39
+ // If not found, proceed with copy
40
+ }
41
+ }
42
+ // Copy to the new key
43
+ await client.send(new CopyObjectCommand({
44
+ Bucket: bucketName,
45
+ Key: targetPath,
46
+ CopySource: `${bucketName}/${sourcePath}`,
47
+ ...copyOptions
48
+ }));
49
+ // Delete the original key
50
+ await client.send(new DeleteObjectCommand({
51
+ Bucket: bucketName,
52
+ Key: sourcePath,
53
+ ...deleteOptions
54
+ }));
55
+ return Outcome.makeSuccess(true);
56
+ }
57
+ catch (err) {
58
+ return Outcome.makeFailure(unknownToString(err));
59
+ }
60
+ }
@@ -1,9 +1,38 @@
1
- import {
2
- remove
3
- } from "../../../../../chunks/chunk-AP3VYSVF.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- remove
9
- };
1
+ import { HeadObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
2
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
3
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
4
+ /**
5
+ * Removes a file from a specified Amazon S3 bucket (AWS SDK v3).
6
+ *
7
+ * If `ignoreMissing` is true (default), a missing object is considered success.
8
+ *
9
+ * @param {S3Client} s3 - The AWS S3 client instance.
10
+ * @param {string} bucketName - The name of the bucket.
11
+ * @param {string} targetPath - The key of the object to delete.
12
+ * @param {RemoveOptions} [options] - Optional settings.
13
+ * @returns {Promise<Outcome.Either<true, string>>}
14
+ */
15
+ export async function remove(s3, bucketName, targetPath, options) {
16
+ const { ignoreMissing = true } = options ?? {};
17
+ try {
18
+ // Check if object exists, respecting ignoreMissing
19
+ try {
20
+ await s3.send(new HeadObjectCommand({ Bucket: bucketName, Key: targetPath }));
21
+ }
22
+ catch (err) {
23
+ const code = err?.name ?? err?.Code ?? err?.code;
24
+ if (code === 'NotFound' || code === 'NoSuchKey' || code === 'NotFoundException') {
25
+ if (ignoreMissing)
26
+ return Outcome.makeSuccess(true);
27
+ return Outcome.makeFailure(`File not found at ${targetPath}.`);
28
+ }
29
+ return Outcome.makeFailure(unknownToString(err));
30
+ }
31
+ // Delete the object
32
+ await s3.send(new DeleteObjectCommand({ Bucket: bucketName, Key: targetPath }));
33
+ return Outcome.makeSuccess(true);
34
+ }
35
+ catch (err) {
36
+ return Outcome.makeFailure(unknownToString(err));
37
+ }
38
+ }
@@ -1,9 +1,34 @@
1
- import {
2
- stat
3
- } from "../../../../../chunks/chunk-IRKZUMWZ.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- stat
9
- };
1
+ import { HeadObjectCommand } from '@aws-sdk/client-s3';
2
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
3
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
4
+ /**
5
+ * Retrieves metadata for a single S3 object.
6
+ *
7
+ * @param {S3Client} client – v3 S3 client.
8
+ * @param {string} bucket – Bucket name.
9
+ * @param {string} key – Object key.
10
+ * @param {StatOptions} [options] – Extra HeadObject params.
11
+ * @returns {Promise<Outcome.Either<Stat, string>>}
12
+ */
13
+ export async function stat(client, bucket, key, options) {
14
+ const { headObjectOptions } = options ?? {};
15
+ try {
16
+ const res = await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key, ...headObjectOptions }));
17
+ const stat = {
18
+ size: res.ContentLength,
19
+ modifiedAt: res.LastModified,
20
+ checksum: res.ETag?.replace(/"/g, ''),
21
+ contentType: res.ContentType,
22
+ metadata: res.Metadata,
23
+ storageClass: res.StorageClass,
24
+ raw: res
25
+ };
26
+ return Outcome.makeSuccess(stat);
27
+ }
28
+ catch (err) {
29
+ const notFound = err.$metadata?.httpStatusCode === 404 || err.name === 'NotFound';
30
+ if (notFound)
31
+ return Outcome.makeFailure(`Object not found: ${key}`);
32
+ return Outcome.makeFailure(unknownToString(err));
33
+ }
34
+ }
@@ -1,9 +1,55 @@
1
- import {
2
- upload
3
- } from "../../../../../chunks/chunk-WIFHP4X7.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- upload
9
- };
1
+ import { HeadObjectCommand } from '@aws-sdk/client-s3';
2
+ import { Upload } from '@aws-sdk/lib-storage';
3
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
4
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
5
+ /**
6
+ * Uploads a file stream to a specified Amazon S3 bucket using AWS SDK v3.
7
+ *
8
+ * If `overwrite` is false and the target file exists, upload is aborted.
9
+ *
10
+ * @param {S3Client} s3 - The AWS S3 v3 client instance.
11
+ * @param {string} bucketName - The S3 bucket name.
12
+ * @param {string} targetPath - The key to upload the file to.
13
+ * @param {Readable} fileStream - The file content as a stream.
14
+ * @param {UploadOptions} [options] - Optional configuration.
15
+ * @returns {Promise<Outcome.Either<true, string>>}
16
+ */
17
+ export async function upload(s3, bucketName, targetPath, fileStream, options) {
18
+ const { uploadSettings, fileMetadata, overwrite = false } = options ?? {};
19
+ if (!overwrite) {
20
+ try {
21
+ const headCommand = new HeadObjectCommand({
22
+ Bucket: bucketName,
23
+ Key: targetPath
24
+ });
25
+ await s3.send(headCommand);
26
+ // If no error, object exists
27
+ return Outcome.makeFailure(`File already exists at ${targetPath}.`);
28
+ }
29
+ catch (err) {
30
+ const code = err?.name ?? err?.$metadata?.httpStatusCode;
31
+ if (code !== 'NotFound' && code !== 404) {
32
+ return Outcome.makeFailure(unknownToString(err));
33
+ }
34
+ // Object not found, proceed with upload
35
+ }
36
+ }
37
+ const params = {
38
+ ...fileMetadata,
39
+ Bucket: bucketName,
40
+ Key: targetPath,
41
+ Body: fileStream
42
+ };
43
+ try {
44
+ const upload = new Upload({
45
+ client: s3,
46
+ params,
47
+ ...uploadSettings
48
+ });
49
+ await upload.done();
50
+ return Outcome.makeSuccess(true);
51
+ }
52
+ catch (err) {
53
+ return Outcome.makeFailure(unknownToString(err));
54
+ }
55
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,47 +1,63 @@
1
- import {
2
- makeFailure,
3
- makeSuccess
4
- } from "../../../chunks/chunk-LUAYN7VJ.js";
5
- import {
6
- unknownToString
7
- } from "../../../chunks/chunk-PUQUSA6S.js";
8
- import "../../../chunks/chunk-WSFCRVEQ.js";
9
-
10
- // src/node/@express/@multer/index.ts
11
- import multer from "multer";
12
- async function useMulterMiddleware(req, res, options) {
13
- const { storage, limits, fileFilter } = options;
14
- const uploader = multer({
15
- storage: storage ?? multer.memoryStorage(),
16
- limits,
17
- fileFilter
18
- });
19
- let middleware;
20
- if (options.mode === "none") {
21
- middleware = uploader.none();
22
- } else if (options.mode === "single") {
23
- middleware = uploader.single(options.fieldName);
24
- } else if (options.mode === "array") {
25
- middleware = uploader.array(options.fieldName, options.maxCount);
26
- } else if (options.mode === "fields") {
27
- middleware = uploader.fields(options.fields);
28
- } else {
29
- middleware = uploader.any();
30
- }
31
- return await new Promise((resolve) => middleware(req, res, (err) => {
32
- if (err instanceof multer.MulterError) return resolve(makeFailure({
33
- code: err.code,
34
- message: err.message,
35
- field: err.field
1
+ import multer from 'multer';
2
+ import * as Outcome from '../../../agnostic/misc/outcome/index.js';
3
+ import { unknownToString } from '../../../agnostic/errors/unknown-to-string/index.js';
4
+ /**
5
+ * Applies multer middleware to an Express request/response pair.
6
+ *
7
+ * The function creates a multer instance based on the provided options and
8
+ * applies the appropriate middleware based on the upload mode. Errors are
9
+ * captured and returned as a structured `WithMulterError` object.
10
+ *
11
+ * @param {Request} req - The Express request object.
12
+ * @param {Response} res - The Express response object.
13
+ * @param {WithMulterOptions} options - Multer configuration and upload mode.
14
+ * @param {multer.StorageEngine} [options.storage] - Storage engine (defaults to memory).
15
+ * @param {multer.Options['limits']} [options.limits] - File size and count limits.
16
+ * @param {multer.Options['fileFilter']} [options.fileFilter] - File filter function.
17
+ * @param {'none'|'any'|'single'|'array'|'fields'} options.mode - Upload mode.
18
+ * @param {string} [options.fieldName] - Field name (required for 'single' and 'array' modes).
19
+ * @param {number} [options.maxCount] - Max file count (for 'array' mode).
20
+ * @param {multer.Field[]} [options.fields] - Field configurations (for 'fields' mode).
21
+ * @returns {Promise<Outcome.Either<true, WithMulterError>>}
22
+ * - On success: `Outcome.makeSuccess(true)`.
23
+ * - On failure: `Outcome.makeFailure(error)` with structured error details.
24
+ */
25
+ export async function useMulterMiddleware(req, res, options) {
26
+ // eslint-disable-next-line @typescript-eslint/unbound-method
27
+ const { storage, limits, fileFilter } = options;
28
+ const uploader = multer({
29
+ storage: storage ?? multer.memoryStorage(),
30
+ limits,
31
+ fileFilter
32
+ });
33
+ let middleware;
34
+ if (options.mode === 'none') {
35
+ middleware = uploader.none();
36
+ }
37
+ else if (options.mode === 'single') {
38
+ middleware = uploader.single(options.fieldName);
39
+ }
40
+ else if (options.mode === 'array') {
41
+ middleware = uploader.array(options.fieldName, options.maxCount);
42
+ }
43
+ else if (options.mode === 'fields') {
44
+ middleware = uploader.fields(options.fields);
45
+ }
46
+ else {
47
+ middleware = uploader.any();
48
+ }
49
+ return await new Promise(resolve => middleware(req, res, (err) => {
50
+ if (err instanceof multer.MulterError)
51
+ return resolve(Outcome.makeFailure({
52
+ code: err.code,
53
+ message: err.message,
54
+ field: err.field
55
+ }));
56
+ return resolve(err !== undefined
57
+ ? Outcome.makeFailure({
58
+ code: 'UNKNOWN',
59
+ message: unknownToString(err)
60
+ })
61
+ : Outcome.makeSuccess(true));
36
62
  }));
37
- return resolve(
38
- err !== void 0 ? makeFailure({
39
- code: "UNKNOWN",
40
- message: unknownToString(err)
41
- }) : makeSuccess(true)
42
- );
43
- }));
44
63
  }
45
- export {
46
- useMulterMiddleware
47
- };
@@ -1,22 +1,26 @@
1
- import {
2
- makeFailure,
3
- makeSuccess
4
- } from "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import {
6
- unknownToString
7
- } from "../../../../../chunks/chunk-PUQUSA6S.js";
8
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
9
-
10
- // src/node/@google-cloud/storage/bucket/get-metadata/index.ts
11
- async function getMetadata(bucket, options) {
12
- try {
13
- const [metadata] = await bucket.getMetadata(options);
14
- return makeSuccess(metadata);
15
- } catch (err) {
16
- const errStr = unknownToString(err);
17
- return makeFailure(errStr);
18
- }
1
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
2
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
3
+ /**
4
+ * Retrieves metadata for a Google Cloud Storage bucket.
5
+ *
6
+ * This function calls the Google Cloud Storage API to get information about the bucket,
7
+ * such as its location, storage class, and other configuration details.
8
+ *
9
+ * @param {Bucket} bucket - The Google Cloud Storage bucket object.
10
+ * @param {GetBucketMetadataOptions} [options] - Optional configuration options to pass to the `getMetadata` method.
11
+ * @returns {Promise<Outcome.Either<BucketMetadata, string>>} A promise that resolves to an `Outcome.Either`.
12
+ * - On success: `Outcome.makeSuccess(metadata)` with the bucket metadata.
13
+ * - On failure: `Outcome.makeFailure(errStr)` with an error message.
14
+ *
15
+ * @throws {Error} Throws an error if the metadata retrieval fails (e.g., network issues, incorrect permissions).
16
+ */
17
+ export async function getMetadata(bucket, options) {
18
+ try {
19
+ const [metadata] = await bucket.getMetadata(options);
20
+ return Outcome.makeSuccess(metadata);
21
+ }
22
+ catch (err) {
23
+ const errStr = unknownToString(err);
24
+ return Outcome.makeFailure(errStr);
25
+ }
19
26
  }
20
- export {
21
- getMetadata
22
- };
@@ -1,9 +1,38 @@
1
- import {
2
- copyDir
3
- } from "../../../../../chunks/chunk-WZS4Q3G3.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- copyDir
9
- };
1
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
2
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
3
+ /** Recursively copies every object under `sourceDir` to the same relative path
4
+ * beneath `targetDir` within a single GCS bucket.
5
+ * @param {Bucket} bucket - The GCS bucket instance.
6
+ * @param {string} sourceDir - The source directory path (prefix) to copy from.
7
+ * @param {string} targetDir - The target directory path (prefix) to copy to.
8
+ * @param {CopyDirOptions} [options] - Optional parameters for the operation.
9
+ * @param {boolean} [options.overwrite=false] - Whether to overwrite existing files at target.
10
+ * @returns {Promise<Outcome.Either<true, string>>} A promise that resolves to an `Outcome.Either`:
11
+ * - On success: `Outcome.makeSuccess(true)` indicating the copy was successful.
12
+ * - On failure: `Outcome.makeFailure(errStr)` with an error message if the copy fails.
13
+ * */
14
+ export async function copyDir(bucket, sourceDir, targetDir, options) {
15
+ const { getFileOptions, copyOptions, overwrite = false } = options ?? {};
16
+ const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
17
+ const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
18
+ try {
19
+ const [files] = await bucket.getFiles({ ...getFileOptions, prefix: from });
20
+ for (const f of files) {
21
+ const rel = f.name.substring(from.length);
22
+ const dest = `${to}${rel}`;
23
+ if (!overwrite) {
24
+ const destFile = bucket.file(dest);
25
+ const [exists] = await destFile.exists();
26
+ if (exists) {
27
+ // Skip copy if target exists and overwrite is false
28
+ continue;
29
+ }
30
+ }
31
+ await f.copy(dest, copyOptions);
32
+ }
33
+ return Outcome.makeSuccess(true);
34
+ }
35
+ catch (err) {
36
+ return Outcome.makeFailure(unknownToString(err));
37
+ }
38
+ }
@@ -1,9 +1,29 @@
1
- import {
2
- list
3
- } from "../../../../../chunks/chunk-REXSJULD.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- list
9
- };
1
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
2
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
3
+ /**
4
+ * Lists all direct children file paths under a given directory prefix in a GCS bucket.
5
+ *
6
+ * This function returns only the immediate files (not recursive) under the specified directory prefix.
7
+ *
8
+ * @param {Bucket} bucket - The GCS bucket to list files from.
9
+ * @param {string} directoryPath - The directory prefix to list files under.
10
+ * @param {ListOptions} [options] - Optional configuration for the listing.
11
+ * @param {FileOptions} [options.fileOptions] - Additional options for file retrieval.
12
+ * @returns {Promise<Outcome.Either<string[], string>>} Returns either a success with an array of file paths, or a failure with an error message.
13
+ */
14
+ export async function list(bucket, directoryPath, options) {
15
+ const { fileOptions } = options ?? {};
16
+ try {
17
+ const prefix = directoryPath.endsWith('/') ? directoryPath : `${directoryPath}/`;
18
+ const [files] = await bucket.getFiles({
19
+ prefix,
20
+ delimiter: '/',
21
+ ...fileOptions
22
+ });
23
+ const paths = files.map(file => file.name);
24
+ return Outcome.makeSuccess(paths);
25
+ }
26
+ catch (err) {
27
+ return Outcome.makeFailure(unknownToString(err));
28
+ }
29
+ }
@@ -1,9 +1,45 @@
1
- import {
2
- moveDir
3
- } from "../../../../../chunks/chunk-OAX7GS7C.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- moveDir
9
- };
1
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
2
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
3
+ /**
4
+ * Recursively moves every object under `sourceDir` to the corresponding path
5
+ * under `targetDir` within the same bucket.
6
+ *
7
+ * Example: moving `a/b/` to `x/y/` copies
8
+ * `a/b/file.txt` → `x/y/file.txt` and then deletes the original.
9
+ *
10
+ * If `overwrite` is false (default), the operation aborts if any destination file
11
+ * already exists.
12
+ *
13
+ * @param {Bucket} bucket - The GCS bucket instance.
14
+ * @param {string} sourceDir - The source directory prefix to move from.
15
+ * @param {string} targetDir - The target directory prefix to move to.
16
+ * @param {MoveDirOptions} [options] - Optional parameters for the operation.
17
+ * @returns {Promise<Outcome.Either<true, string>>}
18
+ * - On success: `Outcome.makeSuccess(true)`.
19
+ * - On failure: `Outcome.makeFailure(errStr)`.
20
+ */
21
+ export async function moveDir(bucket, sourceDir, targetDir, options) {
22
+ const { fileOptions, copyOptions, deleteOptions, overwrite = false } = options ?? {};
23
+ const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
24
+ const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
25
+ try {
26
+ const [files] = await bucket.getFiles({ prefix: from });
27
+ for (const f of files) {
28
+ const rel = f.name.substring(from.length);
29
+ const dest = `${to}${rel}`;
30
+ const srcFile = bucket.file(f.name, fileOptions);
31
+ const destFile = bucket.file(dest, fileOptions);
32
+ if (!overwrite) {
33
+ const [exists] = await destFile.exists();
34
+ if (exists)
35
+ throw new Error(`File already exists at ${dest}.`);
36
+ }
37
+ await srcFile.copy(dest, copyOptions);
38
+ await srcFile.delete(deleteOptions);
39
+ }
40
+ return Outcome.makeSuccess(true);
41
+ }
42
+ catch (err) {
43
+ return Outcome.makeFailure(unknownToString(err));
44
+ }
45
+ }
@@ -1,9 +1,36 @@
1
- import {
2
- removeDir
3
- } from "../../../../../chunks/chunk-GQBFMP6N.js";
4
- import "../../../../../chunks/chunk-LUAYN7VJ.js";
5
- import "../../../../../chunks/chunk-PUQUSA6S.js";
6
- import "../../../../../chunks/chunk-WSFCRVEQ.js";
7
- export {
8
- removeDir
9
- };
1
+ import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
2
+ import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
3
+ /**
4
+ * Recursively deletes all objects under a directory prefix in a GCS bucket
5
+ * (including the directory placeholder itself, if present).
6
+ *
7
+ * @param {Bucket} bucket - The GCS bucket instance.
8
+ * @param {string} directoryPath - The “directory” prefix to delete.
9
+ * @param {RemoveDirOptions} [options] - Optional configuration.
10
+ * @param {GCSDeleteFileOptions & {force?: boolean}} [options.deleteOptions] - Extra delete parameters.
11
+ * @param {boolean} [options.ignoreMissing=true] - Whether to ignore an empty/missing prefix.
12
+ * @returns {Promise<Outcome.Either<true, string>>}
13
+ * - On success: `Outcome.makeSuccess(true)` if deletion succeeds
14
+ * (or prefix absent and `ignoreMissing` is true).
15
+ * - On failure: `Outcome.makeFailure(errStr)` if deletion fails
16
+ * or prefix absent and `ignoreMissing` is false.
17
+ */
18
+ export async function removeDir(bucket, directoryPath, options) {
19
+ const { deleteOptions, ignoreMissing = true } = options ?? {};
20
+ const prefix = directoryPath.endsWith('/') ? directoryPath : `${directoryPath}/`;
21
+ try {
22
+ // First check if anything exists when ignoreMissing is disabled.
23
+ if (!ignoreMissing) {
24
+ const [some] = await bucket.getFiles({ prefix, maxResults: 1 });
25
+ if (some.length === 0) {
26
+ return Outcome.makeFailure(`No objects found for prefix "${prefix}".`);
27
+ }
28
+ }
29
+ // deleteFiles removes all matching objects in a single call.
30
+ await bucket.deleteFiles({ prefix, ...deleteOptions });
31
+ return Outcome.makeSuccess(true);
32
+ }
33
+ catch (err) {
34
+ return Outcome.makeFailure(unknownToString(err));
35
+ }
36
+ }