react-doctor 0.9.12-dev.ffc2d14 → 0.9.13-dev.fd23edc

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 (47) hide show
  1. package/README.md +33 -0
  2. package/dist/active-run-trace-dlIZeEvb.js +18 -0
  3. package/dist/active-scan-abort-registry-DwG6tSPy.js +28 -0
  4. package/dist/{build-section-divider-BuOtLrzK.js → build-section-divider-CUtO-gXD.js} +8 -22
  5. package/dist/{ci-DVVsf25h.js → ci-DjilJaw4.js} +12 -11
  6. package/dist/cli.js +116 -35
  7. package/dist/{design-Y1pcA2uj.js → design-CXLKbARh.js} +4 -4
  8. package/dist/{devtools-D8NTVj81.js → devtools-CC2PAZ85.js} +3 -3
  9. package/dist/{exit-gracefully-DnXGONjj.js → exit-gracefully-DTLgxZZ5.js} +15 -9
  10. package/dist/get-east-asian-width-Bv2TD3Xj.js +444 -0
  11. package/dist/{report-error-MGKyeIns.js → handle-error-BqaqFvmc.js} +18 -68
  12. package/dist/index.d.ts +32 -0
  13. package/dist/index.js +585 -286
  14. package/dist/{inspect-g3_lzs3l.js → inspect-BIfnzKGq.js} +38 -28
  15. package/dist/{install-doctor-script-DmEWQpVJ.js → install-doctor-script-B1U08lUD.js} +7 -449
  16. package/dist/{install-github-workflow-Dx6Pl9Wl.js → install-github-workflow-CkOl0wCn.js} +10 -6
  17. package/dist/{install-02Lq6wKC.js → install-nhJ65X-y.js} +9 -8
  18. package/dist/{install-react-doctor-CMCXgenA.js → install-react-doctor-Dm35Egex.js} +8 -8
  19. package/dist/{run-scan-app-CDDu7P32.js → jsx-runtime-C1t3eR6p.js} +280 -2774
  20. package/dist/path-format-DnHpmJwG.js +9 -0
  21. package/dist/{print-branded-header-kbvWYuGv.js → print-branded-header-qOJiGkuW.js} +4 -4
  22. package/dist/project-analysis-worker.js +54 -53
  23. package/dist/prompt-runtime-scan-url-m88LMtMP.js +240 -0
  24. package/dist/{read-object-file-Cwhr9OIi.js → read-object-file-Cv41FpZo.js} +4 -4
  25. package/dist/{record-metric-CFfsgcVs.js → record-metric-u8youmM2.js} +548 -235
  26. package/dist/report-error-CkFgxJTQ.js +64 -0
  27. package/dist/{report-workflow-result-DGg9xopH.js → report-workflow-result-Wh1SQuOu.js} +5 -5
  28. package/dist/{resolve-scope-CXS-5jLR.js → resolve-scope-CHCpJtks.js} +8 -10
  29. package/dist/{rules-CThlosPx.js → rules-C30QFptP.js} +6 -6
  30. package/dist/run-scan-app-yTBDucJ3.js +2511 -0
  31. package/dist/runtime-scan/browser-probe.iife.js +855 -0
  32. package/dist/runtime-scan-VH25Yf8H.js +770 -0
  33. package/dist/sanitize-runtime-url-crVHbQlW.js +76 -0
  34. package/dist/scan-CNSRWEtJ.js +47 -0
  35. package/dist/{should-fail-scan-gate-C0Bo5Gqy.js → should-fail-scan-gate-Cw6KeoRT.js} +20 -112
  36. package/dist/{should-skip-prompts-BqrtVX4G.js → should-skip-prompts-B5zkkkKR.js} +4 -4
  37. package/dist/should-use-tui-S9255AG_.js +25 -0
  38. package/dist/skills/improve-threejs/SKILL.md +102 -0
  39. package/dist/skills/performance/SKILL.md +113 -0
  40. package/dist/skills/react-doctor/SKILL.md +6 -0
  41. package/dist/{unref-stdin-BxyvqsOy.js → telemetry-runtime-B2rpGWMl.js} +55 -25
  42. package/dist/unref-stdin-SK3WfwxS.js +12 -0
  43. package/dist/{version-S-8vvWFi.js → version-KQbGQSGN.js} +4 -4
  44. package/dist/{why-DXfx0oL9.js → why-B-l2qTCV.js} +4 -4
  45. package/dist/with-run-span-Dk1M8cnH.js +110 -0
  46. package/package.json +9 -6
  47. package/dist/scan-4I1mvxBO.js +0 -53
