@jetstart/shared 1.1.4 → 1.4.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/.eslintrc.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../.eslintrc.json",
3
+ "parserOptions": {
4
+ "project": ["./tsconfig.json", "./tsconfig.tests.json"]
5
+ }
6
+ }
@@ -14,7 +14,7 @@ export interface BaseMessage {
14
14
  /**
15
15
  * Messages from Client to Core
16
16
  */
17
- export type ClientMessage = ClientConnectMessage | ClientStatusMessage | ClientLogMessage | ClientHeartbeatMessage | ClientDisconnectMessage;
17
+ export type ClientMessage = ClientConnectMessage | ClientStatusMessage | ClientLogMessage | ClientHeartbeatMessage | ClientDisconnectMessage | ClientClickEventMessage;
18
18
  export interface ClientConnectMessage extends BaseMessage {
19
19
  type: 'client:connect';
20
20
  sessionId: string;
@@ -37,6 +37,12 @@ export interface ClientDisconnectMessage extends BaseMessage {
37
37
  type: 'client:disconnect';
38
38
  reason?: string;
39
39
  }
40
+ export interface ClientClickEventMessage extends BaseMessage {
41
+ type: 'client:click';
42
+ action: string;
43
+ elementType: string;
44
+ elementText?: string;
45
+ }
40
46
  /**
41
47
  * Messages from Core to Client
42
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/protocols/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/protocols/websocket.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/protocols/websocket.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAsHH;;GAEG;AACH,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,kCAAuB,CAAA;IACvB,0CAA+B,CAAA;IAC/B,wCAA6B,CAAA;IAC7B,0BAAe,CAAA;AACjB,CAAC,EANW,OAAO,uBAAP,OAAO,QAMlB;AAWD,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,sDAAuC,CAAA;IACvC,8DAA+C,CAAA;IAC/C,kCAAmB,CAAA;IACnB,kDAAmC,CAAA;IACnC,kDAAmC,CAAA;IACnC,kCAAmB,CAAA;AACrB,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/protocols/websocket.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA8HH;;GAEG;AACH,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,kCAAuB,CAAA;IACvB,0CAA+B,CAAA;IAC/B,wCAA6B,CAAA;IAC7B,0BAAe,CAAA;AACjB,CAAC,EANW,OAAO,uBAAP,OAAO,QAMlB;AAWD,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,sDAAuC,CAAA;IACvC,8DAA+C,CAAA;IAC/C,kCAAmB,CAAA;IACnB,kDAAmC,CAAA;IACnC,kDAAmC,CAAA;IACnC,kCAAmB,CAAA;AACrB,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * JetStart Brand Colors
3
+ * Official color palette for consistent branding
4
+ */
5
+ export declare const BRAND_COLORS: {
6
+ readonly ORANGE: "#FA8F14";
7
+ readonly RED_ORANGE: "#F04023";
8
+ readonly DARK_PURPLE: "#160E36";
9
+ readonly DEEPER_PURPLE: "#120A24";
10
+ readonly CREAM: "#F8F3F0";
11
+ };
12
+ /**
13
+ * Terminal color codes for CLI output
14
+ */
15
+ export declare const TERMINAL_COLORS: {
16
+ readonly ORANGE: "\u001B[38;2;250;143;20m";
17
+ readonly RED_ORANGE: "\u001B[38;2;240;64;35m";
18
+ readonly CREAM: "\u001B[38;2;248;243;240m";
19
+ readonly BG_DARK_PURPLE: "\u001B[48;2;22;14;54m";
20
+ readonly BG_DEEPER_PURPLE: "\u001B[48;2;18;10;36m";
21
+ readonly RESET: "\u001B[0m";
22
+ readonly BOLD: "\u001B[1m";
23
+ readonly DIM: "\u001B[2m";
24
+ };
25
+ /**
26
+ * Helper function to colorize terminal output
27
+ */
28
+ export declare function colorize(text: string, color: keyof typeof TERMINAL_COLORS): string;
29
+ /**
30
+ * Commonly used color combinations
31
+ */
32
+ export declare const COLOR_PRESETS: {
33
+ readonly success: (text: string) => string;
34
+ readonly error: (text: string) => string;
35
+ readonly info: (text: string) => string;
36
+ readonly highlight: (text: string) => string;
37
+ };
38
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY;;;;;;CAWf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAclB,CAAC;AAEX;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,eAAe,GAAG,MAAM,CAElF;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;6BACR,MAAM;2BACR,MAAM;0BACP,MAAM;+BACD,MAAM;CAChB,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * JetStart Brand Colors
4
+ * Official color palette for consistent branding
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.COLOR_PRESETS = exports.TERMINAL_COLORS = exports.BRAND_COLORS = void 0;
8
+ exports.colorize = colorize;
9
+ exports.BRAND_COLORS = {
10
+ // Primary Colors
11
+ ORANGE: '#FA8F14',
12
+ RED_ORANGE: '#F04023',
13
+ // Background Colors
14
+ DARK_PURPLE: '#160E36',
15
+ DEEPER_PURPLE: '#120A24',
16
+ // Text/Foreground
17
+ CREAM: '#F8F3F0',
18
+ };
19
+ /**
20
+ * Terminal color codes for CLI output
21
+ */
22
+ exports.TERMINAL_COLORS = {
23
+ // Foreground colors
24
+ ORANGE: '\x1b[38;2;250;143;20m',
25
+ RED_ORANGE: '\x1b[38;2;240;64;35m',
26
+ CREAM: '\x1b[38;2;248;243;240m',
27
+ // Background colors
28
+ BG_DARK_PURPLE: '\x1b[48;2;22;14;54m',
29
+ BG_DEEPER_PURPLE: '\x1b[48;2;18;10;36m',
30
+ // Utility
31
+ RESET: '\x1b[0m',
32
+ BOLD: '\x1b[1m',
33
+ DIM: '\x1b[2m',
34
+ };
35
+ /**
36
+ * Helper function to colorize terminal output
37
+ */
38
+ function colorize(text, color) {
39
+ return `${exports.TERMINAL_COLORS[color]}${text}${exports.TERMINAL_COLORS.RESET}`;
40
+ }
41
+ /**
42
+ * Commonly used color combinations
43
+ */
44
+ exports.COLOR_PRESETS = {
45
+ success: (text) => colorize(text, 'ORANGE'),
46
+ error: (text) => colorize(text, 'RED_ORANGE'),
47
+ info: (text) => colorize(text, 'CREAM'),
48
+ highlight: (text) => `${exports.TERMINAL_COLORS.BOLD}${colorize(text, 'ORANGE')}`,
49
+ };
50
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqCH,4BAEC;AArCY,QAAA,YAAY,GAAG;IAC1B,iBAAiB;IACjB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IAErB,oBAAoB;IACpB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,SAAS;IAExB,kBAAkB;IAClB,KAAK,EAAE,SAAS;CACR,CAAC;AAEX;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B,oBAAoB;IACpB,MAAM,EAAE,uBAAuB;IAC/B,UAAU,EAAE,sBAAsB;IAClC,KAAK,EAAE,wBAAwB;IAE/B,oBAAoB;IACpB,cAAc,EAAE,qBAAqB;IACrC,gBAAgB,EAAE,qBAAqB;IAEvC,UAAU;IACV,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;CACN,CAAC;AAEX;;GAEG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,KAAmC;IACxE,OAAO,GAAG,uBAAe,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,uBAAe,CAAC,KAAK,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACU,QAAA,aAAa,GAAG;IAC3B,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACnD,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IACrD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAC/C,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,uBAAe,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;CACzE,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export * from './validation';
2
2
  export * from './constants';
3
+ export * from './version-compare';
4
+ export * from './colors';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC"}
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // Re-export all utilities
18
18
  __exportStar(require("./validation"), exports);
19
19
  __exportStar(require("./constants"), exports);
20
+ __exportStar(require("./version-compare"), exports);
21
+ __exportStar(require("./colors"), exports);
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0BAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0BAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B;AAC5B,oDAAkC;AAClC,2CAAyB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Version comparison utilities for checking tool compatibility
3
+ */
4
+ export interface ParsedVersion {
5
+ major: number;
6
+ minor: number;
7
+ patch: number;
8
+ original: string;
9
+ }
10
+ /**
11
+ * Parse a version string into its components
12
+ * Handles versions like "17.0.9", "1.9.21", "34.0.0", "v20.10.0"
13
+ */
14
+ export declare function parseVersion(version: string): ParsedVersion;
15
+ /**
16
+ * Compare two version strings
17
+ * Returns:
18
+ * - Negative number if v1 < v2
19
+ * - Zero if v1 === v2
20
+ * - Positive number if v1 > v2
21
+ */
22
+ export declare function compareVersions(v1: string, v2: string): number;
23
+ /**
24
+ * Check if a version satisfies a requirement string
25
+ * Supports operators: >=, <=, >, <, =, ^, ~
26
+ *
27
+ * Examples:
28
+ * - isVersionCompatible('17.0.9', '>=17') -> true
29
+ * - isVersionCompatible('16.0.0', '>=17') -> false
30
+ * - isVersionCompatible('1.9.21', '^1.9.0') -> true (same major, >= minor)
31
+ * - isVersionCompatible('1.8.0', '^1.9.0') -> false
32
+ * - isVersionCompatible('34.0.1', '~34.0.0') -> true (same major.minor, >= patch)
33
+ */
34
+ export declare function isVersionCompatible(version: string, requirement: string): boolean;
35
+ /**
36
+ * Format a version for display
37
+ */
38
+ export declare function formatVersion(version: ParsedVersion | string): string;
39
+ /**
40
+ * Check if version is within a range
41
+ * Range format: ">=min <=max" or "min - max"
42
+ */
43
+ export declare function isVersionInRange(version: string, range: string): boolean;
44
+ //# sourceMappingURL=version-compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-compare.d.ts","sourceRoot":"","sources":["../../src/utils/version-compare.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAa3D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA4CjF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAKrE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBxE"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Version comparison utilities for checking tool compatibility
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseVersion = parseVersion;
7
+ exports.compareVersions = compareVersions;
8
+ exports.isVersionCompatible = isVersionCompatible;
9
+ exports.formatVersion = formatVersion;
10
+ exports.isVersionInRange = isVersionInRange;
11
+ /**
12
+ * Parse a version string into its components
13
+ * Handles versions like "17.0.9", "1.9.21", "34.0.0", "v20.10.0"
14
+ */
15
+ function parseVersion(version) {
16
+ // Remove 'v' prefix and any non-numeric/dot characters at the start
17
+ const cleaned = version.replace(/^v/, '').replace(/[^\d.].*/g, '');
18
+ // Split by dots and parse each part
19
+ const parts = cleaned.split('.');
20
+ return {
21
+ major: parseInt(parts[0] || '0', 10),
22
+ minor: parseInt(parts[1] || '0', 10),
23
+ patch: parseInt(parts[2] || '0', 10),
24
+ original: version,
25
+ };
26
+ }
27
+ /**
28
+ * Compare two version strings
29
+ * Returns:
30
+ * - Negative number if v1 < v2
31
+ * - Zero if v1 === v2
32
+ * - Positive number if v1 > v2
33
+ */
34
+ function compareVersions(v1, v2) {
35
+ const a = parseVersion(v1);
36
+ const b = parseVersion(v2);
37
+ if (a.major !== b.major)
38
+ return a.major - b.major;
39
+ if (a.minor !== b.minor)
40
+ return a.minor - b.minor;
41
+ return a.patch - b.patch;
42
+ }
43
+ /**
44
+ * Check if a version satisfies a requirement string
45
+ * Supports operators: >=, <=, >, <, =, ^, ~
46
+ *
47
+ * Examples:
48
+ * - isVersionCompatible('17.0.9', '>=17') -> true
49
+ * - isVersionCompatible('16.0.0', '>=17') -> false
50
+ * - isVersionCompatible('1.9.21', '^1.9.0') -> true (same major, >= minor)
51
+ * - isVersionCompatible('1.8.0', '^1.9.0') -> false
52
+ * - isVersionCompatible('34.0.1', '~34.0.0') -> true (same major.minor, >= patch)
53
+ */
54
+ function isVersionCompatible(version, requirement) {
55
+ // Handle caret (^) - same major version, >= specified version
56
+ if (requirement.startsWith('^')) {
57
+ const reqVersion = requirement.slice(1);
58
+ const v = parseVersion(version);
59
+ const r = parseVersion(reqVersion);
60
+ return v.major === r.major && compareVersions(version, reqVersion) >= 0;
61
+ }
62
+ // Handle tilde (~) - same major.minor version, >= specified version
63
+ if (requirement.startsWith('~')) {
64
+ const reqVersion = requirement.slice(1);
65
+ const v = parseVersion(version);
66
+ const r = parseVersion(reqVersion);
67
+ return v.major === r.major && v.minor === r.minor && compareVersions(version, reqVersion) >= 0;
68
+ }
69
+ // Handle >= operator
70
+ if (requirement.startsWith('>=')) {
71
+ const reqVersion = requirement.slice(2).trim();
72
+ return compareVersions(version, reqVersion) >= 0;
73
+ }
74
+ // Handle <= operator
75
+ if (requirement.startsWith('<=')) {
76
+ const reqVersion = requirement.slice(2).trim();
77
+ return compareVersions(version, reqVersion) <= 0;
78
+ }
79
+ // Handle > operator
80
+ if (requirement.startsWith('>')) {
81
+ const reqVersion = requirement.slice(1).trim();
82
+ return compareVersions(version, reqVersion) > 0;
83
+ }
84
+ // Handle < operator
85
+ if (requirement.startsWith('<')) {
86
+ const reqVersion = requirement.slice(1).trim();
87
+ return compareVersions(version, reqVersion) < 0;
88
+ }
89
+ // Handle = operator or exact match
90
+ const reqVersion = requirement.startsWith('=') ? requirement.slice(1).trim() : requirement;
91
+ return compareVersions(version, reqVersion) === 0;
92
+ }
93
+ /**
94
+ * Format a version for display
95
+ */
96
+ function formatVersion(version) {
97
+ if (typeof version === 'string') {
98
+ return version;
99
+ }
100
+ return `${version.major}.${version.minor}.${version.patch}`;
101
+ }
102
+ /**
103
+ * Check if version is within a range
104
+ * Range format: ">=min <=max" or "min - max"
105
+ */
106
+ function isVersionInRange(version, range) {
107
+ // Handle "min - max" format
108
+ if (range.includes(' - ')) {
109
+ const [min, max] = range.split(' - ').map(v => v.trim());
110
+ return compareVersions(version, min) >= 0 && compareVersions(version, max) <= 0;
111
+ }
112
+ // Handle ">=min <=max" format
113
+ const parts = range.split(/\s+/);
114
+ for (const part of parts) {
115
+ if (!isVersionCompatible(version, part)) {
116
+ return false;
117
+ }
118
+ }
119
+ return true;
120
+ }
121
+ //# sourceMappingURL=version-compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-compare.js","sourceRoot":"","sources":["../../src/utils/version-compare.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetstart/shared",
3
- "version": "1.1.4",
3
+ "version": "1.4.0",
4
4
  "description": "Shared types, protocols, and utilities for JetStart",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,8 @@ export type ClientMessage =
28
28
  | ClientStatusMessage
29
29
  | ClientLogMessage
30
30
  | ClientHeartbeatMessage
31
- | ClientDisconnectMessage;
31
+ | ClientDisconnectMessage
32
+ | ClientClickEventMessage;
32
33
 
33
34
  export interface ClientConnectMessage extends BaseMessage {
34
35
  type: 'client:connect';
@@ -57,6 +58,13 @@ export interface ClientDisconnectMessage extends BaseMessage {
57
58
  reason?: string;
58
59
  }
59
60
 
61
+ export interface ClientClickEventMessage extends BaseMessage {
62
+ type: 'client:click';
63
+ action: string;
64
+ elementType: string;
65
+ elementText?: string;
66
+ }
67
+
60
68
  /**
61
69
  * Messages from Core to Client
62
70
  */
@@ -0,0 +1,53 @@
1
+ /**
2
+ * JetStart Brand Colors
3
+ * Official color palette for consistent branding
4
+ */
5
+
6
+ export const BRAND_COLORS = {
7
+ // Primary Colors
8
+ ORANGE: '#FA8F14',
9
+ RED_ORANGE: '#F04023',
10
+
11
+ // Background Colors
12
+ DARK_PURPLE: '#160E36',
13
+ DEEPER_PURPLE: '#120A24',
14
+
15
+ // Text/Foreground
16
+ CREAM: '#F8F3F0',
17
+ } as const;
18
+
19
+ /**
20
+ * Terminal color codes for CLI output
21
+ */
22
+ export const TERMINAL_COLORS = {
23
+ // Foreground colors
24
+ ORANGE: '\x1b[38;2;250;143;20m',
25
+ RED_ORANGE: '\x1b[38;2;240;64;35m',
26
+ CREAM: '\x1b[38;2;248;243;240m',
27
+
28
+ // Background colors
29
+ BG_DARK_PURPLE: '\x1b[48;2;22;14;54m',
30
+ BG_DEEPER_PURPLE: '\x1b[48;2;18;10;36m',
31
+
32
+ // Utility
33
+ RESET: '\x1b[0m',
34
+ BOLD: '\x1b[1m',
35
+ DIM: '\x1b[2m',
36
+ } as const;
37
+
38
+ /**
39
+ * Helper function to colorize terminal output
40
+ */
41
+ export function colorize(text: string, color: keyof typeof TERMINAL_COLORS): string {
42
+ return `${TERMINAL_COLORS[color]}${text}${TERMINAL_COLORS.RESET}`;
43
+ }
44
+
45
+ /**
46
+ * Commonly used color combinations
47
+ */
48
+ export const COLOR_PRESETS = {
49
+ success: (text: string) => colorize(text, 'ORANGE'),
50
+ error: (text: string) => colorize(text, 'RED_ORANGE'),
51
+ info: (text: string) => colorize(text, 'CREAM'),
52
+ highlight: (text: string) => `${TERMINAL_COLORS.BOLD}${colorize(text, 'ORANGE')}`,
53
+ } as const;
@@ -1,3 +1,5 @@
1
1
  // Re-export all utilities
2
2
  export * from './validation';
3
- export * from './constants';
3
+ export * from './constants';
4
+ export * from './version-compare';
5
+ export * from './colors';
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Version comparison utilities for checking tool compatibility
3
+ */
4
+
5
+ export interface ParsedVersion {
6
+ major: number;
7
+ minor: number;
8
+ patch: number;
9
+ original: string;
10
+ }
11
+
12
+ /**
13
+ * Parse a version string into its components
14
+ * Handles versions like "17.0.9", "1.9.21", "34.0.0", "v20.10.0"
15
+ */
16
+ export function parseVersion(version: string): ParsedVersion {
17
+ // Remove 'v' prefix and any non-numeric/dot characters at the start
18
+ const cleaned = version.replace(/^v/, '').replace(/[^\d.].*/g, '');
19
+
20
+ // Split by dots and parse each part
21
+ const parts = cleaned.split('.');
22
+
23
+ return {
24
+ major: parseInt(parts[0] || '0', 10),
25
+ minor: parseInt(parts[1] || '0', 10),
26
+ patch: parseInt(parts[2] || '0', 10),
27
+ original: version,
28
+ };
29
+ }
30
+
31
+ /**
32
+ * Compare two version strings
33
+ * Returns:
34
+ * - Negative number if v1 < v2
35
+ * - Zero if v1 === v2
36
+ * - Positive number if v1 > v2
37
+ */
38
+ export function compareVersions(v1: string, v2: string): number {
39
+ const a = parseVersion(v1);
40
+ const b = parseVersion(v2);
41
+
42
+ if (a.major !== b.major) return a.major - b.major;
43
+ if (a.minor !== b.minor) return a.minor - b.minor;
44
+ return a.patch - b.patch;
45
+ }
46
+
47
+ /**
48
+ * Check if a version satisfies a requirement string
49
+ * Supports operators: >=, <=, >, <, =, ^, ~
50
+ *
51
+ * Examples:
52
+ * - isVersionCompatible('17.0.9', '>=17') -> true
53
+ * - isVersionCompatible('16.0.0', '>=17') -> false
54
+ * - isVersionCompatible('1.9.21', '^1.9.0') -> true (same major, >= minor)
55
+ * - isVersionCompatible('1.8.0', '^1.9.0') -> false
56
+ * - isVersionCompatible('34.0.1', '~34.0.0') -> true (same major.minor, >= patch)
57
+ */
58
+ export function isVersionCompatible(version: string, requirement: string): boolean {
59
+ // Handle caret (^) - same major version, >= specified version
60
+ if (requirement.startsWith('^')) {
61
+ const reqVersion = requirement.slice(1);
62
+ const v = parseVersion(version);
63
+ const r = parseVersion(reqVersion);
64
+ return v.major === r.major && compareVersions(version, reqVersion) >= 0;
65
+ }
66
+
67
+ // Handle tilde (~) - same major.minor version, >= specified version
68
+ if (requirement.startsWith('~')) {
69
+ const reqVersion = requirement.slice(1);
70
+ const v = parseVersion(version);
71
+ const r = parseVersion(reqVersion);
72
+ return v.major === r.major && v.minor === r.minor && compareVersions(version, reqVersion) >= 0;
73
+ }
74
+
75
+ // Handle >= operator
76
+ if (requirement.startsWith('>=')) {
77
+ const reqVersion = requirement.slice(2).trim();
78
+ return compareVersions(version, reqVersion) >= 0;
79
+ }
80
+
81
+ // Handle <= operator
82
+ if (requirement.startsWith('<=')) {
83
+ const reqVersion = requirement.slice(2).trim();
84
+ return compareVersions(version, reqVersion) <= 0;
85
+ }
86
+
87
+ // Handle > operator
88
+ if (requirement.startsWith('>')) {
89
+ const reqVersion = requirement.slice(1).trim();
90
+ return compareVersions(version, reqVersion) > 0;
91
+ }
92
+
93
+ // Handle < operator
94
+ if (requirement.startsWith('<')) {
95
+ const reqVersion = requirement.slice(1).trim();
96
+ return compareVersions(version, reqVersion) < 0;
97
+ }
98
+
99
+ // Handle = operator or exact match
100
+ const reqVersion = requirement.startsWith('=') ? requirement.slice(1).trim() : requirement;
101
+ return compareVersions(version, reqVersion) === 0;
102
+ }
103
+
104
+ /**
105
+ * Format a version for display
106
+ */
107
+ export function formatVersion(version: ParsedVersion | string): string {
108
+ if (typeof version === 'string') {
109
+ return version;
110
+ }
111
+ return `${version.major}.${version.minor}.${version.patch}`;
112
+ }
113
+
114
+ /**
115
+ * Check if version is within a range
116
+ * Range format: ">=min <=max" or "min - max"
117
+ */
118
+ export function isVersionInRange(version: string, range: string): boolean {
119
+ // Handle "min - max" format
120
+ if (range.includes(' - ')) {
121
+ const [min, max] = range.split(' - ').map(v => v.trim());
122
+ return compareVersions(version, min) >= 0 && compareVersions(version, max) <= 0;
123
+ }
124
+
125
+ // Handle ">=min <=max" format
126
+ const parts = range.split(/\s+/);
127
+ for (const part of parts) {
128
+ if (!isVersionCompatible(version, part)) {
129
+ return false;
130
+ }
131
+ }
132
+
133
+ return true;
134
+ }