@ducky7go/ducky-cli 0.0.4-dev.1 → 0.0.5-dev.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/README.md +47 -199
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/steam/index.d.ts +3 -0
- package/dist/commands/steam/index.d.ts.map +1 -0
- package/dist/commands/steam/index.js +21 -0
- package/dist/commands/steam/index.js.map +1 -0
- package/dist/commands/steam/push.d.ts +3 -0
- package/dist/commands/steam/push.d.ts.map +1 -0
- package/dist/commands/steam/push.js +29 -0
- package/dist/commands/steam/push.js.map +1 -0
- package/dist/commands/steam/validate.d.ts +3 -0
- package/dist/commands/steam/validate.d.ts.map +1 -0
- package/dist/commands/steam/validate.js +47 -0
- package/dist/commands/steam/validate.js.map +1 -0
- package/dist/formats/steam/config.d.ts +23 -0
- package/dist/formats/steam/config.d.ts.map +1 -0
- package/dist/formats/steam/config.js +32 -0
- package/dist/formats/steam/config.js.map +1 -0
- package/dist/formats/steam/metadata.d.ts +45 -0
- package/dist/formats/steam/metadata.d.ts.map +1 -0
- package/dist/formats/steam/metadata.js +293 -0
- package/dist/formats/steam/metadata.js.map +1 -0
- package/dist/formats/steam/parser.d.ts +20 -0
- package/dist/formats/steam/parser.d.ts.map +1 -0
- package/dist/formats/steam/parser.js +88 -0
- package/dist/formats/steam/parser.js.map +1 -0
- package/dist/formats/steam/progress-display.d.ts +38 -0
- package/dist/formats/steam/progress-display.d.ts.map +1 -0
- package/dist/formats/steam/progress-display.js +123 -0
- package/dist/formats/steam/progress-display.js.map +1 -0
- package/dist/formats/steam/progress.d.ts +79 -0
- package/dist/formats/steam/progress.d.ts.map +1 -0
- package/dist/formats/steam/progress.js +126 -0
- package/dist/formats/steam/progress.js.map +1 -0
- package/dist/formats/steam/push-handler.d.ts +22 -0
- package/dist/formats/steam/push-handler.d.ts.map +1 -0
- package/dist/formats/steam/push-handler.js +31 -0
- package/dist/formats/steam/push-handler.js.map +1 -0
- package/dist/formats/steam/upload-standalone.d.ts +20 -0
- package/dist/formats/steam/upload-standalone.d.ts.map +1 -0
- package/dist/formats/steam/upload-standalone.js +221 -0
- package/dist/formats/steam/upload-standalone.js.map +1 -0
- package/dist/formats/steam/validator.d.ts +58 -0
- package/dist/formats/steam/validator.d.ts.map +1 -0
- package/dist/formats/steam/validator.js +136 -0
- package/dist/formats/steam/validator.js.map +1 -0
- package/dist/formats/steam/workshop.d.ts +72 -0
- package/dist/formats/steam/workshop.d.ts.map +1 -0
- package/dist/formats/steam/workshop.js +221 -0
- package/dist/formats/steam/workshop.js.map +1 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +51 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/fs.d.ts +8 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +22 -0
- package/dist/utils/fs.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workshop upload status enum
|
|
3
|
+
* Mirrors the C# WorkshopUploadStatus from BmlSteamItemManager
|
|
4
|
+
*/
|
|
5
|
+
export declare enum WorkshopUploadStatus {
|
|
6
|
+
Pending = 0,
|
|
7
|
+
Preparing = 1,
|
|
8
|
+
RequestingId = 2,
|
|
9
|
+
WritingIni = 3,
|
|
10
|
+
StartingSteamUpload = 4,
|
|
11
|
+
UploadingContent = 5,
|
|
12
|
+
UploadingTitles = 6,
|
|
13
|
+
UploadingTranslations = 7,
|
|
14
|
+
Completed = 8,
|
|
15
|
+
Failed = 9
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Workshop upload progress
|
|
19
|
+
*/
|
|
20
|
+
export interface WorkshopUploadProgress {
|
|
21
|
+
status: WorkshopUploadStatus;
|
|
22
|
+
bytesProcessed: number;
|
|
23
|
+
bytesTotal: number;
|
|
24
|
+
message: string;
|
|
25
|
+
exception?: Error;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Progress callback type
|
|
29
|
+
*/
|
|
30
|
+
export type ProgressCallback = (progress: WorkshopUploadProgress) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Progress tracker for Workshop uploads
|
|
33
|
+
*/
|
|
34
|
+
export declare class ProgressTracker {
|
|
35
|
+
private currentProgress;
|
|
36
|
+
private callbacks;
|
|
37
|
+
constructor();
|
|
38
|
+
/**
|
|
39
|
+
* Register a progress callback
|
|
40
|
+
*/
|
|
41
|
+
onProgress(callback: ProgressCallback): void;
|
|
42
|
+
/**
|
|
43
|
+
* Report progress
|
|
44
|
+
*/
|
|
45
|
+
report(status: WorkshopUploadStatus, message: string, data?: Partial<WorkshopUploadProgress>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Report upload progress
|
|
48
|
+
*/
|
|
49
|
+
reportUploadProgress(bytesProcessed: number, bytesTotal: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Report translation upload progress
|
|
52
|
+
*/
|
|
53
|
+
reportTranslationProgress(current: number, total: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Report completion
|
|
56
|
+
*/
|
|
57
|
+
reportSuccess(message: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Report failure
|
|
60
|
+
*/
|
|
61
|
+
reportFailure(message: string, error?: Error): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get current progress
|
|
64
|
+
*/
|
|
65
|
+
getCurrentProgress(): WorkshopUploadProgress;
|
|
66
|
+
/**
|
|
67
|
+
* Reset the progress tracker
|
|
68
|
+
*/
|
|
69
|
+
reset(): void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get status name for display
|
|
73
|
+
*/
|
|
74
|
+
export declare function getStatusName(status: WorkshopUploadStatus): string;
|
|
75
|
+
/**
|
|
76
|
+
* Format progress for display
|
|
77
|
+
*/
|
|
78
|
+
export declare function formatProgress(progress: WorkshopUploadProgress): string;
|
|
79
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/formats/steam/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,IAAI;IACX,SAAS,IAAI;IACb,YAAY,IAAI;IAChB,UAAU,IAAI;IACd,mBAAmB,IAAI;IACvB,gBAAgB,IAAI;IACpB,eAAe,IAAI;IACnB,qBAAqB,IAAI;IACzB,SAAS,IAAI;IACb,MAAM,IAAI;CACX;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAE1E;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,SAAS,CAA0B;;IAW3C;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI5C;;OAEG;IACH,MAAM,CACJ,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACrC,IAAI;IAmBP;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWtE;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/D;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAMnD;;OAEG;IACH,kBAAkB,IAAI,sBAAsB;IAI5C;;OAEG;IACH,KAAK,IAAI,IAAI;CAQd;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAavE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workshop upload status enum
|
|
3
|
+
* Mirrors the C# WorkshopUploadStatus from BmlSteamItemManager
|
|
4
|
+
*/
|
|
5
|
+
export var WorkshopUploadStatus;
|
|
6
|
+
(function (WorkshopUploadStatus) {
|
|
7
|
+
WorkshopUploadStatus[WorkshopUploadStatus["Pending"] = 0] = "Pending";
|
|
8
|
+
WorkshopUploadStatus[WorkshopUploadStatus["Preparing"] = 1] = "Preparing";
|
|
9
|
+
WorkshopUploadStatus[WorkshopUploadStatus["RequestingId"] = 2] = "RequestingId";
|
|
10
|
+
WorkshopUploadStatus[WorkshopUploadStatus["WritingIni"] = 3] = "WritingIni";
|
|
11
|
+
WorkshopUploadStatus[WorkshopUploadStatus["StartingSteamUpload"] = 4] = "StartingSteamUpload";
|
|
12
|
+
WorkshopUploadStatus[WorkshopUploadStatus["UploadingContent"] = 5] = "UploadingContent";
|
|
13
|
+
WorkshopUploadStatus[WorkshopUploadStatus["UploadingTitles"] = 6] = "UploadingTitles";
|
|
14
|
+
WorkshopUploadStatus[WorkshopUploadStatus["UploadingTranslations"] = 7] = "UploadingTranslations";
|
|
15
|
+
WorkshopUploadStatus[WorkshopUploadStatus["Completed"] = 8] = "Completed";
|
|
16
|
+
WorkshopUploadStatus[WorkshopUploadStatus["Failed"] = 9] = "Failed";
|
|
17
|
+
})(WorkshopUploadStatus || (WorkshopUploadStatus = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Progress tracker for Workshop uploads
|
|
20
|
+
*/
|
|
21
|
+
export class ProgressTracker {
|
|
22
|
+
currentProgress;
|
|
23
|
+
callbacks = [];
|
|
24
|
+
constructor() {
|
|
25
|
+
this.currentProgress = {
|
|
26
|
+
status: WorkshopUploadStatus.Pending,
|
|
27
|
+
bytesProcessed: 0,
|
|
28
|
+
bytesTotal: 0,
|
|
29
|
+
message: 'Initializing...',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Register a progress callback
|
|
34
|
+
*/
|
|
35
|
+
onProgress(callback) {
|
|
36
|
+
this.callbacks.push(callback);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Report progress
|
|
40
|
+
*/
|
|
41
|
+
report(status, message, data) {
|
|
42
|
+
this.currentProgress = {
|
|
43
|
+
...this.currentProgress,
|
|
44
|
+
status,
|
|
45
|
+
message,
|
|
46
|
+
...data,
|
|
47
|
+
};
|
|
48
|
+
// Notify all callbacks
|
|
49
|
+
for (const callback of this.callbacks) {
|
|
50
|
+
try {
|
|
51
|
+
callback(this.currentProgress);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// Ignore callback errors
|
|
55
|
+
console.warn('Progress callback error:', error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Report upload progress
|
|
61
|
+
*/
|
|
62
|
+
reportUploadProgress(bytesProcessed, bytesTotal) {
|
|
63
|
+
this.currentProgress.bytesProcessed = bytesProcessed;
|
|
64
|
+
this.currentProgress.bytesTotal = bytesTotal;
|
|
65
|
+
const percentage = bytesTotal > 0 ? (bytesProcessed / bytesTotal) * 100 : 0;
|
|
66
|
+
this.report(WorkshopUploadStatus.UploadingContent, `Uploading content... ${percentage.toFixed(1)}%`);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Report translation upload progress
|
|
70
|
+
*/
|
|
71
|
+
reportTranslationProgress(current, total) {
|
|
72
|
+
this.report(WorkshopUploadStatus.UploadingTranslations, `Uploading translations ${current}/${total}...`);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Report completion
|
|
76
|
+
*/
|
|
77
|
+
reportSuccess(message) {
|
|
78
|
+
this.report(WorkshopUploadStatus.Completed, message);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Report failure
|
|
82
|
+
*/
|
|
83
|
+
reportFailure(message, error) {
|
|
84
|
+
this.report(WorkshopUploadStatus.Failed, message, {
|
|
85
|
+
exception: error,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get current progress
|
|
90
|
+
*/
|
|
91
|
+
getCurrentProgress() {
|
|
92
|
+
return { ...this.currentProgress };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reset the progress tracker
|
|
96
|
+
*/
|
|
97
|
+
reset() {
|
|
98
|
+
this.currentProgress = {
|
|
99
|
+
status: WorkshopUploadStatus.Pending,
|
|
100
|
+
bytesProcessed: 0,
|
|
101
|
+
bytesTotal: 0,
|
|
102
|
+
message: 'Initializing...',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get status name for display
|
|
108
|
+
*/
|
|
109
|
+
export function getStatusName(status) {
|
|
110
|
+
return WorkshopUploadStatus[status] || 'Unknown';
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format progress for display
|
|
114
|
+
*/
|
|
115
|
+
export function formatProgress(progress) {
|
|
116
|
+
const parts = [getStatusName(progress.status)];
|
|
117
|
+
if (progress.bytesTotal > 0) {
|
|
118
|
+
const percentage = (progress.bytesProcessed / progress.bytesTotal) * 100;
|
|
119
|
+
parts.push(`(${percentage.toFixed(1)}%)`);
|
|
120
|
+
}
|
|
121
|
+
if (progress.message) {
|
|
122
|
+
parts.push(`- ${progress.message}`);
|
|
123
|
+
}
|
|
124
|
+
return parts.join(' ');
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/formats/steam/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steam Workshop push handler
|
|
3
|
+
* Orchestrates the entire Workshop upload process
|
|
4
|
+
* Uses a subprocess to ensure proper Steamworks proxy cleanup
|
|
5
|
+
*/
|
|
6
|
+
import { Logger } from '../../utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* Push options
|
|
9
|
+
*/
|
|
10
|
+
export interface PushOptions {
|
|
11
|
+
updateDescription: boolean;
|
|
12
|
+
changelog?: string;
|
|
13
|
+
skipTail?: boolean;
|
|
14
|
+
logger: Logger;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Steam push action
|
|
18
|
+
* @param modPath - Path to the mod directory
|
|
19
|
+
* @param options - Push options
|
|
20
|
+
*/
|
|
21
|
+
export declare function steamPushAction(modPath: string, options: PushOptions): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=push-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-handler.d.ts","sourceRoot":"","sources":["../../../src/formats/steam/push-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steam Workshop push handler
|
|
3
|
+
* Orchestrates the entire Workshop upload process
|
|
4
|
+
* Uses a subprocess to ensure proper Steamworks proxy cleanup
|
|
5
|
+
*/
|
|
6
|
+
import { runSteamUploadInChildProcess } from './workshop.js';
|
|
7
|
+
/**
|
|
8
|
+
* Steam push action
|
|
9
|
+
* @param modPath - Path to the mod directory
|
|
10
|
+
* @param options - Push options
|
|
11
|
+
*/
|
|
12
|
+
export async function steamPushAction(modPath, options) {
|
|
13
|
+
const { updateDescription, changelog, skipTail = false, logger } = options;
|
|
14
|
+
logger.header('Steam Workshop Upload');
|
|
15
|
+
try {
|
|
16
|
+
// Run the upload in a child process to ensure proper Steamworks proxy cleanup
|
|
17
|
+
await runSteamUploadInChildProcess(modPath, {
|
|
18
|
+
updateDescription,
|
|
19
|
+
changelog,
|
|
20
|
+
skipTail,
|
|
21
|
+
}, logger,
|
|
22
|
+
// Progress callback - progress is handled by the child process and displayed via its logger
|
|
23
|
+
undefined);
|
|
24
|
+
logger.success('Upload completed successfully');
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
logger.error(error);
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=push-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-handler.js","sourceRoot":"","sources":["../../../src/formats/steam/push-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAY7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAoB;IAEpB,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3E,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,8EAA8E;QAC9E,MAAM,4BAA4B,CAChC,OAAO,EACP;YACE,iBAAiB;YACjB,SAAS;YACT,QAAQ;SACT,EACD,MAAM;QACN,4FAA4F;QAC5F,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAuB,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone Steam Workshop uploader script
|
|
3
|
+
* Run as a separate process to ensure proper cleanup of Steamworks proxy
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Push options
|
|
7
|
+
*/
|
|
8
|
+
interface PushOptions {
|
|
9
|
+
updateDescription: boolean;
|
|
10
|
+
changelog?: string;
|
|
11
|
+
skipTail?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Steam push action (internal implementation for standalone script)
|
|
15
|
+
* @param modPath - Path to the mod directory
|
|
16
|
+
* @param options - Push options
|
|
17
|
+
*/
|
|
18
|
+
declare function steamPushActionInternal(modPath: string, options: PushOptions): Promise<void>;
|
|
19
|
+
export { steamPushActionInternal };
|
|
20
|
+
//# sourceMappingURL=upload-standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-standalone.d.ts","sourceRoot":"","sources":["../../../src/formats/steam/upload-standalone.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH;;GAEG;AACH,UAAU,WAAW;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoBD;;;;GAIG;AACH,iBAAe,uBAAuB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA8Lf;AAuCD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone Steam Workshop uploader script
|
|
3
|
+
* Run as a separate process to ensure proper cleanup of Steamworks proxy
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { createLogger } from '../../utils/logger.js';
|
|
7
|
+
import { parseInfoIni } from '../nuget/parser.js';
|
|
8
|
+
import { savePublishedFileId, getPublishedFileId } from './parser.js';
|
|
9
|
+
import { loadDescriptions, loadTitles, getPrimaryLanguageContent } from './metadata.js';
|
|
10
|
+
import { ProgressTracker, WorkshopUploadStatus } from './progress.js';
|
|
11
|
+
import { ProgressDisplay } from './progress-display.js';
|
|
12
|
+
import { getSteamAppId } from './config.js';
|
|
13
|
+
import { initSteamworks, shutdownSteamworks, createWorkshopItem, updateWorkshopItemWithProgress, } from './workshop.js';
|
|
14
|
+
/**
|
|
15
|
+
* Append submission footer if not skipped
|
|
16
|
+
*/
|
|
17
|
+
function appendTail(content, skipTail) {
|
|
18
|
+
if (skipTail) {
|
|
19
|
+
return content;
|
|
20
|
+
}
|
|
21
|
+
const footer = '[hr]Submmited via ducky cli';
|
|
22
|
+
if (!content) {
|
|
23
|
+
return footer;
|
|
24
|
+
}
|
|
25
|
+
// Check if content already ends with the footer
|
|
26
|
+
if (content.trim().endsWith(footer)) {
|
|
27
|
+
return content;
|
|
28
|
+
}
|
|
29
|
+
return `${content}\n\n${footer}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Steam push action (internal implementation for standalone script)
|
|
33
|
+
* @param modPath - Path to the mod directory
|
|
34
|
+
* @param options - Push options
|
|
35
|
+
*/
|
|
36
|
+
async function steamPushActionInternal(modPath, options) {
|
|
37
|
+
const { updateDescription, changelog, skipTail = false } = options;
|
|
38
|
+
const logger = createLogger({ verbose: true });
|
|
39
|
+
const progress = new ProgressTracker();
|
|
40
|
+
const progressDisplay = new ProgressDisplay();
|
|
41
|
+
// Setup progress tracking with visual display
|
|
42
|
+
progress.onProgress((p) => {
|
|
43
|
+
logger.debug(`[${WorkshopUploadStatus[p.status]}] ${p.message}`);
|
|
44
|
+
progressDisplay.update(p);
|
|
45
|
+
});
|
|
46
|
+
// Start the progress display
|
|
47
|
+
progressDisplay.start();
|
|
48
|
+
try {
|
|
49
|
+
// Phase 1: Preparing
|
|
50
|
+
progress.report(WorkshopUploadStatus.Preparing, 'Parsing mod metadata...');
|
|
51
|
+
const metadata = await parseInfoIni(modPath);
|
|
52
|
+
logger.info(`Mod: ${metadata.displayName || metadata.name}`);
|
|
53
|
+
logger.info(`Version: ${metadata.version}`);
|
|
54
|
+
const appId = getSteamAppId();
|
|
55
|
+
logger.info(`Steam App ID: ${appId}`);
|
|
56
|
+
const publishedFileId = getPublishedFileId(metadata);
|
|
57
|
+
const isFirstTimeUpload = !publishedFileId;
|
|
58
|
+
if (isFirstTimeUpload) {
|
|
59
|
+
progress.report(WorkshopUploadStatus.RequestingId, 'Creating new Workshop item...');
|
|
60
|
+
logger.info('Mode: First-time upload');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
logger.info(`Mode: Update existing Workshop item ${publishedFileId}`);
|
|
64
|
+
}
|
|
65
|
+
// Phase 2: Initialize Steamworks
|
|
66
|
+
progress.report(WorkshopUploadStatus.Preparing, 'Initializing Steamworks...');
|
|
67
|
+
logger.debug('Initializing Steamworks...');
|
|
68
|
+
await initSteamworks();
|
|
69
|
+
logger.success('Steamworks initialized');
|
|
70
|
+
// Phase 3: Create Workshop item if first-time upload
|
|
71
|
+
let finalPublishedFileId = publishedFileId;
|
|
72
|
+
if (isFirstTimeUpload) {
|
|
73
|
+
logger.info('Creating new Workshop item...');
|
|
74
|
+
finalPublishedFileId = await createWorkshopItem();
|
|
75
|
+
logger.success(`Created new Workshop item with ID: ${finalPublishedFileId}`);
|
|
76
|
+
// Save to info.ini
|
|
77
|
+
progress.report(WorkshopUploadStatus.WritingIni, 'Saving publishedFileId to info.ini...');
|
|
78
|
+
await savePublishedFileId(modPath, finalPublishedFileId);
|
|
79
|
+
logger.info(`Saved publishedFileId ${finalPublishedFileId} to info.ini`);
|
|
80
|
+
}
|
|
81
|
+
// Phase 4: Load descriptions and titles
|
|
82
|
+
logger.debug('Loading descriptions and titles...');
|
|
83
|
+
const descriptions = await loadDescriptions(modPath);
|
|
84
|
+
const titles = await loadTitles(modPath, metadata.displayName || metadata.name);
|
|
85
|
+
logger.info(`Found ${descriptions.length} description(s) and ${titles.length} title(s)`);
|
|
86
|
+
if (descriptions.length > 0) {
|
|
87
|
+
const langs = descriptions.map(d => d.language).join(', ');
|
|
88
|
+
logger.debug(`Languages: ${langs}`);
|
|
89
|
+
}
|
|
90
|
+
// Phase 5: Prepare main upload details
|
|
91
|
+
progress.report(WorkshopUploadStatus.StartingSteamUpload, 'Preparing Workshop upload...');
|
|
92
|
+
const previewPath = join(modPath, 'preview.png');
|
|
93
|
+
const primaryContent = getPrimaryLanguageContent(descriptions, titles);
|
|
94
|
+
logger.debug(`Primary language: ${primaryContent.description?.language || 'N/A'}`);
|
|
95
|
+
logger.debug(`Content path: ${modPath}`);
|
|
96
|
+
logger.debug(`Preview path: ${previewPath}`);
|
|
97
|
+
// Build update details
|
|
98
|
+
const updateDetails = {
|
|
99
|
+
contentPath: modPath,
|
|
100
|
+
previewPath: previewPath,
|
|
101
|
+
visibility: 0, // Public
|
|
102
|
+
changeNote: appendTail(changelog || '', skipTail),
|
|
103
|
+
};
|
|
104
|
+
if (changelog) {
|
|
105
|
+
logger.debug(`Changelog: ${changelog.substring(0, 50)}${changelog.length > 50 ? '...' : ''}`);
|
|
106
|
+
}
|
|
107
|
+
// Phase 6: Handle descriptions based on upload type
|
|
108
|
+
if (isFirstTimeUpload) {
|
|
109
|
+
// First-time upload: ALWAYS set primary language description
|
|
110
|
+
logger.info('Setting primary language description (required for new items)');
|
|
111
|
+
if (primaryContent.title) {
|
|
112
|
+
updateDetails.title = primaryContent.title.title;
|
|
113
|
+
logger.info(`Title: ${primaryContent.title.title}`);
|
|
114
|
+
}
|
|
115
|
+
if (primaryContent.description) {
|
|
116
|
+
updateDetails.description = appendTail(primaryContent.description.content, skipTail);
|
|
117
|
+
logger.debug(`Description length: ${primaryContent.description.content.length} characters`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (updateDescription) {
|
|
121
|
+
// Update with --update-description flag: Update primary language
|
|
122
|
+
logger.info('Updating all language descriptions...');
|
|
123
|
+
// Update primary language first
|
|
124
|
+
if (primaryContent.title) {
|
|
125
|
+
updateDetails.title = primaryContent.title.title;
|
|
126
|
+
}
|
|
127
|
+
if (primaryContent.description) {
|
|
128
|
+
updateDetails.description = appendTail(primaryContent.description.content, skipTail);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Update without --update-description flag: Skip ALL descriptions
|
|
133
|
+
logger.info('Description updates: disabled (use --update-description to enable)');
|
|
134
|
+
}
|
|
135
|
+
// Phase 7: Submit main update
|
|
136
|
+
logger.info('Uploading content to Steam...');
|
|
137
|
+
progress.report(WorkshopUploadStatus.UploadingContent, 'Uploading content to Steam...');
|
|
138
|
+
await updateWorkshopItemWithProgress(finalPublishedFileId, updateDetails, logger, (bytesProcessed, bytesTotal) => {
|
|
139
|
+
progress.reportUploadProgress(bytesProcessed, bytesTotal);
|
|
140
|
+
});
|
|
141
|
+
logger.success('Content uploaded successfully');
|
|
142
|
+
// Phase 8: Update other languages if --update-description flag is set
|
|
143
|
+
if (updateDescription) {
|
|
144
|
+
const otherLanguages = descriptions.filter((d) => d.language !== primaryContent.description?.language);
|
|
145
|
+
if (otherLanguages.length > 0) {
|
|
146
|
+
const action = isFirstTimeUpload ? 'Uploading' : 'Updating';
|
|
147
|
+
logger.info(`${action} ${otherLanguages.length} additional language(s)...`);
|
|
148
|
+
for (let i = 0; i < otherLanguages.length; i++) {
|
|
149
|
+
const lang = otherLanguages[i];
|
|
150
|
+
progress.reportTranslationProgress(i + 1, otherLanguages.length);
|
|
151
|
+
logger.info(` [${i + 1}/${otherLanguages.length}] ${lang.language}`);
|
|
152
|
+
// Find title for this language
|
|
153
|
+
const langTitle = titles.find((t) => t.language === lang.language);
|
|
154
|
+
// Update with only title and description for this language
|
|
155
|
+
const langUpdateDetails = {
|
|
156
|
+
title: langTitle?.title,
|
|
157
|
+
description: appendTail(lang.content, skipTail),
|
|
158
|
+
language: lang.language,
|
|
159
|
+
};
|
|
160
|
+
await updateWorkshopItemWithProgress(finalPublishedFileId, langUpdateDetails, logger);
|
|
161
|
+
}
|
|
162
|
+
logger.success(`All ${otherLanguages.length} language(s) processed`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Phase 9: Complete
|
|
166
|
+
if (updateDescription) {
|
|
167
|
+
const languageCount = descriptions.length > 0 ? descriptions.length : 1;
|
|
168
|
+
const action = isFirstTimeUpload ? 'Published' : 'Updated';
|
|
169
|
+
logger.success(`${action} Workshop item: ${finalPublishedFileId} (${languageCount} language(s))`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const action = isFirstTimeUpload ? 'Published' : 'Updated';
|
|
173
|
+
logger.success(`${action} Workshop item: ${finalPublishedFileId}`);
|
|
174
|
+
}
|
|
175
|
+
progress.reportSuccess('Upload completed successfully');
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
progress.reportFailure(error instanceof Error ? error.message : String(error), error instanceof Error ? error : undefined);
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
// Stop the progress display
|
|
183
|
+
progressDisplay.stop();
|
|
184
|
+
// Shutdown Steamworks
|
|
185
|
+
shutdownSteamworks();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Main entry point for standalone execution
|
|
190
|
+
*/
|
|
191
|
+
async function main() {
|
|
192
|
+
const args = process.argv.slice(2);
|
|
193
|
+
if (args.length === 0) {
|
|
194
|
+
console.error('Usage: steam-upload.js <modPath> [options]');
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
const modPath = args[0];
|
|
198
|
+
const updateDescription = args.includes('--update-description');
|
|
199
|
+
const skipTail = args.includes('--skip-tail');
|
|
200
|
+
const changelogIndex = args.indexOf('--changelog');
|
|
201
|
+
const changelog = changelogIndex >= 0 && args[changelogIndex + 1]
|
|
202
|
+
? args[changelogIndex + 1]
|
|
203
|
+
: undefined;
|
|
204
|
+
try {
|
|
205
|
+
await steamPushActionInternal(modPath, {
|
|
206
|
+
updateDescription,
|
|
207
|
+
changelog,
|
|
208
|
+
skipTail,
|
|
209
|
+
});
|
|
210
|
+
process.exit(0);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Run if called directly
|
|
217
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
218
|
+
main();
|
|
219
|
+
}
|
|
220
|
+
export { steamPushActionInternal };
|
|
221
|
+
//# sourceMappingURL=upload-standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-standalone.js","sourceRoot":"","sources":["../../../src/formats/steam/upload-standalone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Logger } from '../../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validation result
|
|
4
|
+
*/
|
|
5
|
+
export interface ValidationResult {
|
|
6
|
+
isValid: boolean;
|
|
7
|
+
errors: Array<{
|
|
8
|
+
message: string;
|
|
9
|
+
suggestions?: string[];
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Steam Workshop validator
|
|
14
|
+
*/
|
|
15
|
+
export declare class SteamValidator {
|
|
16
|
+
private logger;
|
|
17
|
+
constructor(logger: Logger);
|
|
18
|
+
/**
|
|
19
|
+
* Validate all aspects of a mod for Steam Workshop publishing
|
|
20
|
+
*/
|
|
21
|
+
validate(directory: string): Promise<ValidationResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Validate Steam App ID
|
|
24
|
+
*/
|
|
25
|
+
validateAppId(appId: number): {
|
|
26
|
+
message: string;
|
|
27
|
+
suggestions?: string[];
|
|
28
|
+
} | null;
|
|
29
|
+
/**
|
|
30
|
+
* Validate directory exists
|
|
31
|
+
*/
|
|
32
|
+
validateDirectoryExists(directory: string): Promise<{
|
|
33
|
+
message: string;
|
|
34
|
+
suggestions?: string[];
|
|
35
|
+
} | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Validate info.ini exists
|
|
38
|
+
*/
|
|
39
|
+
validateInfoIniExists(directory: string): Promise<{
|
|
40
|
+
message: string;
|
|
41
|
+
suggestions?: string[];
|
|
42
|
+
} | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Validate preview.png exists
|
|
45
|
+
*/
|
|
46
|
+
validatePreviewImage(directory: string): Promise<{
|
|
47
|
+
message: string;
|
|
48
|
+
suggestions?: string[];
|
|
49
|
+
} | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Validate mod structure
|
|
52
|
+
*/
|
|
53
|
+
validateModStructure(directory: string): Promise<Array<{
|
|
54
|
+
message: string;
|
|
55
|
+
suggestions?: string[];
|
|
56
|
+
}>>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/formats/steam/validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsC5D;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAahF;;OAEG;IACG,uBAAuB,CAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAa9D;;OAEG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAc9D;;OAEG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAe9D;;OAEG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAyB/D"}
|