@chainlink/external-adapter-framework 2.12.0 → 2.13.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 (173) hide show
  1. package/README.md +1 -1
  2. package/config/index.d.ts +9 -0
  3. package/config/index.js +12 -1
  4. package/config/index.js.map +1 -1
  5. package/generator-adapter/generators/app/templates/src/config/index.ts.ejs +3 -0
  6. package/generator-adapter/node_modules/.yarn-integrity +31 -35
  7. package/generator-adapter/node_modules/@inquirer/ansi/package.json +28 -26
  8. package/generator-adapter/node_modules/@inquirer/checkbox/dist/index.d.ts +6 -1
  9. package/generator-adapter/node_modules/@inquirer/checkbox/dist/index.js +30 -10
  10. package/generator-adapter/node_modules/@inquirer/checkbox/package.json +23 -21
  11. package/generator-adapter/node_modules/@inquirer/confirm/package.json +21 -19
  12. package/generator-adapter/node_modules/@inquirer/core/dist/index.d.ts +1 -1
  13. package/generator-adapter/node_modules/@inquirer/core/dist/index.js +1 -1
  14. package/generator-adapter/node_modules/@inquirer/core/dist/lib/create-prompt.js +51 -25
  15. package/generator-adapter/node_modules/@inquirer/core/dist/lib/key.d.ts +2 -0
  16. package/generator-adapter/node_modules/@inquirer/core/dist/lib/key.js +1 -0
  17. package/generator-adapter/node_modules/@inquirer/core/dist/lib/utils.js +1 -1
  18. package/generator-adapter/node_modules/@inquirer/core/package.json +22 -20
  19. package/generator-adapter/node_modules/@inquirer/editor/dist/index.d.ts +3 -0
  20. package/generator-adapter/node_modules/@inquirer/editor/dist/index.js +5 -5
  21. package/generator-adapter/node_modules/@inquirer/editor/package.json +22 -20
  22. package/generator-adapter/node_modules/@inquirer/expand/package.json +21 -19
  23. package/generator-adapter/node_modules/@inquirer/external-editor/package.json +33 -31
  24. package/generator-adapter/node_modules/@inquirer/figures/package.json +18 -16
  25. package/generator-adapter/node_modules/@inquirer/input/dist/index.js +5 -3
  26. package/generator-adapter/node_modules/@inquirer/input/package.json +21 -19
  27. package/generator-adapter/node_modules/@inquirer/number/package.json +21 -19
  28. package/generator-adapter/node_modules/@inquirer/password/dist/index.d.ts +6 -1
  29. package/generator-adapter/node_modules/@inquirer/password/dist/index.js +7 -2
  30. package/generator-adapter/node_modules/@inquirer/password/package.json +22 -20
  31. package/generator-adapter/node_modules/@inquirer/prompts/README.md +15 -0
  32. package/generator-adapter/node_modules/@inquirer/prompts/package.json +31 -29
  33. package/generator-adapter/node_modules/@inquirer/rawlist/README.md +4 -0
  34. package/generator-adapter/node_modules/@inquirer/rawlist/dist/index.d.ts +9 -2
  35. package/generator-adapter/node_modules/@inquirer/rawlist/dist/index.js +24 -7
  36. package/generator-adapter/node_modules/@inquirer/rawlist/package.json +21 -19
  37. package/generator-adapter/node_modules/@inquirer/search/README.md +2 -1
  38. package/generator-adapter/node_modules/@inquirer/search/dist/index.d.ts +1 -0
  39. package/generator-adapter/node_modules/@inquirer/search/dist/index.js +11 -4
  40. package/generator-adapter/node_modules/@inquirer/search/package.json +22 -20
  41. package/generator-adapter/node_modules/@inquirer/select/dist/index.d.ts +5 -2
  42. package/generator-adapter/node_modules/@inquirer/select/dist/index.js +28 -11
  43. package/generator-adapter/node_modules/@inquirer/select/package.json +23 -21
  44. package/generator-adapter/node_modules/@inquirer/type/package.json +18 -16
  45. package/generator-adapter/node_modules/@types/node/README.md +1 -1
  46. package/generator-adapter/node_modules/@types/node/http.d.ts +1 -1
  47. package/generator-adapter/node_modules/@types/node/package.json +2 -2
  48. package/generator-adapter/node_modules/@types/node/stream/web.d.ts +1 -1
  49. package/generator-adapter/node_modules/@types/node/test.d.ts +2 -1
  50. package/generator-adapter/node_modules/@types/node/web-globals/fetch.d.ts +12 -0
  51. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.d.ts +0 -3
  52. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.js +1 -0
  53. package/generator-adapter/node_modules/@yeoman/adapter/dist/adapter.js.map +1 -1
  54. package/generator-adapter/node_modules/@yeoman/adapter/dist/log.d.ts +0 -2
  55. package/generator-adapter/node_modules/@yeoman/adapter/dist/log.js.map +1 -1
  56. package/generator-adapter/node_modules/@yeoman/adapter/dist/queued-adapter.d.ts +0 -1
  57. package/generator-adapter/node_modules/@yeoman/adapter/dist/queued-adapter.js.map +1 -1
  58. package/generator-adapter/node_modules/@yeoman/adapter/dist/testing/test-adapter.d.ts +0 -1
  59. package/generator-adapter/node_modules/@yeoman/adapter/dist/testing/test-adapter.js.map +1 -1
  60. package/generator-adapter/node_modules/@yeoman/adapter/package.json +11 -11
  61. package/generator-adapter/node_modules/ansi-styles/index.d.ts +341 -232
  62. package/generator-adapter/node_modules/ansi-styles/index.js +130 -190
  63. package/generator-adapter/node_modules/ansi-styles/license +1 -1
  64. package/generator-adapter/node_modules/ansi-styles/package.json +10 -8
  65. package/generator-adapter/node_modules/ansi-styles/readme.md +32 -53
  66. package/generator-adapter/node_modules/chalk/package.json +3 -3
  67. package/generator-adapter/node_modules/chalk/readme.md +25 -53
  68. package/generator-adapter/node_modules/chalk/source/index.d.ts +6 -1
  69. package/generator-adapter/node_modules/chalk/source/vendor/supports-color/browser.js +6 -2
  70. package/generator-adapter/node_modules/chalk/source/vendor/supports-color/index.js +10 -2
  71. package/generator-adapter/node_modules/fast-string-truncated-width/dist/index.d.ts +4 -0
  72. package/generator-adapter/node_modules/fast-string-truncated-width/dist/index.js +111 -0
  73. package/generator-adapter/node_modules/fast-string-truncated-width/dist/types.d.ts +19 -0
  74. package/generator-adapter/node_modules/{p-queue/dist/options copy.js → fast-string-truncated-width/dist/types.js} +1 -0
  75. package/generator-adapter/node_modules/fast-string-truncated-width/dist/utils.d.ts +4 -0
  76. package/generator-adapter/node_modules/fast-string-truncated-width/dist/utils.js +20 -0
  77. package/generator-adapter/node_modules/fast-string-truncated-width/license +21 -0
  78. package/generator-adapter/node_modules/fast-string-truncated-width/package.json +35 -0
  79. package/generator-adapter/node_modules/fast-string-truncated-width/readme.md +59 -0
  80. package/generator-adapter/node_modules/fast-string-width/dist/index.d.ts +4 -0
  81. package/generator-adapter/node_modules/fast-string-width/dist/index.js +14 -0
  82. package/generator-adapter/node_modules/fast-string-width/license +21 -0
  83. package/generator-adapter/node_modules/fast-string-width/package.json +34 -0
  84. package/generator-adapter/node_modules/fast-string-width/readme.md +42 -0
  85. package/generator-adapter/node_modules/fast-wrap-ansi/LICENSE +23 -0
  86. package/generator-adapter/node_modules/fast-wrap-ansi/README.md +26 -0
  87. package/generator-adapter/node_modules/fast-wrap-ansi/lib/main.d.ts +6 -0
  88. package/generator-adapter/node_modules/fast-wrap-ansi/lib/main.js +219 -0
  89. package/generator-adapter/node_modules/fast-wrap-ansi/lib/main.js.map +1 -0
  90. package/generator-adapter/node_modules/fast-wrap-ansi/package.json +51 -0
  91. package/generator-adapter/node_modules/iconv-lite/lib/index.d.ts +114 -26
  92. package/generator-adapter/node_modules/iconv-lite/lib/index.js +39 -40
  93. package/generator-adapter/node_modules/iconv-lite/package.json +13 -2
  94. package/generator-adapter/node_modules/iconv-lite/types/encodings.d.ts +423 -0
  95. package/generator-adapter/node_modules/inquirer/dist/types.d.ts +12 -11
  96. package/generator-adapter/node_modules/inquirer/dist/ui/prompt.js +9 -1
  97. package/generator-adapter/node_modules/inquirer/dist/ui/skipped-renderer.d.ts +13 -0
  98. package/generator-adapter/node_modules/inquirer/dist/ui/skipped-renderer.js +57 -0
  99. package/generator-adapter/node_modules/inquirer/package.json +21 -19
  100. package/generator-adapter/node_modules/log-symbols/package.json +1 -1
  101. package/generator-adapter/node_modules/log-symbols/symbols.js +1 -1
  102. package/generator-adapter/node_modules/mem-fs/dist/index.d.ts +0 -2
  103. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/LICENSE +21 -0
  104. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/README.md +447 -0
  105. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/index.js +346 -0
  106. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/lib/inspect-stream.js +13 -0
  107. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/lib/is-stream.js +15 -0
  108. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/lib/normalize.js +9 -0
  109. package/generator-adapter/node_modules/mem-fs/node_modules/vinyl/package.json +59 -0
  110. package/generator-adapter/node_modules/mem-fs/package.json +9 -9
  111. package/generator-adapter/node_modules/ora/index.d.ts +3 -1
  112. package/generator-adapter/node_modules/ora/index.js +299 -109
  113. package/generator-adapter/node_modules/ora/package.json +3 -4
  114. package/generator-adapter/node_modules/ora/readme.md +24 -0
  115. package/generator-adapter/node_modules/p-queue/dist/index.js +145 -22
  116. package/generator-adapter/node_modules/p-queue/dist/options.d.ts +17 -1
  117. package/generator-adapter/node_modules/p-queue/package.json +1 -1
  118. package/generator-adapter/node_modules/p-queue/readme.md +32 -1
  119. package/generator-adapter/node_modules/stdin-discarder/index.js +50 -22
  120. package/generator-adapter/node_modules/stdin-discarder/package.json +1 -1
  121. package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/package.json +3 -3
  122. package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/readme.md +53 -25
  123. package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/index.d.ts +1 -6
  124. package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/supports-color/browser.js +2 -6
  125. package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/supports-color/index.js +2 -10
  126. package/generator-adapter/package.json +3 -3
  127. package/package.json +12 -12
  128. package/transports/websocket.d.ts +5 -0
  129. package/transports/websocket.js +25 -13
  130. package/transports/websocket.js.map +1 -1
  131. package/generator-adapter/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  132. package/generator-adapter/node_modules/emoji-regex/README.md +0 -107
  133. package/generator-adapter/node_modules/emoji-regex/index.d.ts +0 -3
  134. package/generator-adapter/node_modules/emoji-regex/index.js +0 -4
  135. package/generator-adapter/node_modules/emoji-regex/index.mjs +0 -4
  136. package/generator-adapter/node_modules/emoji-regex/package.json +0 -45
  137. package/generator-adapter/node_modules/iconv-lite/Changelog.md +0 -236
  138. package/generator-adapter/node_modules/jake/node_modules/ansi-styles/index.d.ts +0 -345
  139. package/generator-adapter/node_modules/jake/node_modules/ansi-styles/index.js +0 -163
  140. package/generator-adapter/node_modules/jake/node_modules/ansi-styles/license +0 -9
  141. package/generator-adapter/node_modules/jake/node_modules/ansi-styles/package.json +0 -56
  142. package/generator-adapter/node_modules/jake/node_modules/ansi-styles/readme.md +0 -152
  143. package/generator-adapter/node_modules/ora/node_modules/log-symbols/browser-symbols.js +0 -4
  144. package/generator-adapter/node_modules/ora/node_modules/log-symbols/browser.js +0 -1
  145. package/generator-adapter/node_modules/ora/node_modules/log-symbols/index.d.ts +0 -22
  146. package/generator-adapter/node_modules/ora/node_modules/log-symbols/index.js +0 -1
  147. package/generator-adapter/node_modules/ora/node_modules/log-symbols/license +0 -9
  148. package/generator-adapter/node_modules/ora/node_modules/log-symbols/package.json +0 -60
  149. package/generator-adapter/node_modules/ora/node_modules/log-symbols/readme.md +0 -39
  150. package/generator-adapter/node_modules/ora/node_modules/log-symbols/symbols.js +0 -14
  151. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/index.d.ts +0 -15
  152. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/index.js +0 -14
  153. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/license +0 -9
  154. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/package.json +0 -59
  155. package/generator-adapter/node_modules/ora/node_modules/strip-ansi/readme.md +0 -37
  156. package/generator-adapter/node_modules/p-queue/dist/options copy.d.ts +0 -121
  157. package/generator-adapter/node_modules/wrap-ansi/index.d.ts +0 -41
  158. package/generator-adapter/node_modules/wrap-ansi/index.js +0 -222
  159. package/generator-adapter/node_modules/wrap-ansi/license +0 -9
  160. package/generator-adapter/node_modules/wrap-ansi/node_modules/string-width/index.d.ts +0 -39
  161. package/generator-adapter/node_modules/wrap-ansi/node_modules/string-width/index.js +0 -82
  162. package/generator-adapter/node_modules/wrap-ansi/node_modules/string-width/license +0 -9
  163. package/generator-adapter/node_modules/wrap-ansi/node_modules/string-width/package.json +0 -64
  164. package/generator-adapter/node_modules/wrap-ansi/node_modules/string-width/readme.md +0 -66
  165. package/generator-adapter/node_modules/wrap-ansi/package.json +0 -69
  166. package/generator-adapter/node_modules/wrap-ansi/readme.md +0 -75
  167. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/license +0 -0
  168. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/index.js +0 -0
  169. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/utilities.js +0 -0
  170. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +0 -0
  171. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/ansi-styles/index.js +0 -0
  172. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/supports-color/browser.d.ts +0 -0
  173. /package/generator-adapter/node_modules/{ora → yeoman-generator}/node_modules/chalk/source/vendor/supports-color/index.d.ts +0 -0
