@wener/utils 1.0.0 → 1.1.1

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 (338) hide show
  1. package/README.md +5 -3
  2. package/jest.config.js +7 -5
  3. package/lib/cjs/arrays/MaybeArray.js +45 -33
  4. package/lib/cjs/arrays/index.js +17 -5
  5. package/lib/cjs/asyncs/AsyncInterval.js +32 -25
  6. package/lib/cjs/asyncs/LazyPromise.js +41 -24
  7. package/lib/cjs/asyncs/MaybePromise.js +15 -3
  8. package/lib/cjs/asyncs/generatorOfStream.js +33 -28
  9. package/lib/cjs/asyncs/index.js +23 -11
  10. package/lib/cjs/asyncs/isPromise.js +23 -6
  11. package/lib/cjs/asyncs/promiseOfCallback.js +34 -19
  12. package/lib/cjs/asyncs/sleep.js +23 -5
  13. package/lib/cjs/asyncs/timeout.js +42 -28
  14. package/lib/cjs/browsers/copy.js +71 -0
  15. package/lib/cjs/browsers/download.js +44 -33
  16. package/lib/cjs/browsers/getFileFromDataTransfer.js +48 -0
  17. package/lib/cjs/browsers/index.js +20 -8
  18. package/lib/cjs/browsers/loaders.js +48 -35
  19. package/lib/cjs/formats/formatBytes.js +36 -0
  20. package/lib/cjs/index.js +35 -13
  21. package/lib/cjs/io/index.js +17 -5
  22. package/lib/cjs/io/isBuffer.js +23 -10
  23. package/lib/cjs/isomorphics/getGlobalThis.js +32 -27
  24. package/lib/cjs/maths/index.js +17 -5
  25. package/lib/cjs/maths/random.js +34 -19
  26. package/lib/cjs/shim/urljoin.js +70 -0
  27. package/lib/cjs/shim/urljoin.test.js +4 -0
  28. package/lib/cjs/strings/camelCase.js +70 -68
  29. package/lib/cjs/strings/index.js +18 -7
  30. package/lib/cjs/strings/templates.js +26 -18
  31. package/lib/cjs/validations/asserts.js +25 -14
  32. package/lib/cjs/validations/index.js +20 -8
  33. package/lib/cjs/validations/isClass.js +23 -6
  34. package/lib/cjs/validations/isDefined.js +23 -6
  35. package/lib/cjs/validations/isEmptyObject.js +26 -9
  36. package/lib/esm/arrays/MaybeArray.js +29 -29
  37. package/lib/esm/arrays/index.js +1 -2
  38. package/lib/esm/asyncs/AsyncInterval.js +14 -21
  39. package/lib/esm/asyncs/LazyPromise.js +23 -21
  40. package/lib/esm/asyncs/MaybePromise.js +0 -1
  41. package/lib/esm/asyncs/generatorOfStream.js +14 -24
  42. package/lib/esm/asyncs/index.js +7 -8
  43. package/lib/esm/asyncs/isPromise.js +5 -3
  44. package/lib/esm/asyncs/promiseOfCallback.js +16 -16
  45. package/lib/esm/asyncs/sleep.js +4 -2
  46. package/lib/esm/asyncs/timeout.js +24 -25
  47. package/lib/{cjs/browsers/clipboard.d.ts → esm/browsers/copy.d.ts} +0 -0
  48. package/lib/esm/browsers/copy.js +52 -0
  49. package/lib/esm/browsers/download.js +25 -29
  50. package/lib/esm/browsers/getFileFromDataTransfer.d.ts +4 -0
  51. package/lib/esm/browsers/getFileFromDataTransfer.js +29 -0
  52. package/lib/esm/browsers/index.d.ts +2 -2
  53. package/lib/esm/browsers/index.js +4 -5
  54. package/lib/esm/browsers/loaders.js +31 -32
  55. package/lib/esm/formats/formatBytes.d.ts +11 -0
  56. package/lib/esm/formats/formatBytes.js +17 -0
  57. package/lib/esm/index.d.ts +3 -2
  58. package/lib/esm/index.js +15 -10
  59. package/lib/esm/io/index.js +1 -2
  60. package/lib/esm/io/isBuffer.js +5 -7
  61. package/lib/esm/isomorphics/getGlobalThis.d.ts +1 -1
  62. package/lib/esm/isomorphics/getGlobalThis.js +13 -24
  63. package/lib/esm/maths/index.js +1 -2
  64. package/lib/esm/maths/random.d.ts +2 -2
  65. package/lib/esm/maths/random.js +15 -15
  66. package/lib/{cjs/strings → esm/shim}/urljoin.d.ts +1 -0
  67. package/lib/esm/shim/urljoin.js +51 -0
  68. package/lib/{cjs/strings → esm/shim}/urljoin.test.d.ts +0 -0
  69. package/lib/esm/shim/urljoin.test.js +4 -0
  70. package/lib/esm/strings/camelCase.js +52 -64
  71. package/lib/esm/strings/index.d.ts +0 -1
  72. package/lib/esm/strings/index.js +2 -4
  73. package/lib/esm/strings/templates.d.ts +1 -1
  74. package/lib/esm/strings/templates.js +7 -14
  75. package/lib/esm/validations/asserts.js +8 -11
  76. package/lib/esm/validations/index.js +4 -5
  77. package/lib/esm/validations/isClass.js +5 -3
  78. package/lib/esm/validations/isDefined.js +5 -3
  79. package/lib/esm/validations/isEmptyObject.js +8 -6
  80. package/package.json +23 -32
  81. package/src/arrays/MaybeArray.ts +5 -2
  82. package/src/asyncs/timeout.ts +1 -1
  83. package/src/browsers/{clipboard.ts → copy.ts} +0 -0
  84. package/src/browsers/{transfers.ts → getFileFromDataTransfer.ts} +12 -7
  85. package/src/browsers/index.ts +2 -2
  86. package/src/browsers/loaders.ts +1 -1
  87. package/src/formats/formatBytes.ts +30 -0
  88. package/src/index.ts +4 -2
  89. package/src/isomorphics/getGlobalThis.ts +2 -4
  90. package/src/maths/random.ts +5 -5
  91. package/src/shim/urljoin.test.ts +5 -0
  92. package/src/{strings → shim}/urljoin.ts +18 -5
  93. package/src/strings/index.ts +0 -1
  94. package/src/strings/templates.ts +2 -4
  95. package/tsconfig.json +15 -4
  96. package/dist/wener-utils.cjs +0 -882
  97. package/dist/wener-utils.cjs.map +0 -1
  98. package/dist/wener-utils.esm.js +0 -849
  99. package/dist/wener-utils.esm.js.map +0 -1
  100. package/dist/wener-utils.system.js +0 -887
  101. package/dist/wener-utils.system.js.map +0 -1
  102. package/dist/wener-utils.umd.js +0 -886
  103. package/dist/wener-utils.umd.js.map +0 -1
  104. package/index.d.ts +0 -1
  105. package/index.js +0 -10
  106. package/lib/cjs/arrays/MaybeArray.d.ts +0 -5
  107. package/lib/cjs/arrays/MaybeArray.js.map +0 -1
  108. package/lib/cjs/arrays/index.d.ts +0 -1
  109. package/lib/cjs/arrays/index.js.map +0 -1
  110. package/lib/cjs/asyncs/AsyncInterval.d.ts +0 -3
  111. package/lib/cjs/asyncs/AsyncInterval.js.map +0 -1
  112. package/lib/cjs/asyncs/LazyPromise.d.ts +0 -5
  113. package/lib/cjs/asyncs/LazyPromise.js.map +0 -1
  114. package/lib/cjs/asyncs/MaybePromise.d.ts +0 -1
  115. package/lib/cjs/asyncs/MaybePromise.js.map +0 -1
  116. package/lib/cjs/asyncs/generatorOfStream.d.ts +0 -1
  117. package/lib/cjs/asyncs/generatorOfStream.js.map +0 -1
  118. package/lib/cjs/asyncs/index.d.ts +0 -7
  119. package/lib/cjs/asyncs/index.js.map +0 -1
  120. package/lib/cjs/asyncs/isPromise.d.ts +0 -1
  121. package/lib/cjs/asyncs/isPromise.js.map +0 -1
  122. package/lib/cjs/asyncs/promiseOfCallback.d.ts +0 -1
  123. package/lib/cjs/asyncs/promiseOfCallback.js.map +0 -1
  124. package/lib/cjs/asyncs/sleep.d.ts +0 -1
  125. package/lib/cjs/asyncs/sleep.js.map +0 -1
  126. package/lib/cjs/asyncs/timeout.d.ts +0 -4
  127. package/lib/cjs/asyncs/timeout.js.map +0 -1
  128. package/lib/cjs/browsers/clipboard.js +0 -56
  129. package/lib/cjs/browsers/clipboard.js.map +0 -1
  130. package/lib/cjs/browsers/download.d.ts +0 -4
  131. package/lib/cjs/browsers/download.js.map +0 -1
  132. package/lib/cjs/browsers/index.d.ts +0 -4
  133. package/lib/cjs/browsers/index.js.map +0 -1
  134. package/lib/cjs/browsers/loaders.d.ts +0 -6
  135. package/lib/cjs/browsers/loaders.js.map +0 -1
  136. package/lib/cjs/browsers/transfers.d.ts +0 -4
  137. package/lib/cjs/browsers/transfers.js +0 -38
  138. package/lib/cjs/browsers/transfers.js.map +0 -1
  139. package/lib/cjs/envs/index.d.ts +0 -1
  140. package/lib/cjs/envs/index.js +0 -5
  141. package/lib/cjs/envs/index.js.map +0 -1
  142. package/lib/cjs/envs/isDev.d.ts +0 -1
  143. package/lib/cjs/envs/isDev.js +0 -8
  144. package/lib/cjs/envs/isDev.js.map +0 -1
  145. package/lib/cjs/index.d.ts +0 -9
  146. package/lib/cjs/index.js.map +0 -1
  147. package/lib/cjs/io/index.d.ts +0 -1
  148. package/lib/cjs/io/index.js.map +0 -1
  149. package/lib/cjs/io/isBuffer.d.ts +0 -2
  150. package/lib/cjs/io/isBuffer.js.map +0 -1
  151. package/lib/cjs/isomorphics/getGlobalThis.d.ts +0 -9
  152. package/lib/cjs/isomorphics/getGlobalThis.js.map +0 -1
  153. package/lib/cjs/isomorphics/index.d.ts +0 -1
  154. package/lib/cjs/isomorphics/index.js +0 -5
  155. package/lib/cjs/isomorphics/index.js.map +0 -1
  156. package/lib/cjs/maths/index.d.ts +0 -1
  157. package/lib/cjs/maths/index.js.map +0 -1
  158. package/lib/cjs/maths/random.d.ts +0 -3
  159. package/lib/cjs/maths/random.js.map +0 -1
  160. package/lib/cjs/strings/camelCase.d.ts +0 -4
  161. package/lib/cjs/strings/camelCase.js.map +0 -1
  162. package/lib/cjs/strings/index.d.ts +0 -3
  163. package/lib/cjs/strings/index.js.map +0 -1
  164. package/lib/cjs/strings/templates.d.ts +0 -7
  165. package/lib/cjs/strings/templates.js.map +0 -1
  166. package/lib/cjs/strings/urljoin.js +0 -61
  167. package/lib/cjs/strings/urljoin.js.map +0 -1
  168. package/lib/cjs/strings/urljoin.test.js +0 -7
  169. package/lib/cjs/strings/urljoin.test.js.map +0 -1
  170. package/lib/cjs/validations/asserts.d.ts +0 -2
  171. package/lib/cjs/validations/asserts.js.map +0 -1
  172. package/lib/cjs/validations/index.d.ts +0 -4
  173. package/lib/cjs/validations/index.js.map +0 -1
  174. package/lib/cjs/validations/isClass.d.ts +0 -1
  175. package/lib/cjs/validations/isClass.js.map +0 -1
  176. package/lib/cjs/validations/isDefined.d.ts +0 -1
  177. package/lib/cjs/validations/isDefined.js.map +0 -1
  178. package/lib/cjs/validations/isEmptyObject.d.ts +0 -1
  179. package/lib/cjs/validations/isEmptyObject.js.map +0 -1
  180. package/lib/esm/arrays/MaybeArray.js.map +0 -1
  181. package/lib/esm/arrays/index.js.map +0 -1
  182. package/lib/esm/asyncs/AsyncInterval.js.map +0 -1
  183. package/lib/esm/asyncs/LazyPromise.js.map +0 -1
  184. package/lib/esm/asyncs/MaybePromise.js.map +0 -1
  185. package/lib/esm/asyncs/generatorOfStream.js.map +0 -1
  186. package/lib/esm/asyncs/index.js.map +0 -1
  187. package/lib/esm/asyncs/isPromise.js.map +0 -1
  188. package/lib/esm/asyncs/promiseOfCallback.js.map +0 -1
  189. package/lib/esm/asyncs/sleep.js.map +0 -1
  190. package/lib/esm/asyncs/timeout.js.map +0 -1
  191. package/lib/esm/browsers/clipboard.d.ts +0 -1
  192. package/lib/esm/browsers/clipboard.js +0 -52
  193. package/lib/esm/browsers/clipboard.js.map +0 -1
  194. package/lib/esm/browsers/download.js.map +0 -1
  195. package/lib/esm/browsers/index.js.map +0 -1
  196. package/lib/esm/browsers/loaders.js.map +0 -1
  197. package/lib/esm/browsers/transfers.d.ts +0 -4
  198. package/lib/esm/browsers/transfers.js +0 -34
  199. package/lib/esm/browsers/transfers.js.map +0 -1
  200. package/lib/esm/envs/index.d.ts +0 -1
  201. package/lib/esm/envs/index.js +0 -2
  202. package/lib/esm/envs/index.js.map +0 -1
  203. package/lib/esm/envs/isDev.d.ts +0 -1
  204. package/lib/esm/envs/isDev.js +0 -5
  205. package/lib/esm/envs/isDev.js.map +0 -1
  206. package/lib/esm/index.js.map +0 -1
  207. package/lib/esm/io/index.js.map +0 -1
  208. package/lib/esm/io/isBuffer.js.map +0 -1
  209. package/lib/esm/isomorphics/getGlobalThis.js.map +0 -1
  210. package/lib/esm/isomorphics/index.d.ts +0 -1
  211. package/lib/esm/isomorphics/index.js +0 -2
  212. package/lib/esm/isomorphics/index.js.map +0 -1
  213. package/lib/esm/maths/index.js.map +0 -1
  214. package/lib/esm/maths/random.js.map +0 -1
  215. package/lib/esm/strings/camelCase.js.map +0 -1
  216. package/lib/esm/strings/index.js.map +0 -1
  217. package/lib/esm/strings/templates.js.map +0 -1
  218. package/lib/esm/strings/urljoin.d.ts +0 -1
  219. package/lib/esm/strings/urljoin.js +0 -57
  220. package/lib/esm/strings/urljoin.js.map +0 -1
  221. package/lib/esm/strings/urljoin.test.d.ts +0 -1
  222. package/lib/esm/strings/urljoin.test.js +0 -5
  223. package/lib/esm/strings/urljoin.test.js.map +0 -1
  224. package/lib/esm/validations/asserts.js.map +0 -1
  225. package/lib/esm/validations/index.js.map +0 -1
  226. package/lib/esm/validations/isClass.js.map +0 -1
  227. package/lib/esm/validations/isDefined.js.map +0 -1
  228. package/lib/esm/validations/isEmptyObject.js.map +0 -1
  229. package/lib/esnext/arrays/MaybeArray.d.ts +0 -5
  230. package/lib/esnext/arrays/MaybeArray.js +0 -33
  231. package/lib/esnext/arrays/MaybeArray.js.map +0 -1
  232. package/lib/esnext/arrays/index.d.ts +0 -1
  233. package/lib/esnext/arrays/index.js +0 -2
  234. package/lib/esnext/arrays/index.js.map +0 -1
  235. package/lib/esnext/asyncs/AsyncInterval.d.ts +0 -3
  236. package/lib/esnext/asyncs/AsyncInterval.js +0 -23
  237. package/lib/esnext/asyncs/AsyncInterval.js.map +0 -1
  238. package/lib/esnext/asyncs/LazyPromise.d.ts +0 -5
  239. package/lib/esnext/asyncs/LazyPromise.js +0 -22
  240. package/lib/esnext/asyncs/LazyPromise.js.map +0 -1
  241. package/lib/esnext/asyncs/MaybePromise.d.ts +0 -1
  242. package/lib/esnext/asyncs/MaybePromise.js +0 -1
  243. package/lib/esnext/asyncs/MaybePromise.js.map +0 -1
  244. package/lib/esnext/asyncs/generatorOfStream.d.ts +0 -1
  245. package/lib/esnext/asyncs/generatorOfStream.js +0 -26
  246. package/lib/esnext/asyncs/generatorOfStream.js.map +0 -1
  247. package/lib/esnext/asyncs/index.d.ts +0 -7
  248. package/lib/esnext/asyncs/index.js +0 -8
  249. package/lib/esnext/asyncs/index.js.map +0 -1
  250. package/lib/esnext/asyncs/isPromise.d.ts +0 -1
  251. package/lib/esnext/asyncs/isPromise.js +0 -4
  252. package/lib/esnext/asyncs/isPromise.js.map +0 -1
  253. package/lib/esnext/asyncs/promiseOfCallback.d.ts +0 -1
  254. package/lib/esnext/asyncs/promiseOfCallback.js +0 -18
  255. package/lib/esnext/asyncs/promiseOfCallback.js.map +0 -1
  256. package/lib/esnext/asyncs/sleep.d.ts +0 -1
  257. package/lib/esnext/asyncs/sleep.js +0 -2
  258. package/lib/esnext/asyncs/sleep.js.map +0 -1
  259. package/lib/esnext/asyncs/timeout.d.ts +0 -4
  260. package/lib/esnext/asyncs/timeout.js +0 -26
  261. package/lib/esnext/asyncs/timeout.js.map +0 -1
  262. package/lib/esnext/browsers/clipboard.d.ts +0 -1
  263. package/lib/esnext/browsers/clipboard.js +0 -52
  264. package/lib/esnext/browsers/clipboard.js.map +0 -1
  265. package/lib/esnext/browsers/download.d.ts +0 -4
  266. package/lib/esnext/browsers/download.js +0 -32
  267. package/lib/esnext/browsers/download.js.map +0 -1
  268. package/lib/esnext/browsers/index.d.ts +0 -4
  269. package/lib/esnext/browsers/index.js +0 -5
  270. package/lib/esnext/browsers/index.js.map +0 -1
  271. package/lib/esnext/browsers/loaders.d.ts +0 -6
  272. package/lib/esnext/browsers/loaders.js +0 -36
  273. package/lib/esnext/browsers/loaders.js.map +0 -1
  274. package/lib/esnext/browsers/transfers.d.ts +0 -4
  275. package/lib/esnext/browsers/transfers.js +0 -34
  276. package/lib/esnext/browsers/transfers.js.map +0 -1
  277. package/lib/esnext/envs/index.d.ts +0 -1
  278. package/lib/esnext/envs/index.js +0 -2
  279. package/lib/esnext/envs/index.js.map +0 -1
  280. package/lib/esnext/envs/isDev.d.ts +0 -1
  281. package/lib/esnext/envs/isDev.js +0 -5
  282. package/lib/esnext/envs/isDev.js.map +0 -1
  283. package/lib/esnext/index.d.ts +0 -9
  284. package/lib/esnext/index.js +0 -10
  285. package/lib/esnext/index.js.map +0 -1
  286. package/lib/esnext/io/index.d.ts +0 -1
  287. package/lib/esnext/io/index.js +0 -2
  288. package/lib/esnext/io/index.js.map +0 -1
  289. package/lib/esnext/io/isBuffer.d.ts +0 -2
  290. package/lib/esnext/io/isBuffer.js +0 -8
  291. package/lib/esnext/io/isBuffer.js.map +0 -1
  292. package/lib/esnext/isomorphics/getGlobalThis.d.ts +0 -9
  293. package/lib/esnext/isomorphics/getGlobalThis.js +0 -25
  294. package/lib/esnext/isomorphics/getGlobalThis.js.map +0 -1
  295. package/lib/esnext/isomorphics/index.d.ts +0 -1
  296. package/lib/esnext/isomorphics/index.js +0 -2
  297. package/lib/esnext/isomorphics/index.js.map +0 -1
  298. package/lib/esnext/maths/index.d.ts +0 -1
  299. package/lib/esnext/maths/index.js +0 -2
  300. package/lib/esnext/maths/index.js.map +0 -1
  301. package/lib/esnext/maths/random.d.ts +0 -3
  302. package/lib/esnext/maths/random.js +0 -17
  303. package/lib/esnext/maths/random.js.map +0 -1
  304. package/lib/esnext/strings/camelCase.d.ts +0 -4
  305. package/lib/esnext/strings/camelCase.js +0 -69
  306. package/lib/esnext/strings/camelCase.js.map +0 -1
  307. package/lib/esnext/strings/index.d.ts +0 -3
  308. package/lib/esnext/strings/index.js +0 -4
  309. package/lib/esnext/strings/index.js.map +0 -1
  310. package/lib/esnext/strings/templates.d.ts +0 -7
  311. package/lib/esnext/strings/templates.js +0 -15
  312. package/lib/esnext/strings/templates.js.map +0 -1
  313. package/lib/esnext/strings/urljoin.d.ts +0 -1
  314. package/lib/esnext/strings/urljoin.js +0 -57
  315. package/lib/esnext/strings/urljoin.js.map +0 -1
  316. package/lib/esnext/strings/urljoin.test.d.ts +0 -1
  317. package/lib/esnext/strings/urljoin.test.js +0 -5
  318. package/lib/esnext/strings/urljoin.test.js.map +0 -1
  319. package/lib/esnext/validations/asserts.d.ts +0 -2
  320. package/lib/esnext/validations/asserts.js +0 -13
  321. package/lib/esnext/validations/asserts.js.map +0 -1
  322. package/lib/esnext/validations/index.d.ts +0 -4
  323. package/lib/esnext/validations/index.js +0 -5
  324. package/lib/esnext/validations/index.js.map +0 -1
  325. package/lib/esnext/validations/isClass.d.ts +0 -1
  326. package/lib/esnext/validations/isClass.js +0 -4
  327. package/lib/esnext/validations/isClass.js.map +0 -1
  328. package/lib/esnext/validations/isDefined.d.ts +0 -1
  329. package/lib/esnext/validations/isDefined.js +0 -4
  330. package/lib/esnext/validations/isDefined.js.map +0 -1
  331. package/lib/esnext/validations/isEmptyObject.d.ts +0 -1
  332. package/lib/esnext/validations/isEmptyObject.js +0 -7
  333. package/lib/esnext/validations/isEmptyObject.js.map +0 -1
  334. package/rollup.config.ts +0 -85
  335. package/src/envs/index.ts +0 -1
  336. package/src/envs/isDev.ts +0 -3
  337. package/src/isomorphics/index.ts +0 -1
  338. package/src/strings/urljoin.test.ts +0 -5
