@splendidlabz/utils 1.11.3 → 1.11.5

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 (408) hide show
  1. package/dist/cjs/dom/accessibility.cjs +53 -0
  2. package/dist/cjs/dom/actions/index.cjs +410 -0
  3. package/dist/cjs/dom/actions/masonry.cjs +152 -0
  4. package/dist/cjs/dom/actions/prefer-horizontal-scroll.cjs +157 -0
  5. package/dist/cjs/dom/actions/sticky.cjs +213 -0
  6. package/dist/cjs/dom/bounding-box.cjs +70 -0
  7. package/dist/cjs/dom/clipboard.cjs +37 -0
  8. package/dist/cjs/dom/cookie.cjs +57 -0
  9. package/dist/cjs/dom/css-vars.cjs +57 -0
  10. package/dist/cjs/dom/events.cjs +59 -0
  11. package/{src/dom/focusable.js → dist/cjs/dom/focusable.cjs} +51 -73
  12. package/dist/cjs/dom/font-size.cjs +80 -0
  13. package/dist/cjs/dom/get-element.cjs +98 -0
  14. package/dist/cjs/dom/hash.cjs +35 -0
  15. package/dist/cjs/dom/index.cjs +1267 -0
  16. package/dist/cjs/dom/keyboard.cjs +51 -0
  17. package/dist/cjs/dom/local-store.cjs +79 -0
  18. package/dist/cjs/dom/media.cjs +59 -0
  19. package/dist/cjs/dom/observers/index.cjs +253 -0
  20. package/dist/cjs/dom/observers/intersection-observer.cjs +91 -0
  21. package/dist/cjs/dom/observers/mutation-observer.cjs +95 -0
  22. package/dist/cjs/dom/observers/observer.cjs +48 -0
  23. package/dist/cjs/dom/observers/resize-observer.cjs +84 -0
  24. package/dist/cjs/dom/observers/scroll-observer.cjs +177 -0
  25. package/dist/cjs/dom/pkce.cjs +53 -0
  26. package/dist/cjs/dom/query-params.cjs +38 -0
  27. package/dist/cjs/dom/random-string.cjs +38 -0
  28. package/dist/cjs/dom/sanitize.cjs +65 -0
  29. package/dist/cjs/dom/session-store.cjs +49 -0
  30. package/dist/cjs/dom/spam-prevention.cjs +50 -0
  31. package/dist/cjs/dom/trap-focus.cjs +197 -0
  32. package/dist/cjs/dom/ui/aria-current.cjs +43 -0
  33. package/dist/cjs/dom/ui/inconsistent-button-fix.cjs +35 -0
  34. package/dist/cjs/dom/ui/index.cjs +105 -0
  35. package/dist/cjs/dom/ui/scroll-container.cjs +47 -0
  36. package/dist/cjs/dom/ui/traverse-and-scramble.cjs +50 -0
  37. package/dist/cjs/lib/arrays/index.cjs +139 -0
  38. package/dist/cjs/lib/arrays/item-position.cjs +42 -0
  39. package/dist/cjs/lib/arrays/join.cjs +43 -0
  40. package/dist/cjs/lib/arrays/shuffle.cjs +42 -0
  41. package/dist/cjs/lib/arrays/sort.cjs +67 -0
  42. package/dist/cjs/lib/arrays/split-array.cjs +41 -0
  43. package/dist/cjs/lib/arrays/unique.cjs +31 -0
  44. package/dist/cjs/lib/auth/index.cjs +53 -0
  45. package/dist/cjs/lib/auth/route-manager.cjs +51 -0
  46. package/dist/cjs/lib/checks.cjs +63 -0
  47. package/dist/cjs/lib/date/days.cjs +37 -0
  48. package/dist/cjs/lib/date/index.cjs +208 -0
  49. package/dist/cjs/lib/date/months.cjs +102 -0
  50. package/dist/cjs/lib/date/time.cjs +117 -0
  51. package/dist/cjs/lib/form/form-data.cjs +83 -0
  52. package/dist/cjs/lib/form/index.cjs +122 -0
  53. package/dist/cjs/lib/form/sanitize.cjs +61 -0
  54. package/dist/cjs/lib/functions/callback.cjs +31 -0
  55. package/dist/cjs/lib/functions/debounce.cjs +43 -0
  56. package/dist/cjs/lib/functions/env.cjs +32 -0
  57. package/dist/cjs/lib/functions/functional.cjs +82 -0
  58. package/dist/cjs/lib/functions/index.cjs +142 -0
  59. package/dist/cjs/lib/functions/throttle.cjs +38 -0
  60. package/dist/cjs/lib/functions/timeout.cjs +41 -0
  61. package/dist/cjs/lib/hash.cjs +43 -0
  62. package/dist/cjs/lib/index.cjs +1178 -0
  63. package/dist/cjs/lib/numbers/index.cjs +49 -0
  64. package/dist/cjs/lib/numbers/math.cjs +36 -0
  65. package/dist/cjs/lib/objects/camelcase-keys.cjs +80 -0
  66. package/dist/cjs/lib/objects/empty.cjs +39 -0
  67. package/dist/cjs/lib/objects/equal.cjs +47 -0
  68. package/dist/cjs/lib/objects/extend.cjs +147 -0
  69. package/dist/cjs/lib/objects/flatten.cjs +48 -0
  70. package/dist/cjs/lib/objects/index.cjs +378 -0
  71. package/dist/cjs/lib/objects/json.cjs +35 -0
  72. package/dist/cjs/lib/objects/loop.cjs +40 -0
  73. package/dist/cjs/lib/objects/mix/mix.cjs +115 -0
  74. package/dist/cjs/lib/objects/nested-property.cjs +45 -0
  75. package/dist/cjs/lib/objects/normalize-object.cjs +106 -0
  76. package/dist/cjs/lib/objects/omit-empty.cjs +40 -0
  77. package/dist/cjs/lib/objects/size.cjs +63 -0
  78. package/dist/cjs/lib/objects/split.cjs +39 -0
  79. package/dist/cjs/lib/promises/index.cjs +69 -0
  80. package/dist/cjs/lib/promises/reject.cjs +67 -0
  81. package/dist/cjs/lib/sse.cjs +99 -0
  82. package/dist/cjs/lib/strings/convert-case/convert-case.cjs +96 -0
  83. package/dist/cjs/lib/strings/index.cjs +197 -0
  84. package/dist/cjs/lib/strings/markdown.cjs +76 -0
  85. package/dist/cjs/lib/strings/name.cjs +46 -0
  86. package/dist/cjs/lib/strings/pluralize.cjs +40 -0
  87. package/dist/cjs/lib/strings/query-string.cjs +43 -0
  88. package/dist/cjs/lib/style/index.cjs +64 -0
  89. package/dist/cjs/lib/symbols/index.cjs +40 -0
  90. package/dist/cjs/lib/symbols/symbols.cjs +38 -0
  91. package/dist/cjs/node/dirname.cjs +49 -0
  92. package/dist/cjs/node/file-cache.cjs +200 -0
  93. package/dist/cjs/node/file.cjs +50 -0
  94. package/dist/cjs/node/hash.cjs +42 -0
  95. package/dist/cjs/node/index.cjs +296 -0
  96. package/dist/cjs/node/pkce.cjs +64 -0
  97. package/dist/cjs/node/random-string.cjs +43 -0
  98. package/dist/cjs/node/sanitize.cjs +65 -0
  99. package/dist/cjs/node/uuid.cjs +42 -0
  100. package/dist/esm/dom/accessibility.js +26 -0
  101. package/dist/esm/dom/actions/index.js +3 -0
  102. package/dist/esm/dom/actions/masonry.js +38 -0
  103. package/dist/esm/dom/actions/prefer-horizontal-scroll.js +90 -0
  104. package/dist/esm/dom/actions/sticky.js +70 -0
  105. package/dist/esm/dom/bounding-box.js +44 -0
  106. package/dist/esm/dom/clipboard.js +12 -0
  107. package/dist/esm/dom/cookie.js +31 -0
  108. package/dist/esm/dom/css-vars.js +21 -0
  109. package/dist/esm/dom/events.js +31 -0
  110. package/dist/esm/dom/focusable.js +117 -0
  111. package/dist/esm/dom/font-size.js +40 -0
  112. package/dist/esm/dom/get-element.js +66 -0
  113. package/dist/esm/dom/hash.js +10 -0
  114. package/dist/esm/dom/index.js +23 -0
  115. package/dist/esm/dom/keyboard.js +22 -0
  116. package/{src → dist/esm}/dom/local-store.js +16 -28
  117. package/dist/esm/dom/media.js +32 -0
  118. package/dist/esm/dom/observers/index.js +4 -0
  119. package/dist/esm/dom/observers/intersection-observer.js +36 -0
  120. package/dist/esm/dom/observers/mutation-observer.js +40 -0
  121. package/dist/esm/dom/observers/observer.js +15 -0
  122. package/dist/esm/dom/observers/resize-observer.js +29 -0
  123. package/dist/esm/dom/observers/scroll-observer.js +95 -0
  124. package/dist/esm/dom/pkce.js +20 -0
  125. package/dist/esm/dom/query-params.js +13 -0
  126. package/dist/esm/dom/random-string.js +12 -0
  127. package/dist/esm/dom/sanitize.js +8 -0
  128. package/dist/esm/dom/session-store.js +24 -0
  129. package/dist/esm/dom/spam-prevention.js +25 -0
  130. package/dist/esm/dom/trap-focus.js +51 -0
  131. package/dist/esm/dom/ui/aria-current.js +17 -0
  132. package/dist/esm/dom/ui/inconsistent-button-fix.js +10 -0
  133. package/dist/esm/dom/ui/index.js +4 -0
  134. package/dist/esm/dom/ui/scroll-container.js +22 -0
  135. package/dist/esm/dom/ui/traverse-and-scramble.js +25 -0
  136. package/dist/esm/lib/arrays/index.js +6 -0
  137. package/dist/esm/lib/arrays/item-position.js +15 -0
  138. package/dist/esm/lib/arrays/join.js +12 -0
  139. package/dist/esm/lib/arrays/shuffle.js +17 -0
  140. package/dist/esm/lib/arrays/sort.js +36 -0
  141. package/dist/esm/lib/arrays/split-array.js +16 -0
  142. package/dist/esm/lib/arrays/unique.js +6 -0
  143. package/dist/esm/lib/auth/index.js +1 -0
  144. package/dist/esm/lib/auth/route-manager.js +25 -0
  145. package/dist/esm/lib/checks.js +34 -0
  146. package/dist/esm/lib/date/days.js +12 -0
  147. package/dist/esm/lib/date/index.js +3 -0
  148. package/dist/esm/lib/date/months.js +77 -0
  149. package/dist/esm/lib/date/time.js +75 -0
  150. package/dist/esm/lib/form/form-data.js +57 -0
  151. package/dist/esm/lib/form/index.js +2 -0
  152. package/dist/esm/lib/form/sanitize.js +34 -0
  153. package/dist/esm/lib/functions/callback.js +6 -0
  154. package/dist/esm/lib/functions/debounce.js +18 -0
  155. package/dist/esm/lib/functions/env.js +7 -0
  156. package/dist/esm/lib/functions/functional.js +52 -0
  157. package/dist/esm/lib/functions/index.js +5 -0
  158. package/dist/esm/lib/functions/throttle.js +13 -0
  159. package/dist/esm/lib/functions/timeout.js +14 -0
  160. package/dist/esm/lib/hash.js +18 -0
  161. package/dist/esm/lib/index.js +14 -0
  162. package/dist/esm/lib/numbers/index.js +11 -0
  163. package/dist/esm/lib/numbers/math.js +10 -0
  164. package/dist/esm/lib/objects/camelcase-keys.js +16 -0
  165. package/dist/esm/lib/objects/empty.js +13 -0
  166. package/dist/esm/lib/objects/equal.js +11 -0
  167. package/dist/esm/lib/objects/extend.js +13 -0
  168. package/dist/esm/lib/objects/flatten.js +17 -0
  169. package/dist/esm/lib/objects/index.js +13 -0
  170. package/dist/esm/lib/objects/json.js +10 -0
  171. package/dist/esm/lib/objects/loop.js +14 -0
  172. package/dist/esm/lib/objects/mix/mix.js +88 -0
  173. package/dist/esm/lib/objects/nested-property.js +18 -0
  174. package/dist/esm/lib/objects/normalize-object.js +9 -0
  175. package/dist/esm/lib/objects/omit-empty.js +15 -0
  176. package/dist/esm/lib/objects/size.js +38 -0
  177. package/dist/esm/lib/objects/split.js +14 -0
  178. package/dist/esm/lib/promises/index.js +1 -0
  179. package/dist/esm/lib/promises/reject.js +17 -0
  180. package/dist/esm/lib/sse.js +50 -0
  181. package/dist/esm/lib/strings/convert-case/convert-case.js +64 -0
  182. package/dist/esm/lib/strings/index.js +5 -0
  183. package/dist/esm/lib/strings/markdown.js +40 -0
  184. package/dist/esm/lib/strings/name.js +21 -0
  185. package/dist/esm/lib/strings/pluralize.js +5 -0
  186. package/dist/esm/lib/strings/query-string.js +16 -0
  187. package/dist/esm/lib/style/index.js +12 -0
  188. package/dist/esm/lib/symbols/index.js +1 -0
  189. package/dist/esm/lib/symbols/symbols.js +12 -0
  190. package/dist/esm/node/context.js +0 -0
  191. package/dist/esm/node/dirname.js +13 -0
  192. package/dist/esm/node/file-cache.js +121 -0
  193. package/dist/esm/node/file.js +14 -0
  194. package/dist/esm/node/hash.js +7 -0
  195. package/dist/esm/node/index.js +7 -0
  196. package/dist/esm/node/pkce.js +20 -0
  197. package/dist/esm/node/random-string.js +8 -0
  198. package/dist/esm/node/sanitize.js +8 -0
  199. package/dist/esm/node/uuid.js +7 -0
  200. package/dist/types/dom/accessibility.d.cts +30 -0
  201. package/dist/types/dom/actions/index.d.cts +3 -0
  202. package/dist/types/dom/actions/masonry.d.cts +5 -0
  203. package/dist/types/dom/actions/prefer-horizontal-scroll.d.cts +5 -0
  204. package/dist/types/dom/actions/sticky.d.cts +5 -0
  205. package/{src/dom/bounding-box.js → dist/types/dom/bounding-box.d.cts} +8 -49
  206. package/dist/types/dom/clipboard.d.cts +7 -0
  207. package/dist/types/dom/cookie.d.cts +7 -0
  208. package/dist/types/dom/css-vars.d.cts +6 -0
  209. package/{src/dom/events.js → dist/types/dom/events.d.cts} +52 -31
  210. package/dist/types/dom/focusable.d.cts +78 -0
  211. package/dist/types/dom/font-size.d.cts +8 -0
  212. package/{src/dom/get-element.js → dist/types/dom/get-element.d.cts} +25 -99
  213. package/dist/types/dom/hash.d.cts +3 -0
  214. package/dist/types/dom/index.d.cts +31 -0
  215. package/{src/dom/keyboard.js → dist/types/dom/keyboard.d.cts} +7 -19
  216. package/dist/types/dom/local-store.d.cts +31 -0
  217. package/dist/types/dom/media.d.cts +5 -0
  218. package/dist/types/dom/observers/index.d.cts +4 -0
  219. package/dist/types/dom/observers/intersection-observer.d.cts +10 -0
  220. package/dist/types/dom/observers/mutation-observer.d.cts +9 -0
  221. package/dist/types/dom/observers/observer.d.cts +3 -0
  222. package/{src/dom/observers/resize-observer.js → dist/types/dom/observers/resize-observer.d.cts} +6 -32
  223. package/dist/types/dom/observers/scroll-observer.d.cts +40 -0
  224. package/dist/types/dom/pkce.d.cts +8 -0
  225. package/dist/types/dom/query-params.d.cts +6 -0
  226. package/dist/types/dom/random-string.d.cts +9 -0
  227. package/dist/types/dom/sanitize.d.cts +10 -0
  228. package/dist/types/dom/session-store.d.cts +7 -0
  229. package/dist/types/dom/spam-prevention.d.cts +14 -0
  230. package/dist/types/dom/trap-focus.d.cts +32 -0
  231. package/dist/types/dom/ui/aria-current.d.cts +7 -0
  232. package/{src/dom/ui/inconsistent-button-fix.js → dist/types/dom/ui/inconsistent-button-fix.d.cts} +5 -11
  233. package/dist/types/dom/ui/index.d.cts +4 -0
  234. package/dist/types/dom/ui/scroll-container.d.cts +3 -0
  235. package/dist/types/dom/ui/traverse-and-scramble.d.cts +21 -0
  236. package/dist/types/lib/arrays/index.d.cts +6 -0
  237. package/{src/lib/arrays/item-position.js → dist/types/lib/arrays/item-position.d.cts} +5 -12
  238. package/{src/lib/arrays/join.js → dist/types/lib/arrays/join.d.cts} +4 -9
  239. package/dist/types/lib/arrays/shuffle.d.cts +3 -0
  240. package/dist/types/lib/arrays/sort.d.cts +32 -0
  241. package/dist/types/lib/arrays/split-array.d.cts +6 -0
  242. package/dist/types/lib/arrays/unique.d.cts +3 -0
  243. package/dist/types/lib/auth/index.d.cts +1 -0
  244. package/dist/types/lib/auth/route-manager.d.cts +28 -0
  245. package/dist/types/lib/checks.d.cts +33 -0
  246. package/dist/types/lib/date/days.d.cts +7 -0
  247. package/dist/types/lib/date/index.d.cts +3 -0
  248. package/dist/types/lib/date/months.d.cts +11 -0
  249. package/dist/types/lib/date/time.d.cts +21 -0
  250. package/dist/types/lib/form/form-data.d.cts +9 -0
  251. package/dist/types/lib/form/index.d.cts +2 -0
  252. package/{src/lib/form/sanitize.js → dist/types/lib/form/sanitize.d.cts} +19 -39
  253. package/{src/lib/functions/callback.js → dist/types/lib/functions/callback.d.cts} +3 -3
  254. package/dist/types/lib/functions/debounce.d.cts +3 -0
  255. package/dist/types/lib/functions/env.d.cts +3 -0
  256. package/{src/lib/functions/functional.js → dist/types/lib/functions/functional.d.cts} +8 -49
  257. package/dist/types/lib/functions/index.d.cts +5 -0
  258. package/dist/types/lib/functions/throttle.d.cts +3 -0
  259. package/dist/types/lib/functions/timeout.d.cts +5 -0
  260. package/dist/types/lib/hash.d.cts +3 -0
  261. package/dist/types/lib/index.d.cts +43 -0
  262. package/dist/types/lib/numbers/index.d.cts +5 -0
  263. package/dist/types/lib/numbers/math.d.cts +4 -0
  264. package/dist/types/lib/objects/camelcase-keys.d.cts +3 -0
  265. package/dist/types/lib/objects/empty.d.cts +4 -0
  266. package/dist/types/lib/objects/equal.d.cts +4 -0
  267. package/dist/types/lib/objects/extend.d.cts +6 -0
  268. package/dist/types/lib/objects/flatten.d.cts +6 -0
  269. package/dist/types/lib/objects/index.d.cts +13 -0
  270. package/dist/types/lib/objects/json.d.cts +3 -0
  271. package/dist/types/lib/objects/loop.d.cts +4 -0
  272. package/dist/types/lib/objects/mix/mix.d.cts +44 -0
  273. package/{src/lib/objects/nested-property.js → dist/types/lib/objects/nested-property.d.cts} +4 -21
  274. package/dist/types/lib/objects/normalize-object.d.cts +3 -0
  275. package/dist/types/lib/objects/omit-empty.d.cts +3 -0
  276. package/dist/types/lib/objects/size.d.cts +3 -0
  277. package/dist/types/lib/objects/split.d.cts +14 -0
  278. package/dist/types/lib/promises/index.d.cts +1 -0
  279. package/dist/types/lib/promises/reject.d.cts +5 -0
  280. package/dist/types/lib/sse.d.cts +18 -0
  281. package/dist/types/lib/strings/convert-case/convert-case.d.cts +10 -0
  282. package/dist/types/lib/strings/index.d.cts +5 -0
  283. package/dist/types/lib/strings/markdown.d.cts +25 -0
  284. package/dist/types/lib/strings/name.d.cts +7 -0
  285. package/dist/types/lib/strings/pluralize.d.cts +3 -0
  286. package/dist/types/lib/strings/query-string.d.cts +10 -0
  287. package/dist/types/lib/style/index.d.cts +3 -0
  288. package/dist/types/lib/symbols/index.d.cts +1 -0
  289. package/dist/types/lib/symbols/symbols.d.cts +4 -0
  290. package/dist/types/node/context.d.cts +2 -0
  291. package/dist/types/node/dirname.d.cts +9 -0
  292. package/dist/types/node/file-cache.d.cts +56 -0
  293. package/dist/types/node/file.d.cts +4 -0
  294. package/dist/types/node/hash.d.cts +3 -0
  295. package/dist/types/node/index.d.cts +7 -0
  296. package/dist/types/node/pkce.d.cts +14 -0
  297. package/dist/types/node/random-string.d.cts +3 -0
  298. package/{src/node/sanitize.js → dist/types/node/sanitize.d.cts} +3 -6
  299. package/dist/types/node/uuid.d.cts +3 -0
  300. package/package.json +18 -15
  301. package/CHANGELOG.md +0 -237
  302. package/eslint.config.js +0 -2
  303. package/src/dom/accessibility.js +0 -58
  304. package/src/dom/actions/index.js +0 -3
  305. package/src/dom/actions/masonry.js +0 -43
  306. package/src/dom/actions/prefer-horizontal-scroll.js +0 -121
  307. package/src/dom/actions/sticky.js +0 -85
  308. package/src/dom/clipboard.js +0 -14
  309. package/src/dom/cookie.js +0 -32
  310. package/src/dom/css-vars.js +0 -19
  311. package/src/dom/font-size.js +0 -40
  312. package/src/dom/hash.js +0 -9
  313. package/src/dom/index.js +0 -23
  314. package/src/dom/media.js +0 -30
  315. package/src/dom/observers/index.js +0 -4
  316. package/src/dom/observers/intersection-observer.js +0 -43
  317. package/src/dom/observers/mutation-observer.js +0 -51
  318. package/src/dom/observers/observer.js +0 -18
  319. package/src/dom/observers/scroll-observer.js +0 -146
  320. package/src/dom/pkce.js +0 -34
  321. package/src/dom/query-params.js +0 -14
  322. package/src/dom/random-string.js +0 -18
  323. package/src/dom/random-string.test.js +0 -13
  324. package/src/dom/sanitize.js +0 -16
  325. package/src/dom/session-store.js +0 -29
  326. package/src/dom/spam-prevention.js +0 -40
  327. package/src/dom/trap-focus.js +0 -70
  328. package/src/dom/ui/aria-current.js +0 -20
  329. package/src/dom/ui/index.js +0 -4
  330. package/src/dom/ui/scroll-container.js +0 -25
  331. package/src/dom/ui/traverse-and-scramble.js +0 -61
  332. package/src/lib/arrays/index.js +0 -6
  333. package/src/lib/arrays/shuffle.js +0 -21
  334. package/src/lib/arrays/sort.js +0 -88
  335. package/src/lib/arrays/sort.spec.js +0 -123
  336. package/src/lib/arrays/split-array.js +0 -15
  337. package/src/lib/arrays/unique.js +0 -3
  338. package/src/lib/auth/index.js +0 -1
  339. package/src/lib/auth/route-manager.js +0 -45
  340. package/src/lib/checks.js +0 -57
  341. package/src/lib/date/days.js +0 -9
  342. package/src/lib/date/index.js +0 -3
  343. package/src/lib/date/months.js +0 -74
  344. package/src/lib/date/time.js +0 -83
  345. package/src/lib/form/form-data.js +0 -73
  346. package/src/lib/form/index.js +0 -2
  347. package/src/lib/form/sanitize.spec.js +0 -126
  348. package/src/lib/functions/debounce.js +0 -18
  349. package/src/lib/functions/env.js +0 -5
  350. package/src/lib/functions/functional.test.js +0 -196
  351. package/src/lib/functions/index.js +0 -5
  352. package/src/lib/functions/throttle.js +0 -11
  353. package/src/lib/functions/timeout.js +0 -15
  354. package/src/lib/hash.js +0 -18
  355. package/src/lib/hash.spec.js +0 -163
  356. package/src/lib/index.js +0 -14
  357. package/src/lib/numbers/index.js +0 -12
  358. package/src/lib/numbers/math.js +0 -9
  359. package/src/lib/numbers/split-unit.test.js +0 -45
  360. package/src/lib/objects/camelcase-keys.js +0 -17
  361. package/src/lib/objects/camelcase-keys.test.js +0 -72
  362. package/src/lib/objects/empty.js +0 -10
  363. package/src/lib/objects/equal.js +0 -9
  364. package/src/lib/objects/extend.js +0 -16
  365. package/src/lib/objects/extend.test.js +0 -35
  366. package/src/lib/objects/flatten.js +0 -19
  367. package/src/lib/objects/index.js +0 -13
  368. package/src/lib/objects/json.js +0 -7
  369. package/src/lib/objects/loop.js +0 -11
  370. package/src/lib/objects/loop.test.js +0 -31
  371. package/src/lib/objects/mix/mix.js +0 -191
  372. package/src/lib/objects/mix/mix.md +0 -78
  373. package/src/lib/objects/mix/mix.test.js +0 -445
  374. package/src/lib/objects/normalize-object.js +0 -10
  375. package/src/lib/objects/omit-empty.js +0 -23
  376. package/src/lib/objects/omit-empty.test.js +0 -85
  377. package/src/lib/objects/size.js +0 -41
  378. package/src/lib/objects/split.js +0 -19
  379. package/src/lib/promises/index.js +0 -1
  380. package/src/lib/promises/reject.js +0 -17
  381. package/src/lib/sse.js +0 -61
  382. package/src/lib/strings/convert-case/convert-case.js +0 -86
  383. package/src/lib/strings/convert-case/convert-case.md +0 -44
  384. package/src/lib/strings/convert-case/convert-case.test.js +0 -50
  385. package/src/lib/strings/index.js +0 -5
  386. package/src/lib/strings/markdown.js +0 -71
  387. package/src/lib/strings/markdown.spec.js +0 -73
  388. package/src/lib/strings/name.js +0 -24
  389. package/src/lib/strings/name.test.js +0 -67
  390. package/src/lib/strings/pluralize.js +0 -2
  391. package/src/lib/strings/query-string.js +0 -18
  392. package/src/lib/style/index.js +0 -13
  393. package/src/lib/symbols/index.js +0 -1
  394. package/src/lib/symbols/symbols.js +0 -9
  395. package/src/node/dirname.js +0 -17
  396. package/src/node/file-cache.js +0 -184
  397. package/src/node/file.js +0 -13
  398. package/src/node/hash.js +0 -5
  399. package/src/node/index.js +0 -7
  400. package/src/node/pkce.js +0 -33
  401. package/src/node/random-string.js +0 -10
  402. package/src/node/random-string.test.js +0 -15
  403. package/src/node/sanitize.spec.js +0 -142
  404. package/src/node/uuid.js +0 -5
  405. package/tsconfig.json +0 -23
  406. package/tsup.config.js +0 -38
  407. package/tsup.config.mjs +0 -63
  408. /package/{src/node/context.js → dist/cjs/node/context.cjs} +0 -0
