@visulima/pail 4.0.0-alpha.1 → 4.0.0-alpha.10

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 (81) hide show
  1. package/CHANGELOG.md +164 -0
  2. package/LICENSE.md +434 -6
  3. package/README.md +323 -0
  4. package/dist/error.d.ts +104 -0
  5. package/dist/error.js +76 -0
  6. package/dist/index.browser.d.ts +3 -1
  7. package/dist/index.browser.js +1490 -3
  8. package/dist/index.server.d.ts +3 -1
  9. package/dist/index.server.js +2668 -14
  10. package/dist/interactive/index.js +2 -2
  11. package/dist/middleware/elysia.d.ts +71 -0
  12. package/dist/middleware/elysia.js +70 -0
  13. package/dist/middleware/express.d.ts +86 -0
  14. package/dist/middleware/express.js +29 -0
  15. package/dist/middleware/fastify.d.ts +81 -0
  16. package/dist/middleware/fastify.js +46 -0
  17. package/dist/middleware/hono.d.ts +85 -0
  18. package/dist/middleware/hono.js +33 -0
  19. package/dist/middleware/next/handler.d.ts +36 -0
  20. package/dist/middleware/next/handler.js +53 -0
  21. package/dist/middleware/next/middleware.d.ts +59 -0
  22. package/dist/middleware/next/storage.d.ts +14 -0
  23. package/dist/middleware/shared/create-middleware-logger.d.ts +82 -0
  24. package/dist/middleware/shared/headers.d.ts +14 -0
  25. package/dist/middleware/shared/routes.d.ts +30 -0
  26. package/dist/middleware/shared/storage.d.ts +29 -0
  27. package/dist/middleware/sveltekit.d.ts +123 -0
  28. package/dist/middleware/sveltekit.js +43 -0
  29. package/dist/object-tree.d.ts +2 -2
  30. package/dist/object-tree.js +7 -7
  31. package/dist/packem_shared/AbstractJsonReporter-CjtVgHbU.js +288 -0
  32. package/dist/packem_shared/{AbstractJsonReporter-BaZ33PlE.js → AbstractJsonReporter-DlugSJpY.js} +111 -27
  33. package/dist/packem_shared/{InteractiveManager-CZ85hGNW.js → InteractiveManager-CowYA3Hx.js} +17 -11
  34. package/dist/packem_shared/{interactive-stream-hook-DG4BtN12.js → InteractiveStreamHook-BypRlYTX.js} +3 -11
  35. package/dist/packem_shared/{JsonReporter-VzgyLEYz.js → JsonReporter-BgPvIyC2.js} +2 -2
  36. package/dist/packem_shared/{JsonReporter-BRw4skd5.js → JsonReporter-Dbw82ewj.js} +2 -2
  37. package/dist/packem_shared/{PrettyReporter-DySIXBjQ.js → PrettyReporter-C2dCzIaf.js} +54 -8
  38. package/dist/packem_shared/{format-label-De49vNPd.js → PrettyReporter-gMqa7j_m.js} +370 -75
  39. package/dist/packem_shared/Spinner-Cokext9b.js +2183 -0
  40. package/dist/packem_shared/abstract-pretty-reporter-szQO-IgK.js +2635 -0
  41. package/dist/packem_shared/constants-B1RjD_ps.js +99 -0
  42. package/dist/packem_shared/createPailError-B_sgL0nF.js +76 -0
  43. package/dist/packem_shared/getBarChar-D7JfmdTr.js +459 -0
  44. package/dist/packem_shared/headers-BxHWM6KI.js +127 -0
  45. package/dist/packem_shared/{index-DqKWykfa.js → index-BEfVUy9P.js} +174 -64
  46. package/dist/packem_shared/{index-BomQ3E6J.js → index-Bx3-C0j9.js} +29 -21
  47. package/dist/packem_shared/pailMiddleware-Ci88geIF.js +24 -0
  48. package/dist/packem_shared/storage-D0vqz8OX.js +36 -0
  49. package/dist/packem_shared/{InteractiveStreamHook-DiSubbJ1.js → useLogger-D0rU3lcX.js} +13 -1
  50. package/dist/packem_shared/{write-console-log-based-on-level-DBmRYXpj.js → write-console-log-based-on-level-ree2lDPw.js} +5 -4
  51. package/dist/packem_shared/{write-stream-BG8fhcs3.js → write-stream-BuFtjATz.js} +1 -1
  52. package/dist/pail.browser.d.ts +1 -1
  53. package/dist/processor/environment-processor.d.ts +124 -0
  54. package/dist/processor/environment-processor.js +82 -0
  55. package/dist/processor/message-formatter-processor.d.ts +2 -3
  56. package/dist/processor/message-formatter-processor.js +654 -5
  57. package/dist/processor/opentelemetry-processor.js +4 -4
  58. package/dist/processor/redact-processor.d.ts +1 -1
  59. package/dist/processor/redact-processor.js +2 -1
  60. package/dist/processor/sampling-processor.d.ts +111 -0
  61. package/dist/processor/sampling-processor.js +59 -0
  62. package/dist/progress-bar.d.ts +10 -1
  63. package/dist/progress-bar.js +75 -20
  64. package/dist/reporter/file/json-file-reporter.js +1 -1
  65. package/dist/reporter/http/abstract-http-reporter.js +23 -26
  66. package/dist/reporter/http/http-reporter.edge-light.js +133 -52
  67. package/dist/reporter/json/abstract-json-reporter.d.ts +1 -1
  68. package/dist/reporter/json/index.browser.js +2 -2
  69. package/dist/reporter/json/index.js +2 -2
  70. package/dist/reporter/pretty/index.browser.js +1 -1
  71. package/dist/reporter/pretty/index.js +1 -1
  72. package/dist/reporter/simple/simple-reporter.server.js +8 -12
  73. package/dist/spinner.js +37 -4
  74. package/dist/types.d.ts +3 -3
  75. package/dist/wide-event.d.ts +300 -0
  76. package/dist/wide-event.js +283 -0
  77. package/package.json +71 -7
  78. package/dist/packem_shared/PrettyReporter-DgZB2eBG.js +0 -222
  79. package/dist/packem_shared/abstract-pretty-reporter-Di_sdm2r.js +0 -50
  80. package/dist/packem_shared/get-longest-label-C9PWeyKq.js +0 -9
  81. package/dist/packem_shared/pail.browser-u2CSR_af.js +0 -1427
