@chainlink/external-adapter-framework 2.7.0 → 2.7.2

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 (127) hide show
  1. package/README.md +1 -1
  2. package/adapter/basic.js +1 -1
  3. package/adapter/basic.js.map +1 -1
  4. package/adapter/types.d.ts +1 -0
  5. package/generator-adapter/node_modules/.yarn-integrity +14 -13
  6. package/generator-adapter/node_modules/@types/node/README.md +2 -2
  7. package/generator-adapter/node_modules/@types/node/buffer.d.ts +1 -2
  8. package/generator-adapter/node_modules/@types/node/child_process.d.ts +26 -122
  9. package/generator-adapter/node_modules/@types/node/crypto.d.ts +17 -1
  10. package/generator-adapter/node_modules/@types/node/fs/promises.d.ts +41 -37
  11. package/generator-adapter/node_modules/@types/node/fs.d.ts +55 -44
  12. package/generator-adapter/node_modules/@types/node/globals.d.ts +150 -344
  13. package/generator-adapter/node_modules/@types/node/http.d.ts +6 -6
  14. package/generator-adapter/node_modules/@types/node/http2.d.ts +12 -1
  15. package/generator-adapter/node_modules/@types/node/https.d.ts +5 -0
  16. package/generator-adapter/node_modules/@types/node/index.d.ts +7 -3
  17. package/generator-adapter/node_modules/@types/node/{inspector.d.ts → inspector.generated.d.ts} +219 -10
  18. package/generator-adapter/node_modules/@types/node/module.d.ts +24 -0
  19. package/generator-adapter/node_modules/@types/node/package.json +3 -83
  20. package/generator-adapter/node_modules/@types/node/process.d.ts +3 -2
  21. package/generator-adapter/node_modules/@types/node/readline/promises.d.ts +0 -1
  22. package/generator-adapter/node_modules/@types/node/sqlite.d.ts +35 -0
  23. package/generator-adapter/node_modules/@types/node/stream/web.d.ts +4 -0
  24. package/generator-adapter/node_modules/@types/node/stream.d.ts +0 -11
  25. package/generator-adapter/node_modules/@types/node/test.d.ts +8 -0
  26. package/generator-adapter/node_modules/@types/node/ts5.6/index.d.ts +7 -3
  27. package/generator-adapter/node_modules/@types/node/url.d.ts +12 -3
  28. package/generator-adapter/node_modules/@types/node/util.d.ts +5 -2
  29. package/generator-adapter/node_modules/@types/node/v8.d.ts +27 -30
  30. package/generator-adapter/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  31. package/generator-adapter/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  32. package/generator-adapter/node_modules/@types/node/{dom-events.d.ts → web-globals/events.d.ts} +47 -52
  33. package/generator-adapter/node_modules/@types/node/web-globals/fetch.d.ts +46 -0
  34. package/generator-adapter/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  35. package/generator-adapter/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  36. package/generator-adapter/node_modules/@types/node/worker_threads.d.ts +39 -3
  37. package/generator-adapter/node_modules/@types/node/zlib.d.ts +8 -2
  38. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.d.ts +3 -0
  39. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.js +12 -2
  40. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.js.map +1 -1
  41. package/generator-adapter/node_modules/@yeoman/adapter/dist/queued-adapter.d.ts +3 -0
  42. package/generator-adapter/node_modules/@yeoman/adapter/dist/queued-adapter.js +12 -2
  43. package/generator-adapter/node_modules/@yeoman/adapter/dist/queued-adapter.js.map +1 -1
  44. package/generator-adapter/node_modules/@yeoman/adapter/dist/testing/test-adapter.d.ts +3 -0
  45. package/generator-adapter/node_modules/@yeoman/adapter/dist/testing/test-adapter.js +12 -2
  46. package/generator-adapter/node_modules/@yeoman/adapter/dist/testing/test-adapter.js.map +1 -1
  47. package/generator-adapter/node_modules/@yeoman/adapter/package.json +4 -4
  48. package/generator-adapter/node_modules/@yeoman/adapter/types/adapter.d.ts +12 -1
  49. package/generator-adapter/node_modules/@yeoman/types/package.json +3 -3
  50. package/generator-adapter/node_modules/@yeoman/types/types/environment/environment.d.ts +4 -1
  51. package/generator-adapter/node_modules/@yeoman/types/types/environment/methods-options.d.ts +7 -3
  52. package/generator-adapter/node_modules/@yeoman/types/types/generator/generator.d.ts +8 -5
  53. package/generator-adapter/node_modules/@yeoman/types/types/generator/utils.d.ts +1 -0
  54. package/generator-adapter/node_modules/ansi-regex/index.d.ts +9 -13
  55. package/generator-adapter/node_modules/ansi-regex/index.js +6 -6
  56. package/generator-adapter/node_modules/ansi-regex/license +1 -1
  57. package/generator-adapter/node_modules/ansi-regex/package.json +12 -6
  58. package/generator-adapter/node_modules/ansi-regex/readme.md +4 -22
  59. package/generator-adapter/node_modules/cli-spinners/index.d.ts +122 -111
  60. package/generator-adapter/node_modules/cli-spinners/index.js +7 -11
  61. package/generator-adapter/node_modules/cli-spinners/package.json +15 -9
  62. package/generator-adapter/node_modules/cli-spinners/readme.md +23 -3
  63. package/generator-adapter/node_modules/cli-spinners/spinners.json +44 -1
  64. package/generator-adapter/node_modules/emoji-regex/README.md +14 -48
  65. package/generator-adapter/node_modules/emoji-regex/index.d.ts +21 -1
  66. package/generator-adapter/node_modules/emoji-regex/index.js +5 -3
  67. package/generator-adapter/node_modules/emoji-regex/package.json +12 -7
  68. package/generator-adapter/node_modules/get-east-asian-width/index.js +2 -3
  69. package/generator-adapter/node_modules/get-east-asian-width/lookup.js +11 -11
  70. package/generator-adapter/node_modules/get-east-asian-width/package.json +1 -1
  71. package/generator-adapter/node_modules/ora/index.d.ts +3 -3
  72. package/generator-adapter/node_modules/ora/index.js +67 -48
  73. package/generator-adapter/node_modules/ora/node_modules/chalk/package.json +83 -0
  74. package/generator-adapter/node_modules/ora/node_modules/chalk/readme.md +297 -0
  75. package/generator-adapter/node_modules/ora/node_modules/chalk/source/index.d.ts +325 -0
  76. package/generator-adapter/node_modules/ora/node_modules/chalk/source/index.js +225 -0
  77. package/generator-adapter/node_modules/ora/node_modules/chalk/source/utilities.js +33 -0
  78. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  79. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  80. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  81. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
  82. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  83. package/generator-adapter/node_modules/ora/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
  84. package/generator-adapter/node_modules/ora/node_modules/log-symbols/browser-symbols.js +4 -0
  85. package/generator-adapter/node_modules/ora/node_modules/log-symbols/browser.js +1 -8
  86. package/generator-adapter/node_modules/ora/node_modules/log-symbols/index.js +1 -20
  87. package/generator-adapter/node_modules/ora/node_modules/log-symbols/package.json +10 -7
  88. package/generator-adapter/node_modules/ora/node_modules/log-symbols/symbols.js +14 -0
  89. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/package.json +3 -1
  90. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/readme.md +5 -9
  91. package/generator-adapter/node_modules/ora/package.json +13 -13
  92. package/generator-adapter/node_modules/ora/readme.md +49 -3
  93. package/generator-adapter/node_modules/string-width/index.js +52 -45
  94. package/generator-adapter/node_modules/string-width/package.json +8 -7
  95. package/generator-adapter/node_modules/{string-width → strip-ansi}/node_modules/ansi-regex/index.d.ts +13 -9
  96. package/generator-adapter/node_modules/strip-ansi/node_modules/ansi-regex/index.js +10 -0
  97. package/generator-adapter/node_modules/{ora/node_modules/log-symbols/node_modules/is-unicode-supported → strip-ansi/node_modules/ansi-regex}/license +1 -1
  98. package/generator-adapter/node_modules/{string-width → strip-ansi}/node_modules/ansi-regex/package.json +6 -12
  99. package/generator-adapter/node_modules/{ora → strip-ansi}/node_modules/ansi-regex/readme.md +22 -4
  100. package/generator-adapter/package.json +3 -3
  101. package/package.json +15 -14
  102. package/rate-limiting/index.d.ts +1 -1
  103. package/rate-limiting/index.js +5 -1
  104. package/rate-limiting/index.js.map +1 -1
  105. package/transports/http.d.ts +1 -2
  106. package/transports/websocket.js +53 -17
  107. package/transports/websocket.js.map +1 -1
  108. package/generator-adapter/node_modules/emoji-regex/index.mjs +0 -4
  109. package/generator-adapter/node_modules/ora/node_modules/ansi-regex/index.d.ts +0 -33
  110. package/generator-adapter/node_modules/ora/node_modules/ansi-regex/index.js +0 -10
  111. package/generator-adapter/node_modules/ora/node_modules/ansi-regex/package.json +0 -61
  112. package/generator-adapter/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported/index.d.ts +0 -12
  113. package/generator-adapter/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported/index.js +0 -17
  114. package/generator-adapter/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported/package.json +0 -43
  115. package/generator-adapter/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported/readme.md +0 -35
  116. package/generator-adapter/node_modules/string-width/node_modules/ansi-regex/index.js +0 -10
  117. package/generator-adapter/node_modules/string-width/node_modules/ansi-regex/license +0 -9
  118. package/generator-adapter/node_modules/string-width/node_modules/ansi-regex/readme.md +0 -60
  119. package/generator-adapter/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  120. package/generator-adapter/node_modules/wrap-ansi/node_modules/emoji-regex/README.md +0 -73
  121. package/generator-adapter/node_modules/wrap-ansi/node_modules/emoji-regex/index.d.ts +0 -23
  122. package/generator-adapter/node_modules/wrap-ansi/node_modules/emoji-regex/index.js +0 -6
  123. package/generator-adapter/node_modules/wrap-ansi/node_modules/emoji-regex/package.json +0 -50
  124. /package/generator-adapter/node_modules/{wrap-ansi/node_modules/emoji-regex → emoji-regex}/es2015/index.js +0 -0
  125. /package/generator-adapter/node_modules/{wrap-ansi/node_modules/emoji-regex → emoji-regex}/es2015/text.js +0 -0
  126. /package/generator-adapter/node_modules/{wrap-ansi/node_modules/emoji-regex → emoji-regex}/text.js +0 -0
  127. /package/generator-adapter/node_modules/ora/node_modules/{ansi-regex → chalk}/license +0 -0
