@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.
Files changed (72) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +241 -0
  3. package/bin/ducky +25 -0
  4. package/dist/cli.d.ts +5 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +19 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/nuget/index.d.ts +3 -0
  9. package/dist/commands/nuget/index.d.ts.map +1 -0
  10. package/dist/commands/nuget/index.js +23 -0
  11. package/dist/commands/nuget/index.js.map +1 -0
  12. package/dist/commands/nuget/pack.d.ts +7 -0
  13. package/dist/commands/nuget/pack.d.ts.map +1 -0
  14. package/dist/commands/nuget/pack.js +78 -0
  15. package/dist/commands/nuget/pack.js.map +1 -0
  16. package/dist/commands/nuget/push.d.ts +7 -0
  17. package/dist/commands/nuget/push.d.ts.map +1 -0
  18. package/dist/commands/nuget/push.js +110 -0
  19. package/dist/commands/nuget/push.js.map +1 -0
  20. package/dist/commands/nuget/validate.d.ts +7 -0
  21. package/dist/commands/nuget/validate.d.ts.map +1 -0
  22. package/dist/commands/nuget/validate.js +78 -0
  23. package/dist/commands/nuget/validate.js.map +1 -0
  24. package/dist/formats/index.d.ts +2 -0
  25. package/dist/formats/index.d.ts.map +1 -0
  26. package/dist/formats/index.js +6 -0
  27. package/dist/formats/index.js.map +1 -0
  28. package/dist/formats/nuget/client.d.ts +59 -0
  29. package/dist/formats/nuget/client.d.ts.map +1 -0
  30. package/dist/formats/nuget/client.js +202 -0
  31. package/dist/formats/nuget/client.js.map +1 -0
  32. package/dist/formats/nuget/collector.d.ts +36 -0
  33. package/dist/formats/nuget/collector.d.ts.map +1 -0
  34. package/dist/formats/nuget/collector.js +72 -0
  35. package/dist/formats/nuget/collector.js.map +1 -0
  36. package/dist/formats/nuget/index.d.ts +6 -0
  37. package/dist/formats/nuget/index.d.ts.map +1 -0
  38. package/dist/formats/nuget/index.js +11 -0
  39. package/dist/formats/nuget/index.js.map +1 -0
  40. package/dist/formats/nuget/nuspec.d.ts +10 -0
  41. package/dist/formats/nuget/nuspec.d.ts.map +1 -0
  42. package/dist/formats/nuget/nuspec.js +59 -0
  43. package/dist/formats/nuget/nuspec.js.map +1 -0
  44. package/dist/formats/nuget/parser.d.ts +31 -0
  45. package/dist/formats/nuget/parser.d.ts.map +1 -0
  46. package/dist/formats/nuget/parser.js +140 -0
  47. package/dist/formats/nuget/parser.js.map +1 -0
  48. package/dist/formats/nuget/validator.d.ts +19 -0
  49. package/dist/formats/nuget/validator.d.ts.map +1 -0
  50. package/dist/formats/nuget/validator.js +104 -0
  51. package/dist/formats/nuget/validator.js.map +1 -0
  52. package/dist/utils/config.d.ts +31 -0
  53. package/dist/utils/config.d.ts.map +1 -0
  54. package/dist/utils/config.js +86 -0
  55. package/dist/utils/config.js.map +1 -0
  56. package/dist/utils/errors.d.ts +43 -0
  57. package/dist/utils/errors.d.ts.map +1 -0
  58. package/dist/utils/errors.js +73 -0
  59. package/dist/utils/errors.js.map +1 -0
  60. package/dist/utils/fs.d.ts +42 -0
  61. package/dist/utils/fs.d.ts.map +1 -0
  62. package/dist/utils/fs.js +125 -0
  63. package/dist/utils/fs.js.map +1 -0
  64. package/dist/utils/index.d.ts +5 -0
  65. package/dist/utils/index.d.ts.map +1 -0
  66. package/dist/utils/index.js +5 -0
  67. package/dist/utils/index.js.map +1 -0
  68. package/dist/utils/logger.d.ts +71 -0
  69. package/dist/utils/logger.d.ts.map +1 -0
  70. package/dist/utils/logger.js +119 -0
  71. package/dist/utils/logger.js.map +1 -0
  72. package/package.json +65 -0
@@ -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,5 @@
1
+ export * from './errors.js';
2
+ export * from './config.js';
3
+ export * from './fs.js';
4
+ export * from './logger.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export * from './errors.js';
2
+ export * from './config.js';
3
+ export * from './fs.js';
4
+ export * from './logger.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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
+ }