@@ -0,0 +1,127 @@
1
+ import { WideEvent } from '../wide-event.js';
2
+
3
+ const patternToRegex = (pattern) => {
4
+ let regex = "^";
5
+ let index = 0;
6
+ while (index < pattern.length) {
7
+ const char = pattern[index];
8
+ if (char === "*" && pattern[index + 1] === "*") {
9
+ index += 2;
10
+ if (pattern[index] === "/") {
11
+ index += 1;
12
+ }
13
+ if (index >= pattern.length && regex.endsWith("/")) {
14
+ regex = `${regex.slice(0, -1)}(/.*)?`;
15
+ } else if (index >= pattern.length) {
16
+ regex += ".*";
17
+ } else {
18
+ regex += "(.*/)?";
19
+ }
20
+ } else {
21
+ switch (char) {
22
+ case "*": {
23
+ regex += "[^/]*";
24
+ index += 1;
25
+ break;
26
+ }
27
+ case ".": {
28
+ regex += String.raw`\.`;
29
+ index += 1;
30
+ break;
31
+ }
32
+ case "?": {
33
+ regex += "[^/]";
34
+ index += 1;
35
+ break;
36
+ }
37
+ default: {
38
+ regex += char;
39
+ index += 1;
40
+ }
41
+ }
42
+ }
43
+ }
44
+ regex += "$";
45
+ return new RegExp(regex);
46
+ };
47
+ const matchesPattern = (path, pattern) => patternToRegex(pattern).test(path);
48
+ const shouldLog = (path, include, exclude) => {
49
+ if (exclude?.some((pattern) => matchesPattern(path, pattern))) {
50
+ return false;
51
+ }
52
+ if (!include?.length) {
53
+ return true;
54
+ }
55
+ return include.some((pattern) => matchesPattern(path, pattern));
56
+ };
57
+ const getServiceForPath = (path, routes) => {
58
+ if (!routes) {
59
+ return void 0;
60
+ }
61
+ const entries = Object.entries(routes);
62
+ for (let i = 0; i < entries.length; i += 1) {
63
+ const [pattern, config] = entries[i];
64
+ if (matchesPattern(path, pattern)) {
65
+ return config.service;
66
+ }
67
+ }
68
+ return void 0;
69
+ };
70
+
71
+ const createMiddlewareLogger = (options, request) => {
72
+ const { exclude, include, pail, routes, service } = options;
73
+ const { headers, method, path, requestId } = request;
74
+ if (!shouldLog(path, include, exclude)) {
75
+ const noopLogger = new WideEvent({ autoEmit: false, name: `${method} ${path}`, pail });
76
+ return {
77
+ finish: () => {
78
+ },
79
+ logger: noopLogger,
80
+ skipped: true
81
+ };
82
+ }
83
+ const routeService = getServiceForPath(path, routes) ?? service;
84
+ const logger = new WideEvent({
85
+ name: `${method} ${path}`,
86
+ pail,
87
+ service: routeService
88
+ });
89
+ logger.set({
90
+ method,
91
+ path,
92
+ requestId,
93
+ ...headers ? { headers } : {}
94
+ });
95
+ const finish = (finishOptions) => {
96
+ logger.finish(finishOptions);
97
+ };
98
+ return {
99
+ finish,
100
+ logger,
101
+ skipped: false
102
+ };
103
+ };
104
+
105
+ const SENSITIVE_HEADERS = /* @__PURE__ */ new Set(["authorization", "cookie", "proxy-authorization", "set-cookie", "x-api-key", "x-auth-token"]);
106
+ const extractSafeHeaders = (headers) => {
107
+ const safe = {};
108
+ headers.forEach((value, key) => {
109
+ if (!SENSITIVE_HEADERS.has(key.toLowerCase())) {
110
+ safe[key.toLowerCase()] = value;
111
+ }
112
+ });
113
+ return safe;
114
+ };
115
+ const extractSafeNodeHeaders = (headers) => {
116
+ const safe = {};
117
+ const entries = Object.entries(headers);
118
+ for (let i = 0; i < entries.length; i += 1) {
119
+ const [key, value] = entries[i];
120
+ if (!SENSITIVE_HEADERS.has(key.toLowerCase()) && value !== void 0) {
121
+ safe[key.toLowerCase()] = Array.isArray(value) ? value.join(", ") : value;
122
+ }
123
+ }
124
+ return safe;
125
+ };
126
+
127
+ export { extractSafeHeaders as a, createMiddlewareLogger as c, extractSafeNodeHeaders as e };
@@ -24,6 +24,117 @@ const {
24
24
  const fs = __cjs_getBuiltinModule("node:fs");
25
25
  const tty = __cjs_getBuiltinModule("node:tty");
26
26
 
27
+ const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
28
+ const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
29
+ const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
30
+ const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
31
+ const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
32
+ const isInRange = (ranges, codePoint) => {
33
+ let low = 0;
34
+ let high = Math.floor(ranges.length / 2) - 1;
35
+ while (low <= high) {
36
+ const mid = Math.floor((low + high) / 2);
37
+ const i = mid * 2;
38
+ if (codePoint < ranges[i]) {
39
+ high = mid - 1;
40
+ } else if (codePoint > ranges[i + 1]) {
41
+ low = mid + 1;
42
+ } else {
43
+ return true;
44
+ }
45
+ }
46
+ return false;
47
+ };
48
+ const minimumAmbiguousCodePoint = ambiguousRanges[0];
49
+ const maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
50
+ const minimumFullWidthCodePoint = fullwidthRanges[0];
51
+ const maximumFullWidthCodePoint = fullwidthRanges.at(-1);
52
+ const minimumHalfWidthCodePoint = halfwidthRanges[0];
53
+ const maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
54
+ const minimumNarrowCodePoint = narrowRanges[0];
55
+ const maximumNarrowCodePoint = narrowRanges.at(-1);
56
+ const minimumWideCodePoint = wideRanges[0];
57
+ const maximumWideCodePoint = wideRanges.at(-1);
58
+ const commonCjkCodePoint = 19968;
59
+ const [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
60
+ function findWideFastPathRange(ranges) {
61
+ let fastPathStart = ranges[0];
62
+ let fastPathEnd = ranges[1];
63
+ for (let index = 0; index < ranges.length; index += 2) {
64
+ const start = ranges[index];
65
+ const end = ranges[index + 1];
66
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
67
+ return [start, end];
68
+ }
69
+ if (end - start > fastPathEnd - fastPathStart) {
70
+ fastPathStart = start;
71
+ fastPathEnd = end;
72
+ }
73
+ }
74
+ return [fastPathStart, fastPathEnd];
75
+ }
76
+ const isAmbiguous = (codePoint) => {
77
+ if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
78
+ return false;
79
+ }
80
+ return isInRange(ambiguousRanges, codePoint);
81
+ };
82
+ const isFullWidth = (codePoint) => {
83
+ if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
84
+ return false;
85
+ }
86
+ return isInRange(fullwidthRanges, codePoint);
87
+ };
88
+ const isHalfWidth = (codePoint) => {
89
+ if (codePoint < minimumHalfWidthCodePoint || codePoint > maximumHalfWidthCodePoint) {
90
+ return false;
91
+ }
92
+ return isInRange(halfwidthRanges, codePoint);
93
+ };
94
+ const isNarrow = (codePoint) => {
95
+ if (codePoint < minimumNarrowCodePoint || codePoint > maximumNarrowCodePoint) {
96
+ return false;
97
+ }
98
+ return isInRange(narrowRanges, codePoint);
99
+ };
100
+ const isWide = (codePoint) => {
101
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
102
+ return true;
103
+ }
104
+ if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
105
+ return false;
106
+ }
107
+ return isInRange(wideRanges, codePoint);
108
+ };
109
+ function getCategory(codePoint) {
110
+ if (isAmbiguous(codePoint)) {
111
+ return "ambiguous";
112
+ }
113
+ if (isFullWidth(codePoint)) {
114
+ return "fullwidth";
115
+ }
116
+ if (isHalfWidth(codePoint)) {
117
+ return "halfwidth";
118
+ }
119
+ if (isNarrow(codePoint)) {
120
+ return "narrow";
121
+ }
122
+ if (isWide(codePoint)) {
123
+ return "wide";
124
+ }
125
+ return "neutral";
126
+ }
127
+
128
+ function validate(codePoint) {
129
+ if (!Number.isSafeInteger(codePoint)) {
130
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
131
+ }
132
+ }
133
+ function eastAsianWidthType(codePoint) {
134
+ validate(codePoint);
135
+ return getCategory(codePoint);
136
+ }
137
+
27
138
  const r = String.raw;