@@ -0,0 +1,34 @@
1
+ /* eslint-env browser */
2
+
3
+ const level = (() => {
4
+ if (!('navigator' in globalThis)) {
5
+ return 0;
6
+ }
7
+
8
+ if (globalThis.navigator.userAgentData) {
9
+ const brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');
10
+ if (brand && brand.version > 93) {
11
+ return 3;
12
+ }
13
+ }
14
+
15
+ if (/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)) {
16
+ return 1;
17
+ }
18
+
19
+ return 0;
20
+ })();
21
+
22
+ const colorSupport = level !== 0 && {
23
+ level,
24
+ hasBasic: true,
25
+ has256: level >= 2,
26
+ has16m: level >= 3,
27
+ };
28
+
29
+ const supportsColor = {
30
+ stdout: colorSupport,
31
+ stderr: colorSupport,
32
+ };
33
+
34
+ export default supportsColor;
@@ -0,0 +1,55 @@
1
+ import type {WriteStream} from 'node:tty';
2
+
3
+ export type Options = {
4
+ /**
5
+ Whether `process.argv` should be sniffed for `--color` and `--no-color` flags.
6
+
7
+ @default true
8
+ */
9
+ readonly sniffFlags?: boolean;
10
+ };
11
+
12
+ /**
13
+ Levels:
14
+ - `0` - All colors disabled.
15
+ - `1` - Basic 16 colors support.
16
+ - `2` - ANSI 256 colors support.
17
+ - `3` - Truecolor 16 million colors support.
18
+ */
19
+ export type ColorSupportLevel = 0 | 1 | 2 | 3;
20
+
21
+ /**
22
+ Detect whether the terminal supports color.
23
+ */
24
+ export type ColorSupport = {
25
+ /**
26
+ The color level.
27
+ */
28
+ level: ColorSupportLevel;
29
+
30
+ /**
31
+ Whether basic 16 colors are supported.
32
+ */
33
+ hasBasic: boolean;
34
+
35
+ /**
36
+ Whether ANSI 256 colors are supported.
37
+ */
38
+ has256: boolean;
39
+
40
+ /**
41
+ Whether Truecolor 16 million colors are supported.
42
+ */
43
+ has16m: boolean;
44
+ };
45
+
46
+ export type ColorInfo = ColorSupport | false;
47
+
48
+ export function createSupportsColor(stream?: WriteStream, options?: Options): ColorInfo;
49
+
50
+ declare const supportsColor: {
51
+ stdout: ColorInfo;
52
+ stderr: ColorInfo;
53
+ };
54
+
55
+ export default supportsColor;
@@ -0,0 +1,190 @@
1
+ import process from 'node:process';
2
+ import os from 'node:os';
3
+ import tty from 'node:tty';
4
+
5
+ // From: https://github.com/sindresorhus/has-flag/blob/main/index.js
6
+ /// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {
7
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
8
+ const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
9
+ const position = argv.indexOf(prefix + flag);
10
+ const terminatorPosition = argv.indexOf('--');
11
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
12
+ }
13
+
14
+ const {env} = process;
15
+
16
+ let flagForceColor;
17
+ if (
18
+ hasFlag('no-color')
19
+ || hasFlag('no-colors')
20
+ || hasFlag('color=false')
21
+ || hasFlag('color=never')
22
+ ) {
23
+ flagForceColor = 0;
24
+ } else if (
25
+ hasFlag('color')
26
+ || hasFlag('colors')
27
+ || hasFlag('color=true')
28
+ || hasFlag('color=always')
29
+ ) {
30
+ flagForceColor = 1;
31
+ }
32
+
33
+ function envForceColor() {
34
+ if ('FORCE_COLOR' in env) {
35
+ if (env.FORCE_COLOR === 'true') {
36
+ return 1;
37
+ }
38
+
39
+ if (env.FORCE_COLOR === 'false') {
40
+ return 0;
41
+ }
42
+
43
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
44
+ }
45
+ }
46
+
47
+ function translateLevel(level) {
48
+ if (level === 0) {
49
+ return false;
50
+ }
51
+
52
+ return {
53
+ level,
54
+ hasBasic: true,
55
+ has256: level >= 2,
56
+ has16m: level >= 3,
57
+ };
58
+ }
59
+
60
+ function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {
61
+ const noFlagForceColor = envForceColor();
62
+ if (noFlagForceColor !== undefined) {
63
+ flagForceColor = noFlagForceColor;
64
+ }
65
+
66
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
67
+
68
+ if (forceColor === 0) {
69
+ return 0;
70
+ }
71
+
72
+ if (sniffFlags) {
73
+ if (hasFlag('color=16m')
74
+ || hasFlag('color=full')
75
+ || hasFlag('color=truecolor')) {
76
+ return 3;
77
+ }
78
+
79
+ if (hasFlag('color=256')) {
80
+ return 2;
81
+ }
82
+ }
83
+
84
+ // Check for Azure DevOps pipelines.
85
+ // Has to be above the `!streamIsTTY` check.
86
+ if ('TF_BUILD' in env && 'AGENT_NAME' in env) {
87
+ return 1;
88
+ }
89
+
90
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
91
+ return 0;
92
+ }
93
+
94
+ const min = forceColor || 0;
95
+
96
+ if (env.TERM === 'dumb') {
97
+ return min;
98
+ }
99
+
100
+ if (process.platform === 'win32') {
101
+ // Windows 10 build 10586 is the first Windows release that supports 256 colors.
102
+ // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
103
+ const osRelease = os.release().split('.');
104
+ if (
105
+ Number(osRelease[0]) >= 10
106
+ && Number(osRelease[2]) >= 10_586
107
+ ) {
108
+ return Number(osRelease[2]) >= 14_931 ? 3 : 2;
109
+ }
110
+
111
+ return 1;
112
+ }
113
+
114
+ if ('CI' in env) {
115
+ if (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {
116
+ return 3;
117
+ }
118
+
119
+ if (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
120
+ return 1;
121
+ }
122
+
123
+ return min;
124
+ }
125
+
126
+ if ('TEAMCITY_VERSION' in env) {
127
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
128
+ }
129
+
130
+ if (env.COLORTERM === 'truecolor') {
131
+ return 3;
132
+ }
133
+
134
+ if (env.TERM === 'xterm-kitty') {
135
+ return 3;
136
+ }
137
+
138
+ if (env.TERM === 'xterm-ghostty') {
139
+ return 3;
140
+ }
141
+
142
+ if (env.TERM === 'wezterm') {
143
+ return 3;
144
+ }
145
+
146
+ if ('TERM_PROGRAM' in env) {
147
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
148
+
149
+ switch (env.TERM_PROGRAM) {
150
+ case 'iTerm.app': {
151
+ return version >= 3 ? 3 : 2;
152
+ }
153
+
154
+ case 'Apple_Terminal': {
155
+ return 2;
156
+ }
157
+ // No default
158
+ }
159
+ }
160
+
161
+ if (/-256(color)?$/i.test(env.TERM)) {
162
+ return 2;
163
+ }
164
+
165
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
166
+ return 1;
167
+ }
168
+
169
+ if ('COLORTERM' in env) {
170
+ return 1;
171
+ }
172
+
173
+ return min;
174
+ }
175
+
176
+ export function createSupportsColor(stream, options = {}) {
177
+ const level = _supportsColor(stream, {
178
+ streamIsTTY: stream && stream.isTTY,
179
+ ...options,
180
+ });
181
+
182
+ return translateLevel(level);
183
+ }
184
+
185
+ const supportsColor = {
186
+ stdout: createSupportsColor({isTTY: tty.isatty(1)}),
187
+ stderr: createSupportsColor({isTTY: tty.isatty(2)}),
188
+ };
189
+
190
+ export default supportsColor;
@@ -0,0 +1,4 @@
1
+ export const info = 'ℹ️';
2
+ export const success = '✅';
3
+ export const warning = '⚠️';
4
+ export const error = '❌️';
@@ -1,8 +1 @@
1
- const logSymbols = {
2
- info: 'ℹ️',
3
- success: '✅',
4
- warning: '⚠️',
5
- error: '❌️',
6
- };
7
-
8
- export default logSymbols;
1
+ export * as default from './browser-symbols.js';
@@ -1,20 +1 @@
1
- import chalk from 'chalk';
2
- import isUnicodeSupported from 'is-unicode-supported';
3
-
4
- const main = {
5
- info: chalk.blue('ℹ'),
6
- success: chalk.green('✔'),
7
- warning: chalk.yellow('⚠'),
8
- error: chalk.red('✖'),
9
- };
10
-
11
- const fallback = {
12
- info: chalk.blue('i'),
13
- success: chalk.green('√'),
14
- warning: chalk.yellow('‼'),
15
- error: chalk.red('×'),
16
- };
17
-
18
- const logSymbols = isUnicodeSupported() ? main : fallback;
19
-
20
- export default logSymbols;
1
+ export * as default from './symbols.js';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "log-symbols",
3
- "version": "6.0.0",
3
+ "version": "7.0.1",
4
4
  "description": "Colored symbols for various log levels. Example: `✔︎ Success`",