@@ -1,18 +0,0 @@
1
- /**
2
- * Converts object into a query string
3
- * @param {Object} object
4
- * @returns
5
- */
6
- export function toQueryString(object) {
7
- const searchParams = new URLSearchParams(object)
8
- return searchParams.toString()
9
- }
10
-
11
- export function plural(count, noun, suffix = 's') {
12
- console.warn('plural is deprecated. Use pluralize instead')
13
- return `${count} ${noun}${count !== 1 ? suffix : ''}`
14
- }
15
-
16
- export function stripNumbers(string) {
17
- return string.replace(/\d*/, '')
18
- }
@@ -1,13 +0,0 @@
1
- import { toKebab } from '../strings/convert-case/convert-case.js'
2
-
3
- export function toStyleString(style) {
4
- if (!style) return null
5
- if (typeof style === 'string') return style
6
- return Object.entries(style)
7
- .map(([k, v]) => {
8
- if (k.startsWith('--')) return `${k}:${v}`
9
- else return `${toKebab(k)}:${v}`
10
- })
11
- .join('; ')
12
- .concat(';')
13
- }
@@ -1 +0,0 @@
1
- export * from './symbols.js'
@@ -1,9 +0,0 @@
1
- export function getSymbol(object, description) {
2
- return Object.getOwnPropertySymbols(object).find(
3
- s => s.description === description,
4
- )
5
- }
6
-
7
- export function getSymbolValue(object, description) {
8
- return object[getSymbol(object, description)]
9
- }
@@ -1,17 +0,0 @@
1
- import path from 'node:path'
2
- import { fileURLToPath } from 'node:url'
3
-
4
- /**
5
- * Returns __dirname
6
- * @param url — import.meta.url
7
- * @returns
8
- */
9
- export function __dirname(url) {
10
- if (!url) throw Error("Please provide 'import.meta.url' to dirname")
11
- return path.dirname(fileURLToPath(url))
12
- }
13
-
14
- // Just an alias
15
- export function dirname(url) {
16
- return __dirname(url)
17
- }
@@ -1,184 +0,0 @@
1
- import fs from 'fs/promises'
2
- import { glob } from 'glob'
3
- import path from 'node:path'
4
- import { sort } from '../lib/arrays/sort.js'
5
-
6
- /**
7
- * Resolves a path to an absolute path, handling both absolute and relative paths
8
- * @param {string} dirPath - Absolute or relative path to directory
9
- * @returns {string} Absolute path
10
- */
11
- function resolveDirPath(dirPath) {
12
- return path.isAbsolute(dirPath) ? dirPath : path.join(process.cwd(), dirPath)
13
- }
14
-
15
- /**
16
- * Creates a file cache instance for managing cached files in a directory
17
- * @param {string} dir - Absolute or relative path to cache directory
18
- * @returns {Promise<object>} Cache instance
19
- * @property {function(string): Promise<number>} cacheAt - Returns the cached file's modified timestamp, or directory's last modified time if no file specified
20
- * @property {function(string): string} getAbsPath - Returns absolute path for a file in cache
21
- * @property {function(string): Promise<boolean>} hasFile - Checks if a file exists in cache
22
- * @property {function(string): Promise<Buffer|undefined>} loadFile - Loads file contents from cache
23
- * @property {function(string, string|Buffer): Promise<void>} saveFile - Saves data to cache file
24
- * @property {function(string): Promise<object>} loadJSON - Loads and parses JSON from cache file
25
- * @property {function(string, object): Promise<void>} saveJSON - Saves object as JSON to cache file
26
- */
27
- export async function createCache(dir) {
28
- const absDirpath = resolveDirPath(dir)
29
- await fs.mkdir(absDirpath, { recursive: true })
30
-
31
- return {
32
- async cacheAt(file) {
33
- if (file) {
34
- // Return the cached file's modified timestamp
35
- const absFilepath = path.join(absDirpath, file)
36
- try {
37
- const stat = await fs.stat(absFilepath)
38
- return stat.mtimeMs
39
- } catch (error) {
40
- return 0
41
- }
42
- } else {
43
- // Return the last modified timestamp of the cache directory
44
- return getLastModifiedTime(absDirpath + '/**/*')
45
- }
46
- },
47
-
48
- getAbsPath(file) {
49
- return path.join(absDirpath, file)
50
- },
51
-
52
- async hasFile(file) {
53
- const absFilepath = path.join(absDirpath, file)
54
- try {
55
- await fs.stat(absFilepath)
56
- return true
57
- } catch (e) {
58
- return false
59
- }
60
- },
61
-
62
- async loadFile(file) {
63
- try {
64
- const absFilepath = path.join(absDirpath, file)
65
- return fs.readFile(absFilepath)
66
- } catch (error) {
67
- console.warn(`File not found: ${file}`)
68
- }
69
- },
70
-
71
- async saveFile(file, data) {
72
- const absfilepath = path.join(absDirpath, file)
73
- await fs.writeFile(absfilepath, data)
74
- },
75
-
76
- async loadJSON(file) {
77
- const data = await this.loadFile(file)
78
- try {
79
- return JSON.parse(data.toString())
80
- } catch (err) {
81
- console.warn(`Error parsing JSON: ${file}`)
82
- return {}
83
- }
84
- },
85
-
86
- async saveJSON(file, data) {
87
- await this.saveFile(file, JSON.stringify(data))
88
- },
89
- }
90
- }
91
-
92
- /**
93
- * Legacy file cache API for managing a single cached file
94
- * @param {Object} options
95
- * @param {string} options.dir - Absolute or relative path to cache directory
96
- * @param {string} options.file - Filename to cache
97
- * @returns {Promise<{
98
- * modifiedAt: number,
99
- * load: () => Promise<Buffer>,
100
- * save: (data: string|Buffer) => Promise<void>,
101
- * loadJSON: () => Promise<object>,
102
- * saveJSON: (data: object) => Promise<void>
103
- * }>}
104
- */
105
- export async function fileCache({ dir, file }) {
106
- // Makes the path if it doesn't exist
107
- const absDirpath = resolveDirPath(dir)
108
- await fs.mkdir(absDirpath, { recursive: true })
109
- const cachePath = path.join(absDirpath, `${file}`)
110
-
111
- let modifiedAt = 0
112
-
113
- try {
114
- const stat = await fs.stat(cachePath)
115
- modifiedAt = stat.mtimeMs
116
- } catch (error) {} // Silent error
117
-
118
- return {
119
- modifiedAt,
120
-
121
- async load() {
122
- return fs.readFile(cachePath)
123
- },
124
-
125
- async save(data) {
126
- await fs.writeFile(cachePath, data)
127
- },
128
-
129
- async loadJSON() {
130
- const data = await fs.readFile(cachePath)
131
- return JSON.parse(data.toString())
132
- },
133
- async saveJSON(data) {
134
- await fs.writeFile(cachePath, JSON.stringify(data))
135
- },
136
- }
137
- }
138
-
139
- /**
140
- * Gets the most recent modification time of files matching the glob pattern
141
- * @param {string|string[]} globPath - Glob pattern(s) to match files
142
- * @returns {Promise<number>} Timestamp of most recently modified file, or 0 if no files found
143
- */
144
- export async function getLastModifiedTime(globPath) {
145
- let files
146
-
147
- if (typeof globPath === 'string') {
148
- files = await glob(removeFirstSlash(globPath))
149
- }
150
-
151
- if (Array.isArray(globPath)) {
152
- const a = await Promise.all(
153
- globPath.map(path => glob(removeFirstSlash(path))),
154
- )
155
- files = a.flat()
156
- }
157
-
158
- const stats = await Promise.all(files.map(file => fs.stat(file)))
159
- const timestamps = stats.map(stat => Number(stat.mtimeMs))
160
-
161
- const sorted = sort(timestamps, { props: 'mtimeMs', reverse: true })
162
- return sorted[0] || 0
163
- }
164
-
165
- /**
166
- * @deprecated Use getLastModifiedTime instead
167
- * @param {string|string[]} globPath - Glob pattern(s) to match files
168
- * @returns {Promise<number>} Timestamp of most recently modified file, or 0 if no files found
169
- */
170
- export async function getLatestModifiedTime(globPath) {
171
- console.warn(
172
- '`getLatestModifiedTime` has been renamed to `getLastModifiedTime` and will be deprecated in future versions. Please use `getLastModifiedTime` instead.',
173
- )
174
- return getLastModifiedTime(globPath)
175
- }
176
-
177
- /**
178
- * Removes leading slash from a path string
179
- * @param {string} x - Path string to process
180
- * @returns {string} Path without leading slash
181
- */
182
- export function removeFirstSlash(x) {
183
- return x.startsWith('/') ? x.slice(1) : x
184
- }
package/src/node/file.js DELETED
@@ -1,13 +0,0 @@
1
- // Common FS stuff
2
- import fs from 'node:fs/promises'
3
- import path from 'node:path'
4
-
5
- export async function mkdir(path) {
6
- return fs.mkdir(path, { recursive: true })
7
- }
8
-
9
- export async function copyFile(from, to) {
10
- const dir = path.dirname(to)
11
- await mkdir(dir)
12
- await fs.copyFile(from, to)
13
- }
package/src/node/hash.js DELETED
@@ -1,5 +0,0 @@
1
- import crypto from 'node:crypto'
2
-
3
- export function sha256Hash(string) {
4
- return crypto.createHash('sha256').update(string).digest('hex')
5
- }
package/src/node/index.js DELETED
@@ -1,7 +0,0 @@
1
- export * from './dirname.js'
2
- export * from './file-cache.js'
3
- export * from './hash.js'
4
- export * from './pkce.js'
5
- export * from './random-string.js'
6
- export * from './sanitize.js'
7
- export * from './uuid.js'
package/src/node/pkce.js DELETED
@@ -1,33 +0,0 @@
1
- // For Node only.
2
- // Check the utils version for browsers.
3
- import crypto from 'node:crypto'
4
- import { randomString } from './random-string.js'
5
-
6
- export async function PKCE() {
7
- const codeVerifier = await randomString()
8
- const codeChallenge = await getCodeChallenge(codeVerifier)
9
-
10
- return {
11
- state: await randomString(),
12
- code_verifier: codeVerifier,
13
- code_challenge: codeChallenge,
14
- code_challenge_method: 'S256',
15
- }
16
- }
17
-
18
- /**
19
- * Generates code challenge in node
20
- * @param {string} verifier
21
- * @returns string
22
- */
23
- export function getCodeChallenge(verifier) {
24
- // Hash to code verifier with SHA-256
25
- const hash = crypto.createHash('sha256').update(verifier).digest()
26
-
27
- // // Base64url encode the hash
28
- return hash
29
- .toString('base64')
30
- .replace(/\+/g, '-')
31
- .replace(/\//g, '_')
32
- .replace(/=/g, '')
33
- }
@@ -1,10 +0,0 @@
1
- import crypto from 'node:crypto'
2
-
3
- export function randomString(length = 32) {
4
- // Calculate bytes needed for desired character length
5
- // Base64: 4 chars per 3 bytes, so we need ceil(length * 3 / 4) bytes
6
- // Add extra bytes to ensure we have enough after encoding
7
- const bytesNeeded = Math.ceil((length * 3) / 4) + 3
8
-
9
- return crypto.randomBytes(bytesNeeded).toString('base64').slice(0, length)
10
- }
@@ -1,15 +0,0 @@
1
- import { describe, expect, it } from 'vitest'
2
- import { randomString } from './random-string.js'
3
-
4
- describe('randomString', () => {
5
- it('should generate a random string', () => {
6
- const str = randomString(32)
7
- expect(str).toBeDefined()
8
- expect(str.length).toBe(32)
9
-
10
- const str2 = randomString(40)
11
- expect(str2).toBeDefined()
12
- expect(str2.length).toBe(40)
13
- expect(str2).not.toBe(str)
14
- })
15
- })
@@ -1,142 +0,0 @@
1
- import { describe, expect, it } from 'vitest'
2
- import { sanitize } from './sanitize.js'
3
-
4
- describe('node sanitize', () => {
5
- describe('sanitize', () => {
6
- it('removes script tags', () => {
7
- const input = '<script>alert("xss")</script>Hello'
8
- expect(sanitize(input)).toBe('Hello')
9
- })
10
-
11
- it('allows safe HTML tags', () => {
12
- const input = '<p>Hello <b>World</b></p>'
13
- expect(sanitize(input, { allowedTags: ['b'] })).toBe('Hello <b>World</b>')
14
- })
15
-
16
- it('sanitizes unsafe attributes', () => {
17
- const input = '<a href="javascript:alert(1)">Click me</a>'
18
- expect(
19
- sanitize(input, {
20
- allowedTags: ['a'],
21
- allowedAttributes: { a: ['href'] },
22
- }),
23
- ).toBe('<a>Click me</a>')
24
- })
25
-
26
- it('allows safe attributes', () => {
27
- const input = '<a href="https://example.com">Safe link</a>'
28
- expect(
29
- sanitize(input, {
30
- allowedTags: ['a'],
31
- allowedAttributes: { a: ['href'] },
32
- }),
33
- ).toBe('<a href="https://example.com">Safe link</a>')
34
- })
35
-
36
- it('sanitizes HTML in string values', () => {
37
- const input = {
38
- name: '<script>alert("xss")</script>John',
39
- bio: '<p>Hello <b>World</b> <script>alert("xss")</script></p>',
40
- link: '<a href="javascript:alert(1)">Click me</a>',
41
- safeLink: '<a href="https://example.com">Safe link</a>',
42
- }
43
-
44
- const expected = {
45
- name: 'John',
46
- bio: 'Hello <b>World</b> ',
47
- link: '<a>Click me</a>',
48
- safeLink: '<a href="https://example.com">Safe link</a>',
49
- }
50
-
51
- expect(
52
- sanitize(input, {
53
- allowedTags: ['b', 'i', 'em', 'strong', 'a'],
54
- allowedAttributes: { a: ['href'] },
55
- }),
56
- ).toEqual(expected)
57
- })
58
-
59
- it('sanitizes nested objects with HTML', () => {
60
- const input = {
61
- user: {
62
- name: '<script>alert("xss")</script>John',
63
- profile: {
64
- bio: '<p>Hello <b>World</b></p>',
65
- links: [
66
- '<a href="javascript:alert(1)">Bad</a>',
67
- '<a href="https://good.com">Good</a>',
68
- ],
69
- },
70
- },
71
- }
72
-
73
- const expected = {
74
- user: {
75
- name: 'John',
76
- profile: {
77
- bio: 'Hello <b>World</b>',
78
- links: ['<a>Bad</a>', '<a href="https://good.com">Good</a>'],
79
- },
80
- },
81
- }
82
-
83
- expect(
84
- sanitize(input, {
85
- allowedTags: ['b', 'i', 'em', 'strong', 'a'],
86
- allowedAttributes: { a: ['href'] },
87
- }),
88
- ).toEqual(expected)
89
- })
90
-
91
- it('preserves non-string values and sanitizes arrays correctly', () => {
92
- const input = {
93
- name: '<script>alert("xss")</script>John',
94
- age: 25,
95
- active: true,
96
- email: null,
97
- role: undefined,
98
- tags: ['<script>alert(1)</script>admin', 'user'],
99
- numbers: [1, 2, 3],
100
- mixed: ['<b>bold</b>', 42, null, '<script>alert(1)</script>text'],
101
- }
102
-
103
- const expected = {
104
- name: 'John',
105
- age: 25,
106
- active: true,
107
- email: null,
108
- role: undefined,
109
- tags: ['admin', 'user'],
110
- numbers: [1, 2, 3],
111
- mixed: ['<b>bold</b>', 42, null, 'text'],
112
- }
113
-
114
- expect(
115
- sanitize(input, {
116
- allowedTags: ['b', 'i', 'em', 'strong', 'a'],
117
- allowedAttributes: { a: ['href'] },
118
- }),
119
- ).toEqual(expected)
120
- })
121
-
122
- it('allows custom sanitizer options', () => {
123
- const input = {
124
- content: '<p>Hello <span>World</span> <script>alert(1)</script></p>',
125
- }
126
-
127
- // Test with custom allowed tags
128
- const withSpan = sanitize(input, {
129
- allowedTags: ['b', 'i', 'em', 'strong', 'a', 'span'],
130
- allowedAttributes: { a: ['href'] },
131
- })
132
- expect(withSpan.content).toBe('Hello <span>World</span> ')
133
-
134
- // Test with no allowed tags
135
- const noTags = sanitize(input, {
136
- allowedTags: [],
137
- allowedAttributes: { a: ['href'] },
138
- })
139
- expect(noTags.content).toBe('Hello World ')
140
- })
141
- })
142
- })
package/src/node/uuid.js DELETED
@@ -1,5 +0,0 @@
1
- import crypto from 'crypto'
2
-
3
- export function uuid() {
4
- return crypto.randomUUID()
5
- }
package/tsconfig.json DELETED
@@ -1,23 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "allowJs": true,
7
- "checkJs": true,
8
- "declaration": true,
9
- "emitDeclarationOnly": false,
10
- "outDir": "./dist/temp",
11
- "strict": false,
12
- "noImplicitAny": false,
13
- "skipLibCheck": true,
14
- "forceConsistentCasingInFileNames": true,
15
- "resolveJsonModule": true,
16
- "isolatedModules": true,
17
- "noEmit": true,
18
- "esModuleInterop": true,
19
- "allowSyntheticDefaultImports": true
20
- },
21
- "include": ["src/**/*"],
22
- "exclude": ["node_modules", "**/*.test.js", "**/*.spec.js", "dist/**/*"]
23
- }
package/tsup.config.js DELETED
@@ -1,38 +0,0 @@
1
- import { defineConfig } from 'tsup'
2
-
3
- export default defineConfig([
4
- // ESM build
5
- {
6
- entry: 'src/**/*.js',
7
- format: ['esm'],
8
- outDir: 'dist/esm',
9
- clean: true,
10
- splitting: false,
11
- sourcemap: false,
12
- dts: false,
13
- ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
14
- },
15
- // CJS build
16
- {
17
- entry: 'src/**/*.js',
18
- format: ['cjs'],
19
- outDir: 'dist/cjs',
20
- outExtension: () => ({ js: '.cjs' }),
21
- clean: false,
22
- splitting: false,
23
- sourcemap: false,
24
- dts: false,
25
- ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
26
- },
27
- // Types build
28
- {
29
- entry: 'src/**/*.js',
30
- dts: {
31
- only: true,
32
- },
33
- outDir: 'dist/types',
34
- outExtension: () => ({ dts: '.d.cts' }),
35
- clean: false,
36
- ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
37
- },
38
- ])
package/tsup.config.mjs DELETED
@@ -1,63 +0,0 @@
1
- import { glob } from 'glob'
2
- import { defineConfig } from 'tsup'
3
-
4
- function getEntryPoints() {
5
- // Get all JS files except test files
6
- return glob.sync('src/**/*.js', {
7
- ignore: ['**/*.test.js', '**/*.spec.js'],
8
- })
9
- }
10
-
11
- export default defineConfig([
12
- // ESM build
13
- {
14
- entry: getEntryPoints(),
15
- format: ['esm'],
16
- outDir: 'dist/esm',
17
- clean: true,
18
- bundle: false,
19
- splitting: false,
20
- sourcemap: false,
21
- dts: false,
22
- },
23
- // CJS build
24
- {
25
- entry: getEntryPoints(),
26
- format: ['cjs'],
27
- outDir: 'dist/cjs',
28
- outExtension: () => ({ js: '.cjs' }),
29
- clean: false,
30
- bundle: true,
31
- splitting: false,
32
- sourcemap: false,
33
- dts: false,
34
- external: [
35
- 'fs',
36
- 'fs/promises',
37
- 'node:path',
38
- 'node:crypto',
39
- 'node:fs',
40
- 'glob',
41
- 'deep-eql',
42
- 'dompurify',
43
- 'markdown-it',
44
- 'markdown-it-anchor',
45
- 'marked',
46
- 'marked-gfm-heading-id',
47
- 'marked-mangle',
48
- 'pluralize',
49
- 'sanitize-html',
50
- 'statuses',
51
- ],
52
- },
53
- // Types build
54
- {
55
- entry: getEntryPoints(),
56
- dts: {
57
- only: true,
58
- },
59
- outDir: 'dist/types',
60
- outExtension: () => ({ dts: '.d.cts' }),
61
- clean: false,
62
- },
63
- ])