@vbarbarosh/node-helpers 3.75.0 → 3.76.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 (369) hide show
  1. package/README.md +29 -3
  2. package/dist/browser.js +1 -2504
  3. package/dist/index.html +1 -1
  4. package/package.json +33 -12
  5. package/src/HeartbeatServer.js +24 -3
  6. package/src/HeartbeatServer.md +33 -0
  7. package/src/array_chunk.js +1 -1
  8. package/src/array_chunk.md +8 -0
  9. package/src/array_chunk_balanced.md +14 -0
  10. package/src/array_fps.md +12 -0
  11. package/src/array_gcd.js +4 -2
  12. package/src/array_gcd.md +2 -1
  13. package/src/array_group.js +3 -3
  14. package/src/array_group.md +14 -0
  15. package/src/array_group_map.js +3 -3
  16. package/src/array_group_map.md +13 -0
  17. package/src/array_index.js +2 -2
  18. package/src/array_index.md +9 -0
  19. package/src/array_lcm.js +4 -2
  20. package/src/array_lcm.md +2 -1
  21. package/src/array_max.js +11 -4
  22. package/src/array_max.md +1 -1
  23. package/src/array_min.js +11 -4
  24. package/src/array_min.md +1 -1
  25. package/src/array_permutations.js +4 -0
  26. package/src/array_permutations.md +13 -0
  27. package/src/array_sort.js +7 -2
  28. package/src/array_sort.md +13 -0
  29. package/src/array_sort_other.js +8 -5
  30. package/src/array_sort_other.md +11 -0
  31. package/src/array_sum.js +2 -2
  32. package/src/array_sum.md +8 -0
  33. package/src/array_unique.js +2 -2
  34. package/src/array_unique_last.js +2 -2
  35. package/src/assert_valid_expires_at.md +10 -0
  36. package/src/clamp.md +9 -0
  37. package/src/cli-apps/watchdog.js +5 -0
  38. package/src/cli.js +3 -1
  39. package/src/cli.md +15 -0
  40. package/src/const_stream.md +7 -0
  41. package/src/const_type.md +5 -0
  42. package/src/countdown.js +22 -5
  43. package/src/countdown.md +21 -0
  44. package/src/crypto_decrypt_aes256.md +13 -0
  45. package/src/crypto_encrypt_aes256.md +13 -0
  46. package/src/crypto_hash_md5.md +10 -0
  47. package/src/crypto_hash_sha256.md +10 -0
  48. package/src/crypto_hmac_sha256.md +11 -0
  49. package/src/date_add_hours.md +8 -0
  50. package/src/date_add_milliseconds.md +4 -0
  51. package/src/date_add_minutes.md +4 -0
  52. package/src/date_add_months.md +13 -0
  53. package/src/date_add_seconds.md +4 -0
  54. package/src/date_diff_seconds.md +4 -0
  55. package/src/date_is_leap_year.md +9 -0
  56. package/src/escape_content_disposition.js +6 -3
  57. package/src/escape_content_disposition.md +13 -0
  58. package/src/escape_regexp.md +7 -0
  59. package/src/eta.js +7 -1
  60. package/src/eta.md +18 -0
  61. package/src/factorize_ms.js +3 -0
  62. package/src/factorize_ms.md +10 -0
  63. package/src/fastdl.js +14 -3
  64. package/src/fcmp_dates.md +12 -0
  65. package/src/fcmp_default.js +7 -0
  66. package/src/fcmp_default.md +29 -0
  67. package/src/fcmp_default_desc.js +4 -7
  68. package/src/fcmp_default_desc.md +10 -0
  69. package/src/fcmp_from_spec.md +13 -0
  70. package/src/fcmp_numbers.md +11 -0
  71. package/src/fcmp_tuples.md +17 -0
  72. package/src/fcmp_utf8_bin.md +14 -0
  73. package/src/fcmp_utf8_ci.md +14 -0
  74. package/src/fcmp_utf8_cs.md +15 -0
  75. package/src/fcmp_utf8_natural_bin.js +38 -0
  76. package/src/fcmp_utf8_natural_bin.md +8 -0
  77. package/src/fcmp_utf8_natural_ci.md +13 -0
  78. package/src/fcmp_utf8_natural_cs.md +13 -0
  79. package/src/fcmpx.md +26 -9
  80. package/src/filter1_from_spec.js +3 -3
  81. package/src/format_bytes.md +15 -0
  82. package/src/format_date.md +7 -0
  83. package/src/format_date_fs.md +7 -0
  84. package/src/format_date_human.md +6 -0
  85. package/src/format_date_ymd.md +6 -0
  86. package/src/format_error_report.js +3 -3
  87. package/src/format_error_report.md +12 -0
  88. package/src/format_kilo.md +13 -0
  89. package/src/format_ms.js +3 -2
  90. package/src/format_ms.md +12 -0
  91. package/src/format_ms2.js +6 -3
  92. package/src/format_ms2.md +12 -0
  93. package/src/format_ms3.js +3 -2
  94. package/src/format_ms3.md +12 -0
  95. package/src/format_percents.md +10 -0
  96. package/src/format_progress_bytes.md +13 -0
  97. package/src/format_progress_kilo.md +10 -0
  98. package/src/format_seconds.md +11 -0
  99. package/src/format_thousands.md +9 -0
  100. package/src/fs_append.md +7 -0
  101. package/src/fs_append_json.md +8 -0
  102. package/src/fs_append_utf8.md +6 -0
  103. package/src/fs_assert_file_exists.md +3 -0
  104. package/src/fs_assert_file_readable.js +1 -1
  105. package/src/fs_assert_file_readable.md +3 -0
  106. package/src/fs_assert_file_socket.md +2 -0
  107. package/src/fs_copy.md +7 -0
  108. package/src/fs_copy_excl.md +2 -0
  109. package/src/fs_exists.md +6 -0
  110. package/src/fs_fclose.md +5 -0
  111. package/src/fs_fi.js +13 -1
  112. package/src/fs_fi.md +11 -0
  113. package/src/fs_file_md5.md +8 -0
  114. package/src/fs_find.md +7 -0
  115. package/src/fs_fopen.md +6 -0
  116. package/src/fs_fread.js +2 -2
  117. package/src/fs_fread.md +11 -0
  118. package/src/fs_fsize.md +2 -0
  119. package/src/fs_fstat.md +2 -0
  120. package/src/fs_fwrite.js +2 -2
  121. package/src/fs_fwrite.md +9 -0
  122. package/src/fs_list.md +5 -0
  123. package/src/fs_list_deep.md +5 -0
  124. package/src/fs_ls.md +2 -0
  125. package/src/fs_lsr.md +4 -0
  126. package/src/fs_lstat.md +3 -0
  127. package/src/fs_mkdir.md +3 -0
  128. package/src/fs_mkdirp.js +3 -30
  129. package/src/fs_mkdirp.md +7 -0
  130. package/src/fs_path_basename.md +2 -0
  131. package/src/fs_path_dirname.md +2 -0
  132. package/src/fs_path_extname.md +9 -0
  133. package/src/fs_path_join.md +2 -0
  134. package/src/fs_path_relative.md +2 -0
  135. package/src/fs_path_resolve.md +2 -0
  136. package/src/fs_path_tempdir.md +2 -0
  137. package/src/fs_path_untildify.md +8 -0
  138. package/src/fs_read.md +3 -0
  139. package/src/fs_read_buffer.md +5 -0
  140. package/src/fs_read_json.md +6 -0
  141. package/src/fs_read_lines.md +7 -0
  142. package/src/fs_read_stream.md +2 -0
  143. package/src/fs_read_utf8.md +5 -0
  144. package/src/fs_readdir.md +3 -0
  145. package/src/fs_readlink.md +6 -0
  146. package/src/fs_rename.md +6 -0
  147. package/src/fs_rm.md +4 -0
  148. package/src/fs_rmdir.md +3 -0
  149. package/src/fs_rmf.md +2 -0
  150. package/src/fs_rmrf.md +8 -0
  151. package/src/fs_sha256.js +16 -0
  152. package/src/fs_sha256.md +9 -0
  153. package/src/fs_size.js +2 -2
  154. package/src/fs_size.md +6 -0
  155. package/src/fs_stat.md +2 -0
  156. package/src/fs_tempdir.js +20 -5
  157. package/src/fs_touch.md +6 -0
  158. package/src/fs_walk.js +2 -2
  159. package/src/fs_walk.md +14 -0
  160. package/src/fs_write.md +3 -0
  161. package/src/fs_write_json.md +7 -0
  162. package/src/fs_write_stream.md +2 -0
  163. package/src/gettype.md +13 -0
  164. package/src/http_delete.md +11 -0
  165. package/src/http_get_blob.md +8 -0
  166. package/src/http_get_buffer.md +10 -0
  167. package/src/http_get_file.js +8 -8
  168. package/src/http_get_file.md +14 -0
  169. package/src/http_get_json.md +10 -0
  170. package/src/http_get_stream.md +14 -0
  171. package/src/http_get_stream_range.js +27 -9
  172. package/src/http_get_stream_range.md +22 -0
  173. package/src/http_get_utf8.md +9 -0
  174. package/src/http_head.md +9 -0
  175. package/src/http_patch_json.md +10 -0
  176. package/src/http_post_json.md +11 -0
  177. package/src/http_post_multipart.md +15 -0
  178. package/src/http_post_urlencoded.md +11 -0
  179. package/src/http_put_buffer.md +9 -0
  180. package/src/http_put_file.js +9 -6
  181. package/src/http_put_file.md +16 -0
  182. package/src/http_put_json.md +11 -0
  183. package/src/http_put_utf8.md +9 -0
  184. package/src/http_range_parse.js +6 -3
  185. package/src/http_range_parse.md +18 -0
  186. package/src/http_stream_range.js +35 -22
  187. package/src/http_stream_range.md +29 -0
  188. package/src/identity.md +2 -0
  189. package/src/ignore.md +2 -0
  190. package/src/json_stringify_safe.md +10 -0
  191. package/src/json_stringify_stable.md +9 -0
  192. package/src/logger.js +2 -3
  193. package/src/logger.md +15 -0
  194. package/src/make_progress.js +8 -5
  195. package/src/make_progress.md +20 -0
  196. package/src/math_gcd.js +2 -1
  197. package/src/mongo_stream_upsert.js +10 -3
  198. package/src/mongo_stream_upsert.md +17 -0
  199. package/src/mongo_stream_write.js +10 -3
  200. package/src/mongo_stream_write.md +16 -0
  201. package/src/msval.md +10 -0
  202. package/src/now_fs.md +7 -0
  203. package/src/now_human.md +6 -0
  204. package/src/object_defaults.md +11 -0
  205. package/src/object_schema.js +2 -1
  206. package/src/object_schema.md +12 -0
  207. package/src/object_walk_preorder.md +16 -0
  208. package/src/parallel.js +23 -10
  209. package/src/parse_bytes.js +4 -2
  210. package/src/parse_bytes.md +15 -0
  211. package/src/parse_hms.js +1 -1
  212. package/src/parse_http_content_range.js +9 -5
  213. package/src/parse_http_content_range.md +16 -0
  214. package/src/perf_end_human.md +10 -0
  215. package/src/perf_end_ms.md +8 -0
  216. package/src/perf_measure.md +10 -0
  217. package/src/perf_measure_human.md +8 -0
  218. package/src/perf_start.md +9 -0
  219. package/src/pgid_exists.md +6 -0
  220. package/src/pgid_kill_grace.js +1 -1
  221. package/src/pgid_kill_grace.md +15 -0
  222. package/src/pid_exists.md +5 -0
  223. package/src/pid_kill_grace.js +1 -1
  224. package/src/pid_kill_grace.md +14 -0
  225. package/src/plural.md +13 -0
  226. package/src/random_hex.md +9 -0
  227. package/src/random_int.md +8 -0
  228. package/src/range.js +4 -2
  229. package/src/range.md +2 -0
  230. package/src/redis_connect.js +1 -1
  231. package/src/redis_connect.md +10 -0
  232. package/src/redis_lshift.md +14 -0
  233. package/src/redis_poll.js +1 -0
  234. package/src/redis_poll.md +17 -0
  235. package/src/redis_poll_zshift_callback_rpush.js +1 -2
  236. package/src/redis_poll_zshift_callback_rpush.md +17 -0
  237. package/src/redis_poll_zshift_spawn_rpush.js +2 -1
  238. package/src/redis_poll_zshift_spawn_rpush.md +20 -0
  239. package/src/redis_zshift.md +14 -0
  240. package/src/round.js +7 -8
  241. package/src/round.md +15 -0
  242. package/src/sanitize_dash_name.md +13 -0
  243. package/src/sanitize_filename.md +9 -0
  244. package/src/sanitize_var_name.md +14 -0
  245. package/src/sftp_get_file_info.js +2 -2
  246. package/src/sftp_get_file_info.md +14 -0
  247. package/src/sftp_get_stream_range.js +32 -22
  248. package/src/sftp_get_stream_range.md +20 -0
  249. package/src/shell_curl_progress.js +2 -1
  250. package/src/shell_curl_progress.md +17 -0
  251. package/src/shell_lines.js +2 -2
  252. package/src/shell_lines.md +1 -1
  253. package/src/shell_spawn.js +7 -0
  254. package/src/shell_ytdlp_progress.js +2 -1
  255. package/src/shell_ytdlp_progress.md +17 -0
  256. package/src/str_camel_to_snake.md +11 -0
  257. package/src/str_parse_kv.md +11 -0
  258. package/src/stream_curl_progress.md +14 -0
  259. package/src/stream_data_ln.js +7 -1
  260. package/src/stream_discard.md +8 -0
  261. package/src/stream_group.md +3 -0
  262. package/src/stream_gunzip.md +7 -0
  263. package/src/stream_hash.md +10 -0
  264. package/src/stream_map.js +8 -1
  265. package/src/stream_map_parallel.js +9 -1
  266. package/src/stream_md5.md +9 -0
  267. package/src/stream_multiplex.js +11 -0
  268. package/src/stream_multiplex.md +16 -0
  269. package/src/stream_through.md +3 -0
  270. package/src/stream_transform.md +2 -0
  271. package/src/stream_xml_analyze.js +9 -1
  272. package/src/stream_xml_parse.js +9 -1
  273. package/src/stream_ytdlp_progress.js +1 -1
  274. package/src/stream_ytdlp_progress.md +18 -0
  275. package/src/strtr.js +15 -5
  276. package/src/strtr.md +11 -0
  277. package/src/urlclean.js +9 -2
  278. package/src/urlmod.js +22 -11
  279. package/src/urlmod.md +15 -3
  280. package/src/urlparts.md +17 -0
  281. package/src/wait_while.js +1 -1
  282. package/src/wait_while.md +1 -1
  283. package/src/HeartbeatServer.test.js +0 -31
  284. package/src/array_chunk.test.js +0 -24
  285. package/src/array_chunk_balanced.test.js +0 -37
  286. package/src/array_fps.test.js +0 -72
  287. package/src/array_gcd.test.js +0 -10
  288. package/src/array_index.test.js +0 -14
  289. package/src/array_lcm.test.js +0 -12
  290. package/src/array_max.test.js +0 -20
  291. package/src/array_min.test.js +0 -20
  292. package/src/array_permutations.test.js +0 -20
  293. package/src/array_sort.test.js +0 -85
  294. package/src/array_sort_other.test.js +0 -9
  295. package/src/array_sum.test.js +0 -11
  296. package/src/cli-apps/watchdog.d/connect_close.js +0 -17
  297. package/src/cli-apps/watchdog.d/connect_close2.js +0 -20
  298. package/src/cli-apps/watchdog.d/connect_close3.js +0 -25
  299. package/src/cli-apps/watchdog.d/connect_no_ping.js +0 -13
  300. package/src/cli-apps/watchdog.d/early_exit.js +0 -7
  301. package/src/cli-apps/watchdog.d/flood.js +0 -13
  302. package/src/cli-apps/watchdog.d/flood2.js +0 -15
  303. package/src/cli-apps/watchdog.d/hang.js +0 -8
  304. package/src/cli-apps/watchdog.d/huge_delay.js +0 -18
  305. package/src/cli-apps/watchdog.d/ignore_sigterm.js +0 -29
  306. package/src/cli-apps/watchdog.d/late_heartbeat.js +0 -21
  307. package/src/cli-apps/watchdog.d/my-exit-after-2-pings.js +0 -16
  308. package/src/cli-apps/watchdog.d/my-happy-path.js +0 -16
  309. package/src/cli-apps/watchdog.d/my-ignore-sigterm.js +0 -22
  310. package/src/cli-apps/watchdog.d/my-never-ping.js +0 -15
  311. package/src/cli-apps/watchdog.d/no_heartbeat.js +0 -5
  312. package/src/cli-apps/watchdog.d/ok.js +0 -17
  313. package/src/cli-apps/watchdog.d/quick-exit-after-2-pings.js +0 -15
  314. package/src/cli-apps/watchdog.d/quick-hang-after-1-ping.js +0 -15
  315. package/src/cli-apps/watchdog.d/spawn_children.js +0 -14
  316. package/src/cli-apps/watchdog.test.js +0 -48
  317. package/src/crypto_encrypt_aes256.test.js +0 -10
  318. package/src/crypto_hash_sha256.test.js +0 -10
  319. package/src/date_add_months.test.js +0 -40
  320. package/src/date_is_leap_year.test.js +0 -14
  321. package/src/escape_content_disposition.test.js +0 -22
  322. package/src/fcmp_from_spec.test.js +0 -91
  323. package/src/fcmpx.test.js +0 -173
  324. package/src/filter1_from_spec.test.js +0 -31
  325. package/src/format_bytes.test.js +0 -22
  326. package/src/format_error_report.d/src/1.js +0 -26
  327. package/src/format_error_report.d/src/2.js +0 -29
  328. package/src/format_kilo.test.js +0 -25
  329. package/src/format_ms.test.js +0 -33
  330. package/src/format_ms2.test.js +0 -33
  331. package/src/format_ms3.test.js +0 -33
  332. package/src/format_percents.test.js +0 -22
  333. package/src/format_progress_bytes.test.js +0 -19
  334. package/src/format_progress_kilo.test.js +0 -19
  335. package/src/format_seconds.test.js +0 -42
  336. package/src/format_thousands.test.js +0 -28
  337. package/src/fs_file_md5.test.js +0 -11
  338. package/src/fs_mkdirp.test.js +0 -24
  339. package/src/fs_path_extname.test.js +0 -22
  340. package/src/gettype.test.js +0 -27
  341. package/src/object_schema.test.js +0 -15
  342. package/src/object_walk_preorder.test.js +0 -17
  343. package/src/parallel.test.js +0 -11
  344. package/src/parse_bytes.test.js +0 -21
  345. package/src/parse_hms.test.js +0 -32
  346. package/src/parse_http_content_range.test.js +0 -14
  347. package/src/pid_kill_grace.d/ignore-sigterm-for-10ms.js +0 -33
  348. package/src/pid_kill_grace.d/ignore-sigterm.js +0 -22
  349. package/src/pid_kill_grace.test.js +0 -63
  350. package/src/ping_socket.test.js +0 -58
  351. package/src/plural.test.js +0 -20
  352. package/src/range.test.js +0 -41
  353. package/src/redis_lshift.test.js +0 -57
  354. package/src/redis_zshift.test.js +0 -58
  355. package/src/round.test.js +0 -56
  356. package/src/sanitize_dash_name.test.js +0 -59
  357. package/src/sanitize_var_name.test.js +0 -39
  358. package/src/shell_spawn.test.js +0 -30
  359. package/src/str_camel_to_snake.test.js +0 -17
  360. package/src/stream_curl_progress.d/basic +0 -3
  361. package/src/stream_curl_progress.d/basic.json +0 -42
  362. package/src/stream_curl_progress.test.js +0 -17
  363. package/src/stream_data_ln.test.js +0 -24
  364. package/src/stream_map_parallel.test.js +0 -26
  365. package/src/stream_multiplex.test.js +0 -67
  366. package/src/stream_strpbrk.test.js +0 -29
  367. package/src/urlclean.test.js +0 -18
  368. package/src/urlmod.test.js +0 -40
  369. package/src/urlparts.test.js +0 -294