@@ -0,0 +1,4 @@
1
+ import { urljoin } from "./urljoin";
2
+ test("join ext", () => {
3
+ expect(urljoin("http://wener.me/sub/", "/a/", "/hello.js")).toBe("http://wener.me/sub/a/hello.js");
4
+ });
@@ -1,69 +1,57 @@
1
- // https://github.com/sindresorhus/camelcase/blob/master/index.js
2
1
  function preserveCamelCase(string) {
3
- var isLastCharLower = false;
4
- var isLastCharUpper = false;
5
- var isLastLastCharUpper = false;
6
- for (var i = 0; i < string.length; i++) {
7
- var character = string[i];
8
- if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
9
- string = string.slice(0, i) + '-' + string.slice(i);
10
- isLastCharLower = false;
11
- isLastLastCharUpper = isLastCharUpper;
12
- isLastCharUpper = true;
13
- i++;
14
- }
15
- else if (isLastCharUpper &&
16
- isLastLastCharUpper &&
17
- /[a-zA-Z]/.test(character) &&
18
- character.toLowerCase() === character) {
19
- string = string.slice(0, i - 1) + '-' + string.slice(i - 1);
20
- isLastLastCharUpper = isLastCharUpper;
21
- isLastCharUpper = false;
22
- isLastCharLower = true;
23
- }
24
- else {
25
- isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;
26
- isLastLastCharUpper = isLastCharUpper;
27
- isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
28
- }
2
+ let isLastCharLower = false;
3
+ let isLastCharUpper = false;
4
+ let isLastLastCharUpper = false;
5
+ for (let i = 0; i < string.length; i++) {
6
+ const character = string[i];
7
+ if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
8
+ string = string.slice(0, i) + "-" + string.slice(i);
9
+ isLastCharLower = false;
10
+ isLastLastCharUpper = isLastCharUpper;
11
+ isLastCharUpper = true;
12
+ i++;
13
+ } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {
14
+ string = string.slice(0, i - 1) + "-" + string.slice(i - 1);
15
+ isLastLastCharUpper = isLastCharUpper;
16
+ isLastCharUpper = false;
17
+ isLastCharLower = true;
18
+ } else {
19
+ isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;
20
+ isLastLastCharUpper = isLastCharUpper;
21
+ isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
29
22
  }
30
- return string;
23
+ }
24
+ return string;
31
25
  }