28
139
  const e = r`\p{Emoji}(?:\p{EMod}|[\u{E0020}-\u{E007E}]+\u{E007F}|\uFE0F?\u20E3?)`;
29
140
  const emojiRegex = () => new RegExp(r`\p{RI}{2}|(?![#*\d](?!\uFE0F?\u20E3))${e}(?:\u200D${e})*`, "gu");
@@ -79,36 +190,6 @@ const RE_ANSI = /[\u001B\u009B](?:[[()#;?]{0,10}(?:\d{1,4}(?:;\d{0,4})*)?[0-9A-O
79
190
  const RE_CONTROL = /[\u0000-\u0008\n-\u001F\u007F-\u009F]{1,1000}/y;
80
191
  const RE_EMOJI = emojiRegex();
81
192
 
82
- function isAmbiguous(x) {
83
- return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
84
- }
85
- function isFullWidth(x) {
86
- return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
87
- }
88
- function isWide(x) {
89
- return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x >= 94192 && x <= 94198 || x >= 94208 && x <= 101589 || x >= 101631 && x <= 101662 || x >= 101760 && x <= 101874 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128728 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129674 || x >= 129678 && x <= 129734 || x === 129736 || x >= 129741 && x <= 129756 || x >= 129759 && x <= 129770 || x >= 129775 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
90
- }
91
- function getCategory(x) {
92
- if (isAmbiguous(x)) return "ambiguous";
93
- if (isFullWidth(x)) return "fullwidth";
94
- if (x === 8361 || x >= 65377 && x <= 65470 || x >= 65474 && x <= 65479 || x >= 65482 && x <= 65487 || x >= 65490 && x <= 65495 || x >= 65498 && x <= 65500 || x >= 65512 && x <= 65518) {
95
- return "halfwidth";
96
- }
97
- if (x >= 32 && x <= 126 || x === 162 || x === 163 || x === 165 || x === 166 || x === 172 || x === 175 || x >= 10214 && x <= 10221 || x === 10629 || x === 10630) {
98
- return "narrow";
99
- }
100
- if (isWide(x)) return "wide";
101
- return "neutral";
102
- }
103
- function validate(codePoint) {
104
- if (!Number.isSafeInteger(codePoint)) {
105
- throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
106
- }
107
- }
108
- function eastAsianWidthType(codePoint) {
109
- validate(codePoint);
110
- return getCategory(codePoint);
111
- }
112
193
  const charWidthCache = /* @__PURE__ */ new Map();
113
194
  const RE_LATIN_CHARS = /(?:[\u0020-\u007E\u00A0-\u00FF](?!\uFE0F)){1,1000}/y;
114
195
  const getCharType = (codePoint) => {
@@ -441,9 +522,10 @@ const getStringTruncatedWidth = (input, options = {}) => {
441
522
 
442
523
  const getStringWidth = (input, options = {}) => getStringTruncatedWidth(input, { ...options, ellipsis: "", ellipsisWidth: 0, limit: Number.POSITIVE_INFINITY }).width;
443
524
 
525
+ const RE_ANSI_CODE = /\x1B\[(\d+)m/;
444
526
  class AnsiStateTracker {
445
- activeForeground = null;
446
- activeBackground = null;
527
+ activeForeground = void 0;
528
+ activeBackground = void 0;
447
529
  // Track other formatting (bold, italic, etc.)
448
530
  activeFormatting = [];
449
531
  /**
@@ -451,24 +533,24 @@ class AnsiStateTracker {
451
533
  * @param sequence The escape sequence to process
452
534
  */
453
535
  processEscape(sequence) {
454
- const match = /\x1B\[(\d+)m/.exec(sequence);
536
+ const match = RE_ANSI_CODE.exec(sequence);
455
537
  if (!match) {
456
538
  return;
457
539
  }
458
540
  const code = Number.parseInt(match[1], 10);
459
541
  switch (code) {
460
542
  case 0: {
461
- this.activeForeground = null;
462
- this.activeBackground = null;
543
+ this.activeForeground = void 0;
544
+ this.activeBackground = void 0;
463
545
  this.activeFormatting = [];
464
546
  break;
465
547
  }
466
548
  case 39: {
467
- this.activeForeground = null;
549
+ this.activeForeground = void 0;
468
550
  break;
469
551
  }
470
552
  case 49: {
471
- this.activeBackground = null;
553
+ this.activeBackground = void 0;
472
554
  break;
473
555
  }
474
556
  default: {
@@ -502,7 +584,7 @@ class AnsiStateTracker {
502
584
  }
503
585
  }
504
586
  /**
505
- * Gets all active escape sequences to apply
587
+ * Gets all active escape sequences to apply.
506
588
  * @returns String with all active escapes
507
589
  */
508
590
  getStartEscapesForAllActiveAttributes() {
@@ -532,7 +614,7 @@ class AnsiStateTracker {
532
614
  "\x1B[9m": "\x1B[29m"
533
615
  // Strikethrough
534
616
  };
535
- [...this.activeFormatting].reverse().forEach((formatCode) => {
617
+ [...this.activeFormatting].toReversed().forEach((formatCode) => {
536
618
  const resetCode = formatResetMap[formatCode];
537
619
  if (resetCode) {
538
620
  closingEscapes.push(resetCode);
@@ -561,7 +643,6 @@ const processAnsiString = (string, options = {}) => {
561
643
  const stateTracker = new AnsiStateTracker();
562
644
  let currentText = "";
563
645
  let isInsideEscape = false;
564
- let isInsideLinkEscape = false;
565
646
  let escapeBuffer = "";
566
647
  let currentUrl = "";
567
648
  let isInHyperlink = false;
@@ -589,7 +670,7 @@ const processAnsiString = (string, options = {}) => {
589
670
  isInsideEscape = true;
590
671
  escapeBuffer = character;
591
672
  const escapeInfo = checkEscapeSequence(chars, index);
592
- isInsideLinkEscape = escapeInfo.isInsideLinkEscape;
673
+ const { isInsideLinkEscape } = escapeInfo;
593
674
  if (isInsideLinkEscape) {
594
675
  let urlEnd = index + 1;
595
676
  currentUrl = "";
@@ -616,7 +697,6 @@ const processAnsiString = (string, options = {}) => {
616
697
  index = urlEnd;
617
698
  isInHyperlink = true;
618
699
  isInsideEscape = false;
619
- isInsideLinkEscape = false;
620
700
  escapeBuffer = "";
621
701
  continue;
622
702
  }
@@ -702,7 +782,7 @@ const processAnsiString = (string, options = {}) => {
702
782
  };
703
783
  const wrapAnsiCode = (code) => {
704
784
  const escapeChar = ESCAPES.values().next().value;
705
- return `${escapeChar}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;
785
+ return `${escapeChar}${ANSI_CSI}${String(code)}${ANSI_SGR_TERMINATOR}`;
706
786
  };
707
787
  const wrapAnsiHyperlink = (url) => {
708
788
  const escapeChar = ESCAPES.values().next().value;
@@ -753,6 +833,8 @@ const preserveAnsi = (rawLines) => {
753
833
  }
754
834
  return returnValue;
755
835
  };
836
+ const RE_SPLIT_WHITESPACE = /(?=\s)|(?<=\s)/;
837
+ const RE_WHITESPACE_ONLY = /^\s+$/;
756
838
  const resetAnsiAtLineBreak = (currentLine) => {
757
839
  if (!currentLine.includes("\x1B")) {
758
840
  return currentLine;
@@ -791,7 +873,8 @@ const wrapWithBreakAtWidth = (string, width, trim) => {
791
873
  let isInsideEscape = false;
792
874
  let isInsideLinkEscape = false;
793
875
  let escapeBuffer = "";
794
- for (let index = 0; index < string.length; index++) {
876
+ let index = 0;
877
+ while (index < string.length) {
795
878
  const char = string[index];
796
879
  if (ESCAPES.has(char)) {
797
880
  isInsideEscape = true;
@@ -799,6 +882,7 @@ const wrapWithBreakAtWidth = (string, width, trim) => {
799
882
  currentLine += char;
800
883
  const escapeInfo = checkEscapeSequence([...string], index);
801
884
  isInsideLinkEscape = escapeInfo.isInsideLinkEscape;
885
+ index += 1;
802
886
  continue;
803
887
  }
804
888
  if (isInsideEscape) {
@@ -812,12 +896,14 @@ const wrapWithBreakAtWidth = (string, width, trim) => {
812
896
  isInsideEscape = false;
813
897
  ansiTracker.processEscape(escapeBuffer);
814
898
  }
899
+ index += 1;
815
900
  continue;
816
901
  }
817
902
  const charWidth = getStringWidth(char);
818
903
  const isSpace = char === " ";
819
904
  if (charWidth === 0) {
820
905
  currentLine += char;
906
+ index += 1;
821
907
  continue;
822
908
  }
823
909
  if (currentWidth + charWidth > width) {
@@ -829,12 +915,6 @@ const wrapWithBreakAtWidth = (string, width, trim) => {
829
915
  if (isSpace && trim) {
830
916
  while (index < string.length && string[index] === " ") {
831
917
  index += 1;
832
- if (index >= string.length) {
833
- break;
834
- }
835
- }
836
- if (index < string.length) {
837
- index--;
838
918
  }
839
919
  continue;
840
920
  }
@@ -850,9 +930,10 @@ const wrapWithBreakAtWidth = (string, width, trim) => {
850
930
  while (index < string.length && string[index] === " ") {
851
931
  index += 1;
852
932
  }
853
- index--;
933
+ continue;
854
934
  }
855
935
  }
936
+ index += 1;
856
937
  }
857
938
  if (currentLine) {
858
939
  rows.push(currentLine + ansiTracker.getEndEscapesForAllActiveAttributes());
@@ -872,13 +953,15 @@ const wrapCharByChar = (string, width, trim) => {
872
953
  let currentWidth = 0;
873
954
  processAnsiString(inputToProcess, {
874
955
  getWidth: getStringWidth,
956
+ // eslint-disable-next-line sonarjs/cognitive-complexity,sonarjs/no-invariant-returns
875
957
  onSegment: (segment, stateTracker) => {
958
+ const segText = segment.text ?? "";
876
959
  if (segment.isEscapeSequence) {
877
- currentLine += segment.text;
960
+ currentLine += segText;
878
961
  } else {
879
- const isSpace = segment.text === " ";
962
+ const isSpace = segText === " ";
880
963
  if (segment.width === 0) {
881
- currentLine += segment.text;
964
+ currentLine += segText;
882
965
  return true;
883
966
  }
884
967
  if (currentWidth + segment.width > width) {
@@ -891,11 +974,11 @@ const wrapCharByChar = (string, width, trim) => {
891
974
  if (trim) {
892
975
  return true;
893
976
  }
894
- rows.push(stateTracker.getStartEscapesForAllActiveAttributes() + segment.text);
977
+ rows.push(stateTracker.getStartEscapesForAllActiveAttributes() + segText);
895
978
  return true;
896
979
  }
897
980
  }
898
- currentLine += segment.text;
981
+ currentLine += segText;
899
982
  currentWidth += segment.width;
900
983
  }
901
984
  return true;
@@ -914,14 +997,14 @@ const wrapWithWordBoundaries = (string, width, trim) => {
914
997
  if (inputToProcess.length === 0) {
915
998
  return [];
916
999
  }
917
- const tokens = inputToProcess.split(/(?=\s)|(?<=\s)/);
1000
+ const tokens = inputToProcess.split(RE_SPLIT_WHITESPACE);
918
1001
  const rows = [];
919
1002
  let currentLine = "";
920
1003
  let currentWidth = 0;
921
1004
  let index = 0;
922
1005
  while (index < tokens.length) {
923
1006
  const token = tokens[index];
924
- const isSpace = /^\s+$/.test(token);
1007
+ const isSpace = RE_WHITESPACE_ONLY.test(token);
925
1008
  const tokenVisibleWidth = getStringWidth(token);
926
1009
  if (token.length === 0) {
927
1010
  index += 1;
@@ -962,14 +1045,14 @@ const wrapAndBreakWords = (string, width, trim) => {
962
1045
  if (inputToProcess.length === 0) {
963
1046
  return [];
964
1047
  }
965
- const tokens = inputToProcess.split(/(?=\s)|(?<=\s)/);
1048
+ const tokens = inputToProcess.split(RE_SPLIT_WHITESPACE);
966
1049
  const rows = [];
967
1050
  let currentLine = "";
968
1051
  let currentWidth = 0;
969
1052
  let index = 0;
970
1053
  while (index < tokens.length) {
971
1054
  const token = tokens[index];
972
- const isSpace = /^\s+$/.test(token);
1055
+ const isSpace = RE_WHITESPACE_ONLY.test(token);
973
1056
  const tokenVisibleWidth = getStringWidth(token);
974
1057
  if (token.length === 0) {
975
1058
  index += 1;
@@ -985,10 +1068,10 @@ const wrapAndBreakWords = (string, width, trim) => {
985
1068
  }
986
1069
  const brokenLines = wrapWithBreakAtWidth(token, width, trim);
987
1070
  if (brokenLines.length > 0) {
988
- for (let index_ = 0; index_ < brokenLines.length - 1; index_++) {
989
- rows.push(brokenLines[index_]);
1071
+ for (let brokenLineIndex = 0; brokenLineIndex < brokenLines.length - 1; brokenLineIndex += 1) {
1072
+ rows.push(brokenLines[brokenLineIndex]);
990
1073
  }
991
- currentLine = brokenLines[brokenLines.length - 1];
1074
+ currentLine = brokenLines.at(-1);
992
1075
  currentWidth = getStringWidth(currentLine);
993
1076
  } else {
994
1077
  currentLine = "";
@@ -1038,7 +1121,7 @@ const wordWrap = (string, options = {}) => {
1038
1121
  if (trim && string.trim() === "") {
1039
1122
  return "";
1040
1123
  }
1041
- let normalizedString = String(string).normalize("NFC").replaceAll("\r\n", "\n");
1124
+ let normalizedString = string.normalize("NFC").replaceAll("\r\n", "\n");
1042
1125
  if (removeZeroWidthCharacters) {
1043
1126
  normalizedString = normalizedString.replaceAll(RE_ZERO_WIDTH, "");
1044
1127
  }
@@ -1092,6 +1175,30 @@ const createIfNotDefault = (maybeColumns, maybeRows) => {
1092
1175
  }
1093
1176
  return { columns, rows };
1094
1177
  };
1178
+ const isForegroundProcess = () => {
1179
+ if (process.platform !== "linux") {
1180
+ return true;
1181
+ }
1182
+ try {
1183
+ const statContents = fs.readFileSync("/proc/self/stat", "utf8");
1184
+ const closingParenthesisIndex = statContents.lastIndexOf(") ");
1185
+ if (closingParenthesisIndex === -1) {
1186
+ return false;
1187
+ }
1188
+ const statFields = statContents.slice(closingParenthesisIndex + 2).trim().split(/\s+/);
1189
+ const processGroupId = Number.parseInt(statFields[2], 10);
1190
+ const foregroundProcessGroupId = Number.parseInt(statFields[5], 10);
1191
+ if (Number.isNaN(processGroupId) || Number.isNaN(foregroundProcessGroupId)) {
1192
+ return false;
1193
+ }
1194
+ if (foregroundProcessGroupId <= 0) {
1195
+ return false;
1196
+ }
1197
+ return processGroupId === foregroundProcessGroupId;
1198
+ } catch {
1199
+ return false;
1200
+ }
1201
+ };
1095
1202
  function terminalSize() {
1096
1203
  const { env, stdout, stderr } = process;
1097
1204
  if (stdout?.columns && stdout?.rows) {
@@ -1135,6 +1242,9 @@ const tput = () => {
1135
1242
  };
1136
1243
  const resize = () => {
1137
1244
  try {
1245
+ if (!isForegroundProcess()) {
1246
+ return;
1247
+ }
1138
1248
  const size = exec("resize", ["-u"]).match(/\d+/g);
1139
1249
  if (size.length === 2) {
1140
1250
  return createIfNotDefault(size[0], size[1]);