5
5
  "license": "MIT",
6
6
  "repository": "sindresorhus/log-symbols",
@@ -16,6 +16,7 @@
16
16
  "node": "./index.js",
17
17
  "default": "./browser.js"
18
18
  },
19
+ "sideEffects": false,
19
20
  "engines": {
20
21
  "node": ">=18"
21
22
  },
@@ -25,7 +26,9 @@
25
26
  "files": [
26
27
  "index.js",
27
28
  "index.d.ts",
28
- "browser.js"
29
+ "browser.js",
30
+ "symbols.js",
31
+ "browser-symbols.js"
29
32
  ],
30
33
  "keywords": [
31
34
  "unicode",
@@ -45,13 +48,13 @@
45
48
  "stdout"
46
49
  ],
47
50
  "dependencies": {
48
- "chalk": "^5.3.0",
49
- "is-unicode-supported": "^1.3.0"
51
+ "is-unicode-supported": "^2.0.0",
52
+ "yoctocolors": "^2.1.1"
50
53
  },
51
54
  "devDependencies": {
52
- "ava": "^5.3.1",
55
+ "ava": "^6.1.3",
53
56
  "strip-ansi": "^7.1.0",
54
- "tsd": "^0.29.0",
55
- "xo": "^0.56.0"
57
+ "tsd": "^0.31.1",
58
+ "xo": "^0.59.3"
56
59
  }