@@ -0,0 +1,444 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="db817079-8f8f-50ee-bae1-5d0182c74255")}catch(e){}}();
3
+ import process from "node:process";
4
+ import os from "node:os";
5
+ import tty from "node:tty";
6
+ //#region ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
7
+ const ANSI_BACKGROUND_OFFSET = 10;
8
+ const wrapAnsi16 = (offset = 0) => (code) => `\u001B[${code + offset}m`;
9
+ const wrapAnsi256 = (offset = 0) => (code) => `\u001B[${38 + offset};5;${code}m`;
10
+ const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
11
+ const styles$1 = {
12
+ modifier: {
13
+ reset: [0, 0],
14
+ bold: [1, 22],
15
+ dim: [2, 22],
16
+ italic: [3, 23],
17
+ underline: [4, 24],
18
+ overline: [53, 55],
19
+ inverse: [7, 27],
20
+ hidden: [8, 28],
21
+ strikethrough: [9, 29]
22
+ },
23
+ color: {
24
+ black: [30, 39],
25
+ red: [31, 39],
26
+ green: [32, 39],
27
+ yellow: [33, 39],
28
+ blue: [34, 39],
29
+ magenta: [35, 39],
30
+ cyan: [36, 39],
31
+ white: [37, 39],
32
+ blackBright: [90, 39],
33
+ gray: [90, 39],
34
+ grey: [90, 39],
35
+ redBright: [91, 39],
36
+ greenBright: [92, 39],
37
+ yellowBright: [93, 39],
38
+ blueBright: [94, 39],
39
+ magentaBright: [95, 39],
40
+ cyanBright: [96, 39],
41
+ whiteBright: [97, 39]
42
+ },
43
+ bgColor: {
44
+ bgBlack: [40, 49],
45
+ bgRed: [41, 49],
46
+ bgGreen: [42, 49],
47
+ bgYellow: [43, 49],
48
+ bgBlue: [44, 49],
49
+ bgMagenta: [45, 49],
50
+ bgCyan: [46, 49],
51
+ bgWhite: [47, 49],
52
+ bgBlackBright: [100, 49],
53
+ bgGray: [100, 49],
54
+ bgGrey: [100, 49],
55
+ bgRedBright: [101, 49],
56
+ bgGreenBright: [102, 49],
57
+ bgYellowBright: [103, 49],
58
+ bgBlueBright: [104, 49],
59
+ bgMagentaBright: [105, 49],
60
+ bgCyanBright: [106, 49],
61
+ bgWhiteBright: [107, 49]
62
+ }
63
+ };
64
+ Object.keys(styles$1.modifier);
65
+ const foregroundColorNames = Object.keys(styles$1.color);
66
+ const backgroundColorNames = Object.keys(styles$1.bgColor);
67
+ [...foregroundColorNames, ...backgroundColorNames];
68
+ function assembleStyles() {
69
+ const codes = /* @__PURE__ */ new Map();
70
+ for (const [groupName, group] of Object.entries(styles$1)) {
71
+ for (const [styleName, style] of Object.entries(group)) {
72
+ styles$1[styleName] = {
73
+ open: `\u001B[${style[0]}m`,
74
+ close: `\u001B[${style[1]}m`
75
+ };
76
+ group[styleName] = styles$1[styleName];
77
+ codes.set(style[0], style[1]);
78
+ }
79
+ Object.defineProperty(styles$1, groupName, {
80
+ value: group,
81
+ enumerable: false
82
+ });
83
+ }
84
+ Object.defineProperty(styles$1, "codes", {
85
+ value: codes,
86
+ enumerable: false
87
+ });
88
+ styles$1.color.close = "\x1B[39m";
89
+ styles$1.bgColor.close = "\x1B[49m";
90
+ styles$1.color.ansi = wrapAnsi16();
91
+ styles$1.color.ansi256 = wrapAnsi256();
92
+ styles$1.color.ansi16m = wrapAnsi16m();
93
+ styles$1.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
94
+ styles$1.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
95
+ styles$1.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
96
+ Object.defineProperties(styles$1, {
97
+ rgbToAnsi256: {
98
+ value(red, green, blue) {
99
+ if (red === green && green === blue) {
100
+ if (red < 8) return 16;
101
+ if (red > 248) return 231;
102
+ return Math.round((red - 8) / 247 * 24) + 232;
103
+ }
104
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
105
+ },
106
+ enumerable: false
107
+ },
108
+ hexToRgb: {
109
+ value(hex) {
110
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
111
+ if (!matches) return [
112
+ 0,
113
+ 0,
114
+ 0
115
+ ];
116
+ let [colorString] = matches;
117
+ if (colorString.length === 3) colorString = [...colorString].map((character) => character + character).join("");
118
+ const integer = Number.parseInt(colorString, 16);
119
+ return [
120
+ integer >> 16 & 255,
121
+ integer >> 8 & 255,
122
+ integer & 255
123
+ ];
124
+ },
125
+ enumerable: false
126
+ },
127
+ hexToAnsi256: {
128
+ value: (hex) => styles$1.rgbToAnsi256(...styles$1.hexToRgb(hex)),
129
+ enumerable: false
130
+ },
131
+ ansi256ToAnsi: {
132
+ value(code) {
133
+ if (code < 8) return 30 + code;
134
+ if (code < 16) return 90 + (code - 8);
135
+ let red;
136
+ let green;
137
+ let blue;
138
+ if (code >= 232) {
139
+ red = ((code - 232) * 10 + 8) / 255;
140
+ green = red;
141
+ blue = red;
142
+ } else {
143
+ code -= 16;
144
+ const remainder = code % 36;
145
+ red = Math.floor(code / 36) / 5;
146
+ green = Math.floor(remainder / 6) / 5;
147
+ blue = remainder % 6 / 5;
148
+ }
149
+ const value = Math.max(red, green, blue) * 2;
150
+ if (value === 0) return 30;
151
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
152
+ if (value === 2) result += 60;
153
+ return result;
154
+ },
155
+ enumerable: false
156
+ },
157
+ rgbToAnsi: {
158
+ value: (red, green, blue) => styles$1.ansi256ToAnsi(styles$1.rgbToAnsi256(red, green, blue)),
159
+ enumerable: false
160
+ },
161
+ hexToAnsi: {
162
+ value: (hex) => styles$1.ansi256ToAnsi(styles$1.hexToAnsi256(hex)),
163
+ enumerable: false
164
+ }
165
+ });
166
+ return styles$1;
167
+ }
168
+ const ansiStyles = assembleStyles();
169
+ //#endregion
170
+ //#region ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
171
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
172
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
173
+ const position = argv.indexOf(prefix + flag);
174
+ const terminatorPosition = argv.indexOf("--");
175
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
176
+ }
177
+ const { env: env$1 } = process;
178
+ let flagForceColor;
179
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) flagForceColor = 0;
180
+ else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) flagForceColor = 1;
181
+ function envForceColor() {
182
+ if ("FORCE_COLOR" in env$1) {
183
+ if (env$1.FORCE_COLOR === "true") return 1;
184
+ if (env$1.FORCE_COLOR === "false") return 0;
185
+ return env$1.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env$1.FORCE_COLOR, 10), 3);
186
+ }
187
+ }
188
+ function translateLevel(level) {
189
+ if (level === 0) return false;
190
+ return {
191
+ level,
192
+ hasBasic: true,
193
+ has256: level >= 2,
194
+ has16m: level >= 3
195
+ };
196
+ }
197
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
198
+ const noFlagForceColor = envForceColor();
199
+ if (noFlagForceColor !== void 0) flagForceColor = noFlagForceColor;
200
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
201
+ if (forceColor === 0) return 0;
202
+ if (sniffFlags) {
203
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
204
+ if (hasFlag("color=256")) return 2;
205
+ }
206
+ if ("TF_BUILD" in env$1 && "AGENT_NAME" in env$1) return 1;
207
+ if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
208
+ const min = forceColor || 0;
209
+ if (env$1.TERM === "dumb") return min;
210
+ if (process.platform === "win32") {
211
+ const osRelease = os.release().split(".");
212
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
213
+ return 1;
214
+ }
215
+ if ("CI" in env$1) {
216
+ if ([
217
+ "GITHUB_ACTIONS",
218
+ "GITEA_ACTIONS",
219
+ "CIRCLECI"
220
+ ].some((key) => key in env$1)) return 3;
221
+ if ([
222
+ "TRAVIS",
223
+ "APPVEYOR",
224
+ "GITLAB_CI",
225
+ "BUILDKITE",
226
+ "DRONE"
227
+ ].some((sign) => sign in env$1) || env$1.CI_NAME === "codeship") return 1;
228
+ return min;
229
+ }
230
+ if ("TEAMCITY_VERSION" in env$1) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0;
231
+ if (env$1.COLORTERM === "truecolor") return 3;
232
+ if (env$1.TERM === "xterm-kitty") return 3;
233
+ if (env$1.TERM === "xterm-ghostty") return 3;
234
+ if (env$1.TERM === "wezterm") return 3;
235
+ if ("TERM_PROGRAM" in env$1) {
236
+ const version = Number.parseInt((env$1.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
237
+ switch (env$1.TERM_PROGRAM) {
238
+ case "iTerm.app": return version >= 3 ? 3 : 2;
239
+ case "Apple_Terminal": return 2;
240
+ }
241
+ }
242
+ if (/-256(color)?$/i.test(env$1.TERM)) return 2;
243
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) return 1;
244
+ if ("COLORTERM" in env$1) return 1;
245
+ return min;
246
+ }
247
+ function createSupportsColor(stream, options = {}) {
248
+ return translateLevel(_supportsColor(stream, {
249
+ streamIsTTY: stream && stream.isTTY,
250
+ ...options
251
+ }));
252
+ }
253
+ const supportsColor = {
254
+ stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
255
+ stderr: createSupportsColor({ isTTY: tty.isatty(2) })
256
+ };
257
+ //#endregion
258
+ //#region ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
259
+ function stringReplaceAll(string, substring, replacer) {
260
+ let index = string.indexOf(substring);
261
+ if (index === -1) return string;
262
+ const substringLength = substring.length;
263
+ let endIndex = 0;
264
+ let returnValue = "";
265
+ do {
266
+ returnValue += string.slice(endIndex, index) + substring + replacer;
267
+ endIndex = index + substringLength;
268
+ index = string.indexOf(substring, endIndex);
269
+ } while (index !== -1);
270
+ returnValue += string.slice(endIndex);
271
+ return returnValue;
272
+ }
273
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
274
+ let endIndex = 0;
275
+ let returnValue = "";
276
+ do {
277
+ const gotCR = string[index - 1] === "\r";
278
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
279
+ endIndex = index + 1;
280
+ index = string.indexOf("\n", endIndex);
281
+ } while (index !== -1);
282
+ returnValue += string.slice(endIndex);
283
+ return returnValue;
284
+ }
285
+ //#endregion
286
+ //#region ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
287
+ const { stdout: stdoutColor, stderr: stderrColor } = supportsColor;
288
+ const GENERATOR = Symbol("GENERATOR");
289
+ const STYLER = Symbol("STYLER");
290
+ const IS_EMPTY = Symbol("IS_EMPTY");
291
+ const levelMapping = [
292
+ "ansi",
293
+ "ansi",
294
+ "ansi256",
295
+ "ansi16m"
296
+ ];
297
+ const styles = Object.create(null);
298
+ const applyOptions = (object, options = {}) => {
299
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) throw new Error("The `level` option should be an integer from 0 to 3");
300
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
301
+ object.level = options.level === void 0 ? colorLevel : options.level;
302
+ };
303
+ const chalkFactory = (options) => {
304
+ const chalk = (...strings) => strings.join(" ");
305
+ applyOptions(chalk, options);
306
+ Object.setPrototypeOf(chalk, createChalk.prototype);
307
+ return chalk;
308
+ };
309
+ function createChalk(options) {
310
+ return chalkFactory(options);
311
+ }
312
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
313
+ for (const [styleName, style] of Object.entries(ansiStyles)) styles[styleName] = { get() {
314
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
315
+ Object.defineProperty(this, styleName, { value: builder });
316
+ return builder;
317
+ } };
318
+ styles.visible = { get() {
319
+ const builder = createBuilder(this, this[STYLER], true);
320
+ Object.defineProperty(this, "visible", { value: builder });
321
+ return builder;
322
+ } };
323
+ const getModelAnsi = (model, level, type, ...arguments_) => {
324
+ if (model === "rgb") {
325
+ if (level === "ansi16m") return ansiStyles[type].ansi16m(...arguments_);
326
+ if (level === "ansi256") return ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));
327
+ return ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));
328
+ }
329
+ if (model === "hex") return getModelAnsi("rgb", level, type, ...ansiStyles.hexToRgb(...arguments_));
330
+ return ansiStyles[type][model](...arguments_);
331
+ };
332
+ for (const model of [
333
+ "rgb",
334
+ "hex",
335
+ "ansi256"
336
+ ]) {
337
+ styles[model] = { get() {
338
+ const { level } = this;
339
+ return function(...arguments_) {
340
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansiStyles.color.close, this[STYLER]);
341
+ return createBuilder(this, styler, this[IS_EMPTY]);
342
+ };
343
+ } };
344
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
345
+ styles[bgModel] = { get() {
346
+ const { level } = this;
347
+ return function(...arguments_) {
348
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansiStyles.bgColor.close, this[STYLER]);
349
+ return createBuilder(this, styler, this[IS_EMPTY]);
350
+ };
351
+ } };
352
+ }
353
+ const proto = Object.defineProperties(() => {}, {
354
+ ...styles,
355
+ level: {
356
+ enumerable: true,
357
+ get() {
358
+ return this[GENERATOR].level;
359
+ },
360
+ set(level) {
361
+ this[GENERATOR].level = level;
362
+ }
363
+ }
364
+ });
365
+ const createStyler = (open, close, parent) => {
366
+ let openAll;
367
+ let closeAll;
368
+ if (parent === void 0) {
369
+ openAll = open;
370
+ closeAll = close;
371
+ } else {
372
+ openAll = parent.openAll + open;
373
+ closeAll = close + parent.closeAll;
374
+ }
375
+ return {
376
+ open,
377
+ close,
378
+ openAll,
379
+ closeAll,
380
+ parent
381
+ };
382
+ };
383
+ const createBuilder = (self, _styler, _isEmpty) => {
384
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
385
+ Object.setPrototypeOf(builder, proto);
386
+ builder[GENERATOR] = self;
387
+ builder[STYLER] = _styler;
388
+ builder[IS_EMPTY] = _isEmpty;
389
+ return builder;
390
+ };
391
+ const applyStyle = (self, string) => {
392
+ if (self.level <= 0 || !string) return self[IS_EMPTY] ? "" : string;
393
+ let styler = self[STYLER];
394
+ if (styler === void 0) return string;
395
+ const { openAll, closeAll } = styler;
396
+ if (string.includes("\x1B")) while (styler !== void 0) {
397
+ string = stringReplaceAll(string, styler.close, styler.open);
398
+ styler = styler.parent;
399
+ }
400
+ const lfIndex = string.indexOf("\n");
401
+ if (lfIndex !== -1) string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
402
+ return openAll + string + closeAll;
403
+ };
404
+ Object.defineProperties(createChalk.prototype, styles);
405
+ const chalk = createChalk();
406
+ createChalk({ level: stderrColor ? stderrColor.level : 0 });
407
+ //#endregion
408
+ //#region ../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
409
+ function ansiRegex({ onlyFirst = false } = {}) {
410
+ return new RegExp(`(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]`, onlyFirst ? void 0 : "g");
411
+ }
412
+ //#endregion
413
+ //#region ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
414
+ const regex = ansiRegex();
415
+ function stripAnsi(string) {
416
+ if (typeof string !== "string") throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
417
+ return string.replace(regex, "");
418
+ }
419
+ //#endregion
420
+ //#region ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
421
+ function isAmbiguous(x) {
422
+ 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;
423
+ }
424
+ function isFullWidth(x) {
425
+ return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
426
+ }
427
+ function isWide(x) {
428
+ 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;
429
+ }
430
+ //#endregion
431
+ //#region ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
432
+ function validate(codePoint) {
433
+ if (!Number.isSafeInteger(codePoint)) throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
434
+ }
435
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
436
+ validate(codePoint);
437
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) return 2;
438
+ return 1;
439
+ }
440
+ //#endregion
441
+ export { chalk as a, stripAnsi as i, isFullWidth as n, isWide as r, eastAsianWidth as t };
442
+
443
+ //# sourceMappingURL=get-east-asian-width-Bv2TD3Xj.js.map
444
+ //# debugId=db817079-8f8f-50ee-bae1-5d0182c74255
@@ -1,8 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1b9ff339-857f-5843-b289-d962b4feef13")}catch(e){}}();
3
- import { $n as CANONICAL_GITHUB_URL, Ft as formatReactDoctorError, Gt as highlighter, M as SENTRY_FLUSH_TIMEOUT_MS, Pt as formatErrorChain, Qn as CANONICAL_DISCORD_URL, Rn as runSync, Sn as error, Yt as isReactDoctorError, g as VERSION, kn as gen, l as getRunId, o as buildSentryScope, t as recordCount, w as METRIC, yr as isErrnoException } from "./record-metric-CFfsgcVs.js";
4
- import { c as isExpectedUserError, i as recordRunTraceId, l as formatEnvironmentError, n as getActiveRunTrace, s as shutdownTelemetry, u as isEnvironmentError } from "./unref-stdin-BxyvqsOy.js";
5
- import * as Sentry from "@sentry/node";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5915d35c-02a8-5e33-8c31-74d9ddd09127")}catch(e){}}();
3
+ import { $n as CANONICAL_DISCORD_URL, An as gen, Cn as error, Ft as formatErrorChain, It as formatReactDoctorError, Kt as highlighter, T as METRIC, Xt as isReactDoctorError, _ as VERSION, br as isErrnoException, er as CANONICAL_GITHUB_URL, t as recordCount, zn as runSync } from "./record-metric-u8youmM2.js";
4
+ import { a as isNpmCacheCorruptionError, i as formatNpmCacheCorruptionError, o as formatEnvironmentError, s as isEnvironmentError } from "./telemetry-runtime-B2rpGWMl.js";
6
5
  //#region src/cli/utils/handle-error.ts