@@ -1,57 +0,0 @@
1
- const assert = require('assert');
2
- const redis_lshift = require('./redis_lshift');
3
-
4
- const REDIS_HOST = '127.0.0.1';
5
- const REDIS_PORT = 6379;
6
- const REDIS_AUTH = null;
7
- const REDIS_QUEUE = 'TESTING';
8
-
9
- describe('redis_lshift', function () {
10
- it('should work with redis@1', async function () {
11
- await test_1_2_3(require('redis-v1'));
12
- });
13
- it('should work with redis@2', async function () {
14
- await test_1_2_3(require('redis-v2'));
15
- });
16
- it('should work with redis@3', async function () {
17
- await test_1_2_3(require('redis-v3'));
18
- });
19
- it('should work with redis@4', async function () {
20
- await test_4(require('redis-v4'));
21
- });
22
- });
23
-
24
- async function test_1_2_3(redis)
25
- {
26
- const r = redis.createClient(REDIS_PORT, REDIS_HOST, {password: REDIS_AUTH || undefined});
27
- try {
28
- const expected = 'aa,bb,cc,dd,ee'.split(',');
29
- await new Promise(function (resolve, reject) {
30
- r.del(REDIS_QUEUE, (e,v) => e ? reject(e) : resolve(v));
31
- });
32
- await new Promise(function (resolve, reject) {
33
- r.rpush(REDIS_QUEUE, ...expected, (e,v) => e ? reject(e) : resolve(v));
34
- });
35
- const actual = await redis_lshift(r, REDIS_QUEUE, expected.length);
36
- await assert.deepStrictEqual(actual, expected);
37
- }
38
- finally {
39
- await r.quit();
40
- }
41
- }
42
-
43
- async function test_4(redis)
44
- {
45
- const r = redis.createClient(REDIS_PORT, REDIS_HOST, {password: REDIS_AUTH || undefined});
46
- await r.connect();
47
- try {
48
- const expected = 'aa,bb,cc,dd,ee'.split(',');
49
- await r.DEL(REDIS_QUEUE);
50
- await r.RPUSH(REDIS_QUEUE, expected);
51
- const actual = await redis_lshift(r, REDIS_QUEUE, expected.length);
52
- await assert.deepStrictEqual(actual, expected);
53
- }
54
- finally {
55
- await r.quit();
56
- }
57
- }
@@ -1,58 +0,0 @@
1
- const assert = require('assert');
2
- const redis_zshift = require('./redis_zshift');
3
-
4
- const REDIS_HOST = '127.0.0.1';
5
- const REDIS_PORT = 6379;
6
- const REDIS_AUTH = null;
7
- const REDIS_QUEUE = 'TESTING';
8
-
9
- describe('redis_zshift', function () {
10
- it('should work with redis@1', async function () {
11
- await test_1_2_3(require('redis-v1'));
12
- });
13
- it('should work with redis@2', async function () {
14
- await test_1_2_3(require('redis-v2'));
15
- });
16
- it('should work with redis@3', async function () {
17
- await test_1_2_3(require('redis-v3'));
18
- });
19
- it('should work with redis@4', async function () {
20
- await test_4(require('redis-v4'));
21
- });
22
- });
23
-
24
- async function test_1_2_3(redis)
25
- {
26
- const r = redis.createClient(REDIS_PORT, REDIS_HOST, {password: REDIS_AUTH || undefined});
27
- try {
28
- const expected = 'aa,bb,cc,dd,ee'.split(',');
29
- await new Promise(function (resolve, reject) {
30
- r.del(REDIS_QUEUE, (e,v) => e ? reject(e) : resolve(v));
31
- });
32
- await new Promise(function (resolve, reject) {
33
- const args = [REDIS_QUEUE, ...expected.map((v,i) => [i,v]).flat()];
34
- r.zadd(args, (e,v) => e ? reject(e) : resolve(v));
35
- });
36
- const actual = await redis_zshift(r, REDIS_QUEUE, expected.length);
37
- await assert.deepStrictEqual(actual, expected);
38
- }
39
- finally {
40
- await r.quit();
41
- }
42
- }
43
-
44
- async function test_4(redis)
45
- {
46
- const r = redis.createClient(REDIS_PORT, REDIS_HOST, {password: REDIS_AUTH || undefined});
47
- await r.connect();
48
- try {
49
- const expected = 'aa,bb,cc,dd,ee'.split(',');
50
- await r.DEL(REDIS_QUEUE);
51
- await r.ZADD(REDIS_QUEUE, expected.map((value,i) => ({score: i, value})));
52
- const actual = await redis_zshift(r, REDIS_QUEUE, 5);
53
- await assert.deepStrictEqual(actual, expected);
54
- }
55
- finally {
56
- await r.quit();
57
- }
58
- }
package/src/round.test.js DELETED
@@ -1,56 +0,0 @@
1
- const assert = require('assert');
2
- const round = require('./round');
3
-
4
- const items = [
5
- [34, 25, 25],
6
- [37.5, 25, 50],
7
- [34.037531, 0.001, 34.038],
8
- [1.005, 0.01, 1.01],
9
- [0.99999, 0.00001, 0.99999],
10
-
11
- // Synthetic cases generated by DeepSeek
12
- [1.005, 0.001, 1.005], // More precise rounding
13
- [1.005, 0.1, 1.0], // Less precise rounding
14
- [1.015, 0.01, 1.02], // Another edge case with 5
15
- [1.025, 0.01, 1.03], // Yet another edge case
16
- [0.5, 1, 1], // Round to nearest integer
17
- [0.4, 1, 0], // Round down to integer
18
- [123.456, 0.01, 123.46], // Standard decimal rounding
19
- [123.456, 0.1, 123.5], // Different precision
20
- [123.456, 1, 123], // Round to whole number
21
- [123.456, 10, 120], // Round to tens
22
- [123.456, 100, 100], // Round to hundreds
23
- [0, 0.01, 0], // Zero value
24
- [-1.005, 0.01, -1.01], // Negative numbers
25
- [-1.015, 0.01, -1.02], // Negative edge case
26
- [-37.5, 25, -50], // Negative with integer precision
27
- [1.2345e-5, 1e-6, 0.000012], // Very small numbers
28
- [999.999, 0.001, 999.999], // Rounding that causes carry-over
29
- [0.0000000000001, 0.01, 0], // Extremely small number
30
- [Number.MAX_SAFE_INTEGER, 1000, 9007199254741000], // Large numbers
31
-
32
- [0.005, 0.01, 0.01],
33
- [-1.5, 1, -2], // Symmetric negative rounding (Math.abs is critical here)
34
- [-0.5, 1, -1], // Symmetric negative rounding for half
35
- [123456789123.45, 1000, 123456789000], // Testing very large numbers
36
- [1.2345e-20, 1e-20, 1e-20], // Testing very small numbers
37
- [1.0000000000000001, 0.0000000000000001, 1.0000000000000000], // Testing rounding near Number.EPSILON range
38
-
39
- [9007199254740992, 1, 9007199254740992],
40
- [9007199254740991.5, 1, 9007199254740992],
41
- [Number.MIN_SAFE_INTEGER, 1, Number.MIN_SAFE_INTEGER],
42
- [Number.MAX_SAFE_INTEGER, 1, Number.MAX_SAFE_INTEGER],
43
-
44
- // Out of scope of standard JS
45
- // [0.004999999999999999, 0.01, 0.0],
46
- // [Number.MIN_SAFE_INTEGER, 0.1, Number.MIN_SAFE_INTEGER],
47
- // [Number.MAX_SAFE_INTEGER, 0.1, Number.MAX_SAFE_INTEGER],
48
- ];
49
-
50
- describe('round', function () {
51
- items.forEach(function ([value, precision, expected],) {
52
- it(`${value} [${precision}] → ${expected}`, function () {
53
- assert.deepStrictEqual(round(value, precision), expected);
54
- });
55
- });
56
- });
@@ -1,59 +0,0 @@
1
- const assert = require('assert');
2
- const sanitize_dash_name = require('./sanitize_dash_name');
3
-
4
- const items = [
5
- ['', ''],
6
- ['', '.'],
7
- ['', 'привет'],
8
- ['1-2-3', '1-2-3'],
9
- ['1-2-3', '1.2.3'],
10
- ['1000-stories', '1000 Stories'],
11
- ['1800', '1800'],
12
- ['3-a', '3-A'],
13
- ['43', '43'],
14
- ['600-d', '600+D'],
15
- ['9-lives', '9 Lives'],
16
- ['a-c-d', 'A, C, D'],
17
- ['a-f', 'A F'],
18
- ['accua-aseptic-solucion', 'Accua Aséptic Solución'],
19
- ['acido-acetilsalicilico', 'Ácido Acetilsalicílico'],
20
- ['acido-nalidixico-fenazopiridina', 'Ácido Nalidixico-Fenazopiridina'],
21
- ['aeropostale', 'Aéropostale'],
22
- ['arnica-nartex', 'Árnica Nártex'],
23
- ['art-n-chef', 'Art \'n Chef'],
24
- ['b-a-r-t-e-r', 'B.A.R.T.E.R.'],
25
- ['b-oost', 'b:oost'],
26
- ['betametasona-clotrimazol-gentamicina', 'Betametasona - Clotrimazol - Gentamicina'],
27
- ['black-decker', 'Black & Decker'],
28
- ['black-decker', 'Black + Decker'],
29
- ['black-panther', 'Black Panther'],
30
- ['black-white', 'Black & White'],
31
- ['blanca-nieves', 'Blanca Nieves'],
32
- ['de-rancho', 'de Rancho'],
33
- ['del-valle', 'del Valle'],
34
- ['exportacion-selecto', 'Exportación Selecto'],
35
- ['extra', 'Extra'],
36
- ['ezetimiba-simvastatina', 'Ezetimiba Simvastatina'],
37
- ['facicam-gel-90g', 'FACICAM GEL 90G'],
38
- ['folios', 'FOLIOS'],
39
- ['fresh-garden', 'FRESH GARDEN'],
40
- ['gi-valproato-de-magnesio', '(GI) Valproato de Magnesio'],
41
- ['itrac-100mg-c-f-15c', 'ITRAC 100MG C/F 15C'],
42
- ['m-m-s', 'M&M\'s'],
43
- ['m-m-s', 'M&M´s'],
44
- ['meticel-0-5', 'Meticel 0.5 %'],
45
- ['meticel-2', 'Meticel 2%'],
46
- ['opera-prima', 'Ópera Prima'],
47
- ['oxido-de-zinc', 'Óxido de Zinc'],
48
- ['r-u-m-b-a', 'r u m b a'],
49
- ['r-u-m-b-a', 'r_u_m_b_a'],
50
- ['ssh-authorized-keys', '~/.\u0000ssh/authorized_keys";\n'],
51
- ];
52
-
53
- describe('sanitize_dash_name', function () {
54
- items.forEach(function ([expected, input],) {
55
- it(`${input} → ${expected}`, function () {
56
- assert.deepStrictEqual(sanitize_dash_name(input), expected);
57
- });
58
- });
59
- });
@@ -1,39 +0,0 @@
1
- const assert = require('assert');
2
- const sanitize_var_name = require('./sanitize_var_name');
3
-
4
- const items = [
5
- ['', '_'],
6
- [' ', '_'],
7
- [' ', '_'],
8
- ['Product ID', 'product_id'],
9
- ['Product-ID', 'product_id'],
10
- ['Image URL', 'image_url'],
11
- ['Ópera Prima', 'opera_prima'],
12
- ['1000-stories', '_1000_stories'],
13
- ['A, C, D', 'a_c_d'],
14
- ['@odata.etag', 'odata_etag'],
15
- ['ItemInternalId', 'item_internal_id'],
16
- ['UPC', 'upc'],
17
- ['Sale_price', 'sale_price'],
18
- ['% de disponibilidad de tiendas', 'de_disponibilidad_de_tiendas'],
19
- ['%Tiendas con precio moda', 'tiendas_con_precio_moda'],
20
-
21
- // https://stackoverflow.com/questions/30521224/javascript-convert-pascalcase-to-underscore-case-snake-case
22
- ['TypeOfData.AlphaBeta', 'type_of_data_alpha_beta'],
23
- ['thisISDifficult', 'this_is_difficult'],
24
- ['thisISNT', 'this_isnt'],
25
- ['thisISNT', 'this_isnt'],
26
- ['somethingEasyLikeThis', 'something_easy_like_this'],
27
-
28
- // https://github.com/Advanon/sanitize-s3-objectkey
29
- // https://github.com/hamxabaig/s3-filename
30
- // ['some 漢字 ćööł % #fíłéñàmé.jpg', 'some_cool_filename_jpg'],
31
- ];
32
-
33
- describe('sanitize_var_name', function () {
34
- items.forEach(function ([input, expected],) {
35
- it(`${input === '' ? '☒' : input} → ${expected}`, function () {
36
- assert.deepStrictEqual(sanitize_var_name(input), expected);
37
- });
38
- });
39
- });
@@ -1,30 +0,0 @@
1
- const Promise = require('bluebird');
2
- const assert = require('assert');
3
- const pid_exists = require('./pid_exists');
4
- const shell_spawn = require('./shell_spawn');
5
-
6
- describe('shell_spawn', function () {
7
- describe('Happy Path', function () {
8
- it('basic', async function () {
9
- await shell_spawn(['true']).promise().timeout(100);
10
- });
11
- it('init + promise', async function () {
12
- const proc = await shell_spawn(['true']).init();
13
- await proc.promise().timeout(100);
14
- });
15
- });
16
- it('🏎️ race condition: proc.promise is called after process was terminated', async function () {
17
- const proc = shell_spawn(['true']);
18
- assert(pid_exists(proc.pid));
19
- await Promise.delay(10);
20
- assert(!pid_exists(proc.pid));
21
- await proc.promise().timeout(100);
22
- });
23
- it('should throw when init fails', async function () {
24
- await assert.rejects(shell_spawn(['ggg111']).init(), /^Error: spawn ggg111 ENOENT$/);
25
- });
26
- it('should throw when process exists with non zero code', async function () {
27
- const proc = await shell_spawn(['false']).init();
28
- await assert.rejects(proc.promise().timeout(100), /^Error: Process terminated with code 1 and signal null$/);
29
- });
30
- });
@@ -1,17 +0,0 @@
1
- const assert = require('assert');
2
- const str_camel_to_snake = require('./str_camel_to_snake');
3
-
4
- const items = [
5
- ['UPC', 'upc'],
6
- ['CamelCase', 'camel_case'],
7
- ['SomeUPCCode', 'some_upc_code'],
8
- ['XMLHTTPRequest', 'xmlhttp_request'],
9
- ];
10
-
11
- describe('str_camel_to_snake', function () {
12
- items.forEach(function ([input, expected],) {
13
- it(`${input === '' ? '☒' : input} → ${expected}`, function () {
14
- assert.deepStrictEqual(str_camel_to_snake(input), expected);
15
- });
16
- });
17
- });
@@ -1,3 +0,0 @@
1
- % Total % Received % Xferd Average Speed Time Time Time Current
2
- Dload Upload Total Spent Left Speed
3
-
4
  0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