57
60
  }
@@ -0,0 +1,14 @@
1
+ import {
2
+ blue,
3
+ green,
4
+ yellow,
5
+ red,
6
+ } from 'yoctocolors';
7
+ import isUnicodeSupported from 'is-unicode-supported';
8
+
9
+ const _isUnicodeSupported = isUnicodeSupported();
10
+
11
+ export const info = blue(_isUnicodeSupported ? 'ℹ' : 'i');
12
+ export const success = green(_isUnicodeSupported ? '✔' : '√');
13
+ export const warning = yellow(_isUnicodeSupported ? '⚠' : '‼');
14
+ export const error = red(_isUnicodeSupported ? '✖' : '×');
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strip-ansi",
3
- "version": "7.1.0",
3
+ "version": "7.1.2",
4
4
  "description": "Strip ANSI escape codes from a string",
5
5
  "license": "MIT",
6
6
  "repository": "chalk/strip-ansi",
@@ -12,6 +12,8 @@
12
12
  },
13
13
  "type": "module",
14
14
  "exports": "./index.js",
15
+ "types": "./index.d.ts",
16
+ "sideEffects": false,
15
17
  "engines": {
16
18
  "node": ">=12"
17
19
  },
@@ -2,10 +2,13 @@
2
2
 
3
3
  > Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string
