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.
Files changed (2) hide show
  1. package/index.ts +46 -29
  2. 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
- let result: CommandResult = {success: false, message: 'Unknown error'};
70
- if(!(pkg.name in packages) && pkg.action === 'add')result = {success: false, message: 'Package is not installed'};
71
- if(checkPackageIsLocal(pkg.name))
72
- {
73
- if(pkg.action !== 'update') result = {success: false, message: 'Local packages can only be updated'};
74
- else result = await AddonsManagerHandler.model.localUpdate(pkg.name);
75
- }else result = await AddonsManagerHandler.model.manageAddon(pkg.action, pkg.name, pkg.version);
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
- return new Promise((resolve) => {
87
- const child = spawn(command, { cwd });
88
- let stdout = '';
89
- let stderr = '';
90
- child.stdout?.on('data', (data) => { stdout += data.toString(); });
91
- child.stderr?.on('data', (data) => { stderr += data.toString(); });
92
- child.on('error', (error) => resolve({ success: false, message: error.message }));
93
- child.on('close', (code) => {
94
- if (code !== 0) {
95
- resolve({ success: false, message: stderr || stdout || `Exit code ${code}` });
96
- } else {
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("yarn global remove " + name, config.pathToHydro);
123
- result = await sendCommand("hydrooj addon remove " + name, config.pathToHydro);
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("yarn global upgrade " + name + (version ? '@' + version : ''), config.pathToHydro);
143
+ result = await sendCommand('yarn', ['global', 'upgrade', name + (version ? '@' + version : ''), '--latest'], config.pathToHydro);
127
144
  break;
128
145
  case 'add':
129
- result = await sendCommand("yarn global add " + name + (version ? '@' + version : ''), config.pathToHydro);
130
- result = await sendCommand("hydrooj addon add " + name, config.pathToHydro);
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("git pull origin main", name);
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.0",
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
- "@types/semver": "^7.7.1",
9
- "@types/validate-npm-package-name": "^4.0.2"
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",