5
1
  2 390k 2 10934 0 0 10234 0 0:00:39 0:00:01 0:00:38 10237
6
2
  5 390k 5 21877 0 0 10569 0 0:00:37 0:00:02 0:00:35 10573
7
3
  8 390k 8 32125 0 0 10241 0 0:00:39 0:00:03 0:00:36 10243
8
4
  10 390k 10 43059 0 0 10406 0 0:00:38 0:00:04 0:00:34 10408
9
5
  14 390k 14 56853 0 0 10922 0 0:00:36 0:00:05 0:00:31 10922
10
6
  17 390k 17 69113 0 0 10548 0 0:00:37 0:00:06 0:00:31 10610
11
7
  20 390k 20 81782 0 0 10552 0 0:00:37 0:00:07 0:00:30 10546
12
8
  20 390k 20 81782 0 0 10239 0 0:00:39 0:00:07 0:00:32 10238
13
9
  23 390k 23 94460 0 0 10509 0 0:00:38 0:00:08 0:00:30 10598
14
10
  26 390k 26 103k 0 0 10378 0 0:00:38 0:00:10 0:00:28 9814
15
11
  29 390k 29 115k 0 0 10455 0 0:00:38 0:00:11 0:00:27 10325
16
12
  32 390k 32 127k 0 0 10352 0 0:00:38 0:00:12 0:00:26 10032
