@decaf-ts/cli 0.0.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.
@@ -0,0 +1,124 @@
1
+ import { Command } from "commander";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { CLI_FILE_NAME } from "./constants";
5
+ import { CLIUtils } from "./utils";
6
+ /**
7
+ * @summary Util class to handle CLI functionality from all Decaf modules
8
+ * @description CLI handler class
9
+ *
10
+ * @param {string} [basepath] the base path to look for modules in. defaults to `./`
11
+ * @param {string} [crawlLevels] folders to crawl to find modules from the basePath. defaults to 4
12
+ *
13
+ * @class CliWrapper
14
+ */
15
+ export class CliWrapper {
16
+ constructor(basePath = "./", crawlLevels = 4) {
17
+ this.basePath = basePath;
18
+ this.crawlLevels = crawlLevels;
19
+ this.modules = {};
20
+ }
21
+ /**
22
+ * @description Retrieves and initializes the {@link Command} object
23
+ * @private
24
+ */
25
+ get command() {
26
+ if (!this._command) {
27
+ this._command = new Command();
28
+ CLIUtils.initialize(this._command, this.basePath);
29
+ }
30
+ return this._command;
31
+ }
32
+ /**
33
+ * @description loads and registers module from a file
34
+ *
35
+ * @param {string} filePath path to look for modules
36
+ * @param {string} rootPath repo root to find the package.json
37
+ * @return {string} the module name
38
+ *
39
+ * @private
40
+ */
41
+ async load(filePath, rootPath) {
42
+ let name;
43
+ try {
44
+ const module = await CLIUtils.loadFromFile(filePath);
45
+ name = module.name;
46
+ const cmd = new Command();
47
+ CLIUtils.initialize(cmd, path.dirname(rootPath));
48
+ let m = module();
49
+ if (m instanceof Promise)
50
+ m = await m;
51
+ this.modules[name] = m;
52
+ }
53
+ catch (e) {
54
+ throw new Error(`failed to load module ${name || "unnamed"} under ${filePath}: ${e instanceof Error ? e.message : e}`);
55
+ }
56
+ return name;
57
+ }
58
+ /**
59
+ * @description finds all the cli modules in the basePath via {@link CliWrapper.crawl}
60
+ * and loads them
61
+ * @private
62
+ */
63
+ async boot() {
64
+ const basePath = path.join(process.cwd(), this.basePath);
65
+ const modules = this.crawl(basePath, this.crawlLevels);
66
+ for (const module of modules) {
67
+ if (module.includes("@decaf-ts/cli")) {
68
+ continue;
69
+ }
70
+ let name;
71
+ try {
72
+ name = await this.load(module, process.cwd());
73
+ }
74
+ catch (e) {
75
+ console.error(e);
76
+ continue;
77
+ }
78
+ if (!this.command.commands.find((c) => c["_name"] === name))
79
+ try {
80
+ this.command.command(name).addCommand(this.modules[name]);
81
+ }
82
+ catch (e) {
83
+ console.error(e);
84
+ }
85
+ }
86
+ console.log(`loaded modules:\n${Object.keys(this.modules)
87
+ .map((k) => `- ${k}`)
88
+ .join("\n")}`);
89
+ }
90
+ /**
91
+ * @description crawls the basePath up for 'levels' folders to find a module,eg a {@link CLI_FILE_NAME} named file
92
+ * @param {string} basePath the relative base batch to start searching in
93
+ * @param {number} [levels] the max number of levels to crawl. defaults to 2
94
+ * @private
95
+ */
96
+ crawl(basePath, levels = 2) {
97
+ if (levels <= 0)
98
+ return [];
99
+ return fs.readdirSync(basePath).reduce((accum, file) => {
100
+ file = path.join(basePath, file);
101
+ if (fs.statSync(file).isDirectory()) {
102
+ accum.push(...this.crawl(file, levels - 1));
103
+ }
104
+ else if (file.endsWith(`${CLI_FILE_NAME}.cjs`)) {
105
+ accum.push(file);
106
+ }
107
+ else {
108
+ // ignored file
109
+ }
110
+ return accum;
111
+ }, []);
112
+ }
113
+ /**
114
+ * @description runs the given command
115
+ *
116
+ * @param {string[]} [args] args to run. defaults to process.argv
117
+ */
118
+ async run(args = process.argv) {
119
+ await this.boot();
120
+ return this.command.parseAsync(args);
121
+ }
122
+ }
123
+
124
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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SyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFlO1lBQ2pCLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFpQixPQUFPLENBQUMsSUFBSTtRQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsImZpbGUiOiJDbGlXcmFwcGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDTElfRklMRV9OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDTElVdGlscyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBjbGFzcyB0byBoYW5kbGUgQ0xJIGZ1bmN0aW9uYWxpdHkgZnJvbSBhbGwgRGVjYWYgbW9kdWxlc1xuICogQGRlc2NyaXB0aW9uIENMSSBoYW5kbGVyIGNsYXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlcGF0aF0gdGhlIGJhc2UgcGF0aCB0byBsb29rIGZvciBtb2R1bGVzIGluLiBkZWZhdWx0cyB0byBgLi9gXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NyYXdsTGV2ZWxzXSBmb2xkZXJzIHRvIGNyYXdsIHRvIGZpbmQgbW9kdWxlcyBmcm9tIHRoZSBiYXNlUGF0aC4gZGVmYXVsdHMgdG8gNFxuICpcbiAqIEBjbGFzcyBDbGlXcmFwcGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGlXcmFwcGVyIHtcbiAgcHJpdmF0ZSBfY29tbWFuZD86IENvbW1hbmQ7XG4gIHByaXZhdGUgbW9kdWxlczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJhc2VQYXRoOiBzdHJpbmcgPSBcIi4vXCIsXG4gICAgcHJpdmF0ZSBjcmF3bExldmVscyA9IDRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFuZCBpbml0aWFsaXplcyB0aGUge0BsaW5rIENvbW1hbmR9IG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgY29tbWFuZCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbW1hbmQpIHtcbiAgICAgIHRoaXMuX2NvbW1hbmQgPSBuZXcgQ29tbWFuZCgpO1xuICAgICAgQ0xJVXRpbHMuaW5pdGlhbGl6ZSh0aGlzLl9jb21tYW5kLCB0aGlzLmJhc2VQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbW1hbmQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGxvYWRzIGFuZCByZWdpc3RlcnMgbW9kdWxlIGZyb20gYSBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBwYXRoIHRvIGxvb2sgZm9yIG1vZHVsZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RQYXRoIHJlcG8gcm9vdCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb25cbiAgICogQHJldHVybiB7c3RyaW5nfSB0aGUgbW9kdWxlIG5hbWVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZChmaWxlUGF0aDogc3RyaW5nLCByb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgbmFtZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgQ0xJVXRpbHMubG9hZEZyb21GaWxlKGZpbGVQYXRoKTtcbiAgICAgIG5hbWUgPSBtb2R1bGUubmFtZTtcbiAgICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKCk7XG4gICAgICBDTElVdGlscy5pbml0aWFsaXplKGNtZCwgcGF0aC5kaXJuYW1lKHJvb3RQYXRoKSk7XG4gICAgICBsZXQgbSA9IG1vZHVsZSgpO1xuICAgICAgaWYgKG0gaW5zdGFuY2VvZiBQcm9taXNlKSBtID0gYXdhaXQgbTtcbiAgICAgIHRoaXMubW9kdWxlc1tuYW1lXSA9IG07XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgXG4gICAgICAgIGBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJHtuYW1lIHx8IFwidW5uYW1lZFwifSB1bmRlciAke2ZpbGVQYXRofTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBmaW5kcyBhbGwgdGhlIGNsaSBtb2R1bGVzIGluIHRoZSBiYXNlUGF0aCB2aWEge0BsaW5rIENsaVdyYXBwZXIuY3Jhd2x9XG4gICAqIGFuZCBsb2FkcyB0aGVtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJvb3QoKSB7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5iYXNlUGF0aCk7XG4gICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuY3Jhd2woYmFzZVBhdGgsIHRoaXMuY3Jhd2xMZXZlbHMpO1xuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIGlmIChtb2R1bGUuaW5jbHVkZXMoXCJAZGVjYWYtdHMvY2xpXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIG5hbWUgPSBhd2FpdCB0aGlzLmxvYWQobW9kdWxlLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY29tbWFuZC5jb21tYW5kcy5maW5kKFxuICAgICAgICAgIChjKSA9PiAoYyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pW1wiX25hbWVcIl0gPT09IG5hbWVcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tbWFuZC5jb21tYW5kKG5hbWUpLmFkZENvbW1hbmQodGhpcy5tb2R1bGVzW25hbWVdKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgbG9hZGVkIG1vZHVsZXM6XFxuJHtPYmplY3Qua2V5cyh0aGlzLm1vZHVsZXMpXG4gICAgICAgIC5tYXAoKGspID0+IGAtICR7a31gKVxuICAgICAgICAuam9pbihcIlxcblwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gY3Jhd2xzIHRoZSBiYXNlUGF0aCB1cCBmb3IgJ2xldmVscycgZm9sZGVycyB0byBmaW5kIGEgbW9kdWxlLGVnIGEge0BsaW5rIENMSV9GSUxFX05BTUV9IG5hbWVkIGZpbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VQYXRoIHRoZSByZWxhdGl2ZSBiYXNlIGJhdGNoIHRvIHN0YXJ0IHNlYXJjaGluZyBpblxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsc10gdGhlIG1heCBudW1iZXIgb2YgbGV2ZWxzIHRvIGNyYXdsLiBkZWZhdWx0cyB0byAyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNyYXdsKGJhc2VQYXRoOiBzdHJpbmcsIGxldmVsczogbnVtYmVyID0gMikge1xuICAgIGlmIChsZXZlbHMgPD0gMCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhiYXNlUGF0aCkucmVkdWNlKChhY2N1bTogc3RyaW5nW10sIGZpbGUpID0+IHtcbiAgICAgIGZpbGUgPSBwYXRoLmpvaW4oYmFzZVBhdGgsIGZpbGUpO1xuICAgICAgaWYgKGZzLnN0YXRTeW5jKGZpbGUpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgYWNjdW0ucHVzaCguLi50aGlzLmNyYXdsKGZpbGUsIGxldmVscyAtIDEpKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsZS5lbmRzV2l0aChgJHtDTElfRklMRV9OQU1FfS5janNgKSkge1xuICAgICAgICBhY2N1bS5wdXNoKGZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlZCBmaWxlXG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBydW5zIHRoZSBnaXZlbiBjb21tYW5kXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSBhcmdzIHRvIHJ1bi4gZGVmYXVsdHMgdG8gcHJvY2Vzcy5hcmd2XG4gICAqL1xuICBhc3luYyBydW4oYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3YpIHtcbiAgICBhd2FpdCB0aGlzLmJvb3QoKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kLnBhcnNlQXN5bmMoYXJncyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Actual CLI file
3
+ */
4
+ export {};
package/lib/esm/cli.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Actual CLI file
3
+ */
4
+ import { CliWrapper } from "./CliWrapper";
5
+ new CliWrapper()
6
+ .run(process.argv)
7
+ .then(() => {
8
+ console.log("Thank you for using decaf-ts' command line interface");
9
+ })
10
+ .catch((e) => {
11
+ console.error(`${e instanceof Error ? e.message : e}`);
12
+ process.exit(1);
13
+ });
14
+
15
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLElBQUksVUFBVSxFQUFFO0tBQ2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7S0FDakIsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUM7S0FDRCxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtJQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImNsaS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWN0dWFsIENMSSBmaWxlXG4gKi9cblxuaW1wb3J0IHsgQ2xpV3JhcHBlciB9IGZyb20gXCIuL0NsaVdyYXBwZXJcIjtcbm5ldyBDbGlXcmFwcGVyKClcbiAgLnJ1bihwcm9jZXNzLmFyZ3YpXG4gIC50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIlRoYW5rIHlvdSBmb3IgdXNpbmcgZGVjYWYtdHMnIGNvbW1hbmQgbGluZSBpbnRlcmZhY2VcIik7XG4gIH0pXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xuIl19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @description The name for decaf cli modules where each library must export
3
+ * a single {@link CliModule}
4
+ *
5
+ * @constant
6
+ * @memberOf module:CLI.cli
7
+ */
8
+ export declare const CLI_FILE_NAME = "cli-module";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description The name for decaf cli modules where each library must export
3
+ * a single {@link CliModule}
4
+ *
5
+ * @constant
6
+ * @memberOf module:CLI.cli
7
+ */
8
+ export const CLI_FILE_NAME = "cli-module";
9
+
10
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyIsImZpbGUiOiJjb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbXBvcnQgeyBDbGlNb2R1bGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBmb3IgZGVjYWYgY2xpIG1vZHVsZXMgd2hlcmUgZWFjaCBsaWJyYXJ5IG11c3QgZXhwb3J0XG4gKiBhIHNpbmdsZSB7QGxpbmsgQ2xpTW9kdWxlfVxuICpcbiAqIEBjb25zdGFudFxuICogQG1lbWJlck9mIG1vZHVsZTpDTEkuY2xpXG4gKi9cbmV4cG9ydCBjb25zdCBDTElfRklMRV9OQU1FID0gXCJjbGktbW9kdWxlXCI7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * @description demo CLI module for libraries
4
+ * @summary minimal implementation on how to extend the decaf-ts cli
5
+ *
6
+ * Simply logs a message
7
+ *
8
+ * @function demo
9
+ *
10
+ * @category CLI
11
+ * @memberOf module:CLI.cli
12
+ */
13
+ export default function demo(): Command;
@@ -0,0 +1,22 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * @description demo CLI module for libraries
4
+ * @summary minimal implementation on how to extend the decaf-ts cli
5
+ *
6
+ * Simply logs a message
7
+ *
8
+ * @function demo
9
+ *
10
+ * @category CLI
11
+ * @memberOf module:CLI.cli
12
+ */
13
+ export default function demo() {
14
+ return new Command()
15
+ .command("command <type>")
16
+ .description("A demo command")
17
+ .action((args) => {
18
+ console.log(`executed demo command with type variable: ${args}`);
19
+ });
20
+ }
21
+
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9kZW1vL2NsaS1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxJQUFJO0lBQzFCLE9BQU8sSUFBSSxPQUFPLEVBQUU7U0FDakIsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3pCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztTQUM3QixNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsImZpbGUiOiJkZW1vL2NsaS1tb2R1bGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBkZW1vIENMSSBtb2R1bGUgZm9yIGxpYnJhcmllc1xuICogQHN1bW1hcnkgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvbiBob3cgdG8gZXh0ZW5kIHRoZSBkZWNhZi10cyBjbGlcbiAqXG4gKiBTaW1wbHkgbG9ncyBhIG1lc3NhZ2VcbiAqXG4gKiBAZnVuY3Rpb24gZGVtb1xuICpcbiAqIEBjYXRlZ29yeSBDTElcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q0xJLmNsaVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZW1vKCkge1xuICByZXR1cm4gbmV3IENvbW1hbmQoKVxuICAgIC5jb21tYW5kKFwiY29tbWFuZCA8dHlwZT5cIilcbiAgICAuZGVzY3JpcHRpb24oXCJBIGRlbW8gY29tbWFuZFwiKVxuICAgIC5hY3Rpb24oKGFyZ3M6IHN0cmluZykgPT4ge1xuICAgICAgY29uc29sZS5sb2coYGV4ZWN1dGVkIGRlbW8gY29tbWFuZCB3aXRoIHR5cGUgdmFyaWFibGU6ICR7YXJnc31gKTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ export * from "./CliWrapper";
2
+ /**
3
+ * @description Decaf Command Line Interface module
4
+ * @summary Provides the base access to the decaf CLI and:
5
+ *
6
+ * For each other '@decaf-ts' dependency:
7
+ * - find the `cli-module` file if it exists;
8
+ * - load it anto the main decaf-cli and expose its functionality
9
+ *
10
+ * @module CLI
11
+ */
12
+ /**
13
+ * @description Decaf Command Line Interface module
14
+ * @summary Provides the base access to the decaf CLI and:
15
+ *
16
+ * For each other '@decaf-ts' dependency:
17
+ * - find the `cli-module` file if it exists;
18
+ * - load it anto the main decaf-cli and expose its functionality
19
+ *
20
+ * @namespace cli
21
+ * @memberOf module:CLI
22
+ */
23
+ /**
24
+ * @summary stores the current package version
25
+ * @description this is how you should document a constant
26
+ * @const VERSION
27
+ * @memberOf module:CLI
28
+ */
29
+ export declare const VERSION = "0.0.1";
@@ -0,0 +1,31 @@
1
+ export * from "./CliWrapper";
2
+ /**
3
+ * @description Decaf Command Line Interface module
4
+ * @summary Provides the base access to the decaf CLI and:
5
+ *
6
+ * For each other '@decaf-ts' dependency:
7
+ * - find the `cli-module` file if it exists;
8
+ * - load it anto the main decaf-cli and expose its functionality
9
+ *
10
+ * @module CLI
11
+ */
12
+ /**
13
+ * @description Decaf Command Line Interface module
14
+ * @summary Provides the base access to the decaf CLI and:
15
+ *
16
+ * For each other '@decaf-ts' dependency:
17
+ * - find the `cli-module` file if it exists;
18
+ * - load it anto the main decaf-cli and expose its functionality
19
+ *
20
+ * @namespace cli
21
+ * @memberOf module:CLI
22
+ */
23
+ /**
24
+ * @summary stores the current package version
25
+ * @description this is how you should document a constant
26
+ * @const VERSION
27
+ * @memberOf module:CLI
28
+ */
29
+ export const VERSION = "0.0.1";
30
+
31
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUU3Qjs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQ2xpV3JhcHBlclwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNhZiBDb21tYW5kIExpbmUgSW50ZXJmYWNlIG1vZHVsZVxuICogQHN1bW1hcnkgUHJvdmlkZXMgdGhlIGJhc2UgYWNjZXNzIHRvIHRoZSBkZWNhZiBDTEkgYW5kOlxuICpcbiAqIEZvciBlYWNoIG90aGVyICdAZGVjYWYtdHMnIGRlcGVuZGVuY3k6XG4gKiAgLSBmaW5kIHRoZSBgY2xpLW1vZHVsZWAgZmlsZSBpZiBpdCBleGlzdHM7XG4gKiAgLSBsb2FkIGl0IGFudG8gdGhlIG1haW4gZGVjYWYtY2xpIGFuZCBleHBvc2UgaXRzIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAbW9kdWxlIENMSVxuICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY2FmIENvbW1hbmQgTGluZSBJbnRlcmZhY2UgbW9kdWxlXG4gKiBAc3VtbWFyeSBQcm92aWRlcyB0aGUgYmFzZSBhY2Nlc3MgdG8gdGhlIGRlY2FmIENMSSBhbmQ6XG4gKlxuICogRm9yIGVhY2ggb3RoZXIgJ0BkZWNhZi10cycgZGVwZW5kZW5jeTpcbiAqICAtIGZpbmQgdGhlIGBjbGktbW9kdWxlYCBmaWxlIGlmIGl0IGV4aXN0cztcbiAqICAtIGxvYWQgaXQgYW50byB0aGUgbWFpbiBkZWNhZi1jbGkgYW5kIGV4cG9zZSBpdHMgZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBuYW1lc3BhY2UgY2xpXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNMSVxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q0xJXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIwLjAuMVwiO1xuIl19
@@ -0,0 +1,8 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * @description describes the function type each decaf module must expose under {@link CLI_FILE_NAME}
4
+ * @type CliModule
5
+ *
6
+ * @memberOf module.CLI.cli
7
+ */
8
+ export type CliModule = () => Command | Promise<Command>;
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InR5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmltcG9ydCB7IENMSV9GSUxFX05BTUUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gZGVzY3JpYmVzIHRoZSBmdW5jdGlvbiB0eXBlIGVhY2ggZGVjYWYgbW9kdWxlIG11c3QgZXhwb3NlIHVuZGVyIHtAbGluayBDTElfRklMRV9OQU1FfVxuICogQHR5cGUgQ2xpTW9kdWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZS5DTEkuY2xpXG4gKi9cbmV4cG9ydCB0eXBlIENsaU1vZHVsZSA9ICgpID0+IENvbW1hbmQgfCBQcm9taXNlPENvbW1hbmQ+O1xuIl19
@@ -0,0 +1,49 @@
1
+ import { Command } from "commander";
2
+ import { CliModule } from "./types";
3
+ /**
4
+ * @description util class to retrieve versions and other information
5
+ *
6
+ * @class CLIUtils
7
+ * @static
8
+ */
9
+ export declare class CLIUtils {
10
+ /**
11
+ * @description Dynamically imports a cjs file into a decaf module
12
+ * @param {string} path
13
+ * @static
14
+ */
15
+ static loadFromFile(path: string): Promise<CliModule>;
16
+ /**
17
+ * @description allows safe dynamic imports
18
+ * @summary property imports JS files regardless of esm status
19
+ *
20
+ * @typeParam T
21
+ * @param {Promise} importPromise
22
+ * @private
23
+ */
24
+ private static normalizeImport;
25
+ /**
26
+ * @description initializes the Cli object
27
+ *
28
+ * @param {Command} command
29
+ * @param {string} [basePath] defaults to the current working directory
30
+ */
31
+ static initialize(command: Command, basePath: string): void;
32
+ /**
33
+ * @description retrieves and parses the package.json file
34
+ *
35
+ * @param {string} basePath
36
+ * @private
37
+ */
38
+ private static getPackage;
39
+ /**
40
+ * @description returns the package version
41
+ * @param {string} [basePath] defaults to current working dir
42
+ */
43
+ static packageVersion(basePath: string): string;
44
+ /**
45
+ * @description returns the package name
46
+ * @param {string} [basePath] defaults to current working dir
47
+ */
48
+ static packageName(basePath: string): string;
49
+ }
@@ -0,0 +1,78 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ /**
4
+ * @description util class to retrieve versions and other information
5
+ *
6
+ * @class CLIUtils
7
+ * @static
8
+ */
9
+ export class CLIUtils {
10
+ /**
11
+ * @description Dynamically imports a cjs file into a decaf module
12
+ * @param {string} path
13
+ * @static
14
+ */
15
+ static async loadFromFile(path) {
16
+ try {
17
+ return CLIUtils.normalizeImport(import(path));
18
+ }
19
+ catch (e) {
20
+ throw new Error(`Failed to load from ${path}: ${e instanceof Error ? e.message : e}`);
21
+ }
22
+ }
23
+ /**
24
+ * @description allows safe dynamic imports
25
+ * @summary property imports JS files regardless of esm status
26
+ *
27
+ * @typeParam T
28
+ * @param {Promise} importPromise
29
+ * @private
30
+ */
31
+ static async normalizeImport(importPromise) {
32
+ // CommonJS's `module.exports` is wrapped as `default` in ESModule.
33
+ return importPromise.then((m) => (m.default || m));
34
+ }
35
+ /**
36
+ * @description initializes the Cli object
37
+ *
38
+ * @param {Command} command
39
+ * @param {string} [basePath] defaults to the current working directory
40
+ */
41
+ static initialize(command, basePath) {
42
+ const name = CLIUtils.packageName(basePath);
43
+ command
44
+ .name(name)
45
+ .description(`Runs ${name} related commands`)
46
+ .version(CLIUtils.packageVersion(basePath));
47
+ }
48
+ /**
49
+ * @description retrieves and parses the package.json file
50
+ *
51
+ * @param {string} basePath
52
+ * @private
53
+ */
54
+ static getPackage(basePath) {
55
+ try {
56
+ return JSON.parse(fs.readFileSync(path.join(basePath, "package.json"), "utf8"));
57
+ }
58
+ catch (e) {
59
+ throw new Error(`Unable to read version from ${basePath}: ${e}`);
60
+ }
61
+ }
62
+ /**
63
+ * @description returns the package version
64
+ * @param {string} [basePath] defaults to current working dir
65
+ */
66
+ static packageVersion(basePath) {
67
+ return CLIUtils.getPackage(basePath)["version"];
68
+ }
69
+ /**
70
+ * @description returns the package name
71
+ * @param {string} [basePath] defaults to current working dir
72
+ */
73
+ static packageName(basePath) {
74
+ return CLIUtils.getPackage(basePath)["name"].split("/")[1];
75
+ }
76
+ }
77
+
78
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBSXBCOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQVk7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUJBQXVCLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUNsQyxhQUF5QjtRQUV6QixtRUFBbUU7UUFDbkUsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUN2QixDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBRSxDQUFvQixDQUFDLE9BQU8sSUFBSSxDQUFDLENBQU0sQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBZ0IsRUFBRSxRQUFnQjtRQUNsRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE9BQU87YUFDSixJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ1YsV0FBVyxDQUFDLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQzthQUM1QyxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQzdELENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBZ0I7UUFDcEMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBVyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQWdCO1FBQ2pDLE9BQVEsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBDbGlNb2R1bGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiB1dGlsIGNsYXNzIHRvIHJldHJpZXZlIHZlcnNpb25zIGFuZCBvdGhlciBpbmZvcm1hdGlvblxuICpcbiAqIEBjbGFzcyBDTElVdGlsc1xuICogQHN0YXRpY1xuICovXG5leHBvcnQgY2xhc3MgQ0xJVXRpbHMge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIER5bmFtaWNhbGx5IGltcG9ydHMgYSBjanMgZmlsZSBpbnRvIGEgZGVjYWYgbW9kdWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBhc3luYyBsb2FkRnJvbUZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxDbGlNb2R1bGU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIENMSVV0aWxzLm5vcm1hbGl6ZUltcG9ydChpbXBvcnQocGF0aCkpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBsb2FkIGZyb20gJHtwYXRofTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhbGxvd3Mgc2FmZSBkeW5hbWljIGltcG9ydHNcbiAgICogQHN1bW1hcnkgcHJvcGVydHkgaW1wb3J0cyBKUyBmaWxlcyByZWdhcmRsZXNzIG9mIGVzbSBzdGF0dXNcbiAgICpcbiAgICogQHR5cGVQYXJhbSBUXG4gICAqIEBwYXJhbSB7UHJvbWlzZX0gaW1wb3J0UHJvbWlzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgbm9ybWFsaXplSW1wb3J0PFQ+KFxuICAgIGltcG9ydFByb21pc2U6IFByb21pc2U8VD5cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgLy8gQ29tbW9uSlMncyBgbW9kdWxlLmV4cG9ydHNgIGlzIHdyYXBwZWQgYXMgYGRlZmF1bHRgIGluIEVTTW9kdWxlLlxuICAgIHJldHVybiBpbXBvcnRQcm9taXNlLnRoZW4oXG4gICAgICAobTogdW5rbm93bikgPT4gKChtIGFzIHsgZGVmYXVsdDogVCB9KS5kZWZhdWx0IHx8IG0pIGFzIFRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBpbml0aWFsaXplcyB0aGUgQ2xpIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlUGF0aF0gZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICovXG4gIHN0YXRpYyBpbml0aWFsaXplKGNvbW1hbmQ6IENvbW1hbmQsIGJhc2VQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuYW1lID0gQ0xJVXRpbHMucGFja2FnZU5hbWUoYmFzZVBhdGgpO1xuICAgIGNvbW1hbmRcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oYFJ1bnMgJHtuYW1lfSByZWxhdGVkIGNvbW1hbmRzYClcbiAgICAgIC52ZXJzaW9uKENMSVV0aWxzLnBhY2thZ2VWZXJzaW9uKGJhc2VQYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIHJldHJpZXZlcyBhbmQgcGFyc2VzIHRoZSBwYWNrYWdlLmpzb24gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVBhdGhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFBhY2thZ2UoYmFzZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oYmFzZVBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBcInV0ZjhcIilcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVhZCB2ZXJzaW9uIGZyb20gJHtiYXNlUGF0aH06ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgdGhlIHBhY2thZ2UgdmVyc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VQYXRoXSBkZWZhdWx0cyB0byBjdXJyZW50IHdvcmtpbmcgZGlyXG4gICAqL1xuICBzdGF0aWMgcGFja2FnZVZlcnNpb24oYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENMSVV0aWxzLmdldFBhY2thZ2UoYmFzZVBhdGgpW1widmVyc2lvblwiXSBhcyBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VQYXRoXSBkZWZhdWx0cyB0byBjdXJyZW50IHdvcmtpbmcgZGlyXG4gICAqL1xuICBzdGF0aWMgcGFja2FnZU5hbWUoYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChDTElVdGlscy5nZXRQYWNrYWdlKGJhc2VQYXRoKVtcIm5hbWVcIl0gYXMgc3RyaW5nKS5zcGxpdChcIi9cIilbMV07XG4gIH1cbn1cbiJdfQ==
package/lib/index.cjs ADDED
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.VERSION = void 0;
18
+ __exportStar(require("./CliWrapper.cjs"), exports);
19
+ /**
20
+ * @description Decaf Command Line Interface module
21
+ * @summary Provides the base access to the decaf CLI and:
22
+ *
23
+ * For each other '@decaf-ts' dependency:
24
+ * - find the `cli-module` file if it exists;
25
+ * - load it anto the main decaf-cli and expose its functionality
26
+ *
27
+ * @module CLI
28
+ */
29
+ /**
30
+ * @description Decaf Command Line Interface module
31
+ * @summary Provides the base access to the decaf CLI and:
32
+ *
33
+ * For each other '@decaf-ts' dependency:
34
+ * - find the `cli-module` file if it exists;
35
+ * - load it anto the main decaf-cli and expose its functionality
36
+ *
37
+ * @namespace cli
38
+ * @memberOf module:CLI
39
+ */
40
+ /**
41
+ * @summary stores the current package version
42
+ * @description this is how you should document a constant
43
+ * @const VERSION
44
+ * @memberOf module:CLI
45
+ */
46
+ exports.VERSION = "0.0.1";
47
+
48
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUU3Qjs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9DbGlXcmFwcGVyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY2FmIENvbW1hbmQgTGluZSBJbnRlcmZhY2UgbW9kdWxlXG4gKiBAc3VtbWFyeSBQcm92aWRlcyB0aGUgYmFzZSBhY2Nlc3MgdG8gdGhlIGRlY2FmIENMSSBhbmQ6XG4gKlxuICogRm9yIGVhY2ggb3RoZXIgJ0BkZWNhZi10cycgZGVwZW5kZW5jeTpcbiAqICAtIGZpbmQgdGhlIGBjbGktbW9kdWxlYCBmaWxlIGlmIGl0IGV4aXN0cztcbiAqICAtIGxvYWQgaXQgYW50byB0aGUgbWFpbiBkZWNhZi1jbGkgYW5kIGV4cG9zZSBpdHMgZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBtb2R1bGUgQ0xJXG4gKi9cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjYWYgQ29tbWFuZCBMaW5lIEludGVyZmFjZSBtb2R1bGVcbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIHRoZSBiYXNlIGFjY2VzcyB0byB0aGUgZGVjYWYgQ0xJIGFuZDpcbiAqXG4gKiBGb3IgZWFjaCBvdGhlciAnQGRlY2FmLXRzJyBkZXBlbmRlbmN5OlxuICogIC0gZmluZCB0aGUgYGNsaS1tb2R1bGVgIGZpbGUgaWYgaXQgZXhpc3RzO1xuICogIC0gbG9hZCBpdCBhbnRvIHRoZSBtYWluIGRlY2FmLWNsaSBhbmQgZXhwb3NlIGl0cyBmdW5jdGlvbmFsaXR5XG4gKlxuICogQG5hbWVzcGFjZSBjbGlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q0xJXG4gKi9cblxuLyoqXG4gKiBAc3VtbWFyeSBzdG9yZXMgdGhlIGN1cnJlbnQgcGFja2FnZSB2ZXJzaW9uXG4gKiBAZGVzY3JpcHRpb24gdGhpcyBpcyBob3cgeW91IHNob3VsZCBkb2N1bWVudCBhIGNvbnN0YW50XG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTpDTElcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjAuMC4xXCI7XG4iXX0=
package/lib/index.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ export * from "./CliWrapper";
2
+ /**
3
+ * @description Decaf Command Line Interface module
4
+ * @summary Provides the base access to the decaf CLI and:
5
+ *
6
+ * For each other '@decaf-ts' dependency:
7
+ * - find the `cli-module` file if it exists;
8
+ * - load it anto the main decaf-cli and expose its functionality
9
+ *
10
+ * @module CLI
11
+ */
12
+ /**
13
+ * @description Decaf Command Line Interface module
14
+ * @summary Provides the base access to the decaf CLI and:
15
+ *
16
+ * For each other '@decaf-ts' dependency:
17
+ * - find the `cli-module` file if it exists;
18
+ * - load it anto the main decaf-cli and expose its functionality
19
+ *
20
+ * @namespace cli
21
+ * @memberOf module:CLI
22
+ */
23
+ /**
24
+ * @summary stores the current package version
25
+ * @description this is how you should document a constant
26
+ * @const VERSION
27
+ * @memberOf module:CLI
28
+ */
29
+ export declare const VERSION = "0.0.1";
package/lib/types.cjs ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InR5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmltcG9ydCB7IENMSV9GSUxFX05BTUUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gZGVzY3JpYmVzIHRoZSBmdW5jdGlvbiB0eXBlIGVhY2ggZGVjYWYgbW9kdWxlIG11c3QgZXhwb3NlIHVuZGVyIHtAbGluayBDTElfRklMRV9OQU1FfVxuICogQHR5cGUgQ2xpTW9kdWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZS5DTEkuY2xpXG4gKi9cbmV4cG9ydCB0eXBlIENsaU1vZHVsZSA9ICgpID0+IENvbW1hbmQgfCBQcm9taXNlPENvbW1hbmQ+O1xuIl19
package/lib/types.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * @description describes the function type each decaf module must expose under {@link CLI_FILE_NAME}
4
+ * @type CliModule
5
+ *
6
+ * @memberOf module.CLI.cli
7
+ */
8
+ export type CliModule = () => Command | Promise<Command>;