depfixer 1.1.8 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/check.d.ts +8 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +742 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/migrate.d.ts +1 -7
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +702 -706
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/smart.d.ts.map +1 -1
- package/dist/commands/smart.js +954 -911
- package/dist/commands/smart.js.map +1 -1
- package/dist/constants/analysis.constants.d.ts +2 -0
- package/dist/constants/analysis.constants.d.ts.map +1 -1
- package/dist/constants/analysis.constants.js +9 -0
- package/dist/constants/analysis.constants.js.map +1 -1
- package/dist/index.js +57 -17
- package/dist/index.js.map +1 -1
- package/dist/services/api-client.d.ts +89 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +95 -1
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/framework-detector.d.ts +23 -0
- package/dist/services/framework-detector.d.ts.map +1 -0
- package/dist/services/framework-detector.js +230 -0
- package/dist/services/framework-detector.js.map +1 -0
- package/dist/services/payment-flow.d.ts +3 -1
- package/dist/services/payment-flow.d.ts.map +1 -1
- package/dist/services/payment-flow.js +8 -1
- package/dist/services/payment-flow.js.map +1 -1
- package/dist/utils/framework-utils.d.ts +29 -0
- package/dist/utils/framework-utils.d.ts.map +1 -0
- package/dist/utils/framework-utils.js +45 -0
- package/dist/utils/framework-utils.js.map +1 -0
- package/dist/utils/interactive-picker.d.ts +12 -0
- package/dist/utils/interactive-picker.d.ts.map +1 -0
- package/dist/utils/interactive-picker.js +109 -0
- package/dist/utils/interactive-picker.js.map +1 -0
- package/dist/utils/package-parser.d.ts +24 -0
- package/dist/utils/package-parser.d.ts.map +1 -0
- package/dist/utils/package-parser.js +63 -0
- package/dist/utils/package-parser.js.map +1 -0
- package/dist/utils/prompt.d.ts +13 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +71 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/table-builders.d.ts +40 -0
- package/dist/utils/table-builders.d.ts.map +1 -0
- package/dist/utils/table-builders.js +175 -0
- package/dist/utils/table-builders.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +23 -3
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Picker
|
|
3
|
+
*
|
|
4
|
+
* Arrow-key based select prompt (Enter confirms, Esc cancels, Ctrl+C exits).
|
|
5
|
+
* Used by the `check` command for interactive version selection.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { colors } from './design-system.js';
|
|
9
|
+
/**
|
|
10
|
+
* Render an arrow-key driven picker.
|
|
11
|
+
* Returns the selected value, or null if user hit Esc.
|
|
12
|
+
*/
|
|
13
|
+
export async function pickOne(message, choices, initialIndex) {
|
|
14
|
+
if (choices.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
// Start at the provided index if valid and not disabled, else first non-disabled
|
|
17
|
+
let selectedIndex;
|
|
18
|
+
if (typeof initialIndex === 'number' &&
|
|
19
|
+
initialIndex >= 0 &&
|
|
20
|
+
initialIndex < choices.length &&
|
|
21
|
+
!choices[initialIndex].disabled) {
|
|
22
|
+
selectedIndex = initialIndex;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
selectedIndex = choices.findIndex((c) => !c.disabled);
|
|
26
|
+
if (selectedIndex === -1)
|
|
27
|
+
selectedIndex = 0;
|
|
28
|
+
}
|
|
29
|
+
const linesPerRender = choices.length + 3; // header + blank + choices + blank
|
|
30
|
+
const renderChoices = (firstRender) => {
|
|
31
|
+
if (!firstRender) {
|
|
32
|
+
// Move cursor up to the top of previous render and clear
|
|
33
|
+
process.stdout.write(`\x1b[${linesPerRender}A`);
|
|
34
|
+
}
|
|
35
|
+
console.log(colors.brand(`? ${message}`));
|
|
36
|
+
console.log(colors.dim(' Use ↑↓ arrows to select, Enter to confirm, Esc to cancel'));
|
|
37
|
+
console.log();
|
|
38
|
+
for (let i = 0; i < choices.length; i++) {
|
|
39
|
+
const c = choices[i];
|
|
40
|
+
const isSelected = i === selectedIndex;
|
|
41
|
+
const prefix = isSelected ? colors.brand('❯ ') : ' ';
|
|
42
|
+
let text;
|
|
43
|
+
if (c.disabled) {
|
|
44
|
+
text = colors.dim(c.label);
|
|
45
|
+
}
|
|
46
|
+
else if (isSelected) {
|
|
47
|
+
text = chalk.bold(colors.brand(c.label));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
text = c.label;
|
|
51
|
+
}
|
|
52
|
+
const hint = c.hint ? ' ' + colors.dim(c.hint) : '';
|
|
53
|
+
// Pad line with spaces so re-render overwrites cleanly
|
|
54
|
+
const line = `${prefix}${text}${hint}`;
|
|
55
|
+
process.stdout.write(line + '\x1b[K\n'); // \x1b[K = clear to end of line
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
renderChoices(true);
|
|
60
|
+
if (process.stdin.isTTY) {
|
|
61
|
+
process.stdin.setRawMode(true);
|
|
62
|
+
}
|
|
63
|
+
process.stdin.resume();
|
|
64
|
+
const moveSelection = (delta) => {
|
|
65
|
+
const len = choices.length;
|
|
66
|
+
for (let step = 0; step < len; step++) {
|
|
67
|
+
selectedIndex = (selectedIndex + delta + len) % len;
|
|
68
|
+
if (!choices[selectedIndex].disabled)
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const onKeyPress = (key) => {
|
|
73
|
+
const char = key.toString();
|
|
74
|
+
if (char === '\x1b[A') {
|
|
75
|
+
moveSelection(-1);
|
|
76
|
+
renderChoices(false);
|
|
77
|
+
}
|
|
78
|
+
else if (char === '\x1b[B') {
|
|
79
|
+
moveSelection(1);
|
|
80
|
+
renderChoices(false);
|
|
81
|
+
}
|
|
82
|
+
else if (char === '\r' || char === '\n') {
|
|
83
|
+
if (choices[selectedIndex].disabled)
|
|
84
|
+
return;
|
|
85
|
+
cleanup();
|
|
86
|
+
console.log(); // blank line after picker
|
|
87
|
+
resolve(choices[selectedIndex].value);
|
|
88
|
+
}
|
|
89
|
+
else if (char === '\x1b' && key.length === 1) {
|
|
90
|
+
cleanup();
|
|
91
|
+
console.log();
|
|
92
|
+
resolve(null);
|
|
93
|
+
}
|
|
94
|
+
else if (char === '\x03') {
|
|
95
|
+
cleanup();
|
|
96
|
+
process.exit(0);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const cleanup = () => {
|
|
100
|
+
process.stdin.removeListener('data', onKeyPress);
|
|
101
|
+
if (process.stdin.isTTY) {
|
|
102
|
+
process.stdin.setRawMode(false);
|
|
103
|
+
}
|
|
104
|
+
process.stdin.pause();
|
|
105
|
+
};
|
|
106
|
+
process.stdin.on('data', onKeyPress);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=interactive-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-picker.js","sourceRoot":"","sources":["../../src/utils/interactive-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Spec Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses package@version specs from CLI arguments.
|
|
5
|
+
* Handles scoped packages, version ranges, and bare package names.
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* react@19 → { name: "react", version: "19" }
|
|
9
|
+
* react@^18.0.0 → { name: "react", version: "^18.0.0" }
|
|
10
|
+
* @emotion/react@11 → { name: "@emotion/react", version: "11" }
|
|
11
|
+
* react → { name: "react", version: null }
|
|
12
|
+
*/
|
|
13
|
+
export interface ParsedPackageSpec {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string | null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse a package@version spec string into name and version components.
|
|
19
|
+
*
|
|
20
|
+
* For scoped packages (@scope/name@version), the last @ is the version separator.
|
|
21
|
+
* For unscoped packages (name@version), the first @ is the version separator.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parsePackageSpec(spec: string): ParsedPackageSpec;
|
|
24
|
+
//# sourceMappingURL=package-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-parser.d.ts","sourceRoot":"","sources":["../../src/utils/package-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwDhE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Spec Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses package@version specs from CLI arguments.
|
|
5
|
+
* Handles scoped packages, version ranges, and bare package names.
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* react@19 → { name: "react", version: "19" }
|
|
9
|
+
* react@^18.0.0 → { name: "react", version: "^18.0.0" }
|
|
10
|
+
* @emotion/react@11 → { name: "@emotion/react", version: "11" }
|
|
11
|
+
* react → { name: "react", version: null }
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Parse a package@version spec string into name and version components.
|
|
15
|
+
*
|
|
16
|
+
* For scoped packages (@scope/name@version), the last @ is the version separator.
|
|
17
|
+
* For unscoped packages (name@version), the first @ is the version separator.
|
|
18
|
+
*/
|
|
19
|
+
export function parsePackageSpec(spec) {
|
|
20
|
+
if (!spec || spec.trim().length === 0) {
|
|
21
|
+
throw new Error('Package spec cannot be empty');
|
|
22
|
+
}
|
|
23
|
+
const trimmed = spec.trim();
|
|
24
|
+
// Scoped package: starts with @
|
|
25
|
+
if (trimmed.startsWith('@')) {
|
|
26
|
+
// Find the version separator — it's the @ that comes after the scope/name part
|
|
27
|
+
// @scope/name@version → split at the second @
|
|
28
|
+
const secondAtIndex = trimmed.indexOf('@', 1);
|
|
29
|
+
if (secondAtIndex === -1) {
|
|
30
|
+
// No version: @scope/name
|
|
31
|
+
return { name: trimmed, version: null };
|
|
32
|
+
}
|
|
33
|
+
// Check if the second @ is part of scope/name or a version separator
|
|
34
|
+
// If there's a / before the second @, and content after the second @, it's a version
|
|
35
|
+
const slashIndex = trimmed.indexOf('/');
|
|
36
|
+
if (slashIndex !== -1 && secondAtIndex > slashIndex) {
|
|
37
|
+
const name = trimmed.substring(0, secondAtIndex);
|
|
38
|
+
const version = trimmed.substring(secondAtIndex + 1);
|
|
39
|
+
if (version.length === 0) {
|
|
40
|
+
return { name, version: null };
|
|
41
|
+
}
|
|
42
|
+
return { name, version };
|
|
43
|
+
}
|
|
44
|
+
// No slash found or @ is before slash — treat entire string as name
|
|
45
|
+
return { name: trimmed, version: null };
|
|
46
|
+
}
|
|
47
|
+
// Unscoped package: name@version
|
|
48
|
+
const atIndex = trimmed.indexOf('@');
|
|
49
|
+
if (atIndex === -1) {
|
|
50
|
+
// No version: just package name
|
|
51
|
+
return { name: trimmed, version: null };
|
|
52
|
+
}
|
|
53
|
+
const name = trimmed.substring(0, atIndex);
|
|
54
|
+
const version = trimmed.substring(atIndex + 1);
|
|
55
|
+
if (name.length === 0) {
|
|
56
|
+
throw new Error(`Invalid package spec: "${spec}"`);
|
|
57
|
+
}
|
|
58
|
+
if (version.length === 0) {
|
|
59
|
+
return { name, version: null };
|
|
60
|
+
}
|
|
61
|
+
return { name, version };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=package-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-parser.js","sourceRoot":"","sources":["../../src/utils/package-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,gCAAgC;IAChC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,+EAA+E;QAC/E,8CAA8C;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,0BAA0B;YAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,qEAAqE;QACrE,qFAAqF;QACrF,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,aAAa,GAAG,UAAU,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YAErD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjC,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,oEAAoE;QACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,iCAAiC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,gCAAgC;QAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAE/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Enter/Esc prompt (Enter = Yes, Esc = No)
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Enter or 'y'/'Y' → Yes
|
|
6
|
+
* - Esc or 'n'/'N' → No
|
|
7
|
+
* - Ctrl+C → Exit process
|
|
8
|
+
*
|
|
9
|
+
* @param question - Optional question text (can be empty if shown elsewhere)
|
|
10
|
+
* @returns Promise<boolean> - true for yes, false for no
|
|
11
|
+
*/
|
|
12
|
+
export declare function promptYesNo(question: string): Promise<boolean>;
|
|
13
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDpE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Prompt Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides keyboard-based prompts for CLI interactions.
|
|
5
|
+
* Uses raw mode stdin for immediate key response.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { colors } from './design-system.js';
|
|
9
|
+
/**
|
|
10
|
+
* Simple Enter/Esc prompt (Enter = Yes, Esc = No)
|
|
11
|
+
*
|
|
12
|
+
* Supports:
|
|
13
|
+
* - Enter or 'y'/'Y' → Yes
|
|
14
|
+
* - Esc or 'n'/'N' → No
|
|
15
|
+
* - Ctrl+C → Exit process
|
|
16
|
+
*
|
|
17
|
+
* @param question - Optional question text (can be empty if shown elsewhere)
|
|
18
|
+
* @returns Promise<boolean> - true for yes, false for no
|
|
19
|
+
*/
|
|
20
|
+
export async function promptYesNo(question) {
|
|
21
|
+
return new Promise((resolve) => {
|
|
22
|
+
if (question) {
|
|
23
|
+
process.stdout.write(`${question} ${colors.dim('(Enter/Esc)')} `);
|
|
24
|
+
}
|
|
25
|
+
if (process.stdin.isTTY) {
|
|
26
|
+
process.stdin.setRawMode(true);
|
|
27
|
+
}
|
|
28
|
+
process.stdin.resume();
|
|
29
|
+
const onKeyPress = (key) => {
|
|
30
|
+
const char = key.toString();
|
|
31
|
+
// Enter key
|
|
32
|
+
if (char === '\r' || char === '\n') {
|
|
33
|
+
cleanup();
|
|
34
|
+
console.log(chalk.green('Yes'));
|
|
35
|
+
resolve(true);
|
|
36
|
+
}
|
|
37
|
+
// Escape key
|
|
38
|
+
else if (char === '\x1b' && key.length === 1) {
|
|
39
|
+
cleanup();
|
|
40
|
+
console.log(chalk.red('No'));
|
|
41
|
+
resolve(false);
|
|
42
|
+
}
|
|
43
|
+
// 'y' or 'Y'
|
|
44
|
+
else if (char.toLowerCase() === 'y') {
|
|
45
|
+
cleanup();
|
|
46
|
+
console.log(chalk.green('Yes'));
|
|
47
|
+
resolve(true);
|
|
48
|
+
}
|
|
49
|
+
// 'n' or 'N'
|
|
50
|
+
else if (char.toLowerCase() === 'n') {
|
|
51
|
+
cleanup();
|
|
52
|
+
console.log(chalk.red('No'));
|
|
53
|
+
resolve(false);
|
|
54
|
+
}
|
|
55
|
+
// Ctrl+C
|
|
56
|
+
else if (char === '\x03') {
|
|
57
|
+
cleanup();
|
|
58
|
+
process.exit(0);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const cleanup = () => {
|
|
62
|
+
process.stdin.removeListener('data', onKeyPress);
|
|
63
|
+
if (process.stdin.isTTY) {
|
|
64
|
+
process.stdin.setRawMode(false);
|
|
65
|
+
}
|
|
66
|
+
process.stdin.pause();
|
|
67
|
+
};
|
|
68
|
+
process.stdin.on('data', onKeyPress);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEvB,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAE5B,YAAY;YACZ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,aAAa;iBACR,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,aAAa;iBACR,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,aAAa;iBACR,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,SAAS;iBACJ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create teaser table (limited info, no solutions)
|
|
3
|
+
*
|
|
4
|
+
* Shows only severity and package name with generic issue type.
|
|
5
|
+
* Used in audit mode before payment to preview issues.
|
|
6
|
+
*
|
|
7
|
+
* @param conflicts - Array of conflict objects
|
|
8
|
+
* @returns Formatted table string
|
|
9
|
+
*/
|
|
10
|
+
export declare function createTeaserTable(conflicts: any[]): string;
|
|
11
|
+
/**
|
|
12
|
+
* Create full solution table (shows recommended versions)
|
|
13
|
+
*
|
|
14
|
+
* Displays package name, current version, target version, and change type.
|
|
15
|
+
* Used after payment to show complete solution.
|
|
16
|
+
*
|
|
17
|
+
* @param conflicts - Array of conflict objects
|
|
18
|
+
* @param solution - Solution object with dependencies, devDependencies, and removals
|
|
19
|
+
* @returns Formatted table string
|
|
20
|
+
*/
|
|
21
|
+
export declare function createFullSolutionTable(conflicts: any[], solution: {
|
|
22
|
+
dependencies: Record<string, string>;
|
|
23
|
+
devDependencies: Record<string, string>;
|
|
24
|
+
removals?: Array<{
|
|
25
|
+
package: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
type: 'dependency' | 'devDependency';
|
|
28
|
+
}>;
|
|
29
|
+
}): string;
|
|
30
|
+
/**
|
|
31
|
+
* Wrap text to specified width
|
|
32
|
+
*
|
|
33
|
+
* Breaks text at word boundaries to fit within max width.
|
|
34
|
+
*
|
|
35
|
+
* @param text - Text to wrap
|
|
36
|
+
* @param maxWidth - Maximum line width
|
|
37
|
+
* @returns Array of wrapped lines
|
|
38
|
+
*/
|
|
39
|
+
export declare function wrapText(text: string, maxWidth: number): string[];
|
|
40
|
+
//# sourceMappingURL=table-builders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-builders.d.ts","sourceRoot":"","sources":["../../src/utils/table-builders.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,CAyC1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,GAAG,EAAE,EAChB,QAAQ,EAAE;IACR,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7F,GACA,MAAM,CA2GR;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBjE"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Table Builder Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions for building formatted tables in CLI output.
|
|
5
|
+
* Used for teaser (locked) and full (unlocked) analysis displays.
|
|
6
|
+
*/
|
|
7
|
+
import { colors } from './design-system.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create teaser table (limited info, no solutions)
|
|
10
|
+
*
|
|
11
|
+
* Shows only severity and package name with generic issue type.
|
|
12
|
+
* Used in audit mode before payment to preview issues.
|
|
13
|
+
*
|
|
14
|
+
* @param conflicts - Array of conflict objects
|
|
15
|
+
* @returns Formatted table string
|
|
16
|
+
*/
|
|
17
|
+
export function createTeaserTable(conflicts) {
|
|
18
|
+
const COL1 = 12; // SEVERITY
|
|
19
|
+
const COL2 = 30; // PACKAGE
|
|
20
|
+
const COL3 = 14; // ISSUE
|
|
21
|
+
const TOTAL_WIDTH = COL1 + COL2 + COL3;
|
|
22
|
+
const lines = [];
|
|
23
|
+
// Header row
|
|
24
|
+
lines.push(colors.whiteBold('SEVERITY'.padEnd(COL1)) +
|
|
25
|
+
colors.whiteBold('PACKAGE'.padEnd(COL2)) +
|
|
26
|
+
colors.whiteBold('ISSUE'.padEnd(COL3)));
|
|
27
|
+
// Separator line
|
|
28
|
+
lines.push(colors.gray('─'.repeat(TOTAL_WIDTH)));
|
|
29
|
+
for (const conflict of conflicts) {
|
|
30
|
+
const severity = conflict.severity?.toUpperCase() || 'UNKNOWN';
|
|
31
|
+
const severityColor = severity === 'CRITICAL' ? colors.dangerBold :
|
|
32
|
+
severity === 'HIGH' ? colors.danger :
|
|
33
|
+
severity === 'MEDIUM' ? colors.warning :
|
|
34
|
+
colors.dim;
|
|
35
|
+
// Truncate package name if too long
|
|
36
|
+
const pkg = (conflict.package || '').substring(0, COL2 - 1).padEnd(COL2);
|
|
37
|
+
// Generic issue description (no details to prevent bypass)
|
|
38
|
+
const issueType = severity === 'CRITICAL' ? 'Peer Clash' :
|
|
39
|
+
severity === 'HIGH' ? 'Version Gap' :
|
|
40
|
+
severity === 'MEDIUM' ? 'Conflict' : 'Minor';
|
|
41
|
+
lines.push(severityColor(severity.padEnd(COL1)) +
|
|
42
|
+
pkg +
|
|
43
|
+
issueType);
|
|
44
|
+
}
|
|
45
|
+
return lines.join('\n');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create full solution table (shows recommended versions)
|
|
49
|
+
*
|
|
50
|
+
* Displays package name, current version, target version, and change type.
|
|
51
|
+
* Used after payment to show complete solution.
|
|
52
|
+
*
|
|
53
|
+
* @param conflicts - Array of conflict objects
|
|
54
|
+
* @param solution - Solution object with dependencies, devDependencies, and removals
|
|
55
|
+
* @returns Formatted table string
|
|
56
|
+
*/
|
|
57
|
+
export function createFullSolutionTable(conflicts, solution) {
|
|
58
|
+
const COL1 = 35; // PACKAGE
|
|
59
|
+
const COL2 = 14; // CURRENT
|
|
60
|
+
const COL3 = 14; // TARGET
|
|
61
|
+
const COL4 = 10; // TYPE
|
|
62
|
+
const TOTAL_WIDTH = COL1 + COL2 + COL3 + COL4;
|
|
63
|
+
const lines = [];
|
|
64
|
+
// Header row
|
|
65
|
+
lines.push(colors.whiteBold('PACKAGE'.padEnd(COL1)) +
|
|
66
|
+
colors.whiteBold('CURRENT'.padEnd(COL2)) +
|
|
67
|
+
colors.whiteBold('TARGET'.padEnd(COL3)) +
|
|
68
|
+
colors.whiteBold('TYPE'.padEnd(COL4)));
|
|
69
|
+
// Separator line
|
|
70
|
+
lines.push(colors.gray('─'.repeat(TOTAL_WIDTH)));
|
|
71
|
+
// Merge solution deps
|
|
72
|
+
const allSolutions = { ...solution.dependencies, ...solution.devDependencies };
|
|
73
|
+
// Separate conflicts into updates vs adds
|
|
74
|
+
const updates = [];
|
|
75
|
+
const adds = [];
|
|
76
|
+
for (const conflict of conflicts) {
|
|
77
|
+
const recommended = allSolutions[conflict.package] || conflict.recommendedVersion || '';
|
|
78
|
+
const currentRaw = conflict.currentVersion || '';
|
|
79
|
+
const isNotInstalled = !currentRaw || currentRaw.toLowerCase() === 'not installed';
|
|
80
|
+
if (isNotInstalled) {
|
|
81
|
+
adds.push({ conflict, recommended });
|
|
82
|
+
}
|
|
83
|
+
else if (recommended) {
|
|
84
|
+
// Determine change type
|
|
85
|
+
let changeType = 'patch';
|
|
86
|
+
const cleanCurrent = currentRaw.replace(/[~^]/g, '');
|
|
87
|
+
const cleanRec = recommended.replace(/[~^]/g, '');
|
|
88
|
+
const currMajor = parseInt(cleanCurrent.split('.')[0], 10);
|
|
89
|
+
const recMajor = parseInt(cleanRec.split('.')[0], 10);
|
|
90
|
+
if (!isNaN(currMajor) && !isNaN(recMajor)) {
|
|
91
|
+
if (recMajor > currMajor)
|
|
92
|
+
changeType = 'major';
|
|
93
|
+
else if (recMajor === currMajor) {
|
|
94
|
+
const currMinor = parseInt(cleanCurrent.split('.')[1] || '0', 10);
|
|
95
|
+
const recMinor = parseInt(cleanRec.split('.')[1] || '0', 10);
|
|
96
|
+
if (recMinor > currMinor)
|
|
97
|
+
changeType = 'minor';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
updates.push({ conflict, recommended, changeType });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Render updates first
|
|
104
|
+
for (const { conflict, recommended, changeType } of updates) {
|
|
105
|
+
const pkg = (conflict.package || '').substring(0, COL1 - 1).padEnd(COL1);
|
|
106
|
+
let currentRaw = (conflict.currentVersion || '').replace(/[~^]/g, '').substring(0, COL2 - 1);
|
|
107
|
+
if (currentRaw.toLowerCase() === 'installed')
|
|
108
|
+
currentRaw = '—';
|
|
109
|
+
const currentPadded = currentRaw.padEnd(COL2);
|
|
110
|
+
const recommendedClean = recommended.replace(/[~^]/g, '').substring(0, COL3 - 1);
|
|
111
|
+
const recommendedPadded = recommendedClean.padEnd(COL3);
|
|
112
|
+
const typeLabel = changeType === 'major' ? 'Major' :
|
|
113
|
+
changeType === 'minor' ? 'Minor' : 'Patch';
|
|
114
|
+
const typeColor = changeType === 'major' ? colors.danger :
|
|
115
|
+
changeType === 'minor' ? colors.warning : colors.success;
|
|
116
|
+
lines.push(pkg +
|
|
117
|
+
colors.versionOld(currentPadded) +
|
|
118
|
+
colors.version(recommendedPadded) +
|
|
119
|
+
typeColor(typeLabel));
|
|
120
|
+
}
|
|
121
|
+
// Render adds
|
|
122
|
+
for (const { conflict, recommended } of adds) {
|
|
123
|
+
const pkg = (conflict.package || '').substring(0, COL1 - 1).padEnd(COL1);
|
|
124
|
+
const currentPadded = '—'.padEnd(COL2);
|
|
125
|
+
const recommendedClean = recommended ? recommended.replace(/[~^]/g, '').substring(0, COL3 - 1) : 'Add';
|
|
126
|
+
const recommendedPadded = recommendedClean.padEnd(COL3);
|
|
127
|
+
lines.push(pkg +
|
|
128
|
+
colors.dim(currentPadded) +
|
|
129
|
+
colors.version(recommendedPadded) +
|
|
130
|
+
colors.brand('+ Add'));
|
|
131
|
+
}
|
|
132
|
+
// Render removals
|
|
133
|
+
if (solution.removals && solution.removals.length > 0) {
|
|
134
|
+
for (const removal of solution.removals) {
|
|
135
|
+
const pkg = (removal.package || '').substring(0, COL1 - 1).padEnd(COL1);
|
|
136
|
+
const currentPadded = 'installed'.padEnd(COL2);
|
|
137
|
+
const targetPadded = '—'.padEnd(COL3);
|
|
138
|
+
lines.push(pkg +
|
|
139
|
+
colors.versionOld(currentPadded) +
|
|
140
|
+
colors.dim(targetPadded) +
|
|
141
|
+
colors.danger('Remove'));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return lines.join('\n');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Wrap text to specified width
|
|
148
|
+
*
|
|
149
|
+
* Breaks text at word boundaries to fit within max width.
|
|
150
|
+
*
|
|
151
|
+
* @param text - Text to wrap
|
|
152
|
+
* @param maxWidth - Maximum line width
|
|
153
|
+
* @returns Array of wrapped lines
|
|
154
|
+
*/
|
|
155
|
+
export function wrapText(text, maxWidth) {
|
|
156
|
+
if (!text)
|
|
157
|
+
return [];
|
|
158
|
+
const words = text.split(' ');
|
|
159
|
+
const lines = [];
|
|
160
|
+
let currentLine = '';
|
|
161
|
+
for (const word of words) {
|
|
162
|
+
if (currentLine.length + word.length + 1 <= maxWidth) {
|
|
163
|
+
currentLine += (currentLine ? ' ' : '') + word;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
if (currentLine)
|
|
167
|
+
lines.push(currentLine);
|
|
168
|
+
currentLine = word;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (currentLine)
|
|
172
|
+
lines.push(currentLine);
|
|
173
|
+
return lines;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=table-builders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-builders.js","sourceRoot":"","sources":["../../src/utils/table-builders.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "1.
|
|
1
|
+
export declare const CLI_VERSION = "1.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "depfixer",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Smart dependency conflict detection, peer dependency validation, and framework-aware migration tool for JavaScript/TypeScript projects. Supports React, Angular, Vue, Next.js. Analyzes package.json against 5M+ compatibility records.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"depfixer": "dist/index.js"
|
|
@@ -25,11 +25,31 @@
|
|
|
25
25
|
"dependency-management",
|
|
26
26
|
"package-json",
|
|
27
27
|
"version-conflicts",
|
|
28
|
+
"peer-dependencies",
|
|
29
|
+
"dependency-conflicts",
|
|
30
|
+
"compatibility",
|
|
31
|
+
"migration",
|
|
28
32
|
"angular",
|
|
29
33
|
"react",
|
|
30
34
|
"vue",
|
|
31
|
-
"
|
|
35
|
+
"nextjs",
|
|
36
|
+
"typescript",
|
|
37
|
+
"npm",
|
|
38
|
+
"npm-audit",
|
|
39
|
+
"package-compatibility",
|
|
40
|
+
"framework-migration",
|
|
41
|
+
"react-upgrade",
|
|
42
|
+
"angular-migration",
|
|
43
|
+
"dependency-analysis",
|
|
44
|
+
"depfixer"
|
|
32
45
|
],
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/depfixer/CLI"
|
|
49
|
+
},
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/depfixer/CLI/issues"
|
|
52
|
+
},
|
|
33
53
|
"author": "DepFixer Team",
|
|
34
54
|
"license": "MIT",
|
|
35
55
|
"homepage": "https://depfixer.com",
|