17
13
  35 390k 35 139k 0 0 10418 0 0:00:38 0:00:13 0:00:25 10667
18
14
  35 390k 35 139k 0 0 10241 0 0:00:39 0:00:13 0:00:26 9754
19
15
  39 390k 39 152k 0 0 10402 0 0:00:38 0:00:14 0:00:24 10456
20
16
  41 390k 41 163k 0 0 10327 0 0:00:38 0:00:16 0:00:22 10028
21
17
  45 390k 45 175k 0 0 10381 0 0:00:38 0:00:17 0:00:21 10456
22
18
  48 390k 48 188k 0 0 10371 0 0:00:38 0:00:18 0:00:20 10238
23
19
  51 390k 51 199k 0 0 10311 0 0:00:38 0:00:19 0:00:19 10479
24
20
  51 390k 51 199k 0 0 10240 0 0:00:39 0:00:19 0:00:20 9752
25
21
  54 390k 54 211k 0 0 10356 0 0:00:38 0:00:20 0:00:18 10456
26
22
  57 390k 57 223k 0 0 10304 0 0:00:38 0:00:22 0:00:16 10030
27
23
  61 390k 61 239k 0 0 10503 0 0:00:38 0:00:23 0:00:15 11020
28
24
  65 390k 65 255k 0 0 10487 0 0:00:38 0:00:24 0:00:14 11171
