hydrooj-addons-manager 0.1.0 → 0.1.2
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/index.ts +46 -29
- package/package.json +3 -3
package/index.ts
CHANGED
|
@@ -66,14 +66,32 @@ class AddonsManagerHandler extends Handler {
|
|
|
66
66
|
action: body['action']
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
// after computing packages, lockedPackages and building `pkg`
|
|
70
|
+
let result: CommandResult = { success: false, message: 'Unknown error' };
|
|
71
|
+
|
|
72
|
+
const isInstalled = packages.includes(pkg.name);
|
|
73
|
+
const isLocked = lockedPackages.includes(pkg.name);
|
|
74
|
+
|
|
75
|
+
if (checkPackageIsLocal(pkg.name)) {
|
|
76
|
+
if (pkg.action !== 'update') {
|
|
77
|
+
result = { success: false, message: 'Local packages can only be updated' };
|
|
78
|
+
} else {
|
|
79
|
+
result = await AddonsManagerHandler.model.localUpdate(pkg.name);
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
if (pkg.action === 'add' && isInstalled) {
|
|
83
|
+
result = { success: false, message: 'Package is already installed' };
|
|
84
|
+
} else if ((pkg.action === 'update' || pkg.action === 'delete') && !isInstalled) {
|
|
85
|
+
result = { success: false, message: 'Package is not installed' };
|
|
86
|
+
} else if (pkg.action === 'delete' && isLocked) {
|
|
87
|
+
result = { success: false, message: 'This package is locked and cannot be removed.' };
|
|
88
|
+
} else {
|
|
89
|
+
result = await AddonsManagerHandler.model.manageAddon(pkg.action, pkg.name, pkg.version);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// optional: better log formatting
|
|
94
|
+
console.log(`[Addons Manager] Action=${pkg.action} Package=${pkg.name} Version=${pkg.version} Result=${JSON.stringify(result)}`);
|
|
77
95
|
this.back({
|
|
78
96
|
result: result,
|
|
79
97
|
packages: packages,
|
|
@@ -82,22 +100,20 @@ class AddonsManagerHandler extends Handler {
|
|
|
82
100
|
}
|
|
83
101
|
}
|
|
84
102
|
|
|
85
|
-
async function sendCommand(command: string, cwd: string): Promise<CommandResult> {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
resolve({ success: true, message: stdout || stderr });
|
|
98
|
-
}
|
|
99
|
-
});
|
|
103
|
+
async function sendCommand(command: string, args: string[], cwd: string): Promise<CommandResult> {
|
|
104
|
+
return new Promise((resolve) => {
|
|
105
|
+
const child = spawn(command, args, { cwd });
|
|
106
|
+
let stdout = '';
|
|
107
|
+
let stderr = '';
|
|
108
|
+
child.stdout?.on('data', (d) => { stdout += d.toString(); });
|
|
109
|
+
child.stderr?.on('data', (d) => { stderr += d.toString(); });
|
|
110
|
+
child.on('error', (error) => resolve({ success: false, message: error.message }));
|
|
111
|
+
child.on('close', (code) => {
|
|
112
|
+
resolve(code === 0
|
|
113
|
+
? { success: true, message: stdout || stderr }
|
|
114
|
+
: { success: false, message: stderr || stdout || `Exit code ${code}` });
|
|
100
115
|
});
|
|
116
|
+
});
|
|
101
117
|
}
|
|
102
118
|
|
|
103
119
|
export default class AddonsManagerService extends Service {
|
|
@@ -119,15 +135,16 @@ export default class AddonsManagerService extends Service {
|
|
|
119
135
|
let result: CommandResult = {success: false, message: 'Unknown error'};
|
|
120
136
|
switch (action) {
|
|
121
137
|
case 'delete':
|
|
122
|
-
await sendCommand(
|
|
123
|
-
|
|
138
|
+
await sendCommand('yarn', ['global', 'remove', name], config.pathToHydro);
|
|
139
|
+
const rmRes = await sendCommand('hydrooj', ['addon', 'remove', name], config.pathToHydro);
|
|
140
|
+
result = rmRes;
|
|
124
141
|
break;
|
|
125
142
|
case 'update':
|
|
126
|
-
result = await sendCommand(
|
|
143
|
+
result = await sendCommand('yarn', ['global', 'upgrade', name + (version ? '@' + version : ''), '--latest'], config.pathToHydro);
|
|
127
144
|
break;
|
|
128
145
|
case 'add':
|
|
129
|
-
|
|
130
|
-
result = await sendCommand(
|
|
146
|
+
await sendCommand('yarn', ['global', 'add', name + (version ? '@' + version : '')], config.pathToHydro);
|
|
147
|
+
result = await sendCommand('hydrooj', ['addon', 'add', name], config.pathToHydro);
|
|
131
148
|
break;
|
|
132
149
|
}
|
|
133
150
|
return result;
|
|
@@ -135,7 +152,7 @@ export default class AddonsManagerService extends Service {
|
|
|
135
152
|
async function localUpdate(name: string): Promise<CommandResult> {
|
|
136
153
|
if (!checkPackageIsLocal(name)) return {success: false, message: 'Not a local package'};
|
|
137
154
|
let result: CommandResult = {success: false, message: 'Unknown error'};
|
|
138
|
-
result = await sendCommand(
|
|
155
|
+
result = await sendCommand('git', ['pull', 'origin', 'main'], name);
|
|
139
156
|
return result;
|
|
140
157
|
}
|
|
141
158
|
async function getActivedPackages(): Promise<string[]> {
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hydrooj-addons-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "addons manager for hydrooj",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"author": "https://github.com/Bryan0324",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"
|
|
9
|
-
"
|
|
8
|
+
"semver": "^7.6.0",
|
|
9
|
+
"validate-npm-package-name": "^5.0.0"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@types/semver": "^7.7.1",
|