@jsenv/humanize 1.0.0

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 (79) hide show
  1. package/README.md +35 -0
  2. package/dist/browser/jsenv_humanize_browser.js +1157 -0
  3. package/dist/node/jsenv_humanize_node.js +2003 -0
  4. package/package.json +49 -0
  5. package/src/.jsenv/jsenv_tests_output.txt +35 -0
  6. package/src/_tests/byte/file_size.test.js +18 -0
  7. package/src/_tests/byte/memory_usage.test.js +11 -0
  8. package/src/_tests/content_frame/content_frame.test.js +156 -0
  9. package/src/_tests/content_frame/snapshots/10_line_and_column_are_zero.txt +2 -0
  10. package/src/_tests/content_frame/snapshots/11_line_is_last.txt +3 -0
  11. package/src/_tests/content_frame/snapshots/1_basic.txt +4 -0
  12. package/src/_tests/content_frame/snapshots/2_basic_2.txt +6 -0
  13. package/src/_tests/content_frame/snapshots/3_empty_last_line.txt +7 -0
  14. package/src/_tests/content_frame/snapshots/4_no_column.txt +3 -0
  15. package/src/_tests/content_frame/snapshots/5_line_1_and_2_digits.txt +3 -0
  16. package/src/_tests/content_frame/snapshots/6_line_too_long_column_undefined.txt +3 -0
  17. package/src/_tests/content_frame/snapshots/7_line_too_long_column_near_start.txt +4 -0
  18. package/src/_tests/content_frame/snapshots/8_line_too_long_column_near_middle.txt +4 -0
  19. package/src/_tests/content_frame/snapshots/9_line_too_long_column_near_end.txt +4 -0
  20. package/src/_tests/js_value/_inspect.test.html +22 -0
  21. package/src/_tests/js_value/array.test.js +72 -0
  22. package/src/_tests/js_value/biginit.test.js +36 -0
  23. package/src/_tests/js_value/boolean.test.js +45 -0
  24. package/src/_tests/js_value/date.test.js +15 -0
  25. package/src/_tests/js_value/error.test.js +33 -0
  26. package/src/_tests/js_value/function.test.js +51 -0
  27. package/src/_tests/js_value/instance.test.js +12 -0
  28. package/src/_tests/js_value/null.test.js +6 -0
  29. package/src/_tests/js_value/number.test.js +182 -0
  30. package/src/_tests/js_value/object.test.js +173 -0
  31. package/src/_tests/js_value/regexp.test.js +14 -0
  32. package/src/_tests/js_value/string.test.js +106 -0
  33. package/src/_tests/js_value/symbol.test.js +20 -0
  34. package/src/_tests/js_value/undefined.test.js +6 -0
  35. package/src/_tests/log/log_long.test.mjs +39 -0
  36. package/src/_tests/log/log_modified.test.mjs +7 -0
  37. package/src/_tests/log/logger.test.mjs +91 -0
  38. package/src/_tests/log/spinner.duration.test_manual.mjs +25 -0
  39. package/src/_tests/log/spinner.test.mjs +33 -0
  40. package/src/_tests/log/spinner.test_manual.mjs +15 -0
  41. package/src/_tests/percentage/percentage_distribution.test.mjs +89 -0
  42. package/src/_tests/time/decimals.test.js +119 -0
  43. package/src/_tests/time/duration.test.js +20 -0
  44. package/src/_tests/time/ellapsed.test.js +10 -0
  45. package/src/byte/byte.js +44 -0
  46. package/src/content_frame/content_frame.js +157 -0
  47. package/src/js_value/array.js +58 -0
  48. package/src/js_value/bigint.js +3 -0
  49. package/src/js_value/bigint_object.js +5 -0
  50. package/src/js_value/boolean.js +1 -0
  51. package/src/js_value/boolean_object.js +12 -0
  52. package/src/js_value/constructor.js +10 -0
  53. package/src/js_value/date.js +8 -0
  54. package/src/js_value/error.js +34 -0
  55. package/src/js_value/function.js +20 -0
  56. package/src/js_value/humanize.js +140 -0
  57. package/src/js_value/null.js +1 -0
  58. package/src/js_value/number.js +101 -0
  59. package/src/js_value/number_object.js +9 -0
  60. package/src/js_value/object.js +78 -0
  61. package/src/js_value/regexp.js +1 -0
  62. package/src/js_value/string.js +141 -0
  63. package/src/js_value/string_object.js +10 -0
  64. package/src/js_value/symbol.js +24 -0
  65. package/src/js_value/undefined.js +1 -0
  66. package/src/log/LOG_LEVELS.js +9 -0
  67. package/src/log/ansi.js +37 -0
  68. package/src/log/detailed_message.js +17 -0
  69. package/src/log/dynamic_log.js +185 -0
  70. package/src/log/logger.js +85 -0
  71. package/src/log/spinner.js +72 -0
  72. package/src/log/task_log.js +46 -0
  73. package/src/log/unicode.js +52 -0
  74. package/src/main_browser.js +10 -0
  75. package/src/main_node.js +18 -0
  76. package/src/percentage/distribute_percentages.js +53 -0
  77. package/src/time/time.js +151 -0
  78. package/src/utils/decimals.js +95 -0
  79. package/src/utils/indentation.js +38 -0