29
25
  65 390k 65 255k 0 0 10241 0 0:00:39 0:00:25 0:00:14 10242
30
26
  69 390k 69 271k 0 0 10473 0 0:00:38 0:00:26 0:00:12 10912
31
27
  69 390k 69 271k 0 0 10240 0 0:00:39 0:00:27 0:00:12 9952
32
28
  73 390k 73 287k 0 0 10458 0 0:00:38 0:00:28 0:00:10 10234
33
29
  77 390k 77 303k 0 0 10448 0 0:00:38 0:00:29 0:00:09 10245
34
30
  77 390k 77 303k 0 0 10241 0 0:00:39 0:00:30 0:00:09 10241
35
31
  81 390k 81 319k 0 0 10436 0 0:00:38 0:00:31 0:00:07 10231
36
32
  85 390k 85 335k 0 0 10427 0 0:00:38 0:00:32 0:00:06 11303
37
33
  85 390k 85 335k 0 0 10240 0 0:00:39 0:00:33 0:00:06 9110
38
34
  90 390k 90 351k 0 0 10418 0 0:00:38 0:00:34 0:00:04 10231
39
35
  90 390k 90 351k 0 0 10241 0 0:00:39 0:00:35 0:00:04 10240
40
36
  94 390k 94 367k 0 0 10411 0 0:00:38 0:00:36 0:00:02 10248