7
6
  const OTLP_ENDPOINT_ENVIRONMENT_VARIABLE = "REACT_DOCTOR_OTLP_ENDPOINT";
8
7
  const OTLP_AUTH_HEADER_ENVIRONMENT_VARIABLE = "REACT_DOCTOR_OTLP_AUTH_HEADER";
@@ -86,15 +85,20 @@ const handleError = (error, options = {}) => {
86
85
  };
87
86
  /**
88
87
  * Renderer for expected, user-actionable failures — a bad `--diff` value,
89
- * a base branch that isn't fetched, or environment errors like disk-full or
90
- * permission-denied. Prints just the (already human-readable) message — no
91
- * "Something went wrong", prefilled issue, Discord link, or Sentry reference
92
- * — because there is no bug to report.
88
+ * a base branch that isn't fetched, environment errors like disk-full or
89
+ * permission-denied, or npm cache corruption. Prints just the (already
90
+ * human-readable) message — no "Something went wrong", prefilled issue,
91
+ * Discord link, or Sentry reference — because there is no bug to report.
93
92
  */
94
93
  const handleUserError = (error$1, options = {}) => {
95
- const isEnvError = isEnvironmentError(error$1);
96
- if (isEnvError) recordCount(METRIC.cliEnvironmentError, 1, { code: (isErrnoException(error$1) ? error$1.code : void 0) ?? "unknown" });
97
- const message = isEnvError ? formatEnvironmentError(error$1) : formatErrorForReport(error$1);
94
+ let message = formatErrorForReport(error$1);
95
+ if (isNpmCacheCorruptionError(error$1)) {
96
+ recordCount(METRIC.cliEnvironmentError, 1, { code: "NPX_CACHE_CORRUPTION" });
97
+ message = formatNpmCacheCorruptionError(error$1);
98
+ } else if (isEnvironmentError(error$1)) {
99
+ recordCount(METRIC.cliEnvironmentError, 1, { code: (isErrnoException(error$1) ? error$1.code : void 0) ?? "unknown" });
100
+ message = formatEnvironmentError(error$1);
101
+ }
98
102
  runSync(gen(function* () {
99
103
  yield* error("");
100
104
  yield* error(highlighter.error(message));
@@ -104,61 +108,7 @@ const handleUserError = (error$1, options = {}) => {
104
108
  process.exitCode = 1;
105
109
  };
106
110
  //#endregion
107
- //#region src/cli/utils/report-error.ts
108
- /**
109
- * Sends an error to Sentry — enriched with a fresh snapshot of the current run
110
- * (version, platform, CI/agent, invocation, scanned project) and, when a run
111
- * transaction is in flight, linked to its trace via the scope's propagation
112
- * context so the crash and its transaction share a `trace_id` — then waits for
113
- * delivery before the caller exits. The CLI tears down synchronously after
114
- * rendering an error, so the awaited `flush` is what actually gets the event
115
- * (and any in-flight transaction) off the machine.
116
- *
117
- * Returns the Sentry event id so the caller can surface it as a reference the
118
- * user can quote when reporting the bug; returns `undefined` when Sentry was
119
- * never initialized (`--no-score`, tests, or a missing DSN) or delivery failed.
120
- * Swallows any transport failure so telemetry can never mask the user's
121
- * original error.
122
- */
123
- const reportErrorToSentry = async (error) => {
124
- if (!Sentry.isInitialized()) return void 0;
125
- if (isExpectedUserError(error)) return void 0;
126
- try {
127
- const { tags, contexts } = buildSentryScope();
128
- let reason = "unknown";
129
- if (isReactDoctorError(error)) reason = error.reason._tag;
130
- else if (error instanceof Error) reason = error.name;
131
- recordCount(METRIC.cliError, 1, {
132
- command: typeof tags.command === "string" ? tags.command : void 0,
133
- reason
134
- });
135
- const runTrace = getActiveRunTrace();
136
- const eventId = Sentry.withScope((scope) => {
137
- for (const [name, context] of Object.entries(contexts)) scope.setContext(name, context);
138
- scope.setTags(tags);
139
- if (runTrace) {
140
- scope.setContext("axiom", {
141
- traceId: runTrace.traceId,
142
- runId: getRunId()
143
- });
144
- scope.setPropagationContext({
145
- traceId: runTrace.traceId,
146
- parentSpanId: runTrace.spanId,
147
- sampled: runTrace.sampled,
148
- sampleRand: Math.random()
149
- });
150
- }
151
- recordRunTraceId(scope.getPropagationContext().traceId);
152
- return Sentry.captureException(error);
153
- });
154
- await Promise.all([Sentry.flush(SENTRY_FLUSH_TIMEOUT_MS), shutdownTelemetry()]);
155
- return eventId;
156
- } catch {
157
- return;
158
- }
159
- };
160
- //#endregion
161
- export { handleError as n, handleUserError as r, reportErrorToSentry as t };
111
+ export { handleUserError as n, handleError as t };
162
112
 
163
- //# sourceMappingURL=report-error-MGKyeIns.js.map
164
- //# debugId=1b9ff339-857f-5843-b289-d962b4feef13
113
+ //# sourceMappingURL=handle-error-BqaqFvmc.js.map
114
+ //# debugId=5915d35c-02a8-5e33-8c31-74d9ddd09127
package/dist/index.d.ts CHANGED
@@ -10190,6 +10190,28 @@ interface ProjectInfo {
10190
10190
  remotionVersion?: string | null;
10191
10191
  remotionMajorVersion?: number | null;
10192
10192
  hasI18nLibrary?: boolean;
10193
+ /**
10194
+ * `true` when the project (or a workspace package) declares the unified
10195
+ * `radix-ui` package or any `@radix-ui/react-*` primitive (icons excluded).
10196
+ * Drives the `radix-ui` capability, which gates the `radix-*` composition
10197
+ * rules for apps that assemble Radix parts directly.
10198
+ */
10199
+ hasRadixUi?: boolean;
10200
+ /**
10201
+ * `true` when the project (or a workspace package) declares Base UI
10202
+ * (`@base-ui-components/react` or its 1.0 rename `@base-ui/react`).
10203
+ * Drives the `base-ui` capability, which gates the `base-ui-*`
10204
+ * composition rules.
10205
+ */
10206
+ hasBaseUi?: boolean;
10207
+ /** `true` when `react-aria-components` is declared. Drives the `react-aria` capability. */
10208
+ hasReactAriaComponents?: boolean;
10209
+ /** `true` when `@tanstack/react-table` is declared. Drives the `tanstack-table` capability. */
10210
+ hasTanstackTable?: boolean;
10211
+ /** `true` when `@tanstack/react-virtual` is declared. Drives the `tanstack-virtual` capability. */
10212
+ hasTanstackVirtual?: boolean;
10213
+ /** `true` when `@tanstack/react-form` is declared. Drives the `tanstack-form` capability. */
10214
+ hasTanstackForm?: boolean;
10193
10215
  tanstackQueryVersion?: string | null;
10194
10216
  styledComponentsVersion?: string | null;
10195
10217
  /** Whether the project or one of its workspaces declares Three.js, Fiber, or Drei. */
@@ -10289,6 +10311,16 @@ interface ProjectInfo {
10289
10311
  * recommend them to projects pinned below that.
10290
10312
  */
10291
10313
  reanimatedVersion: string | null;
10314
+ /**
10315
+ * `true` when the project (or an ancestor up to the repository boundary)
10316
+ * carries a shadcn `components.json` config. Drives the `shadcn`
10317
+ * capability, which gates the `shadcn-*` component-composition rules —
10318
+ * their part names (`DialogTitle`, `InputGroupInput`, `TabsList`, …) only
10319
+ * carry shadcn's contract in a project that actually generated those
10320
+ * files. Optional so existing `ProjectInfo` consumers remain
10321
+ * source-compatible.
10322
+ */
10323
+ hasShadcnUi?: boolean;
10292
10324
  /**
10293
10325
  * `true` when the project's `tsconfig.json` `compilerOptions.target` or
10294
10326
  * `compilerOptions.lib` indicates the output environment predates ES2023