@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
package/TODO.md ADDED
@@ -0,0 +1,269 @@
1
+ # To do
2
+
3
+ # -
4
+
5
+ Après le dev :
6
+ - envoyer le code à GPT + Claude, leur demander:
7
+ 1/ s'ils comprennent le fichier, on veut juste s'assurer qu'on est raccord avec lui à ce stade
8
+ 2/ en gardant en tête de garder le périmètre fonctionnel intact, sans chercher à faire plus ce qu'il y a actuellement, de relever les nommages ou formes de code qui pourraient être améliorées pour que le fichier soit prêt à intégrer une librairie de composants solide, durable dans le temps et facile à maintenir. Préciser qu'il faut respecter les règles de standardjs pour le lint
9
+ - essayer de build, régler les erreurs du linter
10
+ - après ça, fournir à GPT/Claude un exemple de fichier test d'un autre composant, Drawer par ex, + le code actuel de Subtitles, et lui demander de garder le style/approche fourni, et générer les tests pertinents pour le composant Subtitles (utiliser srtFileContents et pas src, ça va être une galère). Lui rappeler que les tests sont évalués par nodejs, donc pas trop se reposer sur des choses qui se passent dans un browser. Pas trop besoin de checker le contenu du fichier de test, moi je prends ce qu'il me donne, je lance le test et espère que ça passe tout, si ça passe pas tu peux lui donner le contenu de l'erreur et voir si il arrive à régler le truc tout seul, si ça veut vraiment pas, commente l'intégralité du test qui bloque, tant pis.
11
+ - ensuite une fois que c'est bon, fournir à GPT/Claude un exemple de JSDOC issu d'un autre composant, Gallery par ex, + le code actuel de Subtitles, et lui demander de générer le JSDOC pour tous les exported members de Subtitles (Props et Subtitles à priori). Juste le JSDOC, pas répéter le code, parfois en générant tout il glisse des erreurs en répétant le code.
12
+ - re build, lint et corrections éventuelles des erreurs du linter
13
+ - pull add commit push 🎉
14
+
15
+
16
+ # Composants
17
+
18
+ ## Composant Vidéo
19
+
20
+ /components/Video
21
+
22
+
23
+ ### D'abord, on va reprendre new-app/src/components/VideoPlayer/MutedVideo.tsx
24
+ Ce composant permet un workaround d'une petite bizzarerie de react avec l'attribut muted.
25
+ Ça va être notre composant vidéo de base, pour ne pas manipuler directement l'élément html vidéo.
26
+
27
+ ### Ensuite, un composant tout simple :
28
+
29
+ // "on" evt listeners
30
+ // "state/props"
31
+ // "int/obs triggers"
32
+ // disclaimer
33
+ // subs
34
+
35
+ - une vidéo :
36
+ ```tsx
37
+ type SourceData = {
38
+ src?: string
39
+ type?: string
40
+ }
41
+ type TrackData = {
42
+ src?: string
43
+ kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata'
44
+ srclang?: string
45
+ label?: string
46
+ default?: boolean
47
+ }
48
+ type Props = {
49
+ sources?: string | string[] | SourceData[] // liste des éléments <source> dans la vidéo (ignore si pas src dans SourceData)
50
+ tracks?: string | string[] | TrackData[] // liste des éléments <tracks> dans la vidéo (ignore si pas src dans TrackData)
51
+ children?: JSX.Element // react children habituel, vient se coller sous les <source> et <tracks>
52
+ } & VideoHTMLAttributes<HTMLVideoElement>
53
+
54
+ const {
55
+ sources,
56
+ tracks,
57
+ children,
58
+ ...intrinsicVideoAttributes
59
+ } = props
60
+ ```
61
+ - un bouton play
62
+ - sur lm-video :
63
+ - data-play-on
64
+ - lm-video--play-on
65
+ - un bouton pause
66
+ - sur lm-video :
67
+ - data-play-off
68
+ - lm-video--play-off
69
+ - un span "temps écoulé"
70
+ - sur lm-video :
71
+ - data-elapsed-time-percent (0-1)
72
+ - data-elapsed-time-ms
73
+ - data-elapsed-time-readable ((hh:)mm:ss)
74
+ - un span "temps total"
75
+ - sur lm-video :
76
+ - data-total-time-ms
77
+ - data-total-time-readable
78
+ - une div cliquable en guise de timeline (pas de curseur)
79
+ - un bouton sound on
80
+ - sur lm-video:
81
+ - data-sound-on
82
+ - lm-video--sound-on
83
+ - un bouton sound off
84
+ - sur lm-video:
85
+ - data-sound-off
86
+ - lm-video--sound-off
87
+ - un input range (0 - 100, step=1) pour piloter le son
88
+ - sur lm-video:
89
+ - data-sound-volume-percent (0-1) (ne se met pas à 0 si sound off, c'est deux données séparées)
90
+ - data-sound-volume-readable (0-100)
91
+ - un span "volume (0-100)"
92
+ - un bouton full screen
93
+ - sur lm-video:
94
+ - data-fullscreen-on / data-full-screen-off
95
+ - lm-video--fullscreen-on / lm-video--fullscreen-off
96
+ - un bouton download
97
+ - un input range playback-speed (0.25-4 step=0.25)
98
+ - sur lm-video:
99
+ - data-playback-speed (.25-4)
100
+ - un span "playback speed (.25-4)"
101
+
102
+ ### Suite [WIP]
103
+
104
+ [ ] Click sur timeline ne semble pas marcher ?
105
+ [ ]
106
+
107
+ - Gérer la partie "controlled behavior" tout d'un coup
108
+ [ ] Idée : quand la vidéo est en mode controlled,
109
+
110
+
111
+
112
+
113
+
114
+
115
+ ## Composant Subtitles
116
+
117
+ lm-tools/src/components/Subtitles/index.tsx
118
+
119
+ ```tsx
120
+ <Subtitles
121
+ src='srt.file.url'
122
+ srtFileContent='Contenu srt brut, si présent la prop src est ignorée.'
123
+ subsGroups={[3, 4, 5]}
124
+ timecodeMs={10000}>
125
+ </Subtitles>
126
+ ```
127
+
128
+ ```html
129
+ <div class="dsed-subtitles">
130
+ <!-- Groupe passé (donc que sub prev dedans) -->
131
+ <div
132
+ class="dsed-subtitles__group dsed-subtitles__group--prev"
133
+ data-start-sub-pos="0"
134
+ data-end-sub-pos="1">
135
+ <span class="dsed-subtitles__sub dsed-subtitles__sub--prev" data-sub-pos="0">
136
+ Some sub
137
+ </span>
138
+ </div>
139
+ <!-- Groupe courant (mix de sub prev, curr et next) -->
140
+ <div
141
+ class="dsed-subtitles__group dsed-subtitles__group--curr"
142
+ data-start-timecode="00:02:16,612"
143
+ data-end-timecode="00:02:16,612"
144
+ data-start-time-ms="34754382"
145
+ data-end-time-ms="34754382"
146
+ data-start-sub-pos="0"
147
+ data-end-sub-pos="1">
148
+ <span
149
+ class="dsed-subtitles__sub dsed-subtitles__sub--curr"
150
+ data-start-timecode="00:02:16,612"
151
+ data-end-timecode="00:02:16,612"
152
+ data-start-time-ms="34754382"
153
+ data-end-time-ms="34754382">
154
+ Some sub
155
+ </span>
156
+ </div>
157
+ <!-- Groupe à venir -->
158
+ <div
159
+ class="dsed-subtitles__group dsed-subtitles__group--prev"
160
+ data-start-timecode="00:02:16,612"
161
+ data-end-timecode="00:02:16,612"
162
+ data-start-time-ms="34754382"
163
+ data-end-time-ms="34754382"
164
+ data-start-sub-pos="0"
165
+ data-end-sub-pos="1">
166
+ <span
167
+ class="dsed-subtitles__sub dsed-subtitles__sub--prev"
168
+ data-start-timecode="00:02:16,612"
169
+ data-end-timecode="00:02:16,612"
170
+ data-start-time-ms="34754382"
171
+ data-end-time-ms="34754382">
172
+ Some sub
173
+ </span>
174
+ </div>
175
+ </div>
176
+ ```
177
+
178
+
179
+
180
+
181
+ # CLI Utils
182
+
183
+
184
+ ## Get diff from commit hash
185
+
186
+ ```ts
187
+ export type GetDiffOptions = {
188
+ cwd?: string
189
+ }
190
+
191
+ // Pas certain de Array<string> mais c'est peut-être suffisant,
192
+ // l'idée c'est d'avoir une liste descriptive des changements successifs sur un fichier (genre le contenu brut de git diff)
193
+ export type Diff = Record<string, Array<string>>
194
+
195
+ // Ou pas async si pas nécessaire
196
+ export async function getDiffFrom (
197
+ commitHash: string,
198
+ options: GetDiffOptions = {}
199
+ ): Promise<Diff> {
200
+ const { cwd } = options
201
+ return {}
202
+ }
203
+ ```
204
+
205
+ ## Generate commit message from diff
206
+
207
+ ```ts
208
+ export type GenerateDiffDescriptionOptions = {
209
+ customPromptOrSomething?: string // juste une idée comme ça, sais pas si c'est pertinent
210
+ // Ptet c'est là qu'il faut dire "je veux plutôt un changelog, ou plutôt un message de commit"
211
+ }
212
+
213
+ export async function generateDiffDescription (
214
+ diff: Diff,
215
+ options: GenerateDiffDescriptionOptions = {}): Promise<string> {
216
+ return ''
217
+ }
218
+ ```
219
+
220
+
221
+
222
+
223
+ # Tests & JSDOC
224
+
225
+ - [ ] Tests manquants (garder la forme describe('funcName') { it('does something') {} })
226
+ - [ ] agnostic/html/hyper-json -> nécessaire mais trop compliqué/long
227
+ - [ ] agnostic/html/placeholders -> pas nécessaire
228
+ - [ ] agnostic/misc/logs/make-text-block -> Manque JSDOC aussi
229
+ - [ ] agnostic/strings/char-codes
230
+ - [ ] agnostic/strings/matches
231
+ - [ ] agnostic/strings/parse-table
232
+ - [ ] agnostic/strings/to-alphanum
233
+ - [ ] agnostic/strings/trim
234
+ - [ ] agnostic/time/dates/format-date
235
+ - [ ] agnostic/time/duration
236
+ - [ ] agnostic/time/timeout
237
+ - [ ] agnostic/time/transitions
238
+ - [ ] agnostic/time/wait
239
+ - [ ] node/@aws-s3 - oui mais comment (valable aussi pour gcs, ftps & sftp) ?
240
+ - [ ] node/@design-edito - vide
241
+ - [ ] node/@express/@multer
242
+ - [ ] node/@google-cloud
243
+ - [ ] node/cloud-storage
244
+ - [ ] node/encryption
245
+ - [ ] node/files
246
+ - [ ] node/ftps
247
+ - [ ] node/images
248
+ - [ ] node/process
249
+ - [ ] node/sftp
250
+
251
+ - Pas utile
252
+ - [ ] agnostic/css/bem -> DEPRECATED
253
+ - [ ] agnostic/css/styles-set -> DEPRECATED
254
+ - [ ] agnostic/errors/register -> pas nécessaire
255
+ - [ ] agnostic/html/sanitization/html -> DEPRECATED
256
+ - [ ] agnostic/misc/assert -> DEPRECATED
257
+ - [ ] agnostic/misc/logs/logger -> presque DEPRECATED
258
+ - [ ] agnostic/misc/logs/styles -> pas nécessaire tout de suite
259
+ - [ ] agnostic/strings/normalize-indent -> pas nécessaire tout de suite, fonction à repenser
260
+ - [ ] agnostic/strings/replace-all -> DEPRECATED
261
+
262
+
263
+
264
+ # Misc
265
+
266
+ - [ ] Repenser agnostic/optim/throttle-debounce ?
267
+ - [ ] Repenser agnostic/strings/normalize-indent ?
268
+ - [ ] Get rid of namespaces in hyper-json ?
269
+ - [ ] agnostic/misc/logs/styles, se repencher dessus, viser à substituer totalement chalk (styles génériques, bold, red, bgBlue, etc...) + continuer à exporter des "styles nommés" comme actuellement
@@ -1,10 +1,10 @@
1
- import "../../../chunks/chunk-WSFCRVEQ.js";
2
-
3
- // src/agnostic/arrays/dedupe/index.ts
4
- function dedupe(arr) {
5
- const deduped = Array.from(new Set(arr));
6
- return deduped;
1
+ /**
2
+ * Returns a copy of the input array, with stripped duplicates
3
+ *
4
+ * @param arr - The array to search for duplicates.
5
+ * @returns The deduped array
6
+ */
7
+ export function dedupe(arr) {
8
+ const deduped = Array.from(new Set(arr));
9
+ return deduped;
7
10
  }
8
- export {
9
- dedupe
10
- };
@@ -0,0 +1,24 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { dedupe } from './index.js';
3
+ describe('dedupe', () => {
4
+ it('preserves arrays without duplicates', () => {
5
+ const result = dedupe([1, 2, 3]);
6
+ expect(result).toHaveLength(3);
7
+ expect(result).toContain(1);
8
+ expect(result).toContain(2);
9
+ expect(result).toContain(3);
10
+ });
11
+ it('removes duplicates', () => {
12
+ const dupObj = { b: 1 };
13
+ const result = dedupe([
14
+ 1, 1, 2,
15
+ 'a', 'a', 'b',
16
+ true, true, false,
17
+ null, null,
18
+ undefined, undefined,
19
+ { a: 1 }, { a: 1 },
20
+ dupObj, dupObj
21
+ ]);
22
+ expect(JSON.stringify(result)).toEqual('[1,2,"a","b",true,false,null,null,{"a":1},{"a":1},{"b":1}]');
23
+ });
24
+ });
@@ -1,26 +1,36 @@
1
- import "../../../chunks/chunk-WSFCRVEQ.js";
2
-
3
- // src/agnostic/arrays/find-duplicates/index.ts
4
- function findDuplicates(arr, stopAtFirst = false) {
5
- const seen = /* @__PURE__ */ new Set();
6
- const duplicates = /* @__PURE__ */ new Set();
7
- for (const item of arr) {
8
- if (seen.has(item) && stopAtFirst) return [item];
9
- if (seen.has(item)) duplicates.add(item);
10
- seen.add(item);
11
- }
12
- return Array.from(duplicates);
1
+ // [WIP] could provide an equality check optional function for checking mor complex objects
2
+ /**
3
+ * Finds duplicate elements in an array.
4
+ *
5
+ * @param arr - The array to search for duplicates.
6
+ * @param [stopAtFirst=false] - If `true`, returns immediately after finding the first duplicate.
7
+ * @returns An array of duplicate elements found in the input array.
8
+ */
9
+ export function findDuplicates(arr, stopAtFirst = false) {
10
+ const seen = new Set();
11
+ const duplicates = new Set();
12
+ for (const item of arr) {
13
+ if (seen.has(item) && stopAtFirst)
14
+ return [item];
15
+ if (seen.has(item))
16
+ duplicates.add(item);
17
+ seen.add(item);
18
+ }
19
+ return Array.from(duplicates);
13
20
  }
14
- function findDuplicatesPositions(arr) {
15
- const seen = /* @__PURE__ */ new Set();
16
- const duplicatesPos = [];
17
- arr.forEach((item, pos) => {
18
- if (seen.has(item)) return duplicatesPos.push(pos);
19
- seen.add(item);
20
- });
21
- return duplicatesPos;
21
+ /**
22
+ * Finds the positions of duplicate elements in an array.
23
+ *
24
+ * @param arr - The array to search for duplicates positions.
25
+ * @returns An array of the positions of duplicate elements found in the input array.
26
+ */
27
+ export function findDuplicatesPositions(arr) {
28
+ const seen = new Set();
29
+ const duplicatesPos = [];
30
+ arr.forEach((item, pos) => {
31
+ if (seen.has(item))
32
+ return duplicatesPos.push(pos);
33
+ seen.add(item);
34
+ });
35
+ return duplicatesPos;
22
36
  }
23
- export {
24
- findDuplicates,
25
- findDuplicatesPositions
26
- };
@@ -0,0 +1,31 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { findDuplicates, findDuplicatesPositions } from './index.js';
3
+ describe('find-duplicates', () => {
4
+ it('finds no duplicates when there are none', () => {
5
+ const result = findDuplicates([1, 2, 3]);
6
+ expect(result).toHaveLength(0);
7
+ });
8
+ it('finds duplicates and stops at first when asked', () => {
9
+ const result = findDuplicates([1, 1, 2, 2], true);
10
+ expect(result).toHaveLength(1);
11
+ expect(result).toContain(1);
12
+ });
13
+ it('finds all duplicates otherwise', () => {
14
+ const result = findDuplicates([1, 1, 2, 2]);
15
+ expect(result).toHaveLength(2);
16
+ expect(result).toContain(1);
17
+ expect(result).toContain(2);
18
+ });
19
+ });
20
+ describe('find-duplicates-positions', () => {
21
+ it('finds no duplicates positions when there are no duplicates', () => {
22
+ const result = findDuplicatesPositions([1, 2, 3]);
23
+ expect(result).toHaveLength(0);
24
+ });
25
+ it('finds all duplicates positions', () => {
26
+ const result = findDuplicatesPositions([1, 1, 2, 2]);
27
+ expect(result).toHaveLength(2);
28
+ expect(result).toContain(1);
29
+ expect(result).toContain(3);
30
+ });
31
+ });
@@ -1,6 +1,6 @@
1
- export * as findDuplicates from './find-duplicates/index.js'
2
1
  export * as dedupe from './dedupe/index.js'
3
2
  export * as isArrayOf from './is-array-of/index.js'
3
+ export * as findDuplicates from './find-duplicates/index.js'
4
4
  export * as make from './make/index.js'
5
5
  export * as randomPick from './random-pick/index.js'
6
6
  export * as shuffle from './shuffle/index.js'
@@ -1,6 +1,6 @@
1
- export * as findDuplicates from './find-duplicates/index.js'
2
1
  export * as dedupe from './dedupe/index.js'
3
2
  export * as isArrayOf from './is-array-of/index.js'
3
+ export * as findDuplicates from './find-duplicates/index.js'
4
4
  export * as make from './make/index.js'
5
5
  export * as randomPick from './random-pick/index.js'
6
6
  export * as shuffle from './shuffle/index.js'
@@ -1,27 +1,29 @@
1
- import {
2
- isConstructorFunction
3
- } from "../../../chunks/chunk-5H3IRSOB.js";
4
- import "../../../chunks/chunk-WSFCRVEQ.js";
5
-
6
- // src/agnostic/arrays/is-array-of/index.ts
7
- function isArrayOf(input, _types) {
8
- if (!Array.isArray(input)) return false;
9
- if (_types === void 0) return true;
10
- const types = Array.isArray(_types) ? _types : [_types];
11
- const primitiveTypeMap = /* @__PURE__ */ new Map([
12
- [Number, "number"],
13
- [String, "string"],
14
- [Boolean, "boolean"]
15
- ]);
16
- return input.every(
17
- (entry) => types.some((typeChecker) => {
18
- if (!isConstructorFunction(typeChecker)) return typeChecker(entry);
19
- const primitiveType = primitiveTypeMap.get(typeChecker);
20
- if (primitiveType !== void 0) return typeof entry === primitiveType;
21
- return entry instanceof typeChecker;
22
- })
23
- );
1
+ import { isConstructorFunction } from '../../misc/is-constructor-function/index.js';
2
+ /**
3
+ * Type guard to check if an input is an array and optionally if all elements match a type.
4
+ *
5
+ * If no type checkers are provided, only checks if the input is an array.
6
+ * Supports constructor functions (e.g., `Number`, `String`, `Boolean`, custom classes)
7
+ * and custom type guard functions.
8
+ */
9
+ export function isArrayOf(input, _types) {
10
+ if (!Array.isArray(input))
11
+ return false;
12
+ if (_types === undefined)
13
+ return true;
14
+ const types = Array.isArray(_types) ? _types : [_types];
15
+ const primitiveTypeMap = new Map([
16
+ [Number, 'number'],
17
+ [String, 'string'],
18
+ [Boolean, 'boolean']
19
+ ]);
20
+ return input.every(entry => types.some(typeChecker => {
21
+ if (!isConstructorFunction(typeChecker))
22
+ return typeChecker(entry);
23
+ const primitiveType = primitiveTypeMap.get(typeChecker);
24
+ // eslint-disable-next-line valid-typeof
25
+ if (primitiveType !== undefined)
26
+ return typeof entry === primitiveType;
27
+ return entry instanceof typeChecker;
28
+ }));
24
29
  }
25
- export {
26
- isArrayOf
27
- };
@@ -0,0 +1,56 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isArrayOf } from './index.js';
3
+ // Custom class & typeguard for testing
4
+ class MyClass {
5
+ value;
6
+ constructor(value) {
7
+ this.value = value;
8
+ }
9
+ }
10
+ const isEvenNumber = (x) => typeof x === 'number' && x % 2 === 0;
11
+ describe('is-array-of', () => {
12
+ it('returns true for empty array without type checkers', () => {
13
+ expect(isArrayOf([])).toBe(true);
14
+ });
15
+ it('returns true for array of numbers', () => {
16
+ expect(isArrayOf([1, 2, 3], Number)).toBe(true);
17
+ });
18
+ it('returns false if any element does not match primitive type', () => {
19
+ expect(isArrayOf([1, '2', 3], Number)).toBe(false);
20
+ expect(isArrayOf([true, false, 0], Boolean)).toBe(false);
21
+ expect(isArrayOf(['a', 'b', 1], String)).toBe(false);
22
+ });
23
+ it('returns true for array of strings', () => {
24
+ expect(isArrayOf(['a', 'b', 'c'], String)).toBe(true);
25
+ });
26
+ it('returns true for array of booleans', () => {
27
+ expect(isArrayOf([true, false, true], Boolean)).toBe(true);
28
+ });
29
+ it('returns true for array of custom class instances', () => {
30
+ const arr = [new MyClass(1), new MyClass(2)];
31
+ expect(isArrayOf(arr, MyClass)).toBe(true);
32
+ });
33
+ it('returns false if any element is not instance of custom class', () => {
34
+ const arr = [new MyClass(1), { value: 2 }];
35
+ expect(isArrayOf(arr, MyClass)).toBe(false);
36
+ });
37
+ it('supports multiple type checkers (union)', () => {
38
+ const arr = [1, 'a', 2, 'b'];
39
+ expect(isArrayOf(arr, [Number, String])).toBe(true);
40
+ expect(isArrayOf([1, true], [Number, String])).toBe(false);
41
+ });
42
+ it('supports custom type guard functions', () => {
43
+ const arr = [2, 4, 6];
44
+ expect(isArrayOf(arr, isEvenNumber)).toBe(true);
45
+ expect(isArrayOf([2, 3, 4], isEvenNumber)).toBe(false);
46
+ });
47
+ it('returns false for non-array input', () => {
48
+ expect(isArrayOf(123, Number)).toBe(false);
49
+ expect(isArrayOf({}, Number)).toBe(false);
50
+ expect(isArrayOf(null, Number)).toBe(false);
51
+ expect(isArrayOf(undefined, Number)).toBe(false);
52
+ });
53
+ it('returns true for array without type checkers', () => {
54
+ expect(isArrayOf([1, 'a', true])).toBe(true);
55
+ });
56
+ });
@@ -1,9 +1,12 @@
1
- import "../../../chunks/chunk-WSFCRVEQ.js";
2
-
3
- // src/agnostic/arrays/make/index.ts
4
- function make(filler, length) {
5
- return new Array(length).fill(null).map((_, pos) => filler(pos));
1
+ /**
2
+ * Creates an array of a specified length using a filler function.
3
+ *
4
+ * @param filler - Function called for each position to generate the array element.
5
+ * @param length - Desired length of the array.
6
+ * @returns A new array with elements generated by the filler function.
7
+ */
8
+ export function make(filler, length) {
9
+ return new Array(length)
10
+ .fill(null)
11
+ .map((_, pos) => filler(pos));
6
12
  }
7
- export {
8
- make
9
- };
@@ -0,0 +1,10 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { make } from './index.js';
3
+ import { randomInt } from '../../random/random/index.js';
4
+ describe('make', () => {
5
+ it('makes the array', () => {
6
+ const made = make(() => randomInt(0, 42), 4);
7
+ expect(made).toHaveLength(4);
8
+ expect(made.every(i => typeof i === 'number')).toBe(true);
9
+ });
10
+ });
@@ -1,9 +1,40 @@
1
- import {
2
- randomPick,
3
- randomPickMany
4
- } from "../../../chunks/chunk-K5UF634H.js";
5
- import "../../../chunks/chunk-WSFCRVEQ.js";
6
- export {
7
- randomPick,
8
- randomPickMany
9
- };
1
+ /**
2
+ * Picks a random element from an array, optionally excluding certain elements.
3
+ *
4
+ * @param arr - The array to pick from.
5
+ * @param [exclude] - Array of elements to exclude from selection.
6
+ * @returns A randomly selected element from the array.
7
+ * @throws Throws an error if no elements are available after exclusions.
8
+ */
9
+ export function randomPick(arr, exclude = []) {
10
+ const filteredArr = [...arr].filter(elt => !exclude.includes(elt));
11
+ const length = filteredArr.length;
12
+ if (length === 0)
13
+ throw new Error('Array length must be at least 1 after exclusion');
14
+ const pos = Math.floor(Math.random() * length);
15
+ const found = filteredArr[pos];
16
+ return found;
17
+ }
18
+ /**
19
+ * Picks multiple random elements from an array without replacement.
20
+ *
21
+ * Each picked element is removed from the pool before the next selection, ensuring
22
+ * no duplicates in the result.
23
+ *
24
+ * @param howMuch - Number of elements to pick.
25
+ * @param arr - The array to pick from.
26
+ * @param [exclude] - Array of elements to exclude from selection.
27
+ * @returns An array of randomly selected elements.
28
+ * @throws Propagates the error thrown by `randomPick` if not enough elements are available.
29
+ */
30
+ export function randomPickMany(howMuch, arr, exclude = []) {
31
+ const grindedArr = [...arr];
32
+ const pickedSelection = [];
33
+ for (let i = 0; i < howMuch; i++) {
34
+ const picked = randomPick(grindedArr, exclude);
35
+ const indexOfPicked = grindedArr.indexOf(picked);
36
+ grindedArr.splice(indexOfPicked, 1);
37
+ pickedSelection.push(picked);
38
+ }
39
+ return pickedSelection;
40
+ }
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { randomPick, randomPickMany } from './index.js';
3
+ import { make } from '../make/index.js';
4
+ describe('random-pick', () => {
5
+ it('correctly picks one', () => {
6
+ const source = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
7
+ const pickedOneTenTimes = make(() => randomPick(source), 10);
8
+ expect(pickedOneTenTimes.every(picked => source.includes(picked)));
9
+ });
10
+ it('throws if asked to pick more than there are in the input', () => {
11
+ expect(() => randomPick([])).toThrow();
12
+ });
13
+ });
14
+ describe('random-pick-many', () => {
15
+ it('correctly picks one and many', () => {
16
+ const source = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
17
+ const pickedManyTenTimes = make(() => randomPickMany(3, source), 10);
18
+ expect(pickedManyTenTimes.every(picked => picked.every(p => source.includes(p))));
19
+ });
20
+ it('throws if asked to pick more than there are in the input', () => {
21
+ expect(() => randomPickMany(2, [0])).toThrow();
22
+ });
23
+ });