@decaf-ts/cli 0.4.4 → 0.4.6
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 +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/lib/CliWrapper.cjs +254 -91
- package/lib/CliWrapper.d.ts +32 -4
- package/lib/CliWrapper.js.map +1 -1
- package/lib/banners.cjs +394 -0
- package/lib/banners.d.ts +3 -0
- package/lib/banners.js.map +1 -0
- package/lib/demo/cli-module.cjs +9 -39
- package/lib/demo/cli-module.d.ts +0 -33
- package/lib/demo/cli-module.js.map +1 -1
- package/lib/environment.cjs +17 -0
- package/lib/environment.d.ts +17 -0
- package/lib/environment.js.map +1 -0
- package/lib/esm/CliWrapper.d.ts +32 -4
- package/lib/esm/CliWrapper.js +255 -92
- package/lib/esm/CliWrapper.js.map +1 -1
- package/lib/esm/banners.d.ts +3 -0
- package/lib/esm/banners.js +391 -0
- package/lib/esm/banners.js.map +1 -0
- package/lib/esm/demo/cli-module.d.ts +0 -33
- package/lib/esm/demo/cli-module.js +9 -39
- package/lib/esm/demo/cli-module.js.map +1 -1
- package/lib/esm/environment.d.ts +17 -0
- package/lib/esm/environment.js +11 -0
- package/lib/esm/environment.js.map +1 -0
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/logging.d.ts +3 -0
- package/lib/esm/logging.js +16 -0
- package/lib/esm/logging.js.map +1 -0
- package/lib/esm/slogans.d.ts +40 -0
- package/lib/esm/slogans.js +142 -0
- package/lib/esm/slogans.js.map +1 -0
- package/lib/esm/utils-module/cli-module.d.ts +2 -0
- package/lib/esm/utils-module/cli-module.js +77 -0
- package/lib/esm/utils-module/cli-module.js.map +1 -0
- package/lib/esm/utils.js +1 -1
- package/lib/esm/utils.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/index.cjs +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js.map +1 -1
- package/lib/logging.cjs +19 -0
- package/lib/logging.d.ts +3 -0
- package/lib/logging.js.map +1 -0
- package/lib/slogans.cjs +150 -0
- package/lib/slogans.d.ts +40 -0
- package/lib/slogans.js.map +1 -0
- package/lib/utils-module/cli-module.cjs +83 -0
- package/lib/utils-module/cli-module.d.ts +2 -0
- package/lib/utils-module/cli-module.js.map +1 -0
- package/lib/utils.cjs +1 -1
- package/lib/utils.js.map +1 -1
- package/lib/version.cjs +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +3 -2
- package/workdocs/assets/slogans.json +194 -0
package/lib/CliWrapper.cjs
CHANGED
|
@@ -10,18 +10,10 @@ const path_1 = __importDefault(require("path"));
|
|
|
10
10
|
const constants_1 = require("./constants.cjs");
|
|
11
11
|
const utils_1 = require("./utils.cjs");
|
|
12
12
|
const logging_1 = require("@decaf-ts/logging");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"\x1b[38;5;205m", // pink
|
|
18
|
-
"\x1b[38;5;210m", // peachy
|
|
19
|
-
"\x1b[38;5;217m", // salmon
|
|
20
|
-
"\x1b[38;5;216m", // light coral
|
|
21
|
-
"\x1b[38;5;224m", // light peach
|
|
22
|
-
"\x1b[38;5;230m", // soft cream
|
|
23
|
-
"\x1b[38;5;230m", // soft cream
|
|
24
|
-
];
|
|
13
|
+
const banners_1 = require("./banners.cjs");
|
|
14
|
+
const slogans_1 = require("./slogans.cjs");
|
|
15
|
+
const environment_1 = require("./environment.cjs");
|
|
16
|
+
const MIN_BANNER_WIDTH = 92;
|
|
25
17
|
/**
|
|
26
18
|
* @description Utility class to handle CLI functionality from all Decaf modules
|
|
27
19
|
* @summary This class provides a wrapper around Commander.js to handle CLI commands from different Decaf modules.
|
|
@@ -39,11 +31,15 @@ const colors = [
|
|
|
39
31
|
*
|
|
40
32
|
* @class CliWrapper
|
|
41
33
|
*/
|
|
42
|
-
class CliWrapper {
|
|
43
|
-
|
|
34
|
+
class CliWrapper extends logging_1.LoggedClass {
|
|
35
|
+
static { this.env = environment_1.DecafCLieEnvironment; }
|
|
36
|
+
constructor(basePath = environment_1.DecafCLieEnvironment.cliModuleRoot, crawlLevels = 4) {
|
|
37
|
+
super();
|
|
44
38
|
this.basePath = basePath;
|
|
45
39
|
this.crawlLevels = crawlLevels;
|
|
46
40
|
this.modules = {};
|
|
41
|
+
this.moduleSlogans = {};
|
|
42
|
+
this.globalSlogans = [];
|
|
47
43
|
this.rootPath = path_1.default.resolve(__dirname, "..");
|
|
48
44
|
}
|
|
49
45
|
/**
|
|
@@ -87,6 +83,7 @@ class CliWrapper {
|
|
|
87
83
|
* CliWrapper-->>CliWrapper: Return name
|
|
88
84
|
*/
|
|
89
85
|
async load(filePath) {
|
|
86
|
+
const log = this.log.for(this.load);
|
|
90
87
|
let name;
|
|
91
88
|
try {
|
|
92
89
|
let module = await utils_1.CLIUtils.loadFromFile(filePath);
|
|
@@ -95,13 +92,24 @@ class CliWrapper {
|
|
|
95
92
|
module = module();
|
|
96
93
|
if (module instanceof Promise)
|
|
97
94
|
module = await module;
|
|
98
|
-
if (!(module
|
|
95
|
+
if (!this.isCommandInstance(module))
|
|
99
96
|
throw new Error(`You should export the instantiated Commands class as default.`);
|
|
100
97
|
this.modules[name] = module;
|
|
101
98
|
}
|
|
102
99
|
catch (e) {
|
|
103
100
|
throw new Error(`failed to load module under ${filePath}: ${e instanceof Error ? e.message : e}`);
|
|
104
101
|
}
|
|
102
|
+
try {
|
|
103
|
+
const moduleRoot = this.findModuleRoot(path_1.default.dirname(filePath));
|
|
104
|
+
const records = (0, slogans_1.readSlogans)(log, moduleRoot);
|
|
105
|
+
const strings = this.extractSloganStrings(records);
|
|
106
|
+
if (strings.length) {
|
|
107
|
+
this.moduleSlogans[name] = strings;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
console.error(`Failed to load slogans for ${name}: ${e}`);
|
|
112
|
+
}
|
|
105
113
|
return name;
|
|
106
114
|
}
|
|
107
115
|
/**
|
|
@@ -134,6 +142,7 @@ class CliWrapper {
|
|
|
134
142
|
* CliWrapper->>Console: Log loaded modules
|
|
135
143
|
*/
|
|
136
144
|
async boot() {
|
|
145
|
+
const log = this.log.for(this.boot);
|
|
137
146
|
const basePath = path_1.default.resolve(this.rootPath, this.basePath);
|
|
138
147
|
const modules = this.crawl(basePath, this.crawlLevels);
|
|
139
148
|
for (const module of modules) {
|
|
@@ -150,13 +159,13 @@ class CliWrapper {
|
|
|
150
159
|
}
|
|
151
160
|
if (!this.command.commands.find((c) => c["_name"] === name))
|
|
152
161
|
try {
|
|
153
|
-
this.command.
|
|
162
|
+
this.command.addCommand(this.modules[name]);
|
|
154
163
|
}
|
|
155
164
|
catch (e) {
|
|
156
165
|
console.error(e);
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
|
-
|
|
168
|
+
log.debug(`loaded modules:\n${Object.keys(this.modules)
|
|
160
169
|
.map((k) => `- ${k}`)
|
|
161
170
|
.join("\n")}`);
|
|
162
171
|
}
|
|
@@ -184,98 +193,237 @@ class CliWrapper {
|
|
|
184
193
|
return accum;
|
|
185
194
|
}, []);
|
|
186
195
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
findModuleRoot(initialDir) {
|
|
197
|
+
let current = initialDir;
|
|
198
|
+
const root = path_1.default.parse(initialDir).root;
|
|
199
|
+
while (true) {
|
|
200
|
+
if (fs_1.default.existsSync(path_1.default.join(current, "package.json"))) {
|
|
201
|
+
return current;
|
|
202
|
+
}
|
|
203
|
+
if (current === root)
|
|
204
|
+
break;
|
|
205
|
+
const parent = path_1.default.dirname(current);
|
|
206
|
+
if (parent === current)
|
|
207
|
+
break;
|
|
208
|
+
current = parent;
|
|
209
|
+
}
|
|
210
|
+
return initialDir;
|
|
211
|
+
}
|
|
212
|
+
getSlogan(priorityModule) {
|
|
213
|
+
this.ensureGlobalSlogans();
|
|
214
|
+
const priority = priorityModule
|
|
215
|
+
? this.moduleSlogans[priorityModule] || []
|
|
216
|
+
: [];
|
|
217
|
+
const others = this.otherSlogans(priorityModule);
|
|
218
|
+
if (!priority.length && !others.length) {
|
|
219
|
+
return "Decaf: strongly brewed TypeScript.";
|
|
220
|
+
}
|
|
221
|
+
if (!priority.length) {
|
|
222
|
+
return others[Math.floor(Math.random() * others.length)];
|
|
223
|
+
}
|
|
224
|
+
if (!others.length) {
|
|
225
|
+
return priority[Math.floor(Math.random() * priority.length)];
|
|
226
|
+
}
|
|
227
|
+
const pool = this.buildBalancedSloganPool(priority, others);
|
|
228
|
+
return pool[Math.floor(Math.random() * pool.length)];
|
|
229
|
+
}
|
|
230
|
+
otherSlogans(priorityModule) {
|
|
231
|
+
const modules = Object.entries(this.moduleSlogans)
|
|
232
|
+
.filter(([name]) => name !== priorityModule)
|
|
233
|
+
.flatMap(([, slogans]) => slogans);
|
|
234
|
+
if (this.globalSlogans.length === 0 && modules.length === 0) {
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
return [...this.globalSlogans, ...modules];
|
|
238
|
+
}
|
|
239
|
+
buildBalancedSloganPool(primary, secondary) {
|
|
240
|
+
const targetLength = Math.max(primary.length, secondary.length);
|
|
241
|
+
const primaryBucket = this.repeatToLength(primary, targetLength);
|
|
242
|
+
const secondaryBucket = this.repeatToLength(secondary, targetLength);
|
|
243
|
+
const result = [];
|
|
244
|
+
for (let i = 0; i < targetLength; i++) {
|
|
245
|
+
result.push(primaryBucket[i]);
|
|
246
|
+
result.push(secondaryBucket[i]);
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
repeatToLength(values, targetLength) {
|
|
251
|
+
if (!values.length || targetLength <= 0)
|
|
252
|
+
return [];
|
|
253
|
+
return Array.from({ length: targetLength }, (_, index) => {
|
|
254
|
+
return values[index % values.length];
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
ensureGlobalSlogans() {
|
|
258
|
+
if (this.globalSlogans.length > 0)
|
|
259
|
+
return;
|
|
260
|
+
const log = this.log.for(this.ensureGlobalSlogans);
|
|
261
|
+
const gathered = [];
|
|
262
|
+
const basePaths = [this.rootPath];
|
|
263
|
+
const hostPath = path_1.default.resolve(this.rootPath, this.basePath);
|
|
264
|
+
if (hostPath !== this.rootPath) {
|
|
265
|
+
basePaths.push(hostPath);
|
|
266
|
+
}
|
|
267
|
+
for (const candidate of basePaths) {
|
|
268
|
+
this.collectSlogansFromPath(log, candidate, gathered);
|
|
269
|
+
this.collectSlogansFromScope(log, candidate, gathered);
|
|
270
|
+
}
|
|
271
|
+
this.globalSlogans = gathered;
|
|
272
|
+
}
|
|
273
|
+
collectSlogansFromPath(log, basePath, accumulator) {
|
|
192
274
|
try {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
275
|
+
const records = (0, slogans_1.readSlogans)(log, basePath);
|
|
276
|
+
if (!records)
|
|
277
|
+
return;
|
|
278
|
+
for (const entry of records) {
|
|
279
|
+
if (entry && typeof entry.Slogan === "string" && entry.Slogan.trim()) {
|
|
280
|
+
accumulator.push(entry.Slogan.trim());
|
|
198
281
|
}
|
|
199
|
-
const parent = path_1.default.dirname(current);
|
|
200
|
-
if (parent === current)
|
|
201
|
-
break;
|
|
202
|
-
current = parent;
|
|
203
282
|
}
|
|
204
283
|
}
|
|
205
284
|
catch {
|
|
206
|
-
//
|
|
285
|
+
// readSlogans already logs issues
|
|
207
286
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const parsed = JSON.parse(raw);
|
|
222
|
-
if (Array.isArray(parsed)) {
|
|
223
|
-
for (const s of parsed) {
|
|
224
|
-
if (typeof s === "string" && s.trim().length > 0) {
|
|
225
|
-
slogans.push(s.trim());
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
// ignore per-package errors
|
|
233
|
-
}
|
|
287
|
+
}
|
|
288
|
+
collectSlogansFromScope(log, basePath, accumulator) {
|
|
289
|
+
const scopeDir = path_1.default.join(basePath, "node_modules", "@decaf-ts");
|
|
290
|
+
try {
|
|
291
|
+
if (!fs_1.default.existsSync(scopeDir) || !fs_1.default.statSync(scopeDir).isDirectory()) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const pkgs = fs_1.default.readdirSync(scopeDir);
|
|
295
|
+
for (const pkg of pkgs) {
|
|
296
|
+
const candidate = path_1.default.join(scopeDir, pkg);
|
|
297
|
+
try {
|
|
298
|
+
if (!fs_1.default.existsSync(candidate) || !fs_1.default.statSync(candidate).isDirectory()) {
|
|
299
|
+
continue;
|
|
234
300
|
}
|
|
301
|
+
this.collectSlogansFromPath(log, candidate, accumulator);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
// ignore individual package errors
|
|
235
305
|
}
|
|
236
|
-
}
|
|
237
|
-
catch {
|
|
238
|
-
// ignore scope directory errors
|
|
239
306
|
}
|
|
240
307
|
}
|
|
241
|
-
|
|
242
|
-
|
|
308
|
+
catch {
|
|
309
|
+
// ignore scope directory errors
|
|
243
310
|
}
|
|
244
|
-
const idx = Math.floor(Math.random() * slogans.length);
|
|
245
|
-
return slogans[idx];
|
|
246
311
|
}
|
|
247
|
-
|
|
312
|
+
extractSloganStrings(records) {
|
|
313
|
+
if (!records || !records.length)
|
|
314
|
+
return [];
|
|
315
|
+
return records
|
|
316
|
+
.map((entry) => (entry && entry.Slogan ? entry.Slogan.trim() : ""))
|
|
317
|
+
.filter((value) => value.length > 0);
|
|
318
|
+
}
|
|
319
|
+
isCommandInstance(value) {
|
|
320
|
+
if (value instanceof commander_1.Command)
|
|
321
|
+
return true;
|
|
322
|
+
if (!value || typeof value !== "object")
|
|
323
|
+
return false;
|
|
324
|
+
const candidate = value;
|
|
325
|
+
return (typeof candidate.parseAsync === "function" &&
|
|
326
|
+
typeof candidate.addCommand === "function" &&
|
|
327
|
+
typeof candidate.name === "function");
|
|
328
|
+
}
|
|
329
|
+
printBanner(args) {
|
|
248
330
|
let message;
|
|
249
331
|
try {
|
|
250
|
-
|
|
332
|
+
const priorityModule = this.getPriorityModule(args);
|
|
333
|
+
message = this.getSlogan(priorityModule);
|
|
251
334
|
}
|
|
252
335
|
catch {
|
|
253
336
|
message = "Decaf: strongly brewed TypeScript.";
|
|
254
337
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
banner.
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
338
|
+
// Select random banner and color palette
|
|
339
|
+
const bannerTemplate = banners_1.banners[Math.floor(Math.random() * banners_1.banners.length)];
|
|
340
|
+
const paletteKeys = Object.keys(banners_1.colorPalettes);
|
|
341
|
+
const palette = banners_1.colorPalettes[paletteKeys[Math.floor(Math.random() * paletteKeys.length)]];
|
|
342
|
+
const rawLines = bannerTemplate
|
|
343
|
+
.split("\n")
|
|
344
|
+
.filter((line) => line.length > 0);
|
|
345
|
+
const maxLineWidth = rawLines.reduce((max, line) => Math.max(max, line.length), 0);
|
|
346
|
+
const messageWidth = Math.max(0, message.length);
|
|
347
|
+
const targetWidth = Math.max(MIN_BANNER_WIDTH, maxLineWidth, messageWidth);
|
|
348
|
+
const banner = rawLines.map((line) => line.padEnd(targetWidth));
|
|
349
|
+
banner.push(message.padStart(targetWidth));
|
|
350
|
+
const reservedLines = "\n".repeat(Math.max(0, banner.length));
|
|
351
|
+
process.stdout.write(reservedLines);
|
|
352
|
+
const stop = this.animateBanner(banner, palette);
|
|
353
|
+
this.bannerAnimation = stop;
|
|
354
|
+
return stop;
|
|
355
|
+
}
|
|
356
|
+
getPriorityModule(args) {
|
|
357
|
+
if (!args || args.length <= 2)
|
|
358
|
+
return undefined;
|
|
359
|
+
const candidates = args.slice(2);
|
|
360
|
+
for (const item of candidates) {
|
|
361
|
+
if (!item || item.startsWith("-"))
|
|
362
|
+
continue;
|
|
363
|
+
const trimmed = item.trim();
|
|
364
|
+
if (!trimmed)
|
|
365
|
+
continue;
|
|
366
|
+
if (this.modules[trimmed]) {
|
|
367
|
+
return trimmed;
|
|
273
368
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
369
|
+
return trimmed;
|
|
370
|
+
}
|
|
371
|
+
return undefined;
|
|
372
|
+
}
|
|
373
|
+
stopBannerAnimation() {
|
|
374
|
+
if (this.bannerAnimation) {
|
|
375
|
+
this.bannerAnimation();
|
|
376
|
+
this.bannerAnimation = undefined;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
animateBanner(lines, palette) {
|
|
380
|
+
if (!lines.length) {
|
|
381
|
+
return () => { };
|
|
382
|
+
}
|
|
383
|
+
this.stopBannerAnimation();
|
|
384
|
+
const frameInterval = 150;
|
|
385
|
+
const duration = 5000;
|
|
386
|
+
const totalFrames = Math.max(1, Math.ceil(duration / frameInterval));
|
|
387
|
+
let framesRendered = 0;
|
|
388
|
+
let stopped = false;
|
|
389
|
+
let timer;
|
|
390
|
+
const paletteLength = Math.max(1, palette.length);
|
|
391
|
+
const colorOffsets = lines.map((_, index) => index % paletteLength);
|
|
392
|
+
const reset = "\x1b[0m";
|
|
393
|
+
const height = lines.length;
|
|
394
|
+
const moveUp = `\u001b[${height}A`;
|
|
395
|
+
const stop = () => {
|
|
396
|
+
if (stopped)
|
|
397
|
+
return;
|
|
398
|
+
stopped = true;
|
|
399
|
+
if (timer) {
|
|
400
|
+
clearInterval(timer);
|
|
401
|
+
timer = undefined;
|
|
277
402
|
}
|
|
278
|
-
}
|
|
403
|
+
};
|
|
404
|
+
const renderFrame = () => {
|
|
405
|
+
const offset = framesRendered % paletteLength;
|
|
406
|
+
const colored = lines.map((line, index) => {
|
|
407
|
+
const colorIndex = (colorOffsets[index] + offset) % paletteLength;
|
|
408
|
+
const color = palette[colorIndex] || "";
|
|
409
|
+
return `${color}${line}${reset}`;
|
|
410
|
+
});
|
|
411
|
+
process.stdout.write(moveUp);
|
|
412
|
+
for (const line of colored) {
|
|
413
|
+
process.stdout.write("\u001b[2K");
|
|
414
|
+
process.stdout.write(`${line}\n`);
|
|
415
|
+
}
|
|
416
|
+
framesRendered++;
|
|
417
|
+
};
|
|
418
|
+
renderFrame();
|
|
419
|
+
timer = setInterval(() => {
|
|
420
|
+
if (framesRendered >= totalFrames) {
|
|
421
|
+
stop();
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
renderFrame();
|
|
425
|
+
}, frameInterval);
|
|
426
|
+
return stop;
|
|
279
427
|
}
|
|
280
428
|
/**
|
|
281
429
|
* @description Executes the CLI with the provided arguments
|
|
@@ -299,8 +447,23 @@ class CliWrapper {
|
|
|
299
447
|
*/
|
|
300
448
|
async run(args = process.argv) {
|
|
301
449
|
await this.boot();
|
|
302
|
-
|
|
303
|
-
|
|
450
|
+
const stopAnimation = environment_1.DecafCLieEnvironment.banner
|
|
451
|
+
? this.printBanner(args)
|
|
452
|
+
: undefined;
|
|
453
|
+
try {
|
|
454
|
+
return await this.command.parseAsync(args);
|
|
455
|
+
}
|
|
456
|
+
finally {
|
|
457
|
+
if (stopAnimation)
|
|
458
|
+
stopAnimation();
|
|
459
|
+
this.bannerAnimation = undefined;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
static accumulateEnvironment(obj) {
|
|
463
|
+
this.env = this.env.accumulate(obj);
|
|
464
|
+
}
|
|
465
|
+
static getEnv() {
|
|
466
|
+
return this.env;
|
|
304
467
|
}
|
|
305
468
|
}
|
|
306
469
|
exports.CliWrapper = CliWrapper;
|
package/lib/CliWrapper.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
2
|
+
import { LoggedClass } from "@decaf-ts/logging";
|
|
3
3
|
/**
|
|
4
4
|
* @description Utility class to handle CLI functionality from all Decaf modules
|
|
5
5
|
* @summary This class provides a wrapper around Commander.js to handle CLI commands from different Decaf modules.
|
|
@@ -17,12 +17,16 @@ import { Logger } from "@decaf-ts/logging";
|
|
|
17
17
|
*
|
|
18
18
|
* @class CliWrapper
|
|
19
19
|
*/
|
|
20
|
-
export declare class CliWrapper {
|
|
20
|
+
export declare class CliWrapper extends LoggedClass {
|
|
21
21
|
private basePath;
|
|
22
22
|
private crawlLevels;
|
|
23
23
|
private _command?;
|
|
24
24
|
private modules;
|
|
25
25
|
private readonly rootPath;
|
|
26
|
+
private moduleSlogans;
|
|
27
|
+
private globalSlogans;
|
|
28
|
+
private bannerAnimation?;
|
|
29
|
+
private static env;
|
|
26
30
|
constructor(basePath?: string, crawlLevels?: number);
|
|
27
31
|
/**
|
|
28
32
|
* @description Retrieves and initializes the Commander Command object
|
|
@@ -100,8 +104,20 @@ export declare class CliWrapper {
|
|
|
100
104
|
* @private
|
|
101
105
|
*/
|
|
102
106
|
private crawl;
|
|
103
|
-
|
|
104
|
-
protected
|
|
107
|
+
private findModuleRoot;
|
|
108
|
+
protected getSlogan(priorityModule?: string): string;
|
|
109
|
+
private otherSlogans;
|
|
110
|
+
private buildBalancedSloganPool;
|
|
111
|
+
private repeatToLength;
|
|
112
|
+
private ensureGlobalSlogans;
|
|
113
|
+
private collectSlogansFromPath;
|
|
114
|
+
private collectSlogansFromScope;
|
|
115
|
+
private extractSloganStrings;
|
|
116
|
+
private isCommandInstance;
|
|
117
|
+
protected printBanner(args?: string[]): () => void;
|
|
118
|
+
private getPriorityModule;
|
|
119
|
+
private stopBannerAnimation;
|
|
120
|
+
private animateBanner;
|
|
105
121
|
/**
|
|
106
122
|
* @description Executes the CLI with the provided arguments
|
|
107
123
|
* @summary Boots the CLI by loading all modules, then parses and executes the command specified in the arguments
|
|
@@ -123,4 +139,16 @@ export declare class CliWrapper {
|
|
|
123
139
|
* CliWrapper-->>Client: result
|
|
124
140
|
*/
|
|
125
141
|
run(args?: string[]): Promise<Command>;
|
|
142
|
+
static accumulateEnvironment(obj: object): void;
|
|
143
|
+
static getEnv(): object & import("@decaf-ts/logging").LoggingConfig & {
|
|
144
|
+
env: any;
|
|
145
|
+
} & {
|
|
146
|
+
banner: boolean;
|
|
147
|
+
cliModuleRoot: string;
|
|
148
|
+
} & import("typed-object-accumulator").ObjectAccumulator<object & import("@decaf-ts/logging").LoggingConfig & {
|
|
149
|
+
env: any;
|
|
150
|
+
} & {
|
|
151
|
+
banner: boolean;
|
|
152
|
+
cliModuleRoot: string;
|
|
153
|
+
}>;
|
|
126
154
|
}
|
package/lib/CliWrapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CliWrapper.js","sourceRoot":"","sources":["../src/CliWrapper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CliWrapper.js","sourceRoot":"","sources":["../src/CliWrapper.ts"],"names":[],"mappings":"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"}
|