@@ -7,22 +7,28 @@ const checkboxTheme = {
7
7
  checked: styleText('green', figures.circleFilled),
8
8
  unchecked: figures.circle,
9
9
  cursor: figures.pointer,
10
+ disabledChecked: styleText('green', figures.circleDouble),
11
+ disabledUnchecked: '-',
10
12
  },
11
13
  style: {
12
- disabledChoice: (text) => styleText('dim', `- ${text}`),
14
+ disabled: (text) => styleText('dim', text),
13
15
  renderSelectedChoices: (selectedChoices) => selectedChoices.map((choice) => choice.short).join(', '),
14
16
  description: (text) => styleText('cyan', text),
15
17
  keysHelpTip: (keys) => keys
16
18
  .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)
17
19
  .join(styleText('dim', ' • ')),
18
20
  },
21
+ i18n: { disabledError: 'This option is disabled and cannot be toggled.' },
19
22
  keybindings: [],
20
23
  };
21
24
  function isSelectable(item) {
22
25
  return !Separator.isSeparator(item) && !item.disabled;
23
26
  }
27
+ function isNavigable(item) {
28
+ return !Separator.isSeparator(item);
29
+ }
24
30
  function isChecked(item) {
25
- return isSelectable(item) && item.checked;
31
+ return !Separator.isSeparator(item) && item.checked;
26
32
  }