@@ -0,0 +1,95 @@
1
+ export const getPrecision = (number) => {
2
+ if (Math.floor(number) === number) return 0;
3
+ const [, decimals] = number.toString().split(".");
4
+ return decimals.length || 0;
5
+ };
6
+
7
+ export const setRoundedPrecision = (
8
+ number,
9
+ { decimals = 1, decimalsWhenSmall = decimals } = {},
10
+ ) => {
11
+ return setDecimalsPrecision(number, {
12
+ decimals,
13
+ decimalsWhenSmall,
14
+ transform: Math.round,
15
+ });
16
+ };
17
+
18
+ export const setFlooredPrecision = (
19
+ number,
20
+ { decimals = 1, decimalsWhenSmall = decimals } = {},
21
+ ) => {
22
+ return setDecimalsPrecision(number, {
23
+ decimals,
24
+ decimalsWhenSmall,
25
+ transform: Math.floor,
26
+ });
27
+ };
28
+
29
+ export const setCeiledPrecision = (
30
+ number,
31
+ { decimals = 1, decimalsWhenSmall = decimals } = {},
32
+ ) => {
33
+ return setDecimalsPrecision(number, {
34
+ decimals,
35
+ decimalsWhenSmall,
36
+ transform: Math.ceil,
37
+ });
38
+ };
39
+
40
+ export const setPrecision = (
41
+ number,
42
+ { decimals = 1, decimalsWhenSmall = decimals } = {},
43
+ ) => {
44
+ return setDecimalsPrecision(number, {
45
+ decimals,
46
+ decimalsWhenSmall,
47
+ transform: parseInt,
48
+ });
49
+ };
50
+
51
+ const setDecimalsPrecision = (
52
+ number,
53
+ {
54
+ transform,
55
+ decimals, // max decimals for number in [-Infinity, -1[]1, Infinity]
56
+ decimalsWhenSmall, // max decimals for number in [-1,1]
57
+ } = {},
58
+ ) => {
59
+ if (number === 0) {
60
+ return 0;
61
+ }
62
+ let numberCandidate = Math.abs(number);
63
+ if (numberCandidate < 1) {
64
+ const integerGoal = Math.pow(10, decimalsWhenSmall - 1);
65
+ let i = 1;
66
+ while (numberCandidate < integerGoal) {
67
+ numberCandidate *= 10;
68
+ i *= 10;
69
+ }
70
+ const asInteger = transform(numberCandidate);
71
+ const asFloat = asInteger / i;
72
+ return number < 0 ? -asFloat : asFloat;
73
+ }
74
+ const coef = Math.pow(10, decimals);
75
+ const numberMultiplied = (number + Number.EPSILON) * coef;
76
+ const asInteger = transform(numberMultiplied);
77
+ const asFloat = asInteger / coef;
78
+ return number < 0 ? -asFloat : asFloat;
79
+ };
80
+
81
+ // https://www.codingem.com/javascript-how-to-limit-decimal-places/
82
+ // export const roundNumber = (number, maxDecimals) => {
83
+ // const decimalsExp = Math.pow(10, maxDecimals)
84
+ // const numberRoundInt = Math.round(decimalsExp * (number + Number.EPSILON))
85
+ // const numberRoundFloat = numberRoundInt / decimalsExp
86
+ // return numberRoundFloat
87
+ // }
88
+
89
+ // export const setPrecision = (number, precision) => {
90
+ // if (Math.floor(number) === number) return number
91
+ // const [int, decimals] = number.toString().split(".")
92
+ // if (precision <= 0) return int
93
+ // const numberTruncated = `${int}.${decimals.slice(0, precision)}`
94
+ // return numberTruncated
95
+ // }
@@ -0,0 +1,38 @@
1
+ export const preNewLineAndIndentation = (
2
+ value,
3
+ { depth, indentUsingTab, indentSize },
4
+ ) => {
5
+ return `${newLineAndIndent({
6
+ count: depth + 1,
7
+ useTabs: indentUsingTab,
8
+ size: indentSize,
9
+ })}${value}`;
10
+ };
11
+
12
+ const postNewLineAndIndentation = ({ depth, indentUsingTab, indentSize }) => {
13
+ return newLineAndIndent({
14
+ count: depth,
15
+ useTabs: indentUsingTab,
16
+ size: indentSize,
17
+ });
18
+ };
19
+
20
+ const newLineAndIndent = ({ count, useTabs, size }) => {
21
+ if (useTabs) {
22
+ // eslint-disable-next-line prefer-template
23
+ return "\n" + "\t".repeat(count);
24
+ }
25
+ // eslint-disable-next-line prefer-template
26
+ return "\n" + " ".repeat(count * size);
27
+ };
28
+
29
+ export const wrapNewLineAndIndentation = (
30
+ value,
31
+ { depth, indentUsingTab, indentSize },
32
+ ) => {
33
+ return `${preNewLineAndIndentation(value, {
34
+ depth,
35
+ indentUsingTab,
36
+ indentSize,
37
+ })}${postNewLineAndIndentation({ depth, indentUsingTab, indentSize })}`;
38
+ };