@ducky7go/ducky-cli 0.0.1
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/LICENSE +661 -0
- package/README.md +241 -0
- package/bin/ducky +25 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +19 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/nuget/index.d.ts +3 -0
- package/dist/commands/nuget/index.d.ts.map +1 -0
- package/dist/commands/nuget/index.js +23 -0
- package/dist/commands/nuget/index.js.map +1 -0
- package/dist/commands/nuget/pack.d.ts +7 -0
- package/dist/commands/nuget/pack.d.ts.map +1 -0
- package/dist/commands/nuget/pack.js +78 -0
- package/dist/commands/nuget/pack.js.map +1 -0
- package/dist/commands/nuget/push.d.ts +7 -0
- package/dist/commands/nuget/push.d.ts.map +1 -0
- package/dist/commands/nuget/push.js +110 -0
- package/dist/commands/nuget/push.js.map +1 -0
- package/dist/commands/nuget/validate.d.ts +7 -0
- package/dist/commands/nuget/validate.d.ts.map +1 -0
- package/dist/commands/nuget/validate.js +78 -0
- package/dist/commands/nuget/validate.js.map +1 -0
- package/dist/formats/index.d.ts +2 -0
- package/dist/formats/index.d.ts.map +1 -0
- package/dist/formats/index.js +6 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/nuget/client.d.ts +59 -0
- package/dist/formats/nuget/client.d.ts.map +1 -0
- package/dist/formats/nuget/client.js +202 -0
- package/dist/formats/nuget/client.js.map +1 -0
- package/dist/formats/nuget/collector.d.ts +36 -0
- package/dist/formats/nuget/collector.d.ts.map +1 -0
- package/dist/formats/nuget/collector.js +72 -0
- package/dist/formats/nuget/collector.js.map +1 -0
- package/dist/formats/nuget/index.d.ts +6 -0
- package/dist/formats/nuget/index.d.ts.map +1 -0
- package/dist/formats/nuget/index.js +11 -0
- package/dist/formats/nuget/index.js.map +1 -0
- package/dist/formats/nuget/nuspec.d.ts +10 -0
- package/dist/formats/nuget/nuspec.d.ts.map +1 -0
- package/dist/formats/nuget/nuspec.js +59 -0
- package/dist/formats/nuget/nuspec.js.map +1 -0
- package/dist/formats/nuget/parser.d.ts +31 -0
- package/dist/formats/nuget/parser.d.ts.map +1 -0
- package/dist/formats/nuget/parser.js +140 -0
- package/dist/formats/nuget/parser.js.map +1 -0
- package/dist/formats/nuget/validator.d.ts +19 -0
- package/dist/formats/nuget/validator.d.ts.map +1 -0
- package/dist/formats/nuget/validator.js +104 -0
- package/dist/formats/nuget/validator.js.map +1 -0
- package/dist/utils/config.d.ts +31 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +86 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/errors.d.ts +43 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +73 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/fs.d.ts +42 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +125 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +71 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +119 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +65 -0
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { promises as fsPromises, constants, existsSync } from 'fs';
|
|
2
|
+
import { resolve, relative, join } from 'path';
|
|
3
|
+
import { FileSystemError } from './errors.js';
|
|
4
|
+
const { access, readdir, stat, readFile } = fsPromises;
|
|
5
|
+
/**
|
|
6
|
+
* Check if a file exists
|
|
7
|
+
*/
|
|
8
|
+
export async function fileExists(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
await access(filePath, constants.F_OK);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if a directory exists
|
|
19
|
+
*/
|
|
20
|
+
export async function directoryExists(dirPath) {
|
|
21
|
+
try {
|
|
22
|
+
const stats = await stat(dirPath);
|
|
23
|
+
return stats.isDirectory();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Synchronously check if a file exists (for convenience)
|
|
31
|
+
*/
|
|
32
|
+
export function fileExistsSync(filePath) {
|
|
33
|
+
return existsSync(filePath);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate a file path to prevent directory traversal attacks
|
|
37
|
+
* @throws {FileSystemError} If path contains directory traversal patterns
|
|
38
|
+
*/
|
|
39
|
+
export function validatePath(basePath, targetPath) {
|
|
40
|
+
const resolved = resolve(basePath, targetPath);
|
|
41
|
+
const relativePath = relative(basePath, resolved);
|
|
42
|
+
if (relativePath.startsWith('..')) {
|
|
43
|
+
throw new FileSystemError(`Invalid path: ${targetPath} is outside the allowed directory`, ['Ensure all paths are within the mod directory']);
|
|
44
|
+
}
|
|
45
|
+
return resolved;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Recursively collect files matching a pattern
|
|
49
|
+
*/
|
|
50
|
+
export async function collectFiles(dirPath, pattern = /.*/) {
|
|
51
|
+
const results = [];
|
|
52
|
+
async function traverse(currentPath) {
|
|
53
|
+
const entries = await readdir(currentPath, { withFileTypes: true });
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
const fullPath = join(currentPath, entry.name);
|
|
56
|
+
if (entry.isDirectory()) {
|
|
57
|
+
await traverse(fullPath);
|
|
58
|
+
}
|
|
59
|
+
else if (entry.isFile() && pattern.test(entry.name)) {
|
|
60
|
+
results.push(fullPath);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
await traverse(dirPath);
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read a file as text
|
|
69
|
+
*/
|
|
70
|
+
export async function readTextFile(filePath) {
|
|
71
|
+
try {
|
|
72
|
+
return await readFile(filePath, 'utf-8');
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new FileSystemError(`Failed to read file: ${filePath}`, [`Ensure the file exists and you have permission to read it`]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Ensure a directory exists, creating it if necessary
|
|
80
|
+
*/
|
|
81
|
+
export async function ensureDirectory(dirPath) {
|
|
82
|
+
try {
|
|
83
|
+
await fsPromises.mkdir(dirPath, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw new FileSystemError(`Failed to create directory: ${dirPath}`, [`Check that you have permission to create directories`]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the size of a file in bytes
|
|
91
|
+
*/
|
|
92
|
+
export async function getFileSize(filePath) {
|
|
93
|
+
try {
|
|
94
|
+
const stats = await stat(filePath);
|
|
95
|
+
return stats.size;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw new FileSystemError(`Failed to get file size: ${filePath}`, [`Ensure the file exists`]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a path is a directory
|
|
103
|
+
*/
|
|
104
|
+
export async function isDirectory(path) {
|
|
105
|
+
try {
|
|
106
|
+
const stats = await stat(path);
|
|
107
|
+
return stats.isDirectory();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check if a path is a file
|
|
115
|
+
*/
|
|
116
|
+
export async function isFile(path) {
|
|
117
|
+
try {
|
|
118
|
+
const stats = await stat(path);
|
|
119
|
+
return stats.isFile();
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { DuckyError } from './errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Log level enum
|
|
4
|
+
*/
|
|
5
|
+
export declare enum LogLevel {
|
|
6
|
+
DEBUG = 0,
|
|
7
|
+
INFO = 1,
|
|
8
|
+
SUCCESS = 2,
|
|
9
|
+
WARNING = 3,
|
|
10
|
+
ERROR = 4
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Logger configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface LoggerConfig {
|
|
16
|
+
verbose?: boolean;
|
|
17
|
+
quiet?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Logger class for formatted console output
|
|
21
|
+
*/
|
|
22
|
+
export declare class Logger {
|
|
23
|
+
protected level: LogLevel;
|
|
24
|
+
private quiet;
|
|
25
|
+
constructor(config?: LoggerConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Set the log level
|
|
28
|
+
*/
|
|
29
|
+
setLevel(level: LogLevel): void;
|
|
30
|
+
/**
|
|
31
|
+
* Log debug message (only shown in verbose mode)
|
|
32
|
+
*/
|
|
33
|
+
debug(message: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Log info message
|
|
36
|
+
*/
|
|
37
|
+
info(message: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Log success message
|
|
40
|
+
*/
|
|
41
|
+
success(message: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Log warning message
|
|
44
|
+
*/
|
|
45
|
+
warn(message: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Log error message
|
|
48
|
+
*/
|
|
49
|
+
error(message: string | Error | DuckyError): void;
|
|
50
|
+
/**
|
|
51
|
+
* Log a blank line
|
|
52
|
+
*/
|
|
53
|
+
blank(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Log a header/section title
|
|
56
|
+
*/
|
|
57
|
+
header(title: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Create a progress spinner
|
|
60
|
+
* Note: This is a placeholder. For actual spinners, use the 'ora' package
|
|
61
|
+
*/
|
|
62
|
+
spinner(text: string): {
|
|
63
|
+
start: () => void;
|
|
64
|
+
stop: () => void;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a logger instance with the given configuration
|
|
69
|
+
*/
|
|
70
|
+
export declare function createLogger(config?: LoggerConfig): Logger;
|
|
71
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,OAAO,IAAI;IACX,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE,YAAiB;IAKrC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,IAAI;IAUjD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;CAc/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { DuckyError } from './errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Log level enum
|
|
5
|
+
*/
|
|
6
|
+
export var LogLevel;
|
|
7
|
+
(function (LogLevel) {
|
|
8
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
9
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
10
|
+
LogLevel[LogLevel["SUCCESS"] = 2] = "SUCCESS";
|
|
11
|
+
LogLevel[LogLevel["WARNING"] = 3] = "WARNING";
|
|
12
|
+
LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
|
|
13
|
+
})(LogLevel || (LogLevel = {}));
|
|
14
|
+
/**
|
|
15
|
+
* Logger class for formatted console output
|
|
16
|
+
*/
|
|
17
|
+
export class Logger {
|
|
18
|
+
level;
|
|
19
|
+
quiet;
|
|
20
|
+
constructor(config = {}) {
|
|
21
|
+
this.level = config.verbose ? LogLevel.DEBUG : LogLevel.INFO;
|
|
22
|
+
this.quiet = config.quiet ?? false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set the log level
|
|
26
|
+
*/
|
|
27
|
+
setLevel(level) {
|
|
28
|
+
this.level = level;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Log debug message (only shown in verbose mode)
|
|
32
|
+
*/
|
|
33
|
+
debug(message) {
|
|
34
|
+
if (this.level <= LogLevel.DEBUG && !this.quiet) {
|
|
35
|
+
console.log(chalk.gray(`[DEBUG] ${message}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Log info message
|
|
40
|
+
*/
|
|
41
|
+
info(message) {
|
|
42
|
+
if (this.level <= LogLevel.INFO && !this.quiet) {
|
|
43
|
+
console.log(chalk.blue(`ℹ ${message}`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Log success message
|
|
48
|
+
*/
|
|
49
|
+
success(message) {
|
|
50
|
+
if (this.level <= LogLevel.SUCCESS && !this.quiet) {
|
|
51
|
+
console.log(chalk.green(`✔ ${message}`));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Log warning message
|
|
56
|
+
*/
|
|
57
|
+
warn(message) {
|
|
58
|
+
if (this.level <= LogLevel.WARNING && !this.quiet) {
|
|
59
|
+
console.warn(chalk.yellow(`⚠ ${message}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Log error message
|
|
64
|
+
*/
|
|
65
|
+
error(message) {
|
|
66
|
+
if (message instanceof DuckyError) {
|
|
67
|
+
console.error(message.format());
|
|
68
|
+
}
|
|
69
|
+
else if (message instanceof Error) {
|
|
70
|
+
console.error(chalk.red(`✖ ${message.message}`));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.error(chalk.red(`✖ ${message}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Log a blank line
|
|
78
|
+
*/
|
|
79
|
+
blank() {
|
|
80
|
+
if (!this.quiet) {
|
|
81
|
+
console.log();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log a header/section title
|
|
86
|
+
*/
|
|
87
|
+
header(title) {
|
|
88
|
+
if (!this.quiet) {
|
|
89
|
+
console.log();
|
|
90
|
+
console.log(chalk.bold.cyan(`╔═ ${title}`));
|
|
91
|
+
console.log(chalk.bold.cyan('╚' + '═'.repeat(title.length + 2)));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a progress spinner
|
|
96
|
+
* Note: This is a placeholder. For actual spinners, use the 'ora' package
|
|
97
|
+
*/
|
|
98
|
+
spinner(text) {
|
|
99
|
+
let started = false;
|
|
100
|
+
return {
|
|
101
|
+
start: () => {
|
|
102
|
+
if (!started && !this.quiet) {
|
|
103
|
+
started = true;
|
|
104
|
+
console.log(chalk.cyan(`◐ ${text}`));
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
stop: () => {
|
|
108
|
+
started = false;
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a logger instance with the given configuration
|
|
115
|
+
*/
|
|
116
|
+
export function createLogger(config) {
|
|
117
|
+
return new Logger(config);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ducky7go/ducky-cli",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "CLI tool for packaging and publishing game mods to NuGet",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ducky": "bin/ducky"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"bin",
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18.0.0"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsx src/cli.ts",
|
|
22
|
+
"test": "vitest",
|
|
23
|
+
"lint": "eslint src",
|
|
24
|
+
"format": "prettier --write src",
|
|
25
|
+
"prepublishOnly": "npm run build && npm test"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"nuget",
|
|
29
|
+
"cli",
|
|
30
|
+
"game-mods",
|
|
31
|
+
"packaging",
|
|
32
|
+
"ducky"
|
|
33
|
+
],
|
|
34
|
+
"author": "",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/ducky7go/ducky-cli.git"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/ducky7go/ducky-cli/issues"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/ducky7go/ducky-cli#readme",
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@eslint/js": "^9.39.2",
|
|
46
|
+
"@types/node": "^25.0.3",
|
|
47
|
+
"eslint": "^9.0.0",
|
|
48
|
+
"prettier": "^3.0.0",
|
|
49
|
+
"tsx": "^4.21.0",
|
|
50
|
+
"typescript": "^5.9.3",
|
|
51
|
+
"typescript-eslint": "^8.51.0",
|
|
52
|
+
"vitest": "^2.0.0"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"chalk": "^5.3.0",
|
|
56
|
+
"commander": "^12.0.0",
|
|
57
|
+
"dotenv": "^17.2.3",
|
|
58
|
+
"fs-extra": "^11.2.0",
|
|
59
|
+
"ini": "^4.1.0",
|
|
60
|
+
"ora": "^8.0.0"
|
|
61
|
+
},
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public"
|
|
64
|
+
}
|
|
65
|
+
}
|