27
33
  function toggle(item) {
28
34
  return isSelectable(item) ? { ...item, checked: !item.checked } : item;
@@ -70,8 +76,8 @@ export default createPrompt((config, done) => {
70
76
  const prefix = usePrefix({ status, theme });
71
77
  const [items, setItems] = useState(normalizeChoices(config.choices));
72
78
  const bounds = useMemo(() => {
73
- const first = items.findIndex(isSelectable);
74
- const last = items.findLastIndex(isSelectable);
79
+ const first = items.findIndex(isNavigable);
80
+ const last = items.findLastIndex(isNavigable);
75
81
  if (first === -1) {
76
82
  throw new ValidationError('[checkbox prompt] No selectable choices. All choices are disabled.');
77
83
  }
@@ -83,7 +89,7 @@ export default createPrompt((config, done) => {
83
89
  if (isEnterKey(key)) {
84
90
  const selection = items.filter(isChecked);
85
91
  const isValid = await validate([...selection]);
86
- if (required && !items.some(isChecked)) {
92
+ if (required && !selection.length) {
87
93
  setError('At least one choice must be selected');
88
94
  }
89
95
  else if (isValid === true) {
@@ -95,6 +101,9 @@ export default createPrompt((config, done) => {
95
101
  }
96
102
  }
97
103
  else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {
104
+ if (errorMsg) {
105
+ setError(undefined);
106
+ }
98
107
  if (loop ||
99
108
  (isUpKey(key, keybindings) && active !== bounds.first) ||
100
109
  (isDownKey(key, keybindings) && active !== bounds.last)) {
@@ -102,13 +111,21 @@ export default createPrompt((config, done) => {
102
111
  let next = active;
103
112
  do {
104
113
  next = (next + offset + items.length) % items.length;
105
- } while (!isSelectable(items[next]));
114
+ } while (!isNavigable(items[next]));
106
115
  setActive(next);
107
116
  }
108
117
  }
109
118
  else if (isSpaceKey(key)) {
110
- setError(undefined);
111
- setItems(items.map((choice, i) => (i === active ? toggle(choice) : choice)));
119
+ const activeItem = items[active];
120
+ if (activeItem && !Separator.isSeparator(activeItem)) {
121
+ if (activeItem.disabled) {
122
+ setError(theme.i18n.disabledError);
123
+ }
124
+ else {
125
+ setError(undefined);
126
+ setItems(items.map((choice, i) => (i === active ? toggle(choice) : choice)));
127
+ }
128
+ }
112
129
  }
113
130
  else if (key.name === shortcuts.all) {
114
131
  const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);
@@ -143,9 +160,13 @@ export default createPrompt((config, done) => {
143
160
  if (Separator.isSeparator(item)) {
144
161
  return ` ${item.separator}`;
145
162
  }
163
+ const cursor = isActive ? theme.icon.cursor : ' ';
146
164
  if (item.disabled) {
147
165
  const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';
148
- return theme.style.disabledChoice(`${item.name} ${disabledLabel}`);
166
+ const checkbox = item.checked
167
+ ? theme.icon.disabledChecked
168
+ : theme.icon.disabledUnchecked;
169
+ return theme.style.disabled(`${cursor}${checkbox} ${item.name} ${disabledLabel}`);
149
170
  }
150
171
  if (isActive) {
151
172
  description = item.description;
@@ -153,7 +174,6 @@ export default createPrompt((config, done) => {
153
174
  const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;
154
175
  const name = item.checked ? item.checkedName : item.name;
155
176
  const color = isActive ? theme.style.highlight : (x) => x;
156
- const cursor = isActive ? theme.icon.cursor : ' ';
157
177
  return color(`${cursor}${checkbox} ${name}`);
158
178
  },
159
179
  pageSize,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inquirer/checkbox",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "description": "Inquirer checkbox prompt",
5
5
  "keywords": [
6
6
  "answer",
@@ -42,43 +42,40 @@
42
42
  "zsh"
43
43
  ],
44
44
  "homepage": "https://github.com/SBoudrias/Inquirer.js/blob/main/packages/checkbox/README.md",
45
+ "license": "MIT",
46
+ "author": "Simon Boudrias <admin@simonboudrias.com>",
45
47
  "repository": {
46
48
  "type": "git",
47
49
  "url": "https://github.com/SBoudrias/Inquirer.js.git"
48
50
  },
49
- "license": "MIT",
50
- "author": "Simon Boudrias <admin@simonboudrias.com>",
51
- "sideEffects": false,
51
+ "files": [
52
+ "dist"
53
+ ],
52
54
  "type": "module",
55
+ "sideEffects": false,
53
56
  "exports": {
54
- "./package.json": "./package.json",
55
57
  ".": {
56
58
  "types": "./dist/index.d.ts",
57
59
  "default": "./dist/index.js"
58
- }
60
+ },
61
+ "./package.json": "./package.json"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
59
65
  },
60
- "files": [
61
- "dist"
62
- ],
63
66
  "scripts": {
64
67
  "tsc": "tsc"
65
68
  },
66
69
  "dependencies": {
67
- "@inquirer/ansi": "^2.0.1",
68
- "@inquirer/core": "^11.0.1",
69
- "@inquirer/figures": "^2.0.1",
70
- "@inquirer/type": "^4.0.1"
70
+ "@inquirer/ansi": "^2.0.3",
71
+ "@inquirer/core": "^11.1.5",
72
+ "@inquirer/figures": "^2.0.3",
73
+ "@inquirer/type": "^4.0.3"
71
74
  },
72
75
  "devDependencies": {
73
- "@inquirer/testing": "^3.0.1",
76
+ "@inquirer/testing": "^3.3.0",
74
77
  "typescript": "^5.9.3"
75
78
  },
76
- "engines": {
77
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
78
- },
79
- "publishConfig": {
80
- "access": "public"
81
- },
82
79
  "peerDependencies": {
83
80
  "@types/node": ">=18"
84
81
  },
@@ -87,5 +84,10 @@
87
84
  "optional": true
88
85
  }
89
86
  },
90
- "gitHead": "cce79ce3b9bbdfb4dbb798078cf3b94b9adc7d1b"
87
+ "engines": {
88
+ "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
89
+ },
90
+ "main": "./dist/index.js",
91
+ "types": "./dist/index.d.ts",
92
+ "gitHead": "526eca2e64853510821ffd457561840ec0cbfb93"
91
93
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inquirer/confirm",
3
- "version": "6.0.1",
3
+ "version": "6.0.8",
4
4
  "description": "Inquirer confirm prompt",
5
5
  "keywords": [
6
6
  "answer",
@@ -42,41 +42,38 @@
42
42
  "zsh"
43
43
  ],
44
44
  "homepage": "https://github.com/SBoudrias/Inquirer.js/blob/main/packages/confirm/README.md",
45
+ "license": "MIT",
46
+ "author": "Simon Boudrias <admin@simonboudrias.com>",
45
47
  "repository": {
46
48
  "type": "git",
47
49
  "url": "https://github.com/SBoudrias/Inquirer.js.git"
48
50
  },
49
- "license": "MIT",
50
- "author": "Simon Boudrias <admin@simonboudrias.com>",
51
- "sideEffects": false,
51
+ "files": [
52
+ "dist"
53
+ ],
52
54
  "type": "module",
55
+ "sideEffects": false,
53
56
  "exports": {
54
- "./package.json": "./package.json",
55
57
  ".": {
56
58
  "types": "./dist/index.d.ts",
57
59
  "default": "./dist/index.js"
58
- }
60
+ },
61
+ "./package.json": "./package.json"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
59
65
  },
60
- "files": [
61
- "dist"
62
- ],
63
66
  "scripts": {
64
67
  "tsc": "tsc"
65
68
  },
66
69
  "dependencies": {
67
- "@inquirer/core": "^11.0.1",
68
- "@inquirer/type": "^4.0.1"
70
+ "@inquirer/core": "^11.1.5",
71
+ "@inquirer/type": "^4.0.3"
69
72
  },
70
73
  "devDependencies": {
71
- "@inquirer/testing": "^3.0.1",
74
+ "@inquirer/testing": "^3.3.0",
72
75
  "typescript": "^5.9.3"
73
76
  },
74
- "engines": {
75
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
76
- },
77
- "publishConfig": {
78
- "access": "public"
79
- },
80
77
  "peerDependencies": {
81
78
  "@types/node": ">=18"
82
79
  },
@@ -85,5 +82,10 @@
85
82
  "optional": true
86
83
  }
87
84
  },
88
- "gitHead": "cce79ce3b9bbdfb4dbb798078cf3b94b9adc7d1b"
85
+ "engines": {
86
+ "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
87
+ },
88
+ "main": "./dist/index.js",
89
+ "types": "./dist/index.d.ts",
90
+ "gitHead": "526eca2e64853510821ffd457561840ec0cbfb93"
89
91
  }
@@ -1,4 +1,4 @@
1
- export { isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnterKey, type KeypressEvent, type Keybinding, } from './lib/key.ts';
1
+ export { isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnterKey, isShiftKey, type KeypressEvent, type Keybinding, } from './lib/key.ts';
2
2
  export * from './lib/errors.ts';
3
3
  export { usePrefix } from './lib/use-prefix.ts';
4
4
  export { useState } from './lib/use-state.ts';
@@ -1,4 +1,4 @@
1
- export { isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnterKey, } from "./lib/key.js";
1
+ export { isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnterKey, isShiftKey, } from "./lib/key.js";
2
2
  export * from "./lib/errors.js";
3
3
  export { usePrefix } from "./lib/use-prefix.js";
4
4
  export { useState } from "./lib/use-state.js";
@@ -6,6 +6,9 @@ import ScreenManager from "./screen-manager.js";
6
6
  import { PromisePolyfill } from "./promise-polyfill.js";
7
7
  import { withHooks, effectScheduler } from "./hook-engine.js";
8
8
  import { AbortPromptError, CancelPromptError, ExitPromptError } from "./errors.js";
9
+ // Capture the real setImmediate at module load time so it works even when test
10
+ // frameworks mock timers with vi.useFakeTimers() or similar.
11
+ const nativeSetImmediate = globalThis.setImmediate;
9
12
  function getCallSites() {
10
13
  // eslint-disable-next-line @typescript-eslint/unbound-method
11
14
  const _prepareStackTrace = Error.prepareStackTrace;
@@ -36,6 +39,10 @@ export function createPrompt(view) {
36
39
  // Add mute capabilities to the output
37
40
  const output = new MuteStream();
38
41
  output.pipe(context.output ?? process.stdout);
42
+ // Pre-mute the output so that readline doesn't echo stale keystrokes
43
+ // to the terminal before the first render. ScreenManager will unmute/mute
44
+ // the output around each render call as needed.
45
+ output.mute();
39
46
  const rl = readline.createInterface({
40
47
  terminal: true,
41
48
  input,
@@ -62,13 +69,6 @@ export function createPrompt(view) {
62
69
  const sigint = () => reject(new ExitPromptError(`User force closed the prompt with SIGINT`));
63
70
  rl.on('SIGINT', sigint);
64
71
  cleanups.add(() => rl.removeListener('SIGINT', sigint));
65
- // Re-renders only happen when the state change; but the readline cursor could change position
66
- // and that also requires a re-render (and a manual one because we mute the streams).
67
- // We set the listener after the initial workLoop to avoid a double render if render triggered
68
- // by a state change sets the cursor to the right position.
69
- const checkCursorPos = () => screen.checkCursorPos();
70
- rl.input.on('keypress', checkCursorPos);
71
- cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));
72
72
  return withHooks(rl, (cycle) => {
73
73
  // The close event triggers immediately when the user press ctrl+c. SignalExit on the other hand
74
74
  // triggers after the process is done (which happens after timeouts are done triggering.)
@@ -76,25 +76,51 @@ export function createPrompt(view) {
76
76
  const hooksCleanup = AsyncResource.bind(() => effectScheduler.clearAll());
77
77
  rl.on('close', hooksCleanup);
78
78
  cleanups.add(() => rl.removeListener('close', hooksCleanup));
79
- cycle(() => {
80
- try {
81
- const nextView = view(config, (value) => {
82
- setImmediate(() => resolve(value));
83
- });
84
- // Typescript won't allow this, but not all users rely on typescript.
85
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
86
- if (nextView === undefined) {
87
- const callerFilename = callSites[1]?.getFileName();
88
- throw new Error(`Prompt functions must return a string.\n at ${callerFilename}`);
79
+ const startCycle = () => {
80
+ // Re-renders only happen when the state change; but the readline cursor could
81
+ // change position and that also requires a re-render (and a manual one because
82
+ // we mute the streams). We set the listener after the initial workLoop to avoid
83
+ // a double render if render triggered by a state change sets the cursor to the
84
+ // right position.
85
+ const checkCursorPos = () => screen.checkCursorPos();
86
+ rl.input.on('keypress', checkCursorPos);
87
+ cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));
88
+ cycle(() => {
89
+ try {
90
+ const nextView = view(config, (value) => {
91
+ setImmediate(() => resolve(value));
92
+ });
93
+ // Typescript won't allow this, but not all users rely on typescript.
94
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
95
+ if (nextView === undefined) {
96
+ const callerFilename = callSites[1]?.getFileName();
97
+ throw new Error(`Prompt functions must return a string.\n at ${callerFilename}`);
98
+ }
99
+ const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;
100
+ screen.render(content, bottomContent);
101
+ effectScheduler.run();
89
102
  }
90
- const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;
91
- screen.render(content, bottomContent);
92
- effectScheduler.run();
93
- }
94
- catch (error) {
95
- reject(error);
96
- }
97
- });
103
+ catch (error) {
104
+ reject(error);
105
+ }
106
+ });
107
+ };
108
+ // Proper Readable streams (like process.stdin) may have OS-level buffered
109
+ // data that arrives in the poll phase when readline resumes the stream.
110
+ // Deferring the first render by one setImmediate tick (check phase, after
111
+ // poll) lets that stale data flow through readline harmlessly—no keypress
112
+ // handlers are registered yet and the output is muted, so the stale
113
+ // keystrokes are silently discarded.
114
+ // Old-style streams (like MuteStream) have no such buffering, so the
115
+ // render cycle starts immediately.
116
+ //
117
+ // @see https://github.com/SBoudrias/Inquirer.js/issues/1303
118
+ if ('readableFlowing' in input) {
119
+ nativeSetImmediate(startCycle);
120
+ }
121
+ else {
122
+ startCycle();
123
+ }
98
124
  return Object.assign(promise
99
125
  .then((answer) => {
100
126
  effectScheduler.clearAll();
@@ -1,6 +1,7 @@
1
1
  export type KeypressEvent = {
2
2
  name: string;
3
3
  ctrl: boolean;
4
+ shift: boolean;
4
5
  };
5
6
  export type Keybinding = 'emacs' | 'vim';
6
7
  export declare const isUpKey: (key: KeypressEvent, keybindings?: ReadonlyArray<Keybinding>) => boolean;
@@ -10,3 +11,4 @@ export declare const isBackspaceKey: (key: KeypressEvent) => boolean;
10
11
  export declare const isTabKey: (key: KeypressEvent) => boolean;
11
12
  export declare const isNumberKey: (key: KeypressEvent) => boolean;
12
13
  export declare const isEnterKey: (key: KeypressEvent) => boolean;
14
+ export declare const isShiftKey: (key: KeypressEvent) => boolean;
@@ -17,3 +17,4 @@ export const isBackspaceKey = (key) => key.name === 'backspace';
17
17
  export const isTabKey = (key) => key.name === 'tab';
18
18
  export const isNumberKey = (key) => '1234567890'.includes(key.name);
19
19
  export const isEnterKey = (key) => key.name === 'enter' || key.name === 'return';
20
+ export const isShiftKey = (key) => key.shift;
@@ -1,5 +1,5 @@
1
1
  import cliWidth from 'cli-width';
2
- import wrapAnsi from 'wrap-ansi';
2
+ import { wrapAnsi } from 'fast-wrap-ansi';
3
3
  import { readline } from "./hook-engine.js";
4
4
  /**
5
5
  * Force line returns at specific width. This function is ANSI code friendly and it'll
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inquirer/core",
3
- "version": "11.0.1",
3
+ "version": "11.1.5",
4
4
  "description": "Core Inquirer prompt API",
5
5
  "keywords": [
6
6
  "answer",
@@ -42,40 +42,43 @@
42
42
  "zsh"
43
43
  ],
44
44
  "homepage": "https://github.com/SBoudrias/Inquirer.js/blob/main/packages/core/README.md",
45
+ "license": "MIT",
46
+ "author": "Simon Boudrias <admin@simonboudrias.com>",
45
47
  "repository": {
46
48
  "type": "git",
47
49
  "url": "https://github.com/SBoudrias/Inquirer.js.git"
48
50
  },
49
- "license": "MIT",
50
- "author": "Simon Boudrias <admin@simonboudrias.com>",
51
- "sideEffects": false,
51
+ "files": [
52
+ "dist"
53
+ ],
52
54
  "type": "module",
55
+ "sideEffects": false,
53
56
  "exports": {
54
- "./package.json": "./package.json",
55
57
  ".": {
56
58
  "types": "./dist/index.d.ts",
57
59
  "default": "./dist/index.js"
58
- }
60
+ },
61
+ "./package.json": "./package.json"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
59
65
  },
60
- "files": [
61
- "dist"
62
- ],
63
66
  "scripts": {
64
67
  "tsc": "tsc"
65
68
  },
66
69
  "dependencies": {
67
- "@inquirer/ansi": "^2.0.1",
68
- "@inquirer/figures": "^2.0.1",
69
- "@inquirer/type": "^4.0.1",
70
+ "@inquirer/ansi": "^2.0.3",
71
+ "@inquirer/figures": "^2.0.3",
72
+ "@inquirer/type": "^4.0.3",
70
73
  "cli-width": "^4.1.0",
74
+ "fast-wrap-ansi": "^0.2.0",
71
75
  "mute-stream": "^3.0.0",
72
- "signal-exit": "^4.1.0",
73
- "wrap-ansi": "^9.0.2"
76
+ "signal-exit": "^4.1.0"
74
77
  },
75
78
  "devDependencies": {
76
- "@inquirer/testing": "^3.0.1",
79
+ "@inquirer/testing": "^3.3.0",
77
80
  "@types/mute-stream": "^0.0.4",
78
- "@types/node": "^24.10.1",
81
+ "@types/node": "^25.0.2",
79
82
  "typescript": "^5.9.3"
80
83
  },
81
84
  "peerDependencies": {
@@ -89,8 +92,7 @@
89
92
  "engines": {
90
93
  "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
91
94
  },
92
- "publishConfig": {
93
- "access": "public"
94
- },
95
- "gitHead": "cce79ce3b9bbdfb4dbb798078cf3b94b9adc7d1b"
95
+ "main": "./dist/index.js",
96
+ "types": "./dist/index.d.ts",
97
+ "gitHead": "526eca2e64853510821ffd457561840ec0cbfb93"
96
98
  }
@@ -3,6 +3,9 @@ import { type Theme } from '@inquirer/core';
3
3
  import type { PartialDeep } from '@inquirer/type';
4
4
  type EditorTheme = {
5
5
  validationFailureMode: 'keep' | 'clear';
6
+ style: {
7
+ waitingMessage: (enterKey: string) => string;
8
+ };
6
9
  };
7
10
  type EditorConfig = {
8
11
  message: string;
@@ -2,6 +2,9 @@ import { editAsync } from '@inquirer/external-editor';
2
2
  import { createPrompt, useEffect, useState, useKeypress, usePrefix, isEnterKey, makeTheme, } from '@inquirer/core';
3
3
  const editorTheme = {
4
4
  validationFailureMode: 'keep',
5
+ style: {
6
+ waitingMessage: (enterKey) => `Press ${enterKey} to launch your preferred editor.`,
7
+ },
5
8
  };
6
9
  export default createPrompt((config, done) => {
7
10
  const { waitForUserInput = true, file: { postfix = config.postfix ?? '.txt', ...fileProps } = {}, validate = () => true, } = config;
@@ -59,12 +62,9 @@ export default createPrompt((config, done) => {
59
62
  });
60
63
  const message = theme.style.message(config.message, status);
61
64
  let helpTip = '';
62
- if (status === 'loading') {
63
- helpTip = theme.style.help('Received');
64
- }
65
- else if (status === 'idle') {
65
+ if (status === 'idle') {
66
66
  const enterKey = theme.style.key('enter');
67
- helpTip = theme.style.help(`Press ${enterKey} to launch your preferred editor.`);
67
+ helpTip = theme.style.help(theme.style.waitingMessage(enterKey));
68
68
  }
69
69
  let error = '';
70
70
  if (errorMsg) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inquirer/editor",
3
- "version": "5.0.1",
3
+ "version": "5.0.8",
4
4
  "description": "Inquirer multiline editor prompt",
5
5
  "keywords": [
6
6
  "answer",
@@ -42,42 +42,39 @@
42
42
  "zsh"
43
43
  ],
44
44
  "homepage": "https://github.com/SBoudrias/Inquirer.js/blob/main/packages/editor/README.md",
45
+ "license": "MIT",
46
+ "author": "Simon Boudrias <admin@simonboudrias.com>",
45
47
  "repository": {
46
48
  "type": "git",
47
49
  "url": "https://github.com/SBoudrias/Inquirer.js.git"
48
50
  },
49
- "license": "MIT",
50
- "author": "Simon Boudrias <admin@simonboudrias.com>",
51
- "sideEffects": false,
51
+ "files": [
52
+ "dist"
53
+ ],
52
54
  "type": "module",
55
+ "sideEffects": false,
53
56
  "exports": {
54
- "./package.json": "./package.json",
55
57
  ".": {
56
58
  "types": "./dist/index.d.ts",
57
59
  "default": "./dist/index.js"
58
- }
60
+ },
61
+ "./package.json": "./package.json"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
59
65
  },
60
- "files": [
61
- "dist"
62
- ],
63
66
  "scripts": {
64
67
  "tsc": "tsc"
65
68
  },
66
69
  "dependencies": {
67
- "@inquirer/core": "^11.0.1",
68
- "@inquirer/external-editor": "^2.0.1",
69
- "@inquirer/type": "^4.0.1"
70
+ "@inquirer/core": "^11.1.5",
71
+ "@inquirer/external-editor": "^2.0.3",
72
+ "@inquirer/type": "^4.0.3"
70
73
  },
71
74
  "devDependencies": {
72
- "@inquirer/testing": "^3.0.1",
75
+ "@inquirer/testing": "^3.3.0",
73
76
  "typescript": "^5.9.3"
74
77
  },
75
- "engines": {
76
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
77
- },
78
- "publishConfig": {
79
- "access": "public"
80
- },
81
78
  "peerDependencies": {
82
79
  "@types/node": ">=18"
83
80
  },
@@ -86,5 +83,10 @@
86
83
  "optional": true
87
84
  }
88
85
  },
89
- "gitHead": "cce79ce3b9bbdfb4dbb798078cf3b94b9adc7d1b"
86
+ "engines": {
87
+ "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
88
+ },
89
+ "main": "./dist/index.js",
90
+ "types": "./dist/index.d.ts",
91
+ "gitHead": "526eca2e64853510821ffd457561840ec0cbfb93"
90
92
  }