32
- export function pascalCase(input) {
33
- return camelCase(input, { pascalCase: true });
26
+ function pascalCase(input) {
27
+ return camelCase(input, { pascalCase: true });
34
28
  }
35
- export function camelCase(input, options) {
36
- if (options === void 0) { options = {
37
- pascalCase: false,
38
- }; }
39
- if (!(typeof input === 'string' || Array.isArray(input))) {
40
- throw new TypeError('Expected the input to be `string | string[]`');
41
- }
42
- var postProcess = function (x) { return (options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x); };
43
- if (Array.isArray(input)) {
44
- input = input
45
- .map(function (x) { return x.trim(); })
46
- .filter(function (x) { return x.length; })
47
- .join('-');
48
- }
49
- else {
50
- input = input.trim();
51
- }
52
- if (input.length === 0) {
53
- return '';
54
- }
55
- if (input.length === 1) {
56
- return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
57
- }
58
- var hasUpperCase = input !== input.toLowerCase();
59
- if (hasUpperCase) {
60
- input = preserveCamelCase(input);
61
- }
62
- input = input
63
- .replace(/^[_.\- ]+/, '')
64
- .toLowerCase()
65
- .replace(/[_.\- ]+(\w|$)/g, function (_, p1) { return p1.toUpperCase(); })
66
- .replace(/\d+(\w|$)/g, function (m) { return m.toUpperCase(); });
67
- return postProcess(input);
29
+ function camelCase(input, options = {
30
+ pascalCase: false
31
+ }) {
32
+ if (!(typeof input === "string" || Array.isArray(input))) {
33
+ throw new TypeError("Expected the input to be `string | string[]`");
34
+ }
35
+ const postProcess = (x) => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;
36
+ if (Array.isArray(input)) {
37
+ input = input.map((x) => x.trim()).filter((x) => x.length).join("-");
38
+ } else {
39
+ input = input.trim();
40
+ }
41
+ if (input.length === 0) {
42
+ return "";
43
+ }
44
+ if (input.length === 1) {
45
+ return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
46
+ }
47
+ const hasUpperCase = input !== input.toLowerCase();
48
+ if (hasUpperCase) {
49
+ input = preserveCamelCase(input);
50
+ }
51
+ input = input.replace(/^[_.\- ]+/, "").toLowerCase().replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()).replace(/\d+(\w|$)/g, (m) => m.toUpperCase());
52
+ return postProcess(input);
68
53
  }
69
- //# sourceMappingURL=camelCase.js.map
54
+ export {
55
+ camelCase,
56
+ pascalCase
57
+ };
@@ -1,3 +1,2 @@
1
1
  export * from './camelCase';
2
2
  export * from './templates';
3
- export * from './urljoin';
@@ -1,4 +1,2 @@
1
- export * from './camelCase';
2
- export * from './templates';
3
- export * from './urljoin';
4
- //# sourceMappingURL=index.js.map
1
+ export * from "./camelCase";
2
+ export * from "./templates";
@@ -4,4 +4,4 @@
4
4
  * @example
5
5
  * templateString('My name is ${name}',{name:'wener'})
6
6
  */
7
- export declare function templateString(template: string, variables: Record<string, any>): string;
7
+ export declare function templateString(template: string, getter: (v: string) => any): string;
@@ -1,15 +1,8 @@
1
- import { get } from 'lodash';
2
- /**
3
- * 替换类似于 JS 的模板字符串
4
- *
5
- * @example
6
- * templateString('My name is ${name}',{name:'wener'})
7
- */
8
- export function templateString(template, variables) {
9
- return template.replace(/\${(.*?)}/g, function (_, g) {
10
- // variables[g.trim()]
11
- // 支持路径 - 例如 a.b[0]
12
- return get(variables, g.trim());
13
- });
1
+ function templateString(template, getter) {
2
+ return template.replace(/\${(.*?)}/g, (_, g) => {
3
+ return getter(g.trim());
4
+ });
14
5
  }
15
- //# sourceMappingURL=templates.js.map
6
+ export {
7
+ templateString
8
+ };
@@ -1,13 +1,10 @@
1
- export function assert(condition, msg) {
2
- // if (!condition) {
3
- // throw new AssertionError(msg);
4
- // }
5
- console.assert(!condition, msg);
1
+ function assert(condition, msg) {
2
+ console.assert(!condition, msg);
6
3
  }
7
- export function assertIsDefined(val) {
8
- // if (val === undefined || val === null) {
9
- // throw new AssertionError(`Expected 'val' to be defined, but received ${val}`);
10
- // }
11
- console.assert(val === undefined || val === null, 'Expected defined');
4
+ function assertIsDefined(val) {
5
+ console.assert(val === void 0 || val === null, "Expected defined");
12
6
  }
13
- //# sourceMappingURL=asserts.js.map
7
+ export {
8
+ assert,
9
+ assertIsDefined
10
+ };
@@ -1,5 +1,4 @@
1
- export * from './asserts';
2
- export * from './isDefined';
3
- export * from './isEmptyObject';
4
- export * from './isClass';
5
- //# sourceMappingURL=index.js.map
1
+ export * from "./asserts";
2
+ export * from "./isDefined";
3
+ export * from "./isEmptyObject";
4
+ export * from "./isClass";
@@ -1,4 +1,6 @@
1
- export function isClass(func) {
2
- return typeof func === 'function' && /^class\s/.test(Function.prototype.toString.call(func));
1
+ function isClass(func) {
2
+ return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
3
3
  }
4
- //# sourceMappingURL=isClass.js.map
4
+ export {
5
+ isClass
6
+ };
@@ -1,4 +1,6 @@
1
- export function isDefined(v) {
2
- return v !== null && v !== undefined;
1
+ function isDefined(v) {
2
+ return v !== null && v !== void 0;
3
3
  }
4
- //# sourceMappingURL=isDefined.js.map
4
+ export {
5
+ isDefined
6
+ };
@@ -1,7 +1,9 @@
1
- export function isEmptyObject(o) {
2
- if (o === null || o === undefined) {
3
- return true;
4
- }
5
- return o.constructor === Object && Object.keys(o).length === 0;
1
+ function isEmptyObject(o) {
2
+ if (o === null || o === void 0) {
3
+ return true;
4
+ }
5
+ return o.constructor === Object && Object.keys(o).length === 0;
6
6
  }
7
- //# sourceMappingURL=isEmptyObject.js.map
7
+ export {
8
+ isEmptyObject
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wener/utils",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Utils for daily use",
5
5
  "keywords": [
6
6
  "utils",
@@ -9,30 +9,29 @@
9
9
  ],
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "git+https://github.com/wener/apis.git"
12
+ "url": "git+https://github.com/wener/wode.git"
13
13
  },
14
14
  "license": "MIT",
15
15
  "author": "wener",
16
16
  "main": "lib/cjs/index.js",
17
17
  "module": "lib/esm/index.js",
18
- "typings": "lib/esm/index.d.ts",
18
+ "types": "src/index.ts",
19
19
  "esnext": "lib/esnext/index.js",
20
- "umd:main": "dist/wener-utils.umd.js",
21
- "unpkg": "dist/wener-utils.umd.js",
22
- "jsdelivr": "dist/wener-utils.umd.js",
23
- "jsnext:main": "dist/wener-utils.esm.js",
20
+ "umd:main": "dist/utils.js",
21
+ "unpkg": "dist/utils.js",
22
+ "jsdelivr": "dist/utils.js",
23
+ "jsnext:main": "dist/utils.esm.js",
24
24
  "exports": {
25
25
  ".": {
26
- "import": "./dist/wener-utils.esm.js",
27
- "require": "./dist/wener-utils.cjs"
26
+ "import": "./lib/esm/index.js",
27
+ "require": "./lib/cjs/index.js"
28
28
  }
29
29
  },
30
- "homepage": "https://github.com/wenerme/apis#readme",
30
+ "homepage": "https://github.com/wenerme/wode#readme",
31
31
  "files": [
32
32
  "index.js",
33
33
  "index.d.ts",
34
34
  "lib",
35
- "es",
36
35
  "dist",
37
36
  "src",
38
37
  "README.md",
@@ -44,36 +43,28 @@
44
43
  "tsconfig.json"
45
44
  ],
46
45
  "scripts": {
47
- "build": "make build",
46
+ "build": "make prepublish",
48
47
  "clean": "make clean",
48
+ "dev": "make dev",
49
49
  "test": "jest"
50
50
  },
51
51
  "devDependencies": {
52
- "@babel/core": "^7",
53
- "@babel/preset-env": "^7.10.4",
54
- "@babel/preset-typescript": "^7.10.4",
55
- "@rollup/plugin-babel": "^5",
56
- "@rollup/plugin-node-resolve": "^8.4.0",
57
- "@rollup/plugin-typescript": "^5",
58
- "@types/babel__core": "^7",
59
- "@types/babel__preset-env": "^7",
60
- "@types/jest": "^25",
52
+ "@types/jest": "^28",
61
53
  "@types/lodash": "^4",
62
- "@types/node": "^12",
63
- "dotenv": "^8",
64
- "jest": "^26",
54
+ "@types/node": "^16",
55
+ "dotenv": "^16",
56
+ "esbuild": "^0.14",
57
+ "jest": "^28",
65
58
  "lodash": "^4",
66
- "rollup": "^2",
67
- "rollup-plugin-terser": "^6",
68
- "ts-jest": "^26",
59
+ "ts-jest": "^28",
69
60
  "tslib": "^2",
70
- "typedoc": "^0",
71
- "typescript": "^3"
72
- },
73
- "peerDependencies": {
74
- "lodash": "*"
61
+ "typescript": "^4"
75
62
  },
76
63
  "publishConfig": {
77
64
  "access": "public"
65
+ },
66
+ "engines": {
67
+ "node": "16",
68
+ "npm": "8"
78
69
  }
79
70
  }
@@ -3,13 +3,16 @@ export type MaybeArray<T> = T | T[];
3
3
  export function objectOfMaybeArray<T = any>(
4
4
  o: Record<string, MaybeArray<T>>,
5
5
  keys: string[] | null = null,
6
- picker = firstOfMaybeArray,
6
+ picker = firstOfMaybeArray
7
7
  ): Record<string, T> {
8
8
  if (keys === null) {
9
- return Object.fromEntries(Object.entries(o).map(([k, v]) => [k, picker(v)]));
9
+ return Object.fromEntries(
10
+ Object.entries(o).map(([k, v]) => [k, picker(v)])
11
+ );
10
12
  }
11
13
  return Object.fromEntries(keys.map((v) => [v, picker(v)])) as any;
12
14
  }
15
+
13
16
  export function firstOfMaybeArray<T>(v: MaybeArray<T>): T {
14
17
  if (Array.isArray(v)) {
15
18
  return v[0];
@@ -3,7 +3,7 @@ export function timeout<T = any>(v: Promise<T>, ms: number): Promise<T> {
3
3
  let timeout: any;
4
4
  return Promise.race([
5
5
  v,
6
- new Promise((resolve, reject) => {
6
+ new Promise((_, reject) => {
7
7
  timeout = setTimeout(() => reject(error), ms);
8
8
  }),
9
9
  ]).then(
File without changes
@@ -1,12 +1,17 @@
1
- export function getFile(dataTransfer: DataTransfer): { file: File; filename: string } | null {
2
- const items: DataTransferItemList = dataTransfer?.items ?? ([] as any);
1
+ export function getFileFromDataTransfer(dataTransfer?: DataTransfer | null): { file?: File; name?: string } {
2
+ if (!dataTransfer) {
3
+ return {};
4
+ }
5
+
6
+ const items: DataTransferItemList = dataTransfer.items ?? [];
3
7
 
4
8
  if (items.length >= 2 && items[0].kind === 'string' && items[1].kind === 'file') {
9
+ // name, file
5
10
  const text = dataTransfer.getData('text');
6
11
  const file = items[1].getAsFile() ?? dataTransfer.files?.item(0);
7
12
  if (!file) {
8
13
  console.error(`no file ${text}`, items[1]);
9
- return null;
14
+ return {};
10
15
  }
11
16
 
12
17
  // let type = file.type;
@@ -18,19 +23,19 @@ export function getFile(dataTransfer: DataTransfer): { file: File; filename: str
18
23
  // file = new File([blob], text, {type});
19
24
  // }
20
25
 
21
- return { file, filename: text };
26
+ return { file, name: text };
22
27
  } else if (items[0].kind === 'file') {
23
28
  const file = items[0].getAsFile();
24
29
  if (!file) {
25
30
  console.error(`no file`, items[0]);
26
- return null;
31
+ return {};
27
32
  }
28
- return { file, filename: file.name };
33
+ return { file, name: file.name };
29
34
  } else {
30
35
  console.debug(
31
36
  `file item not match`,
32
37
  Array.from(items).map((v) => ({ type: v.type, kind: v.kind })),
33
38
  );
34
39
  }
35
- return null;
40
+ return {};
36
41
  }
@@ -1,4 +1,4 @@
1
- export * from './clipboard';
1
+ export * from './copy';
2
2
  export * from './download';
3
3
  export * from './loaders';
4
- export * from './transfers';
4
+ export * from './getFileFromDataTransfer';
@@ -1,7 +1,7 @@
1
1
  function load(
2
2
  el: HTMLScriptElement | HTMLLinkElement,
3
3
  resolve: (v: any) => void,
4
- reject: Function,
4
+ reject: (v: any) => void,
5
5
  options: { attributes: Record<string, string> } | undefined,
6
6
  ) {
7
7
  el.onload = resolve;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Format bytes as human-readable text.
3
+ *
4
+ * @param bytes Number of bytes.
5
+ * @param si True to use metric (SI) units, aka powers of 1000. False to use
6
+ * binary (IEC), aka powers of 1024.
7
+ * @param dp Number of decimal places to display.
8
+ *
9
+ * @return Formatted string.
10
+ */
11
+ export function formatBytes(bytes: number, si = false, dp = 1) {
12
+ const thresh = si ? 1000 : 1024;
13
+
14
+ if (Math.abs(bytes) < thresh) {
15
+ return bytes + ' B';
16
+ }
17
+
18
+ const units = si
19
+ ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
20
+ : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
21
+ let u = -1;
22
+ const r = 10 ** dp;
23
+
24
+ do {
25
+ bytes /= thresh;
26
+ ++u;
27
+ } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
28
+
29
+ return bytes.toFixed(dp) + ' ' + units[u];
30
+ }
package/src/index.ts CHANGED
@@ -4,6 +4,8 @@ export * from './validations';
4
4
  export * from './strings';
5
5
  export * from './maths';
6
6
  export * from './io';
7
- export * from './envs';
8
7
  export * from './browsers';
9
- export * from './isomorphics';
8
+
9
+ export { getGlobalThis } from './isomorphics/getGlobalThis';
10
+ export { formatBytes } from './formats/formatBytes';
11
+ export { urljoin } from './shim/urljoin';
@@ -3,7 +3,7 @@ declare const global: typeof globalThis;
3
3
  /**
4
4
  * isomorphic globalThis
5
5
  *
6
- * globalThis supported by ff 65, chrome 71, node 12, babel
6
+ * globalThis supported by ff 65, Chrome 71, Node 12, babel
7
7
  *
8
8
  * @see https://caniuse.com/#search=globalThis
9
9
  * @see https://v8.dev/features/globalthis
@@ -13,8 +13,6 @@ export const getGlobalThis = (): typeof globalThis => {
13
13
  if (typeof self !== 'undefined') return self;
14
14
  if (typeof window !== 'undefined') return window;
15
15
  if (typeof global !== 'undefined') return global as any;
16
- // eslint-disable-next-line
17
- // @ts-ignore
18
- if (typeof this !== 'undefined') return this;
16
+ // if (typeof this !== 'undefined') return this;
19
17
  throw new Error('Unable to locate global `this`');
20
18
  };
@@ -1,10 +1,10 @@
1
1
  /// javascript pseudo random
2
- export function createRandom({ seed = 0 } = {}) {
3
- if (typeof seed === 'string') {
4
- const s: string = seed;
2
+ export function createRandom(o: { seed?: string | number } = {}) {
3
+ let seed = typeof o.seed === 'string' ? 0 : o.seed ?? 0;
4
+ if (typeof o.seed === 'string') {
5
5
  let sum = 0;
6
- for (let i = 0; i < s.length; i++) {
7
- sum += s.charCodeAt(i);
6
+ for (let i = 0; i < o.seed.length; i++) {
7
+ sum += o.seed.charCodeAt(i);
8
8
  }
9
9
  seed = sum;
10
10
  }
@@ -0,0 +1,5 @@
1
+ import { urljoin } from './urljoin';
2
+
3
+ test('join ext', () => {
4
+ expect(urljoin('http://wener.me/sub/', '/a/', '/hello.js')).toBe('http://wener.me/sub/a/hello.js');
5
+ });
@@ -1,5 +1,18 @@
1
- /// see https://github.com/jfromaniello/url-join
2
- export function urljoin(...strArray: string[]) {
1
+ export function urljoin(...strArray: string[]): string;
2
+ export function urljoin(strArray: string[]): string;
3
+
4
+ /**
5
+ * @see {@link https://github.com/jfromaniello/url-join}
6
+ */
7
+ export function urljoin(...args: string[] | [string[]]): string {
8
+ if (Array.isArray(args[0])) {
9
+ return normalize(args[0]);
10
+ } else {
11
+ return normalize(args as any);
12
+ }
13
+ }
14
+
15
+ function normalize(strArray: string[]) {
3
16
  const resultArray: string[] = [];
4
17
  if (strArray.length === 0) {
5
18
  return '';
@@ -35,14 +48,14 @@ export function urljoin(...strArray: string[]) {
35
48
 
36
49
  if (i > 0) {
37
50
  // Removing the starting slashes for each component but the first.
38
- component = component.replace(/^[/]+/, '');
51
+ component = component.replace(/^[\/]+/, '');
39
52
  }
40
53
  if (i < strArray.length - 1) {
41
54
  // Removing the ending slashes for each component but the last.
42
- component = component.replace(/[/]+$/, '');
55
+ component = component.replace(/[\/]+$/, '');
43
56
  } else {
44
57
  // For the last component we will combine multiple slashes to a single one.
45
- component = component.replace(/[/]+$/, '/');
58
+ component = component.replace(/[\/]+$/, '/');
46
59
  }
47
60
 
48
61
  resultArray.push(component);
@@ -1,3 +1,2 @@
1
1
  export * from './camelCase';
2
2
  export * from './templates';
3
- export * from './urljoin';
@@ -1,15 +1,13 @@
1
- import { get } from 'lodash';
2
-
3
1
  /**
4
2
  * 替换类似于 JS 的模板字符串
5
3
  *
6
4
  * @example
7
5
  * templateString('My name is ${name}',{name:'wener'})
8
6
  */
9
- export function templateString(template: string, variables: Record<string, any>) {
7
+ export function templateString(template: string, getter: (v: string) => any) {
10
8
  return template.replace(/\${(.*?)}/g, (_, g) => {
11
9
  // variables[g.trim()]
12
10
  // 支持路径 - 例如 a.b[0]
13
- return get(variables, g.trim());
11
+ return getter(g.trim());
14
12
  });
15
13
  }
package/tsconfig.json CHANGED
@@ -1,9 +1,16 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "moduleResolution": "node",
4
- "target": "es5",
5
- "module": "es2015",
6
- "lib": ["esnext", "dom"],
4
+ "target": "esnext",
5
+ "module": "esnext",
6
+ "lib": [
7
+ "dom",
8
+ "dom.iterable",
9
+ "es5",
10
+ "es2015.collection",
11
+ "es2015.iterable",
12
+ "esnext"
13
+ ],
7
14
  "strict": true,
8
15
  "sourceMap": true,
9
16
  "skipLibCheck": true,
@@ -13,8 +20,12 @@
13
20
  "allowSyntheticDefaultImports": true,
14
21
  "experimentalDecorators": true,
15
22
  "emitDecoratorMetadata": true,
16
- "noImplicitAny": false,
23
+ "noImplicitAny": true,
24
+ "noImplicitReturns": true,
25
+ "noUnusedLocals": true,
26
+ "noUnusedParameters": true,
17
27
  "pretty": true,
28
+ "removeComments": false,
18
29
  "stripInternal": true
19
30
  },
20
31
  "exclude": [