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.
Files changed (52) hide show
  1. package/dist/commands/check.d.ts +8 -0
  2. package/dist/commands/check.d.ts.map +1 -0
  3. package/dist/commands/check.js +742 -0
  4. package/dist/commands/check.js.map +1 -0
  5. package/dist/commands/migrate.d.ts +1 -7
  6. package/dist/commands/migrate.d.ts.map +1 -1
  7. package/dist/commands/migrate.js +702 -706
  8. package/dist/commands/migrate.js.map +1 -1
  9. package/dist/commands/smart.d.ts.map +1 -1
  10. package/dist/commands/smart.js +954 -911
  11. package/dist/commands/smart.js.map +1 -1
  12. package/dist/constants/analysis.constants.d.ts +2 -0
  13. package/dist/constants/analysis.constants.d.ts.map +1 -1
  14. package/dist/constants/analysis.constants.js +9 -0
  15. package/dist/constants/analysis.constants.js.map +1 -1
  16. package/dist/index.js +57 -17
  17. package/dist/index.js.map +1 -1
  18. package/dist/services/api-client.d.ts +89 -0
  19. package/dist/services/api-client.d.ts.map +1 -1
  20. package/dist/services/api-client.js +95 -1
  21. package/dist/services/api-client.js.map +1 -1
  22. package/dist/services/framework-detector.d.ts +23 -0
  23. package/dist/services/framework-detector.d.ts.map +1 -0
  24. package/dist/services/framework-detector.js +230 -0
  25. package/dist/services/framework-detector.js.map +1 -0
  26. package/dist/services/payment-flow.d.ts +3 -1
  27. package/dist/services/payment-flow.d.ts.map +1 -1
  28. package/dist/services/payment-flow.js +8 -1
  29. package/dist/services/payment-flow.js.map +1 -1
  30. package/dist/utils/framework-utils.d.ts +29 -0
  31. package/dist/utils/framework-utils.d.ts.map +1 -0
  32. package/dist/utils/framework-utils.js +45 -0
  33. package/dist/utils/framework-utils.js.map +1 -0
  34. package/dist/utils/interactive-picker.d.ts +12 -0
  35. package/dist/utils/interactive-picker.d.ts.map +1 -0
  36. package/dist/utils/interactive-picker.js +109 -0
  37. package/dist/utils/interactive-picker.js.map +1 -0
  38. package/dist/utils/package-parser.d.ts +24 -0
  39. package/dist/utils/package-parser.d.ts.map +1 -0
  40. package/dist/utils/package-parser.js +63 -0
  41. package/dist/utils/package-parser.js.map +1 -0
  42. package/dist/utils/prompt.d.ts +13 -0
  43. package/dist/utils/prompt.d.ts.map +1 -0
  44. package/dist/utils/prompt.js +71 -0
  45. package/dist/utils/prompt.js.map +1 -0
  46. package/dist/utils/table-builders.d.ts +40 -0
  47. package/dist/utils/table-builders.d.ts.map +1 -0
  48. package/dist/utils/table-builders.js +175 -0
  49. package/dist/utils/table-builders.js.map +1 -0
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. 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.8";
1
+ export declare const CLI_VERSION = "1.2.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Single source of truth for CLI version
2
- export const CLI_VERSION = '1.1.8';
2
+ export const CLI_VERSION = '1.2.0';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "depfixer",
3
- "version": "1.1.8",
4
- "description": "CLI tool for analyzing and fixing JavaScript/TypeScript dependency conflicts",
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
- "npm"
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",