4
4
 
5
+ > [!NOTE]
6
+ > Node.js has this built-in now with [`stripVTControlCharacters`](https://nodejs.org/api/util.html#utilstripvtcontrolcharactersstr). The benefit of this package is consistent behavior across Node.js versions and faster improvements. The Node.js version is actually based on this package.
7
+
5
8
  ## Install
6
9
 
7
- ```
8
- $ npm install strip-ansi
10
+ ```sh
11
+ npm install strip-ansi
9
12
  ```
10
13
 
11
14
  ## Usage
@@ -20,12 +23,6 @@ stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
20
23
  //=> 'Click'
21
24
  ```
22
25
 
23
- ## strip-ansi for enterprise
24
-
25
- Available as part of the Tidelift Subscription.
26
-
27
- The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
28
-
29
26
  ## Related
30
27
 
31
28
  - [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
@@ -38,4 +35,3 @@ The maintainers of strip-ansi and thousands of other packages are working with T
38
35
 
39
36
  - [Sindre Sorhus](https://github.com/sindresorhus)
40
37
  - [Josh Junon](https://github.com/qix-)
41
-
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ora",
3
- "version": "8.1.1",
3
+ "version": "9.0.0",
4
4
  "description": "Elegant terminal spinner",
5
5
  "license": "MIT",
6
6
  "repository": "sindresorhus/ora",
@@ -17,10 +17,10 @@
17
17
  },
18
18
  "sideEffects": false,
19
19
  "engines": {
20
- "node": ">=18"
20
+ "node": ">=20"
21
21
  },
22
22
  "scripts": {
23
- "test": "xo && ava && tsd"
23
+ "test": "xo && NODE_ENV=test node --test test.js && tsd"
24
24
  },
25
25
  "files": [
26
26
  "index.js",
@@ -43,22 +43,22 @@
43
43
  "idle"
44
44
  ],
45
45
  "dependencies": {
46
- "chalk": "^5.3.0",
46
+ "chalk": "^5.6.2",
47
47
  "cli-cursor": "^5.0.0",
48
- "cli-spinners": "^2.9.2",
48
+ "cli-spinners": "^3.2.0",
49
49
  "is-interactive": "^2.0.0",
50
- "is-unicode-supported": "^2.0.0",
51
- "log-symbols": "^6.0.0",
50
+ "is-unicode-supported": "^2.1.0",
51
+ "log-symbols": "^7.0.1",
52
52
  "stdin-discarder": "^0.2.2",
53
- "string-width": "^7.2.0",
54
- "strip-ansi": "^7.1.0"
53
+ "string-width": "^8.1.0",
54
+ "strip-ansi": "^7.1.2"
55
55
  },
56
56
  "devDependencies": {
57
- "@types/node": "^22.5.0",
58
- "ava": "^5.3.1",
57
+ "@types/node": "^24.5.0",
58
+ "ava": "^6.4.1",
59
59
  "get-stream": "^9.0.1",
60
60
  "transform-tty": "^1.0.11",
61
- "tsd": "^0.31.1",
62
- "xo": "^0.59.3"
61
+ "tsd": "^0.33.0",
62
+ "xo": "^1.2.2"
63
63
  }
64
64
  }
@@ -76,11 +76,11 @@ Or an object like:
76
76
 
77
77
  ##### color
78
78
 
79
- Type: `string`\
79
+ Type: `string | boolean`\
80
80
  Default: `'cyan'`\
81
- Values: `'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'`
81
+ Values: `'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray' | boolean`
82
82
 
83
- The color of the spinner.
83
+ The color of the spinner. Set to `false` to disable coloring.
84
84
 
85
85
  ##### hideCursor
86
86
 
@@ -312,6 +312,52 @@ const spinner = ora(`Loading ${chalk.red('unicorns')}`).start();
312
312
 
313
313
  JavaScript is single-threaded, so any synchronous operations will block the spinner's animation. To avoid this, prefer using asynchronous operations.
314
314
 
315
+ ### Can I display multiple spinners simultaneously?
316
+
317
+ No. Ora is designed to display a single spinner at a time. For multiple concurrent progress indicators, consider alternatives like [listr2](https://github.com/listr2/listr2) or [spinnies](https://github.com/jcarpanelli/spinnies).
318
+
319
+ ### Can I use Ora with [log-update](https://github.com/sindresorhus/log-update)?
320
+
321
+ Yes, use the `.frame()` method to get the current spinner frame and include it in your log-update output.
322
+
323
+ ### Does Ora work in Node.js Worker threads?
324
+
325
+ No. Ora requires an interactive terminal environment and Worker threads are not considered interactive, so the spinner will not animate. Run the spinner in the main thread and control it via worker messages:
326
+
327
+ ```js
328
+ // main.js
329
+ import {Worker} from 'node:worker_threads';
330
+ import ora from 'ora';
331
+
332
+ const spinner = ora().start();
333
+ const worker = new Worker('./worker.js');
334
+
335
+ worker.on('message', message => {
336
+ switch (message.type) {
337
+ case 'ora:text':
338
+ spinner.text = message.text;
339
+ break;
340
+ case 'ora:succeed':
341
+ spinner.succeed(message.text);
342
+ break;
343
+ case 'ora:fail':
344
+ spinner.fail(message.text);
345
+ break;
346
+ }
347
+ });
348
+ ```
349
+
350
+ ```js
351
+ // worker.js
352
+ import {parentPort} from 'node:worker_threads';
353
+
354
+ parentPort.postMessage({type: 'ora:text', text: 'Working...'});
355
+
356
+ // Do work...
357
+
358
+ parentPort.postMessage({type: 'ora:succeed', text: 'Done!'});
359
+ ```
360
+
315
361
  ## Related
316
362
 
317
363
  - [yocto-spinner](https://github.com/sindresorhus/yocto-spinner) - Tiny terminal spinner
@@ -1,13 +1,49 @@
1
1
  import stripAnsi from 'strip-ansi';
2
2
  import {eastAsianWidth} from 'get-east-asian-width';
3
- import emojiRegex from 'emoji-regex';
3
+
4
+ /**
5
+ Logic:
6
+ - Segment graphemes to match how terminals render clusters.
7
+ - Width rules:
8
+ 1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.
9
+ 2. RGI emoji clusters (\p{RGI_Emoji}) are double-width.
10
+ 3. Otherwise use East Asian Width of the cluster’s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).
11
+ */
4
12
 
5
13
  const segmenter = new Intl.Segmenter();
6
14
 
7
- const defaultIgnorableCodePointRegex = /^\p{Default_Ignorable_Code_Point}$/u;
15
+ // Whole-cluster zero-width
16
+ const zeroWidthClusterRegex = /^(?:\p{Default_Ignorable_Code_Point}|\p{Control}|\p{Mark}|\p{Surrogate})+$/v;
17
+
18
+ // Pick the base scalar if the cluster starts with Prepend/Format/Marks
19
+ const leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}\p{Surrogate}]+/v;
20
+
21
+ // RGI emoji sequences
22
+ const rgiEmojiRegex = /^\p{RGI_Emoji}$/v;
23
+
24
+ function baseVisible(segment) {
25
+ return segment.replace(leadingNonPrintingRegex, '');
26
+ }
27
+
28
+ function isZeroWidthCluster(segment) {
29
+ return zeroWidthClusterRegex.test(segment);
30
+ }
8
31
 
9
- export default function stringWidth(string, options = {}) {
10
- if (typeof string !== 'string' || string.length === 0) {
32
+ function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
33
+ let extra = 0;
34
+ if (segment.length > 1) {
35
+ for (const char of segment.slice(1)) {
36
+ if (char >= '\uFF00' && char <= '\uFFEF') {
37
+ extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
38
+ }
39
+ }
40
+ }
41
+
42
+ return extra;
43
+ }
44
+
45
+ export default function stringWidth(input, options = {}) {
46
+ if (typeof input !== 'string' || input.length === 0) {
11
47
  return 0;
12
48
  }
13
49
 
@@ -16,6 +52,8 @@ export default function stringWidth(string, options = {}) {
16
52
  countAnsiEscapeCodes = false,
17
53
  } = options;
18
54
 
55
+ let string = input;
56
+
19
57
  if (!countAnsiEscapeCodes) {
20
58
  string = stripAnsi(string);
21
59
  }
@@ -27,55 +65,24 @@ export default function stringWidth(string, options = {}) {
27
65
  let width = 0;
28
66
  const eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};
29
67
 
30
- for (const {segment: character} of segmenter.segment(string)) {
31
- const codePoint = character.codePointAt(0);
32
-
33
- // Ignore control characters
34
- if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
35
- continue;
36
- }
37
-
38
- // Ignore zero-width characters
39
- if (
40
- (codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark
41
- || codePoint === 0xFE_FF // Zero-width no-break space
42
- ) {
43
- continue;
44
- }
45
-
46
- // Ignore combining characters
47
- if (
48
- (codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks
49
- || (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended
50
- || (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement
51
- || (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols
52
- || (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks
53
- ) {
54
- continue;
55
- }
56
-
57
- // Ignore surrogate pairs
58
- if (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {
68
+ for (const {segment} of segmenter.segment(string)) {
69
+ // Zero-width / non-printing clusters
70
+ if (isZeroWidthCluster(segment)) {
59
71
  continue;
60
72
  }
61
73
 
62
- // Ignore variation selectors
63
- if (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {
64
- continue;
65
- }
66
-
67
- // This covers some of the above cases, but we still keep them for performance reasons.
68
- if (defaultIgnorableCodePointRegex.test(character)) {
69
- continue;
70
- }
71
-
72
- // TODO: Use `/\p{RGI_Emoji}/v` when targeting Node.js 20.
73
- if (emojiRegex().test(character)) {
74
+ // Emoji width logic
75
+ if (rgiEmojiRegex.test(segment)) {
74
76
  width += 2;
75
77
  continue;
76
78
  }
77
79
 
80
+ // Everything else: EAW of the cluster’s first visible scalar
81
+ const codePoint = baseVisible(segment).codePointAt(0);
78
82
  width += eastAsianWidth(codePoint, eastAsianWidthOptions);
83
+
84
+ // Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)
85
+ width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
79
86
  }
80
87
 
81
88
  return width;