craftdesk 0.2.0 → 0.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/CHANGELOG.md +57 -0
- package/README.md +968 -92
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +303 -7
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +72 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +198 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +52 -11
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +369 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +189 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +35 -10
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/installer.d.ts +51 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +245 -14
- package/dist/services/installer.js.map +1 -1
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +182 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +63 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -17
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -370
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -29
package/dist/utils/logger.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Console logging utility with color support and spinner functionality
|
|
4
|
+
* Provides consistent, formatted output for CLI operations
|
|
5
|
+
*/
|
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
7
|
exports.logger = exports.Logger = void 0;
|
|
4
|
-
|
|
8
|
+
/** ANSI color codes for terminal output styling */
|
|
5
9
|
const colors = {
|
|
6
10
|
reset: '\x1b[0m',
|
|
7
11
|
green: '\x1b[32m',
|
|
@@ -13,60 +17,131 @@ const colors = {
|
|
|
13
17
|
bold: '\x1b[1m',
|
|
14
18
|
dim: '\x1b[2m',
|
|
15
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Logger class for formatted console output
|
|
22
|
+
* Supports success, error, warning, info, debug, and spinner states
|
|
23
|
+
*/
|
|
16
24
|
class Logger {
|
|
25
|
+
/** Current spinner text (null if no spinner is active) */
|
|
17
26
|
spinnerText = null;
|
|
27
|
+
/**
|
|
28
|
+
* Logs a success message with a green checkmark
|
|
29
|
+
*
|
|
30
|
+
* @param message - Success message to display
|
|
31
|
+
*/
|
|
18
32
|
success(message) {
|
|
19
33
|
console.log(`${colors.green}✓${colors.reset}`, message);
|
|
20
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Logs an error message with a red X
|
|
37
|
+
*
|
|
38
|
+
* @param message - Error message to display
|
|
39
|
+
*/
|
|
21
40
|
error(message) {
|
|
22
41
|
console.error(`${colors.red}✗${colors.reset}`, message);
|
|
23
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Logs a warning message with a yellow exclamation mark
|
|
45
|
+
*
|
|
46
|
+
* @param message - Warning message to display
|
|
47
|
+
*/
|
|
24
48
|
warn(message) {
|
|
25
49
|
console.log(`${colors.yellow}!${colors.reset}`, message);
|
|
26
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Logs an informational message with a blue arrow
|
|
53
|
+
*
|
|
54
|
+
* @param message - Info message to display
|
|
55
|
+
*/
|
|
27
56
|
info(message) {
|
|
28
57
|
console.log(`${colors.blue}→${colors.reset}`, message);
|
|
29
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Logs a debug message if DEBUG environment variable is set
|
|
61
|
+
*
|
|
62
|
+
* @param message - Debug message to display
|
|
63
|
+
*/
|
|
30
64
|
debug(message) {
|
|
31
65
|
if (process.env.DEBUG) {
|
|
32
66
|
console.log(`${colors.gray}[DEBUG]${colors.reset}`, message);
|
|
33
67
|
}
|
|
34
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Starts a spinner with the specified text
|
|
71
|
+
*
|
|
72
|
+
* @param text - Text to display with the spinner
|
|
73
|
+
*/
|
|
35
74
|
startSpinner(text) {
|
|
36
75
|
this.spinnerText = text;
|
|
37
76
|
console.log(`${colors.cyan}⋯${colors.reset}`, text);
|
|
38
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Updates the current spinner with new text
|
|
80
|
+
*
|
|
81
|
+
* @param text - New text to display
|
|
82
|
+
*/
|
|
39
83
|
updateSpinner(text) {
|
|
40
84
|
if (this.spinnerText) {
|
|
41
85
|
this.spinnerText = text;
|
|
42
86
|
console.log(' ', text);
|
|
43
87
|
}
|
|
44
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Completes the spinner with a success state
|
|
91
|
+
*
|
|
92
|
+
* @param text - Optional override text (defaults to current spinner text)
|
|
93
|
+
*/
|
|
45
94
|
succeedSpinner(text) {
|
|
46
95
|
if (this.spinnerText) {
|
|
47
96
|
console.log(`${colors.green}✓${colors.reset}`, text || this.spinnerText);
|
|
48
97
|
this.spinnerText = null;
|
|
49
98
|
}
|
|
50
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Completes the spinner with a failure state
|
|
102
|
+
*
|
|
103
|
+
* @param text - Optional override text (defaults to current spinner text)
|
|
104
|
+
*/
|
|
51
105
|
failSpinner(text) {
|
|
52
106
|
if (this.spinnerText) {
|
|
53
107
|
console.log(`${colors.red}✗${colors.reset}`, text || this.spinnerText);
|
|
54
108
|
this.spinnerText = null;
|
|
55
109
|
}
|
|
56
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Stops the current spinner without completing it
|
|
113
|
+
*/
|
|
57
114
|
stopSpinner() {
|
|
58
115
|
this.spinnerText = null;
|
|
59
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Logs a plain message without formatting
|
|
119
|
+
*
|
|
120
|
+
* @param message - Message to display
|
|
121
|
+
*/
|
|
60
122
|
log(message) {
|
|
61
123
|
console.log(message);
|
|
62
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Wraps text with bold ANSI formatting
|
|
127
|
+
*
|
|
128
|
+
* @param text - Text to make bold
|
|
129
|
+
* @returns Text wrapped with bold ANSI codes
|
|
130
|
+
*/
|
|
63
131
|
bold(text) {
|
|
64
132
|
return `${colors.bold}${text}${colors.reset}`;
|
|
65
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Wraps text with dim ANSI formatting
|
|
136
|
+
*
|
|
137
|
+
* @param text - Text to make dim
|
|
138
|
+
* @returns Text wrapped with dim ANSI codes
|
|
139
|
+
*/
|
|
66
140
|
dim(text) {
|
|
67
141
|
return `${colors.dim}${text}${colors.reset}`;
|
|
68
142
|
}
|
|
69
143
|
}
|
|
70
144
|
exports.Logger = Logger;
|
|
145
|
+
/** Global logger instance for use throughout the application */
|
|
71
146
|
exports.logger = new Logger();
|
|
72
147
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for version comparison and semantic versioning operations
|
|
3
|
+
* Supports parsing, comparing, and sorting semver version strings
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parses a semantic version string into its components
|
|
7
|
+
*
|
|
8
|
+
* @param version - Version string to parse (e.g., "1.2.3" or "v1.2.3")
|
|
9
|
+
* @returns Object with major, minor, and patch numbers, or null if invalid
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseSemver(version: string): {
|
|
12
|
+
major: number;
|
|
13
|
+
minor: number;
|
|
14
|
+
patch: number;
|
|
15
|
+
} | null;
|
|
16
|
+
/**
|
|
17
|
+
* Compares two semantic version strings
|
|
18
|
+
*
|
|
19
|
+
* @param a - First version to compare
|
|
20
|
+
* @param b - Second version to compare
|
|
21
|
+
* @returns -1 if a < b, 0 if a == b, 1 if a > b
|
|
22
|
+
*/
|
|
23
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
24
|
+
/**
|
|
25
|
+
* Checks if the latest version is newer than the current version
|
|
26
|
+
*
|
|
27
|
+
* @param current - Current version string
|
|
28
|
+
* @param latest - Latest version string
|
|
29
|
+
* @returns True if latest is newer than current
|
|
30
|
+
*/
|
|
31
|
+
export declare function isNewerVersion(current: string, latest: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Sorts an array of version tags by semantic version (newest first)
|
|
34
|
+
*
|
|
35
|
+
* @param tags - Array of version tag strings to sort
|
|
36
|
+
* @returns New array sorted in descending order (newest to oldest)
|
|
37
|
+
*/
|
|
38
|
+
export declare function sortTagsBySemver(tags: string[]): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Determines the type of update between two versions
|
|
41
|
+
*
|
|
42
|
+
* @param current - Current version string
|
|
43
|
+
* @param latest - Latest version string
|
|
44
|
+
* @returns Update type ('major', 'minor', or 'patch') or undefined if not parseable
|
|
45
|
+
*/
|
|
46
|
+
export declare function getUpdateType(current: string, latest: string): 'major' | 'minor' | 'patch' | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Pads a string to the right with spaces
|
|
49
|
+
*
|
|
50
|
+
* @param str - String to pad
|
|
51
|
+
* @param len - Desired total length
|
|
52
|
+
* @returns Padded string
|
|
53
|
+
*/
|
|
54
|
+
export declare function padRight(str: string, len: number): string;
|
|
55
|
+
/**
|
|
56
|
+
* Wraps text with ANSI color codes for terminal output
|
|
57
|
+
*
|
|
58
|
+
* @param text - Text to colorize
|
|
59
|
+
* @param color - Color to apply
|
|
60
|
+
* @returns Text wrapped with ANSI color codes
|
|
61
|
+
*/
|
|
62
|
+
export declare function colorize(text: string, color: 'red' | 'yellow' | 'green' | 'reset'): string;
|
|
63
|
+
//# sourceMappingURL=version-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-utils.d.ts","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASnG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAezD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAWtG;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAS1F"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for version comparison and semantic versioning operations
|
|
4
|
+
* Supports parsing, comparing, and sorting semver version strings
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.parseSemver = parseSemver;
|
|
8
|
+
exports.compareSemver = compareSemver;
|
|
9
|
+
exports.isNewerVersion = isNewerVersion;
|
|
10
|
+
exports.sortTagsBySemver = sortTagsBySemver;
|
|
11
|
+
exports.getUpdateType = getUpdateType;
|
|
12
|
+
exports.padRight = padRight;
|
|
13
|
+
exports.colorize = colorize;
|
|
14
|
+
/**
|
|
15
|
+
* Parses a semantic version string into its components
|
|
16
|
+
*
|
|
17
|
+
* @param version - Version string to parse (e.g., "1.2.3" or "v1.2.3")
|
|
18
|
+
* @returns Object with major, minor, and patch numbers, or null if invalid
|
|
19
|
+
*/
|
|
20
|
+
function parseSemver(version) {
|
|
21
|
+
const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)/);
|
|
22
|
+
if (!match)
|
|
23
|
+
return null;
|
|
24
|
+
return {
|
|
25
|
+
major: parseInt(match[1], 10),
|
|
26
|
+
minor: parseInt(match[2], 10),
|
|
27
|
+
patch: parseInt(match[3], 10)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compares two semantic version strings
|
|
32
|
+
*
|
|
33
|
+
* @param a - First version to compare
|
|
34
|
+
* @param b - Second version to compare
|
|
35
|
+
* @returns -1 if a < b, 0 if a == b, 1 if a > b
|
|
36
|
+
*/
|
|
37
|
+
function compareSemver(a, b) {
|
|
38
|
+
const aParsed = parseSemver(a);
|
|
39
|
+
const bParsed = parseSemver(b);
|
|
40
|
+
if (!aParsed || !bParsed) {
|
|
41
|
+
// Fall back to string comparison
|
|
42
|
+
return a.localeCompare(b);
|
|
43
|
+
}
|
|
44
|
+
if (aParsed.major !== bParsed.major) {
|
|
45
|
+
return aParsed.major - bParsed.major;
|
|
46
|
+
}
|
|
47
|
+
if (aParsed.minor !== bParsed.minor) {
|
|
48
|
+
return aParsed.minor - bParsed.minor;
|
|
49
|
+
}
|
|
50
|
+
return aParsed.patch - bParsed.patch;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Checks if the latest version is newer than the current version
|
|
54
|
+
*
|
|
55
|
+
* @param current - Current version string
|
|
56
|
+
* @param latest - Latest version string
|
|
57
|
+
* @returns True if latest is newer than current
|
|
58
|
+
*/
|
|
59
|
+
function isNewerVersion(current, latest) {
|
|
60
|
+
return compareSemver(latest, current) > 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sorts an array of version tags by semantic version (newest first)
|
|
64
|
+
*
|
|
65
|
+
* @param tags - Array of version tag strings to sort
|
|
66
|
+
* @returns New array sorted in descending order (newest to oldest)
|
|
67
|
+
*/
|
|
68
|
+
function sortTagsBySemver(tags) {
|
|
69
|
+
return [...tags].sort((a, b) => {
|
|
70
|
+
const aParsed = parseSemver(a);
|
|
71
|
+
const bParsed = parseSemver(b);
|
|
72
|
+
if (aParsed && bParsed) {
|
|
73
|
+
// Both are valid semver - sort descending (newest first)
|
|
74
|
+
if (aParsed.major !== bParsed.major)
|
|
75
|
+
return bParsed.major - aParsed.major;
|
|
76
|
+
if (aParsed.minor !== bParsed.minor)
|
|
77
|
+
return bParsed.minor - aParsed.minor;
|
|
78
|
+
return bParsed.patch - aParsed.patch;
|
|
79
|
+
}
|
|
80
|
+
// Fall back to string comparison (reverse for newest first)
|
|
81
|
+
return b.localeCompare(a);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Determines the type of update between two versions
|
|
86
|
+
*
|
|
87
|
+
* @param current - Current version string
|
|
88
|
+
* @param latest - Latest version string
|
|
89
|
+
* @returns Update type ('major', 'minor', or 'patch') or undefined if not parseable
|
|
90
|
+
*/
|
|
91
|
+
function getUpdateType(current, latest) {
|
|
92
|
+
const currentParsed = parseSemver(current);
|
|
93
|
+
const latestParsed = parseSemver(latest);
|
|
94
|
+
if (!currentParsed || !latestParsed)
|
|
95
|
+
return undefined;
|
|
96
|
+
if (latestParsed.major > currentParsed.major)
|
|
97
|
+
return 'major';
|
|
98
|
+
if (latestParsed.minor > currentParsed.minor)
|
|
99
|
+
return 'minor';
|
|
100
|
+
if (latestParsed.patch > currentParsed.patch)
|
|
101
|
+
return 'patch';
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Pads a string to the right with spaces
|
|
106
|
+
*
|
|
107
|
+
* @param str - String to pad
|
|
108
|
+
* @param len - Desired total length
|
|
109
|
+
* @returns Padded string
|
|
110
|
+
*/
|
|
111
|
+
function padRight(str, len) {
|
|
112
|
+
return str.padEnd(len);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Wraps text with ANSI color codes for terminal output
|
|
116
|
+
*
|
|
117
|
+
* @param text - Text to colorize
|
|
118
|
+
* @param color - Color to apply
|
|
119
|
+
* @returns Text wrapped with ANSI color codes
|
|
120
|
+
*/
|
|
121
|
+
function colorize(text, color) {
|
|
122
|
+
const colors = {
|
|
123
|
+
red: '\x1b[31m',
|
|
124
|
+
yellow: '\x1b[33m',
|
|
125
|
+
green: '\x1b[32m',
|
|
126
|
+
reset: '\x1b[0m'
|
|
127
|
+
};
|
|
128
|
+
return `${colors[color]}${text}${colors.reset}`;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=version-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-utils.js","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "craftdesk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Package manager for Claude Code skills and
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Package manager for Claude Code skills, agents, commands, hooks, and plugins",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"craftdesk": "./bin/craftdesk.js"
|
|
8
8
|
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/",
|
|
11
|
+
"bin/",
|
|
12
|
+
"README.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"LICENSE.md"
|
|
15
|
+
],
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/mensfeld/craftdesk.git"
|
|
19
|
+
},
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/mensfeld/craftdesk/issues"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/mensfeld/craftdesk#readme",
|
|
9
24
|
"scripts": {
|
|
10
25
|
"build": "tsc",
|
|
11
26
|
"dev": "ts-node src/index.ts",
|
|
@@ -14,6 +29,11 @@
|
|
|
14
29
|
"test:ui": "vitest --ui",
|
|
15
30
|
"test:coverage": "vitest run --coverage",
|
|
16
31
|
"test:watch": "vitest watch",
|
|
32
|
+
"lint": "eslint src/",
|
|
33
|
+
"lint:fix": "eslint src/ --fix",
|
|
34
|
+
"lint:docs": "eslint src/ --rule 'jsdoc/require-jsdoc: error'",
|
|
35
|
+
"docs": "typedoc",
|
|
36
|
+
"docs:watch": "typedoc --watch",
|
|
17
37
|
"prepare": "npm run build"
|
|
18
38
|
},
|
|
19
39
|
"keywords": [
|
|
@@ -27,19 +47,26 @@
|
|
|
27
47
|
"author": "CraftDesk",
|
|
28
48
|
"license": "MIT",
|
|
29
49
|
"dependencies": {
|
|
50
|
+
"adm-zip": "^0.5.10",
|
|
30
51
|
"axios": "^1.6.2",
|
|
31
|
-
"commander": "^
|
|
52
|
+
"commander": "^14.0.0",
|
|
32
53
|
"fs-extra": "^11.2.0"
|
|
33
54
|
},
|
|
34
55
|
"devDependencies": {
|
|
35
|
-
"@types/
|
|
56
|
+
"@types/adm-zip": "^0.5.5",
|
|
36
57
|
"@types/fs-extra": "^11.0.4",
|
|
58
|
+
"@types/node": "^24.0.0",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "^8.48.0",
|
|
60
|
+
"@typescript-eslint/parser": "^8.48.0",
|
|
61
|
+
"@vitest/coverage-v8": "^4.0.0",
|
|
62
|
+
"@vitest/ui": "^4.0.0",
|
|
63
|
+
"eslint": "^9.39.1",
|
|
64
|
+
"eslint-plugin-jsdoc": "^62.0.0",
|
|
65
|
+
"typedoc": "^0.28.14",
|
|
37
66
|
"typescript": "^5.3.3",
|
|
38
|
-
"vitest": "^
|
|
39
|
-
"@vitest/ui": "^1.0.4",
|
|
40
|
-
"@vitest/coverage-v8": "^1.0.4"
|
|
67
|
+
"vitest": "^4.0.0"
|
|
41
68
|
},
|
|
42
69
|
"engines": {
|
|
43
|
-
"node": ">=
|
|
70
|
+
"node": ">=20.0.0"
|
|
44
71
|
}
|
|
45
|
-
}
|
|
72
|
+
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(npm run build:*)",
|
|
5
|
-
"Bash(cat:*)",
|
|
6
|
-
"Bash(git init:*)",
|
|
7
|
-
"Bash(git remote add:*)",
|
|
8
|
-
"Bash(git add:*)",
|
|
9
|
-
"Bash(git commit:*)",
|
|
10
|
-
"Bash(git push:*)",
|
|
11
|
-
"Bash(npm test)",
|
|
12
|
-
"Bash(node /home/mencio/Software/CraftDesk/CraftDesk/cli/dist/index.js:*)"
|
|
13
|
-
],
|
|
14
|
-
"deny": [],
|
|
15
|
-
"ask": []
|
|
16
|
-
}
|
|
17
|
-
}
|
package/.github/workflows/ci.yml
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main, master, develop]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [main, master, develop]
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
test:
|
|
11
|
-
name: Test on Node.js ${{ matrix.node-version }}
|
|
12
|
-
runs-on: ubuntu-latest
|
|
13
|
-
|
|
14
|
-
strategy:
|
|
15
|
-
matrix:
|
|
16
|
-
node-version: [18.x, 20.x, 22.x]
|
|
17
|
-
|
|
18
|
-
steps:
|
|
19
|
-
- name: Checkout code
|
|
20
|
-
uses: actions/checkout@v4
|
|
21
|
-
|
|
22
|
-
- name: Setup Node.js ${{ matrix.node-version }}
|
|
23
|
-
uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: ${{ matrix.node-version }}
|
|
26
|
-
cache: 'npm'
|
|
27
|
-
|
|
28
|
-
- name: Install dependencies
|
|
29
|
-
run: npm ci
|
|
30
|
-
|
|
31
|
-
- name: Run linter (if configured)
|
|
32
|
-
run: npm run lint --if-present
|
|
33
|
-
|
|
34
|
-
- name: Run tests
|
|
35
|
-
run: npm test
|
|
36
|
-
|
|
37
|
-
- name: Generate coverage report
|
|
38
|
-
run: npm run test:coverage
|
|
39
|
-
if: matrix.node-version == '20.x'
|
|
40
|
-
|
|
41
|
-
- name: Upload coverage to Codecov
|
|
42
|
-
uses: codecov/codecov-action@v3
|
|
43
|
-
if: matrix.node-version == '20.x'
|
|
44
|
-
with:
|
|
45
|
-
files: ./coverage/coverage-final.json
|
|
46
|
-
flags: unittests
|
|
47
|
-
name: codecov-umbrella
|
|
48
|
-
fail_ci_if_error: false
|
|
49
|
-
|
|
50
|
-
build:
|
|
51
|
-
name: Build
|
|
52
|
-
runs-on: ubuntu-latest
|
|
53
|
-
needs: test
|
|
54
|
-
|
|
55
|
-
steps:
|
|
56
|
-
- name: Checkout code
|
|
57
|
-
uses: actions/checkout@v4
|
|
58
|
-
|
|
59
|
-
- name: Setup Node.js
|
|
60
|
-
uses: actions/setup-node@v4
|
|
61
|
-
with:
|
|
62
|
-
node-version: '20.x'
|
|
63
|
-
cache: 'npm'
|
|
64
|
-
|
|
65
|
-
- name: Install dependencies
|
|
66
|
-
run: npm ci
|
|
67
|
-
|
|
68
|
-
- name: Build TypeScript
|
|
69
|
-
run: npm run build
|
|
70
|
-
|
|
71
|
-
- name: Verify build artifacts
|
|
72
|
-
run: |
|
|
73
|
-
test -f dist/index.js || exit 1
|
|
74
|
-
echo "Build successful!"
|
|
75
|
-
|
|
76
|
-
type-check:
|
|
77
|
-
name: Type Check
|
|
78
|
-
runs-on: ubuntu-latest
|
|
79
|
-
|
|
80
|
-
steps:
|
|
81
|
-
- name: Checkout code
|
|
82
|
-
uses: actions/checkout@v4
|
|
83
|
-
|
|
84
|
-
- name: Setup Node.js
|
|
85
|
-
uses: actions/setup-node@v4
|
|
86
|
-
with:
|
|
87
|
-
node-version: '20.x'
|
|
88
|
-
cache: 'npm'
|
|
89
|
-
|
|
90
|
-
- name: Install dependencies
|
|
91
|
-
run: npm ci
|
|
92
|
-
|
|
93
|
-
- name: Run TypeScript compiler check
|
|
94
|
-
run: npx tsc --noEmit
|