@naesofteak/naeso 0.0.0-stage → 1.0.0

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.
@@ -0,0 +1,389 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+
4
+ const {
5
+ getPackage
6
+ } = require("./registry");
7
+
8
+ const {
9
+ getLatestVersion
10
+ } = require("./compatibility");
11
+
12
+ const {
13
+ removePath
14
+ } = require("./environment");
15
+
16
+ const NAESO_HOME =
17
+ path.join(
18
+ process.env.HOME,
19
+ ".naeso"
20
+ );
21
+
22
+
23
+ function removeDirectory(directory) {
24
+ if (
25
+ fs.existsSync(directory)
26
+ ) {
27
+ fs.rmSync(
28
+ directory,
29
+ {
30
+ recursive: true,
31
+ force: true
32
+ }
33
+ );
34
+
35
+ return true;
36
+ }
37
+
38
+ return false;
39
+ }
40
+
41
+
42
+ function removeFile(file) {
43
+ if (
44
+ fs.existsSync(file)
45
+ ) {
46
+ fs.rmSync(
47
+ file,
48
+ {
49
+ force: true
50
+ }
51
+ );
52
+
53
+ return true;
54
+ }
55
+
56
+ return false;
57
+ }
58
+
59
+
60
+ function uninstallPackage(
61
+ packageName,
62
+ version = null
63
+ ) {
64
+ const pkg =
65
+ getPackage(packageName);
66
+
67
+ if (!pkg) {
68
+ throw new Error(
69
+ `Package '${packageName}' not found.`
70
+ );
71
+ }
72
+
73
+
74
+ /*
75
+ * ---------------------------------------
76
+ * Find installed metadata
77
+ * ---------------------------------------
78
+ */
79
+
80
+ const metadataPath =
81
+ path.join(
82
+ NAESO_HOME,
83
+ "installed",
84
+ `${packageName}.json`
85
+ );
86
+
87
+ let metadata = null;
88
+
89
+ if (
90
+ fs.existsSync(
91
+ metadataPath
92
+ )
93
+ ) {
94
+ metadata =
95
+ JSON.parse(
96
+ fs.readFileSync(
97
+ metadataPath,
98
+ "utf8"
99
+ )
100
+ );
101
+ }
102
+
103
+
104
+ /*
105
+ * ---------------------------------------
106
+ * Determine installed version
107
+ * ---------------------------------------
108
+ */
109
+
110
+ const selectedVersion =
111
+ version ||
112
+ metadata?.version ||
113
+ getLatestVersion(pkg);
114
+
115
+
116
+ /*
117
+ * ---------------------------------------
118
+ * Paths
119
+ * ---------------------------------------
120
+ */
121
+
122
+ const packageDirectory =
123
+ path.join(
124
+ NAESO_HOME,
125
+ "packages",
126
+ packageName
127
+ );
128
+
129
+ const versionDirectory =
130
+ path.join(
131
+ packageDirectory,
132
+ selectedVersion
133
+ );
134
+
135
+ const currentLink =
136
+ path.join(
137
+ packageDirectory,
138
+ "current"
139
+ );
140
+
141
+ const dataDirectory =
142
+ metadata?.dataDirectory ||
143
+ path.join(
144
+ NAESO_HOME,
145
+ "data",
146
+ packageName
147
+ );
148
+
149
+ const logDirectory =
150
+ metadata?.logDirectory ||
151
+ path.join(
152
+ NAESO_HOME,
153
+ "logs",
154
+ packageName
155
+ );
156
+
157
+ const configDirectory =
158
+ metadata?.configDirectory ||
159
+ path.join(
160
+ versionDirectory,
161
+ "config"
162
+ );
163
+
164
+
165
+ /*
166
+ * ---------------------------------------
167
+ * Check installation
168
+ * ---------------------------------------
169
+ */
170
+
171
+ if (
172
+ !metadata &&
173
+ !fs.existsSync(
174
+ versionDirectory
175
+ ) &&
176
+ !fs.existsSync(
177
+ currentLink
178
+ )
179
+ ) {
180
+ throw new Error(
181
+ `Package '${packageName}' is not installed.`
182
+ );
183
+ }
184
+
185
+
186
+ /*
187
+ * ---------------------------------------
188
+ * Header
189
+ * ---------------------------------------
190
+ */
191
+
192
+ console.log("");
193
+ console.log(
194
+ "Naeso Package Uninstaller"
195
+ );
196
+ console.log(
197
+ "-------------------------"
198
+ );
199
+
200
+ console.log(
201
+ `Package: ${packageName}`
202
+ );
203
+
204
+ console.log(
205
+ `Version: ${selectedVersion}`
206
+ );
207
+
208
+ console.log("");
209
+
210
+
211
+ /*
212
+ * ---------------------------------------
213
+ * Remove current symlink
214
+ * ---------------------------------------
215
+ */
216
+
217
+ console.log(
218
+ "Removing current symlink..."
219
+ );
220
+
221
+ removeFile(
222
+ currentLink
223
+ );
224
+
225
+
226
+ /*
227
+ * ---------------------------------------
228
+ * Remove installed package
229
+ * ---------------------------------------
230
+ */
231
+
232
+ console.log(
233
+ "Removing installed package..."
234
+ );
235
+
236
+ removeDirectory(
237
+ versionDirectory
238
+ );
239
+
240
+
241
+ /*
242
+ * ---------------------------------------
243
+ * Remove package directory
244
+ * ---------------------------------------
245
+ */
246
+
247
+ if (
248
+ fs.existsSync(
249
+ packageDirectory
250
+ )
251
+ ) {
252
+ const remaining =
253
+ fs.readdirSync(
254
+ packageDirectory
255
+ );
256
+
257
+ if (
258
+ remaining.length === 0
259
+ ) {
260
+ fs.rmdirSync(
261
+ packageDirectory
262
+ );
263
+ }
264
+ }
265
+
266
+
267
+ /*
268
+ * ---------------------------------------
269
+ * Remove data
270
+ * ---------------------------------------
271
+ */
272
+
273
+ console.log(
274
+ "Removing data directory..."
275
+ );
276
+
277
+ removeDirectory(
278
+ dataDirectory
279
+ );
280
+
281
+
282
+ /*
283
+ * ---------------------------------------
284
+ * Remove logs
285
+ * ---------------------------------------
286
+ */
287
+
288
+ console.log(
289
+ "Removing log directory..."
290
+ );
291
+
292
+ removeDirectory(
293
+ logDirectory
294
+ );
295
+
296
+
297
+ /*
298
+ * ---------------------------------------
299
+ * Remove configuration
300
+ * ---------------------------------------
301
+ */
302
+
303
+ console.log(
304
+ "Removing configuration..."
305
+ );
306
+
307
+ removeDirectory(
308
+ configDirectory
309
+ );
310
+
311
+
312
+ /*
313
+ * ---------------------------------------
314
+ * Remove metadata
315
+ * ---------------------------------------
316
+ */
317
+
318
+ console.log(
319
+ "Removing installation metadata..."
320
+ );
321
+
322
+ removeFile(
323
+ metadataPath
324
+ );
325
+
326
+
327
+ /*
328
+ * ---------------------------------------
329
+ * Remove PATH configuration
330
+ * ---------------------------------------
331
+ */
332
+
333
+ const environmentPaths =
334
+ pkg.environment?.path || [];
335
+
336
+ if (
337
+ environmentPaths.length > 0
338
+ ) {
339
+ console.log(
340
+ "Removing Naeso PATH configuration..."
341
+ );
342
+
343
+ const environmentResult =
344
+ removePath(
345
+ environmentPaths
346
+ );
347
+
348
+ if (
349
+ environmentResult.changed
350
+ ) {
351
+ console.log(
352
+ `PATH updated: ${environmentResult.shellConfig}`
353
+ );
354
+ } else {
355
+ console.log(
356
+ "PATH entry was not present."
357
+ );
358
+ }
359
+ }
360
+
361
+
362
+ /*
363
+ * ---------------------------------------
364
+ * Finished
365
+ * ---------------------------------------
366
+ */
367
+
368
+ console.log("");
369
+ console.log(
370
+ `${pkg.displayName || packageName} uninstalled successfully.`
371
+ );
372
+
373
+ console.log("");
374
+ console.log(
375
+ "Download cache was preserved."
376
+ );
377
+
378
+ console.log("");
379
+
380
+ return {
381
+ package: packageName,
382
+ version: selectedVersion
383
+ };
384
+ }
385
+
386
+
387
+ module.exports = {
388
+ uninstallPackage
389
+ };