41
37
  98 390k 98 383k 0 0 10403 0 0:00:38 0:00:37 0:00:01 10236
42
38
  98 390k 98 383k 0 0 10240 0 0:00:39 0:00:38 0:00:01 10238
@@ -1,42 +0,0 @@
1
- [
2
- {"perc":"0","done":"0","total":"0","perc2":"0","recv":"0","perc3":"0","transferred":"0","speed_down":"0","speed_up":"0","time_total":"~","duration":"~","eta":"~","speed":"0"},
3
- {"perc":"2","done":"10934","total":"390k","perc2":"2","recv":"10934","perc3":"0","transferred":"0","speed_down":"10234","speed_up":"0","time_total":"0:00:39","duration":"0:00:01","eta":"0:00:38","speed":"10237"},
4
- {"perc":"5","done":"21877","total":"390k","perc2":"5","recv":"21877","perc3":"0","transferred":"0","speed_down":"10569","speed_up":"0","time_total":"0:00:37","duration":"0:00:02","eta":"0:00:35","speed":"10573"},
5
- {"perc":"8","done":"32125","total":"390k","perc2":"8","recv":"32125","perc3":"0","transferred":"0","speed_down":"10241","speed_up":"0","time_total":"0:00:39","duration":"0:00:03","eta":"0:00:36","speed":"10243"},
6
- {"perc":"10","done":"43059","total":"390k","perc2":"10","recv":"43059","perc3":"0","transferred":"0","speed_down":"10406","speed_up":"0","time_total":"0:00:38","duration":"0:00:04","eta":"0:00:34","speed":"10408"},
7
- {"perc":"14","done":"56853","total":"390k","perc2":"14","recv":"56853","perc3":"0","transferred":"0","speed_down":"10922","speed_up":"0","time_total":"0:00:36","duration":"0:00:05","eta":"0:00:31","speed":"10922"},
8
- {"perc":"17","done":"69113","total":"390k","perc2":"17","recv":"69113","perc3":"0","transferred":"0","speed_down":"10548","speed_up":"0","time_total":"0:00:37","duration":"0:00:06","eta":"0:00:31","speed":"10610"},
9
- {"perc":"20","done":"81782","total":"390k","perc2":"20","recv":"81782","perc3":"0","transferred":"0","speed_down":"10552","speed_up":"0","time_total":"0:00:37","duration":"0:00:07","eta":"0:00:30","speed":"10546"},
10
- {"perc":"20","done":"81782","total":"390k","perc2":"20","recv":"81782","perc3":"0","transferred":"0","speed_down":"10239","speed_up":"0","time_total":"0:00:39","duration":"0:00:07","eta":"0:00:32","speed":"10238"},
11
- {"perc":"23","done":"94460","total":"390k","perc2":"23","recv":"94460","perc3":"0","transferred":"0","speed_down":"10509","speed_up":"0","time_total":"0:00:38","duration":"0:00:08","eta":"0:00:30","speed":"10598"},
12
- {"perc":"26","done":"103k","total":"390k","perc2":"26","recv":"103k","perc3":"0","transferred":"0","speed_down":"10378","speed_up":"0","time_total":"0:00:38","duration":"0:00:10","eta":"0:00:28","speed":"9814"},
13
- {"perc":"29","done":"115k","total":"390k","perc2":"29","recv":"115k","perc3":"0","transferred":"0","speed_down":"10455","speed_up":"0","time_total":"0:00:38","duration":"0:00:11","eta":"0:00:27","speed":"10325"},
14
- {"perc":"32","done":"127k","total":"390k","perc2":"32","recv":"127k","perc3":"0","transferred":"0","speed_down":"10352","speed_up":"0","time_total":"0:00:38","duration":"0:00:12","eta":"0:00:26","speed":"10032"},
15
- {"perc":"35","done":"139k","total":"390k","perc2":"35","recv":"139k","perc3":"0","transferred":"0","speed_down":"10418","speed_up":"0","time_total":"0:00:38","duration":"0:00:13","eta":"0:00:25","speed":"10667"},
16
- {"perc":"35","done":"139k","total":"390k","perc2":"35","recv":"139k","perc3":"0","transferred":"0","speed_down":"10241","speed_up":"0","time_total":"0:00:39","duration":"0:00:13","eta":"0:00:26","speed":"9754"},
17
- {"perc":"39","done":"152k","total":"390k","perc2":"39","recv":"152k","perc3":"0","transferred":"0","speed_down":"10402","speed_up":"0","time_total":"0:00:38","duration":"0:00:14","eta":"0:00:24","speed":"10456"},
18
- {"perc":"41","done":"163k","total":"390k","perc2":"41","recv":"163k","perc3":"0","transferred":"0","speed_down":"10327","speed_up":"0","time_total":"0:00:38","duration":"0:00:16","eta":"0:00:22","speed":"10028"},
19
- {"perc":"45","done":"175k","total":"390k","perc2":"45","recv":"175k","perc3":"0","transferred":"0","speed_down":"10381","speed_up":"0","time_total":"0:00:38","duration":"0:00:17","eta":"0:00:21","speed":"10456"},
20
- {"perc":"48","done":"188k","total":"390k","perc2":"48","recv":"188k","perc3":"0","transferred":"0","speed_down":"10371","speed_up":"0","time_total":"0:00:38","duration":"0:00:18","eta":"0:00:20","speed":"10238"},
21
- {"perc":"51","done":"199k","total":"390k","perc2":"51","recv":"199k","perc3":"0","transferred":"0","speed_down":"10311","speed_up":"0","time_total":"0:00:38","duration":"0:00:19","eta":"0:00:19","speed":"10479"},
22
- {"perc":"51","done":"199k","total":"390k","perc2":"51","recv":"199k","perc3":"0","transferred":"0","speed_down":"10240","speed_up":"0","time_total":"0:00:39","duration":"0:00:19","eta":"0:00:20","speed":"9752"},
23
- {"perc":"54","done":"211k","total":"390k","perc2":"54","recv":"211k","perc3":"0","transferred":"0","speed_down":"10356","speed_up":"0","time_total":"0:00:38","duration":"0:00:20","eta":"0:00:18","speed":"10456"},
24
- {"perc":"57","done":"223k","total":"390k","perc2":"57","recv":"223k","perc3":"0","transferred":"0","speed_down":"10304","speed_up":"0","time_total":"0:00:38","duration":"0:00:22","eta":"0:00:16","speed":"10030"},
25
- {"perc":"61","done":"239k","total":"390k","perc2":"61","recv":"239k","perc3":"0","transferred":"0","speed_down":"10503","speed_up":"0","time_total":"0:00:38","duration":"0:00:23","eta":"0:00:15","speed":"11020"},
26
- {"perc":"65","done":"255k","total":"390k","perc2":"65","recv":"255k","perc3":"0","transferred":"0","speed_down":"10487","speed_up":"0","time_total":"0:00:38","duration":"0:00:24","eta":"0:00:14","speed":"11171"},
27
- {"perc":"65","done":"255k","total":"390k","perc2":"65","recv":"255k","perc3":"0","transferred":"0","speed_down":"10241","speed_up":"0","time_total":"0:00:39","duration":"0:00:25","eta":"0:00:14","speed":"10242"},
28
- {"perc":"69","done":"271k","total":"390k","perc2":"69","recv":"271k","perc3":"0","transferred":"0","speed_down":"10473","speed_up":"0","time_total":"0:00:38","duration":"0:00:26","eta":"0:00:12","speed":"10912"},
29
- {"perc":"69","done":"271k","total":"390k","perc2":"69","recv":"271k","perc3":"0","transferred":"0","speed_down":"10240","speed_up":"0","time_total":"0:00:39","duration":"0:00:27","eta":"0:00:12","speed":"9952"},
30
- {"perc":"73","done":"287k","total":"390k","perc2":"73","recv":"287k","perc3":"0","transferred":"0","speed_down":"10458","speed_up":"0","time_total":"0:00:38","duration":"0:00:28","eta":"0:00:10","speed":"10234"},
31
- {"perc":"77","done":"303k","total":"390k","perc2":"77","recv":"303k","perc3":"0","transferred":"0","speed_down":"10448","speed_up":"0","time_total":"0:00:38","duration":"0:00:29","eta":"0:00:09","speed":"10245"},
32
- {"perc":"77","done":"303k","total":"390k","perc2":"77","recv":"303k","perc3":"0","transferred":"0","speed_down":"10241","speed_up":"0","time_total":"0:00:39","duration":"0:00:30","eta":"0:00:09","speed":"10241"},
33
- {"perc":"81","done":"319k","total":"390k","perc2":"81","recv":"319k","perc3":"0","transferred":"0","speed_down":"10436","speed_up":"0","time_total":"0:00:38","duration":"0:00:31","eta":"0:00:07","speed":"10231"},
34
- {"perc":"85","done":"335k","total":"390k","perc2":"85","recv":"335k","perc3":"0","transferred":"0","speed_down":"10427","speed_up":"0","time_total":"0:00:38","duration":"0:00:32","eta":"0:00:06","speed":"11303"},
35
- {"perc":"85","done":"335k","total":"390k","perc2":"85","recv":"335k","perc3":"0","transferred":"0","speed_down":"10240","speed_up":"0","time_total":"0:00:39","duration":"0:00:33","eta":"0:00:06","speed":"9110"},
36
- {"perc":"90","done":"351k","total":"390k","perc2":"90","recv":"351k","perc3":"0","transferred":"0","speed_down":"10418","speed_up":"0","time_total":"0:00:38","duration":"0:00:34","eta":"0:00:04","speed":"10231"},
37
- {"perc":"90","done":"351k","total":"390k","perc2":"90","recv":"351k","perc3":"0","transferred":"0","speed_down":"10241","speed_up":"0","time_total":"0:00:39","duration":"0:00:35","eta":"0:00:04","speed":"10240"},
38
- {"perc":"94","done":"367k","total":"390k","perc2":"94","recv":"367k","perc3":"0","transferred":"0","speed_down":"10411","speed_up":"0","time_total":"0:00:38","duration":"0:00:36","eta":"0:00:02","speed":"10248"},
39
- {"perc":"98","done":"383k","total":"390k","perc2":"98","recv":"383k","perc3":"0","transferred":"0","speed_down":"10403","speed_up":"0","time_total":"0:00:38","duration":"0:00:37","eta":"0:00:01","speed":"10236"},
40
- {"perc":"98","done":"383k","total":"390k","perc2":"98","recv":"383k","perc3":"0","transferred":"0","speed_down":"10240","speed_up":"0","time_total":"0:00:39","duration":"0:00:38","eta":"0:00:01","speed":"10238"},
41
- {"perc":"100","done":"390k","total":"390k","perc2":"100","recv":"390k","perc3":"0","transferred":"0","speed_down":"10422","speed_up":"0","time_total":"0:00:38","duration":"0:00:38","eta":"~","speed":"10457"}
42
- ]
@@ -1,17 +0,0 @@
1
- const assert = require('assert');
2
- const fs = require('fs');
3
- const fs_path_resolve = require('./fs_path_resolve');
4
- const fs_read_json = require('./fs_read_json');
5
- const stream = require('stream');
6
- const stream_curl_progress = require('./stream_curl_progress');
7
-
8
- describe('stream_curl_progress', function () {
9
- it('should handle basic input', async function () {
10
- const expected = await fs_read_json(fs_path_resolve(__dirname, 'stream_curl_progress.d/basic.json'));
11
- const actual = await stream.compose(
12
- fs.createReadStream(fs_path_resolve(__dirname, 'stream_curl_progress.d/basic')),
13
- stream_curl_progress(),
14
- ).toArray();
15
- assert.deepStrictEqual(actual, expected);
16
- });
17
- });
@@ -1,24 +0,0 @@
1
- const assert = require('assert');
2
- const fs = require('fs');
3
- const split = require('split');
4
- const stream = require('stream');
5
- const stream_data_ln = require('./stream_data_ln');
6
-
7
- describe('stream_data_ln', function () {
8
- it('should handle basic input', async function () {
9
- let actual = '';
10
- const s = fs.createReadStream(__filename);
11
- const off = stream_data_ln(s, v => actual += v + '\n');
12
- await stream.promises.finished(s);
13
- off();
14
- assert.deepStrictEqual(actual, fs.readFileSync(__filename, {encoding: 'utf8'}));
15
- });
16
- it('split', async function () {
17
- let actual = '';
18
- const s = fs.createReadStream(__filename);
19
- const ss = s.pipe(split('\n', null, {trailing: false}));
20
- ss.on('data', v => actual += v + '\n');
21
- await stream.promises.finished(ss);
22
- assert.deepStrictEqual(actual, fs.readFileSync(__filename, {encoding: 'utf8'}));
23
- });
24
- });
@@ -1,26 +0,0 @@
1
- const Promise = require('bluebird');
2
- const assert = require('assert');
3
- const stream = require('stream');
4
- const stream_each = require('./stream_each');
5
- const stream_map_parallel = require('./stream_map_parallel');
6
-
7
- describe('stream_map_parallel', function () {
8
- it('basic', async function () {
9
- const actual = [];
10
- const expected = Array(100).fill().map((v,i) => i);
11
- await stream.promises.pipeline(
12
- stream.Readable.from(expected),
13
- stream_map_parallel({
14
- concurrency: 5,
15
- handler: async function (num) {
16
- await Promise.delay(0);
17
- return num;
18
- },
19
- }),
20
- stream_each(function (item) {
21
- actual.push(item);
22
- }),
23
- );
24
- assert.deepStrictEqual(actual, expected);
25
- });
26
- });
@@ -1,67 +0,0 @@
1
- const assert = require('assert');
2
- const ignore = require('./ignore');
3
- const stream = require('stream');
4
- const stream_multiplex = require('./stream_multiplex');
5
-
6
- describe('stream_multiplex', function () {
7
- it('basic', async function () {
8
- const input = [1, 2, 3, 'str1'];
9
- const rs = stream.Readable.from(input);
10
- const ws1 = stream_debug();
11
- const ws2 = stream_debug();
12
- await stream.promises.pipeline(rs, stream_multiplex(ws1, ws2));
13
- assert.deepStrictEqual(ws1.items, input);
14
- assert.deepStrictEqual(ws2.items, input);
15
- assert.deepStrictEqual(ws1.events.map(v => v.name), ['finish', 'close']);
16
- assert.deepStrictEqual(ws2.events.map(v => v.name), ['finish', 'close']);
17
- });
18
- it('should throw after first error', async function () {
19
- const input = [1, 2, 3, 'str1'];
20
- const fail_at = 2;
21
- const rs = stream.Readable.from(input);
22
- const ws1 = stream_debug();
23
- const ws2 = stream_debug();
24
- const p = stream.promises.pipeline(rs, stream_multiplex(ws1, ws2, stream_fail_at(fail_at)));
25
- await assert.rejects(p, new Error(`Failed at ${fail_at}`));
26
- assert.deepStrictEqual(ws1.items, input.slice(0, fail_at));
27
- assert.deepStrictEqual(ws2.items, input.slice(0, fail_at));
28
- assert.deepStrictEqual(ws1.events.map(v => v.name), ['error', 'close']);
29
- assert.deepStrictEqual(ws2.events.map(v => v.name), ['error', 'close']);
30
- });
31
- });
32
-
33
- function stream_debug()
34
- {
35
- const out = new stream.Writable({
36
- objectMode: true,
37
- write: function (item, enc, next) {
38
- out.items.push(item);
39
- next();
40
- },
41
- });
42
- out.items = [];
43
- out.events = [];
44
- out.once('close', (...args) => out.events.push({name: 'close', args})); // result of `destroy`
45
- out.once('drain', (...args) => out.events.push({name: 'drain', args}));
46
- out.once('error', (...args) => out.events.push({name: 'error', args}));
47
- out.once('finish', (...args) => out.events.push({name: 'finish', args})); // result of `end`
48
- out.once('pipe', (...args) => out.events.push({name: 'pipe', args}));
49
- out.once('unpipe', (...args) => out.events.push({name: 'unpipe', args}));
50
- return out;
51
- }
52
-
53
- function stream_fail_at(at)
54
- {
55
- let counter = 0;
56
- return new stream.Writable({
57
- objectMode: true,
58
- write: function (item, enc, next) {
59
- if (++counter >= at) {
60
- next(new Error(`Failed at ${at}`));
61
- }
62
- else {
63
- next();
64
- }
65
- },
66
- });
67
- }
@@ -1,29 +0,0 @@
1
- const assert = require('assert');
2
- const stream = require('stream');
3
- const stream_strpbrk = require('./stream_strpbrk');
4
-
5
- const items = [
6
- ['empty', '|', [], []],
7
- ['| -> empty', '|', ['|'], []],
8
- ['|| -> empty', '|', ['||'], []],
9
- ['||| -> empty', '|', ['|', '|', '|'], []],
10
- ['a → a', '|', ['a'], ['a']],
11
- ['|a → a', '|', ['|a'], ['a']],
12
- ['a| → a', '|', ['a|'], ['a']],
13
- ['a|b → a,b', '|', ['a|b'], ['a', 'b']],
14
- ['a|||b → a,b', '|', ['a|||b'], ['a', 'b']],
15
- ['abc → abc', '|', ['a', 'b', 'c'], ['abc']],
16
- ['a|b;c', '|;', ['a|b;c'], ['a', 'b', 'c']],
17
- ['a|b;c', '|;', ['a|b', ';c'], ['a', 'b', 'c']],
18
- ['Buffer(a) → a', '|', ['a'].map(Buffer.from), ['a']],
19
- ['Buffer(a|b) → a,b', '|', ['a|b'].map(Buffer.from), ['a', 'b']],
20
- ];
21
-
22
- describe('stream_strpbrk', function () {
23
- items.forEach(function ([title, delimiters, input, expected]) {
24
- it(title, async function () {
25
- const actual = await stream.Readable.from(input).pipe(stream_strpbrk(delimiters)).toArray();
26
- assert.deepStrictEqual(actual, expected);
27
- });
28
- });
29
- });
@@ -1,18 +0,0 @@
1
- const assert = require('assert');
2
- const urlclean = require('./urlclean');
3
-
4
- const items = [
5
- ['', ''],
6
- ['http://127.0.0.1:3000/proxy', 'http://127.0.0.1:3000/proxy'],
7
- ['http://127.0.0.1:3000/proxy?url=http://127.0.0.1:3000/static/&redirects=2', 'http://127.0.0.1:3000/proxy?url=http://127.0.0.1:3000/static/&redirects=2'],
8
- ['http://127.0.0.1:3000/proxy?url=http%3A%2F%2F127.0.0.1%3A3000%2Fstatic%2F&redirects=1', 'http://127.0.0.1:3000/proxy?url=http://127.0.0.1:3000/static/&redirects=1'],
9
- ];
10
-
11
- describe('urlclean', function () {
12
- items.forEach(function ([input, expected]) {
13
- it(input, function () {
14
- const actual = urlclean(input);
15
- assert.strictEqual(actual, expected);
16
- });
17
- });
18
- });