@decaf-ts/cli 0.4.4 → 0.4.5

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 (63) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.cjs +1 -1
  3. package/dist/cli.cjs.map +1 -1
  4. package/dist/cli.js +1 -1
  5. package/dist/cli.js.map +1 -1
  6. package/lib/CliWrapper.cjs +200 -82
  7. package/lib/CliWrapper.d.ts +28 -4
  8. package/lib/CliWrapper.js.map +1 -1
  9. package/lib/banners.cjs +194 -0
  10. package/lib/banners.d.ts +3 -0
  11. package/lib/banners.js.map +1 -0
  12. package/lib/demo/cli-module.cjs +9 -39
  13. package/lib/demo/cli-module.d.ts +0 -33
  14. package/lib/demo/cli-module.js.map +1 -1
  15. package/lib/environment.cjs +17 -0
  16. package/lib/environment.d.ts +17 -0
  17. package/lib/environment.js.map +1 -0
  18. package/lib/esm/CliWrapper.d.ts +28 -4
  19. package/lib/esm/CliWrapper.js +201 -83
  20. package/lib/esm/CliWrapper.js.map +1 -1
  21. package/lib/esm/banners.d.ts +3 -0
  22. package/lib/esm/banners.js +191 -0
  23. package/lib/esm/banners.js.map +1 -0
  24. package/lib/esm/demo/cli-module.d.ts +0 -33
  25. package/lib/esm/demo/cli-module.js +9 -39
  26. package/lib/esm/demo/cli-module.js.map +1 -1
  27. package/lib/esm/environment.d.ts +17 -0
  28. package/lib/esm/environment.js +11 -0
  29. package/lib/esm/environment.js.map +1 -0
  30. package/lib/esm/index.d.ts +1 -0
  31. package/lib/esm/index.js +1 -0
  32. package/lib/esm/index.js.map +1 -1
  33. package/lib/esm/logging.d.ts +3 -0
  34. package/lib/esm/logging.js +16 -0
  35. package/lib/esm/logging.js.map +1 -0
  36. package/lib/esm/slogans.d.ts +40 -0
  37. package/lib/esm/slogans.js +142 -0
  38. package/lib/esm/slogans.js.map +1 -0
  39. package/lib/esm/utils-module/cli-module.d.ts +2 -0
  40. package/lib/esm/utils-module/cli-module.js +77 -0
  41. package/lib/esm/utils-module/cli-module.js.map +1 -0
  42. package/lib/esm/utils.js +1 -1
  43. package/lib/esm/utils.js.map +1 -1
  44. package/lib/esm/version.d.ts +1 -1
  45. package/lib/esm/version.js +1 -1
  46. package/lib/index.cjs +1 -0
  47. package/lib/index.d.ts +1 -0
  48. package/lib/index.js.map +1 -1
  49. package/lib/logging.cjs +19 -0
  50. package/lib/logging.d.ts +3 -0
  51. package/lib/logging.js.map +1 -0
  52. package/lib/slogans.cjs +150 -0
  53. package/lib/slogans.d.ts +40 -0
  54. package/lib/slogans.js.map +1 -0
  55. package/lib/utils-module/cli-module.cjs +83 -0
  56. package/lib/utils-module/cli-module.d.ts +2 -0
  57. package/lib/utils-module/cli-module.js.map +1 -0
  58. package/lib/utils.cjs +1 -1
  59. package/lib/utils.js.map +1 -1
  60. package/lib/version.cjs +1 -1
  61. package/lib/version.d.ts +1 -1
  62. package/package.json +3 -2
  63. package/workdocs/assets/slogans.json +194 -0
package/README.md CHANGED
@@ -35,7 +35,7 @@ A modular command-line interface framework for Decaf-ts that dynamically discove
35
35
 
36
36
  Documentation available [here](https://decaf-ts.github.io/cli/)
37
37
 
38
- Minimal size: 1.6 KB kb gzipped
38
+ Minimal size: 3.5 KB kb gzipped
39
39
 
40
40
 
41
41
  ### Description
package/dist/cli.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var t,e;t=this,e=function(t,e,a,n,r,o){"use strict";function s(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=s(a),c=s(n);class d{static async loadFromFile(t){try{return d.normalizeImport(import(t))}catch(e){throw Error(`Failed to load from ${t}: ${e instanceof Error?e.message:e}`)}}static async normalizeImport(t){return t.then((t=>t.default||t))}static initialize(t,e){const a=d.packageName(e);t.name(a).description(`Runs ${a} related commands`).version(d.packageVersion(e))}static getPackage(t){try{return JSON.parse(i.default.readFileSync(c.default.join(t,"package.json"),"utf8"))}catch(e){throw Error(`Unable to read version from ${t}: ${e}`)}}static packageVersion(t){return d.getPackage(t).version}static packageName(t){const e=d.getPackage(t).name.split("/");return e[e.length-1]}}const l=["\x1b[38;5;215m","\x1b[38;5;209m","\x1b[38;5;205m","\x1b[38;5;210m","\x1b[38;5;217m","\x1b[38;5;216m","\x1b[38;5;224m","\x1b[38;5;230m","\x1b[38;5;230m"];t.CliWrapper=class{constructor(t="./",e=4){this.basePath=t,this.crawlLevels=e,this.modules={},this.rootPath=c.default.resolve(__dirname,"..")}get command(){return this._command||(this._command=new e.Command,d.initialize(this._command,this.rootPath)),this._command}async load(t){let a;try{let n=await d.loadFromFile(t);if(a=n.name,n instanceof Function&&(n=n()),n instanceof Promise&&(n=await n),!(n instanceof e.Command))throw Error("You should export the instantiated Commands class as default.");this.modules[a]=n}catch(e){throw Error(`failed to load module under ${t}: ${e instanceof Error?e.message:e}`)}return a}async boot(){const t=c.default.resolve(this.rootPath,this.basePath),e=this.crawl(t,this.crawlLevels);for(const t of e){if(t.includes("@decaf-ts/cli"))continue;let e;try{e=await this.load(t)}catch(t){continue}if(!this.command.commands.find((t=>t._name===e)))try{this.command.command(e).addCommand(this.modules[e])}catch(t){}}}crawl(t,e=2){return e>0?i.default.readdirSync(t).reduce(((a,n)=>(n=c.default.join(t,n),i.default.statSync(n).isDirectory()?a.push(...this.crawl(n,e-1)):n.match(RegExp("cli-module\\.[cm]js$","gm"))&&a.push(n),a)),[]):[]}getSlogan(){let t,e=__dirname;try{for(;e&&e!==c.default.parse(e).root;){const a=c.default.join(e,"node_modules");if(i.default.existsSync(a)&&i.default.statSync(a).isDirectory()){t=a;break}const n=c.default.dirname(e);if(n===e)break;e=n}}catch{}const a=[];if(t){const e=c.default.join(t,"@decaf-ts");try{if(i.default.existsSync(e)&&i.default.statSync(e).isDirectory()){const t=i.default.readdirSync(e);for(const n of t){const t=c.default.join(e,n);try{const e=c.default.join(t,"workdocs","assets","slogans.json");if(i.default.existsSync(e)&&i.default.statSync(e).isFile()){const t=i.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(Array.isArray(n))for(const t of n)"string"==typeof t&&t.trim().length>0&&a.push(t.trim())}}catch{}}}}catch{}}return 0===a.length?"Decaf: strongly brewed TypeScript.":a[Math.floor(Math.random()*a.length)]}printBanner(t=r.Logging.get()){let e;try{e=this.getSlogan()}catch{e="Decaf: strongly brewed TypeScript."}const a="# \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n# ( ( \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# ) ) \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# [=======] \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n# `-----\xb4 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n#".split("\n"),n=a.reduce(((t,e)=>Math.max(t,e.length)),0);a.push("# "+e.padStart(n-3)),a.forEach(((e,a)=>{const n=l[a%l.length]||"",r=t?t.info.bind(t):(()=>{}).bind();try{r(o.style(e||"").raw(n).text)}catch{r((e||"")+"")}}))}async run(t=process.argv){return await this.boot(),this.printBanner(),this.command.parseAsync(t)}}},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("commander"),require("fs"),require("path"),require("@decaf-ts/logging"),require("styled-string-builder")):"function"==typeof define&&define.amd?define(["exports","commander","fs","path","@decaf-ts/logging","styled-string-builder"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).cli={},t.commander,t.fs,t.path,t.decafTsLogging,t.styledStringBuilder);
1
+ var _,t;_=this,t=function(_,t,n,e,o,a){"use strict";function r(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var s=r(n),i=r(e);class l{static async loadFromFile(_){try{return l.normalizeImport(import(_))}catch(t){throw Error(`Failed to load from ${_}: ${t instanceof Error?t.message:t}`)}}static async normalizeImport(_){return _.then(_=>_.default||_)}static initialize(_,t){const n=l.packageName(t);_.name("decaf").description(`Runs ${n} related commands`).version(l.packageVersion(t))}static getPackage(_){try{return JSON.parse(s.default.readFileSync(i.default.join(_,"package.json"),"utf8"))}catch(t){throw Error(`Unable to read version from ${_}: ${t}`)}}static packageVersion(_){return l.getPackage(_).version}static packageName(_){const t=l.getPackage(_).name.split("/");return t[t.length-1]}}const m=["\n ____ _____ ____ _ _____ _____ ____ \n| _ \\| ____/ ___| / \\ | ___| |_ _/ ___| \n| | | | _|| | / _ \\ | |_ | | \\___ \\ \n| |_| | |__| |___ / ___ \\| _| | | ___) |\n|____/|_____\\____/_/ \\_\\_| |_| |____/ \n","\n ____ __ ______\n / __ \\___ _________ _/ __/_ __/____\n / / / / _ \\/ ___/ __ `/ /_ / / / ___/\n / /_/ / __/ /__/ /_/ / __/ / / (__ ) \n/_____/\\___/\\___/\\__,_/_/ /_/ /____/ \n","\n\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551 \u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\n\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\n\u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n","\n ___ __ ______\n / _ \\___ _______ _/ _/ /_ __/\n / // / -_) __/ _ `/ _/ / / \n/____/\\__/\\__/\\_,_/_/ /_/ \n","\n _ _ _ _ _ _ _ \n / \\ / \\ / \\ / \\ / \\ / \\ / \\ \n( D | e | c | a | f ) ( T | S )\n \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \n","\n+--+--+--+--+--+ +--+--+\n|D |e |c |a |f | |T |S |\n+--+--+--+--+--+ +--+--+\n","\n.______ _______ ______ ___ _______ .___________. _______\n| _ \\ | ____| / | / \\ | ____| | | / |\n| | | | | |__ | ,----' / ^ \\ | |__ `---| |----` | (----`\n| | | | | __| | | / /_\\ \\ | __| | | \\ \\ \n| `--' | | |____ | `----./ _____ \\ | | | | .----) | \n|_______/ |_______| \\______/__/ \\__\\ |__| |__| |_______/ \n","\n _/_/_/ _/_/_/ _/_/_/_/_/ _/_/_/ \n _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ \n _/ _/ _/_/_/_/ _/ _/ _/ _/ _/_/_/ _/ _/_/ \n _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ \n_/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ \n","\n______ __ _____ _____ \n| _ \\ / _| |_ _/ ___|\n| | | |___ ___ __ _ ___| |_ | | \\ `--. \n| | | / _ \\/ __/ _` |/ _ \\ _| | | `--. \\\n| |/ / __/ (_| (_| | __/ | | | /\\__/ /\n|___/ \\___|\\___\\__,_|\\___|_| \\_/ \\____/ \n","\n ___ ___ ___ ___ ___ ___ ___ \n /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ \n /::\\ \\ /::\\ \\ /::\\ \\ /::\\ \\ /::\\ \\ \\:\\ \\ /::\\ \\ \n /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ \\:\\ \\ /:/\\ \\ \\ \n /:/ \\:\\__\\ /::\\~\\:\\ \\ /:/ \\:\\ \\ /::\\~\\:\\ \\ /::\\~\\:\\ \\ /::\\ \\ _\\:\\~\\ \\ \\ \n /:/__/ \\:|__| /:/\\:\\ \\:\\__\\ /:/__/ \\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\__\\ /\\ \\:\\ \\ \\__\\\n \\:\\ \\ /:/ / \\:\\~\\:\\ \\/__/ \\:\\ \\ \\/__/ \\/__\\:\\/:/ / \\:\\~\\:\\ \\/__/ /:/ \\/__/ \\:\\ \\:\\ \\/__/\n \\:\\ /:/ / \\:\\ \\:\\__\\ \\:\\ \\ \\::/ / \\:\\ \\:\\__\\ /:/ / \\:\\ \\:\\__\\ \n \\:\\/:/ / \\:\\ \\/__/ \\:\\ \\ /:/ / \\:\\ \\/__/ \\/__/ \\:\\/:/ / \n \\::/__/ \\:\\__\\ \\:\\__\\ /:/ / \\:\\__\\ \\::/ / \n ~~ \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ \n"],c={sunset:["\x1b[38;5;215m","\x1b[38;5;209m","\x1b[38;5;205m","\x1b[38;5;210m","\x1b[38;5;217m","\x1b[38;5;216m","\x1b[38;5;224m","\x1b[38;5;230m"],ocean:["\x1b[38;5;27m","\x1b[38;5;33m","\x1b[38;5;39m","\x1b[38;5;45m","\x1b[38;5;51m","\x1b[38;5;87m","\x1b[38;5;123m","\x1b[38;5;159m"],forest:["\x1b[38;5;22m","\x1b[38;5;28m","\x1b[38;5;34m","\x1b[38;5;40m","\x1b[38;5;46m","\x1b[38;5;82m","\x1b[38;5;118m","\x1b[38;5;154m"],fire:["\x1b[38;5;196m","\x1b[38;5;202m","\x1b[38;5;208m","\x1b[38;5;214m","\x1b[38;5;220m","\x1b[38;5;226m","\x1b[38;5;228m","\x1b[38;5;230m"],neon:["\x1b[38;5;198m","\x1b[38;5;207m","\x1b[38;5;219m","\x1b[38;5;123m","\x1b[38;5;51m","\x1b[38;5;46m","\x1b[38;5;226m","\x1b[38;5;201m"],monochrome:["\x1b[38;5;232m","\x1b[38;5;236m","\x1b[38;5;240m","\x1b[38;5;244m","\x1b[38;5;248m","\x1b[38;5;252m","\x1b[38;5;255m","\x1b[38;5;250m"],pastel:["\x1b[38;5;217m","\x1b[38;5;223m","\x1b[38;5;229m","\x1b[38;5;157m","\x1b[38;5;159m","\x1b[38;5;189m","\x1b[38;5;183m","\x1b[38;5;225m"],cyberpunk:["\x1b[38;5;201m","\x1b[38;5;198m","\x1b[38;5;165m","\x1b[38;5;93m","\x1b[38;5;51m","\x1b[38;5;45m","\x1b[38;5;21m","\x1b[38;5;226m"],earth:["\x1b[38;5;94m","\x1b[38;5;130m","\x1b[38;5;136m","\x1b[38;5;100m","\x1b[38;5;58m","\x1b[38;5;22m","\x1b[38;5;137m","\x1b[38;5;180m"],rainbow:["\x1b[38;5;196m","\x1b[38;5;208m","\x1b[38;5;226m","\x1b[38;5;46m","\x1b[38;5;21m","\x1b[38;5;57m","\x1b[38;5;129m","\x1b[38;5;201m"]};function d(_,t){_=_.for(d);const n=i.default.join(t,"workdocs","assets","slogans.json");try{if(!s.default.existsSync(n))return;const _=s.default.readFileSync(n);return JSON.parse(_.toString())}catch(t){return void _.error("Failed to read slogans from "+n,t)}}const h={banner:!0,cliModuleRoot:process.env.CLI_MODULE_TOOT&&process.env.CLI_MODULE_TOOT.length>0?i.default.resolve(process.env.CLI_MODULE_TOOT):process.cwd()},u=o.LoggedEnvironment.accumulate(h);class f extends o.LoggedClass{static{this.env=u}constructor(_=u.cliModuleRoot,t=4){super(),this.basePath=_,this.crawlLevels=t,this.modules={},this.moduleSlogans={},this.globalSlogans=[],this.rootPath=i.default.resolve(__dirname,"..")}get command(){return this._command||(this._command=new t.Command,l.initialize(this._command,this.rootPath)),this._command}async load(_){const n=this.log.for(this.load);let e;try{let n=await l.loadFromFile(_);if(e=n.name,n instanceof Function&&(n=n()),n instanceof Promise&&(n=await n),!(n instanceof t.Command))throw Error("You should export the instantiated Commands class as default.");this.modules[e]=n}catch(t){throw Error(`failed to load module under ${_}: ${t instanceof Error?t.message:t}`)}try{const t=d(n,i.default.dirname(_)),o=this.extractSloganStrings(t);o.length&&(this.moduleSlogans[e]=o)}catch(_){}return e}async boot(){const _=this.log.for(this.boot),t=i.default.resolve(this.rootPath,this.basePath),n=this.crawl(t,this.crawlLevels);for(const _ of n){if(_.includes("@decaf-ts/cli"))continue;let t;try{t=await this.load(_)}catch(_){continue}if(!this.command.commands.find(_=>_._name===t))try{this.command.addCommand(this.modules[t])}catch(_){}}_.debug("loaded modules:\n"+Object.keys(this.modules).map(_=>"- "+_).join("\n"))}crawl(_,t=2){return t>0?s.default.readdirSync(_).reduce((n,e)=>(e=i.default.join(_,e),s.default.statSync(e).isDirectory()?n.push(...this.crawl(e,t-1)):e.match(RegExp("cli-module\\.[cm]js$","gm"))&&n.push(e),n),[]):[]}getSlogan(_){this.ensureGlobalSlogans();const t=_&&this.moduleSlogans[_]||[],n=this.otherSlogans(_),e=t.length>0,o=n.length>0;if(!e&&!o)return"Decaf: strongly brewed TypeScript.";if(e&&o){const _=.5>Math.random()?t:n;return _[Math.floor(Math.random()*_.length)]}return e?t[Math.floor(Math.random()*t.length)]:n[Math.floor(Math.random()*n.length)]}otherSlogans(_){const t=Object.entries(this.moduleSlogans).filter(([t])=>t!==_).flatMap(([,_])=>_);return 0===this.globalSlogans.length&&0===t.length?[]:[...this.globalSlogans,...t]}ensureGlobalSlogans(){if(this.globalSlogans.length>0)return;const _=this.log.for(this.ensureGlobalSlogans),t=[];this.collectSlogansFromPath(_,this.rootPath,t);const n=this.findNearestNodeModules();if(n){const e=i.default.join(n,"@decaf-ts");try{if(s.default.existsSync(e)&&s.default.statSync(e).isDirectory()){const n=s.default.readdirSync(e);for(const o of n){const n=i.default.join(e,o);this.collectSlogansFromPath(_,n,t)}}}catch{}}this.globalSlogans=t}collectSlogansFromPath(_,t,n){try{const e=d(_,t);if(!e)return;for(const _ of e)_&&"string"==typeof _.Slogan&&_.Slogan.trim()&&n.push(_.Slogan.trim())}catch{}}extractSloganStrings(_){return _&&_.length?_.map(_=>_&&_.Slogan?_.Slogan.trim():"").filter(_=>_.length>0):[]}findNearestNodeModules(){let _=__dirname;for(;_&&_!==i.default.parse(_).root;){const t=i.default.join(_,"node_modules");try{if(s.default.existsSync(t)&&s.default.statSync(t).isDirectory())return t}catch{}const n=i.default.dirname(_);if(n===_)break;_=n}}printBanner(_){let t;try{const n=this.getPriorityModule(_);t=this.getSlogan(n)}catch{t="Decaf: strongly brewed TypeScript."}const n=m[Math.floor(Math.random()*m.length)],e=Object.keys(c),o=c[e[Math.floor(Math.random()*e.length)]],a=n.split("\n").filter(_=>_.length>0),r=a.reduce((_,t)=>Math.max(_,t.length),0);r>0?a.push(t.padStart(r)):a.push(t);const s=this.animateBanner(a,o);return this.bannerAnimation=s,s}getPriorityModule(_){if(!_||2>=_.length)return;const t=_.slice(2);for(const _ of t){if(!_||_.startsWith("-"))continue;const t=_.trim();if(t)return this.modules[t],t}}stopBannerAnimation(){this.bannerAnimation&&(this.bannerAnimation(),this.bannerAnimation=void 0)}animateBanner(_,t){if(!_.length)return()=>{};this.stopBannerAnimation();let n,e=0,o=!1;const r=()=>{const n=e%t.length,o=_.map((_,e)=>{const o=t[(e+n)%t.length]||"";return a.style(_||"").raw(o).text});e>0&&process.stdout.write(`\x1b[${_.length}F`);for(const _ of o)process.stdout.write("\x1b[2K"),process.stdout.write(_+"\n");e++},s=()=>{o||(o=!0,n&&clearInterval(n))};return r(),n=setInterval(()=>{34>e?r():s()},150),s}async run(_=process.argv){await this.boot();const t=u.banner?this.printBanner(_):void 0;try{return await this.command.parseAsync(_)}finally{t&&t(),this.bannerAnimation=void 0}}static accumulateEnvironment(_){this.env=this.env.accumulate(_)}static getEnv(){return this.env}}_.CliWrapper=f,_.DecafCLieEnvironment=u,_.DefaultCliEnvironment=h},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("commander"),require("fs"),require("path"),require("@decaf-ts/logging"),require("styled-string-builder"),require("@decaf-ts/utils")):"function"==typeof define&&define.amd?define(["exports","commander","fs","path","@decaf-ts/logging","styled-string-builder","@decaf-ts/utils"],t):t((_="undefined"!=typeof globalThis?globalThis:_||self).cli={},_.commander,_.fs,_.path,_.decafTsLogging,_.styledStringBuilder);
2
2
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","sources":["../src/utils.ts","../src/CliWrapper.ts"],"sourcesContent":[null,null],"names":["CLIUtils","loadFromFile","path","normalizeImport","import","e","Error","message","importPromise","then","m","default","initialize","command","basePath","name","packageName","description","version","packageVersion","getPackage","JSON","parse","fs","readFileSync","join","split","length","colors","constructor","crawlLevels","this","modules","rootPath","resolve","__dirname","_command","Command","load","filePath","module","Function","Promise","boot","crawl","includes","commands","find","c","addCommand","levels","readdirSync","reduce","accum","file","statSync","isDirectory","push","match","RegExp","getSlogan","nodeModulesDir","current","root","candidate","existsSync","parent","dirname","slogans","scopeDir","pkgs","pkg","depPath","slogansPath","isFile","raw","parsed","Array","isArray","s","trim","Math","floor","random","printBanner","logger","Logging","get","banner","maxLength","max","line","padStart","forEach","index","color","logFn","info","bind","console","style","text","String","run","args","process","argv","parseAsync"],"mappings":"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"}
1
+ {"version":3,"file":"cli.cjs","sources":["../src/utils.ts","../src/banners.ts","../src/slogans.ts","../src/environment.ts","../src/CliWrapper.ts"],"sourcesContent":[null,null,null,null,null],"names":["CLIUtils","loadFromFile","path","normalizeImport","import","e","Error","message","importPromise","then","m","default","initialize","command","basePath","name","packageName","description","version","packageVersion","getPackage","JSON","parse","fs","readFileSync","join","split","length","banners","colorPalettes","sunset","ocean","forest","fire","neon","monochrome","pastel","cyberpunk","earth","rainbow","readSlogans","log","for","slogansPath","existsSync","content","toString","error","DefaultCliEnvironment","banner","cliModuleRoot","process","env","CLI_MODULE_TOOT","resolve","cwd","DecafCLieEnvironment","LoggedEnvironment","accumulate","CliWrapper","LoggedClass","this","constructor","crawlLevels","super","modules","moduleSlogans","globalSlogans","rootPath","__dirname","_command","Command","load","filePath","module","Function","Promise","records","dirname","strings","extractSloganStrings","boot","crawl","includes","commands","find","c","addCommand","debug","Object","keys","map","k","levels","readdirSync","reduce","accum","file","statSync","isDirectory","push","match","RegExp","getSlogan","priorityModule","ensureGlobalSlogans","priority","others","otherSlogans","hasPriority","hasOthers","pool","Math","random","floor","entries","filter","flatMap","slogans","gathered","collectSlogansFromPath","nodeModulesDir","findNearestNodeModules","scopeDir","pkgs","pkg","depPath","accumulator","entry","Slogan","trim","value","current","root","candidate","parent","printBanner","args","getPriorityModule","bannerTemplate","paletteKeys","palette","line","maxLength","max","padStart","stop","animateBanner","bannerAnimation","candidates","slice","item","startsWith","trimmed","stopBannerAnimation","undefined","lines","timer","framesRendered","stopped","renderFrame","offset","colored","index","color","style","raw","text","stdout","write","clearInterval","setInterval","run","argv","stopAnimation","parseAsync","accumulateEnvironment","obj","getEnv"],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Command as t}from"commander";import r from"fs";import a from"path";import{Logging as e}from"@decaf-ts/logging";import{style as o}from"styled-string-builder";class n{static async loadFromFile(t){try{return n.normalizeImport(import(t))}catch(r){throw Error(`Failed to load from ${t}: ${r instanceof Error?r.message:r}`)}}static async normalizeImport(t){return t.then((t=>t.default||t))}static initialize(t,r){const a=n.packageName(r);t.name(a).description(`Runs ${a} related commands`).version(n.packageVersion(r))}static getPackage(t){try{return JSON.parse(r.readFileSync(a.join(t,"package.json"),"utf8"))}catch(r){throw Error(`Unable to read version from ${t}: ${r}`)}}static packageVersion(t){return n.getPackage(t).version}static packageName(t){const r=n.getPackage(t).name.split("/");return r[r.length-1]}}const s=["\x1b[38;5;215m","\x1b[38;5;209m","\x1b[38;5;205m","\x1b[38;5;210m","\x1b[38;5;217m","\x1b[38;5;216m","\x1b[38;5;224m","\x1b[38;5;230m","\x1b[38;5;230m"];class i{constructor(t="./",r=4){this.basePath=t,this.crawlLevels=r,this.modules={},this.rootPath=a.resolve(__dirname,"..")}get command(){return this._command||(this._command=new t,n.initialize(this._command,this.rootPath)),this._command}async load(r){let a;try{let e=await n.loadFromFile(r);if(a=e.name,e instanceof Function&&(e=e()),e instanceof Promise&&(e=await e),!(e instanceof t))throw Error("You should export the instantiated Commands class as default.");this.modules[a]=e}catch(t){throw Error(`failed to load module under ${r}: ${t instanceof Error?t.message:t}`)}return a}async boot(){const t=a.resolve(this.rootPath,this.basePath),r=this.crawl(t,this.crawlLevels);for(const t of r){if(t.includes("@decaf-ts/cli"))continue;let r;try{r=await this.load(t)}catch(t){continue}if(!this.command.commands.find((t=>t._name===r)))try{this.command.command(r).addCommand(this.modules[r])}catch(t){}}}crawl(t,e=2){return e>0?r.readdirSync(t).reduce(((o,n)=>(n=a.join(t,n),r.statSync(n).isDirectory()?o.push(...this.crawl(n,e-1)):n.match(RegExp("cli-module\\.[cm]js$","gm"))&&o.push(n),o)),[]):[]}getSlogan(){let t,e=__dirname;try{for(;e&&e!==a.parse(e).root;){const o=a.join(e,"node_modules");if(r.existsSync(o)&&r.statSync(o).isDirectory()){t=o;break}const n=a.dirname(e);if(n===e)break;e=n}}catch{}const o=[];if(t){const e=a.join(t,"@decaf-ts");try{if(r.existsSync(e)&&r.statSync(e).isDirectory()){const t=r.readdirSync(e);for(const n of t){const t=a.join(e,n);try{const e=a.join(t,"workdocs","assets","slogans.json");if(r.existsSync(e)&&r.statSync(e).isFile()){const t=r.readFileSync(e,"utf-8"),a=JSON.parse(t);if(Array.isArray(a))for(const t of a)"string"==typeof t&&t.trim().length>0&&o.push(t.trim())}}catch{}}}}catch{}}return 0===o.length?"Decaf: strongly brewed TypeScript.":o[Math.floor(Math.random()*o.length)]}printBanner(t=e.get()){let r;try{r=this.getSlogan()}catch{r="Decaf: strongly brewed TypeScript."}const a="# \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n# ( ( \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# ) ) \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# [=======] \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n# `-----\xb4 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \n# \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591\u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2593\u2592\u2591 \u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592\u2591 \n#".split("\n"),n=a.reduce(((t,r)=>Math.max(t,r.length)),0);a.push("# "+r.padStart(n-3)),a.forEach(((r,a)=>{const e=s[a%s.length]||"",n=t?t.info.bind(t):(()=>{}).bind();try{n(o(r||"").raw(e).text)}catch{n((r||"")+"")}}))}async run(t=process.argv){return await this.boot(),this.printBanner(),this.command.parseAsync(t)}}export{i as CliWrapper};
1
+ import{Command as _}from"commander";import t from"fs";import n from"path";import{LoggedEnvironment as o,LoggedClass as e}from"@decaf-ts/logging";import{style as r}from"styled-string-builder";import"@decaf-ts/utils";class s{static async loadFromFile(_){try{return s.normalizeImport(import(_))}catch(t){throw Error(`Failed to load from ${_}: ${t instanceof Error?t.message:t}`)}}static async normalizeImport(_){return _.then(_=>_.default||_)}static initialize(_,t){const n=s.packageName(t);_.name("decaf").description(`Runs ${n} related commands`).version(s.packageVersion(t))}static getPackage(_){try{return JSON.parse(t.readFileSync(n.join(_,"package.json"),"utf8"))}catch(t){throw Error(`Unable to read version from ${_}: ${t}`)}}static packageVersion(_){return s.getPackage(_).version}static packageName(_){const t=s.getPackage(_).name.split("/");return t[t.length-1]}}const a=["\n ____ _____ ____ _ _____ _____ ____ \n| _ \\| ____/ ___| / \\ | ___| |_ _/ ___| \n| | | | _|| | / _ \\ | |_ | | \\___ \\ \n| |_| | |__| |___ / ___ \\| _| | | ___) |\n|____/|_____\\____/_/ \\_\\_| |_| |____/ \n","\n ____ __ ______\n / __ \\___ _________ _/ __/_ __/____\n / / / / _ \\/ ___/ __ `/ /_ / / / ___/\n / /_/ / __/ /__/ /_/ / __/ / / (__ ) \n/_____/\\___/\\___/\\__,_/_/ /_/ /____/ \n","\n\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551 \u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\n\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\n\u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n","\n ___ __ ______\n / _ \\___ _______ _/ _/ /_ __/\n / // / -_) __/ _ `/ _/ / / \n/____/\\__/\\__/\\_,_/_/ /_/ \n","\n _ _ _ _ _ _ _ \n / \\ / \\ / \\ / \\ / \\ / \\ / \\ \n( D | e | c | a | f ) ( T | S )\n \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \n","\n+--+--+--+--+--+ +--+--+\n|D |e |c |a |f | |T |S |\n+--+--+--+--+--+ +--+--+\n","\n.______ _______ ______ ___ _______ .___________. _______\n| _ \\ | ____| / | / \\ | ____| | | / |\n| | | | | |__ | ,----' / ^ \\ | |__ `---| |----` | (----`\n| | | | | __| | | / /_\\ \\ | __| | | \\ \\ \n| `--' | | |____ | `----./ _____ \\ | | | | .----) | \n|_______/ |_______| \\______/__/ \\__\\ |__| |__| |_______/ \n","\n _/_/_/ _/_/_/ _/_/_/_/_/ _/_/_/ \n _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ \n _/ _/ _/_/_/_/ _/ _/ _/ _/ _/_/_/ _/ _/_/ \n _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ \n_/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ \n","\n______ __ _____ _____ \n| _ \\ / _| |_ _/ ___|\n| | | |___ ___ __ _ ___| |_ | | \\ `--. \n| | | / _ \\/ __/ _` |/ _ \\ _| | | `--. \\\n| |/ / __/ (_| (_| | __/ | | | /\\__/ /\n|___/ \\___|\\___\\__,_|\\___|_| \\_/ \\____/ \n","\n ___ ___ ___ ___ ___ ___ ___ \n /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ \n /::\\ \\ /::\\ \\ /::\\ \\ /::\\ \\ /::\\ \\ \\:\\ \\ /::\\ \\ \n /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ \\:\\ \\ /:/\\ \\ \\ \n /:/ \\:\\__\\ /::\\~\\:\\ \\ /:/ \\:\\ \\ /::\\~\\:\\ \\ /::\\~\\:\\ \\ /::\\ \\ _\\:\\~\\ \\ \\ \n /:/__/ \\:|__| /:/\\:\\ \\:\\__\\ /:/__/ \\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\__\\ /\\ \\:\\ \\ \\__\\\n \\:\\ \\ /:/ / \\:\\~\\:\\ \\/__/ \\:\\ \\ \\/__/ \\/__\\:\\/:/ / \\:\\~\\:\\ \\/__/ /:/ \\/__/ \\:\\ \\:\\ \\/__/\n \\:\\ /:/ / \\:\\ \\:\\__\\ \\:\\ \\ \\::/ / \\:\\ \\:\\__\\ /:/ / \\:\\ \\:\\__\\ \n \\:\\/:/ / \\:\\ \\/__/ \\:\\ \\ /:/ / \\:\\ \\/__/ \\/__/ \\:\\/:/ / \n \\::/__/ \\:\\__\\ \\:\\__\\ /:/ / \\:\\__\\ \\::/ / \n ~~ \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ \n"],i={sunset:["\x1b[38;5;215m","\x1b[38;5;209m","\x1b[38;5;205m","\x1b[38;5;210m","\x1b[38;5;217m","\x1b[38;5;216m","\x1b[38;5;224m","\x1b[38;5;230m"],ocean:["\x1b[38;5;27m","\x1b[38;5;33m","\x1b[38;5;39m","\x1b[38;5;45m","\x1b[38;5;51m","\x1b[38;5;87m","\x1b[38;5;123m","\x1b[38;5;159m"],forest:["\x1b[38;5;22m","\x1b[38;5;28m","\x1b[38;5;34m","\x1b[38;5;40m","\x1b[38;5;46m","\x1b[38;5;82m","\x1b[38;5;118m","\x1b[38;5;154m"],fire:["\x1b[38;5;196m","\x1b[38;5;202m","\x1b[38;5;208m","\x1b[38;5;214m","\x1b[38;5;220m","\x1b[38;5;226m","\x1b[38;5;228m","\x1b[38;5;230m"],neon:["\x1b[38;5;198m","\x1b[38;5;207m","\x1b[38;5;219m","\x1b[38;5;123m","\x1b[38;5;51m","\x1b[38;5;46m","\x1b[38;5;226m","\x1b[38;5;201m"],monochrome:["\x1b[38;5;232m","\x1b[38;5;236m","\x1b[38;5;240m","\x1b[38;5;244m","\x1b[38;5;248m","\x1b[38;5;252m","\x1b[38;5;255m","\x1b[38;5;250m"],pastel:["\x1b[38;5;217m","\x1b[38;5;223m","\x1b[38;5;229m","\x1b[38;5;157m","\x1b[38;5;159m","\x1b[38;5;189m","\x1b[38;5;183m","\x1b[38;5;225m"],cyberpunk:["\x1b[38;5;201m","\x1b[38;5;198m","\x1b[38;5;165m","\x1b[38;5;93m","\x1b[38;5;51m","\x1b[38;5;45m","\x1b[38;5;21m","\x1b[38;5;226m"],earth:["\x1b[38;5;94m","\x1b[38;5;130m","\x1b[38;5;136m","\x1b[38;5;100m","\x1b[38;5;58m","\x1b[38;5;22m","\x1b[38;5;137m","\x1b[38;5;180m"],rainbow:["\x1b[38;5;196m","\x1b[38;5;208m","\x1b[38;5;226m","\x1b[38;5;46m","\x1b[38;5;21m","\x1b[38;5;57m","\x1b[38;5;129m","\x1b[38;5;201m"]};function m(_,o){_=_.for(m);const e=n.join(o,"workdocs","assets","slogans.json");try{if(!t.existsSync(e))return;const _=t.readFileSync(e);return JSON.parse(_.toString())}catch(t){return void _.error("Failed to read slogans from "+e,t)}}const c={banner:!0,cliModuleRoot:process.env.CLI_MODULE_TOOT&&process.env.CLI_MODULE_TOOT.length>0?n.resolve(process.env.CLI_MODULE_TOOT):process.cwd()},l=o.accumulate(c);class h extends e{static{this.env=l}constructor(_=l.cliModuleRoot,t=4){super(),this.basePath=_,this.crawlLevels=t,this.modules={},this.moduleSlogans={},this.globalSlogans=[],this.rootPath=n.resolve(__dirname,"..")}get command(){return this._command||(this._command=new _,s.initialize(this._command,this.rootPath)),this._command}async load(t){const o=this.log.for(this.load);let e;try{let n=await s.loadFromFile(t);if(e=n.name,n instanceof Function&&(n=n()),n instanceof Promise&&(n=await n),!(n instanceof _))throw Error("You should export the instantiated Commands class as default.");this.modules[e]=n}catch(_){throw Error(`failed to load module under ${t}: ${_ instanceof Error?_.message:_}`)}try{const _=m(o,n.dirname(t)),r=this.extractSloganStrings(_);r.length&&(this.moduleSlogans[e]=r)}catch(_){}return e}async boot(){const _=this.log.for(this.boot),t=n.resolve(this.rootPath,this.basePath),o=this.crawl(t,this.crawlLevels);for(const _ of o){if(_.includes("@decaf-ts/cli"))continue;let t;try{t=await this.load(_)}catch(_){continue}if(!this.command.commands.find(_=>_._name===t))try{this.command.addCommand(this.modules[t])}catch(_){}}_.debug("loaded modules:\n"+Object.keys(this.modules).map(_=>"- "+_).join("\n"))}crawl(_,o=2){return o>0?t.readdirSync(_).reduce((e,r)=>(r=n.join(_,r),t.statSync(r).isDirectory()?e.push(...this.crawl(r,o-1)):r.match(RegExp("cli-module\\.[cm]js$","gm"))&&e.push(r),e),[]):[]}getSlogan(_){this.ensureGlobalSlogans();const t=_&&this.moduleSlogans[_]||[],n=this.otherSlogans(_),o=t.length>0,e=n.length>0;if(!o&&!e)return"Decaf: strongly brewed TypeScript.";if(o&&e){const _=.5>Math.random()?t:n;return _[Math.floor(Math.random()*_.length)]}return o?t[Math.floor(Math.random()*t.length)]:n[Math.floor(Math.random()*n.length)]}otherSlogans(_){const t=Object.entries(this.moduleSlogans).filter(([t])=>t!==_).flatMap(([,_])=>_);return 0===this.globalSlogans.length&&0===t.length?[]:[...this.globalSlogans,...t]}ensureGlobalSlogans(){if(this.globalSlogans.length>0)return;const _=this.log.for(this.ensureGlobalSlogans),o=[];this.collectSlogansFromPath(_,this.rootPath,o);const e=this.findNearestNodeModules();if(e){const r=n.join(e,"@decaf-ts");try{if(t.existsSync(r)&&t.statSync(r).isDirectory()){const e=t.readdirSync(r);for(const t of e){const e=n.join(r,t);this.collectSlogansFromPath(_,e,o)}}}catch{}}this.globalSlogans=o}collectSlogansFromPath(_,t,n){try{const o=m(_,t);if(!o)return;for(const _ of o)_&&"string"==typeof _.Slogan&&_.Slogan.trim()&&n.push(_.Slogan.trim())}catch{}}extractSloganStrings(_){return _&&_.length?_.map(_=>_&&_.Slogan?_.Slogan.trim():"").filter(_=>_.length>0):[]}findNearestNodeModules(){let _=__dirname;for(;_&&_!==n.parse(_).root;){const o=n.join(_,"node_modules");try{if(t.existsSync(o)&&t.statSync(o).isDirectory())return o}catch{}const e=n.dirname(_);if(e===_)break;_=e}}printBanner(_){let t;try{const n=this.getPriorityModule(_);t=this.getSlogan(n)}catch{t="Decaf: strongly brewed TypeScript."}const n=a[Math.floor(Math.random()*a.length)],o=Object.keys(i),e=i[o[Math.floor(Math.random()*o.length)]],r=n.split("\n").filter(_=>_.length>0),s=r.reduce((_,t)=>Math.max(_,t.length),0);s>0?r.push(t.padStart(s)):r.push(t);const m=this.animateBanner(r,e);return this.bannerAnimation=m,m}getPriorityModule(_){if(!_||2>=_.length)return;const t=_.slice(2);for(const _ of t){if(!_||_.startsWith("-"))continue;const t=_.trim();if(t)return this.modules[t],t}}stopBannerAnimation(){this.bannerAnimation&&(this.bannerAnimation(),this.bannerAnimation=void 0)}animateBanner(_,t){if(!_.length)return()=>{};this.stopBannerAnimation();let n,o=0,e=!1;const s=()=>{const n=o%t.length,e=_.map((_,o)=>{const e=t[(o+n)%t.length]||"";return r(_||"").raw(e).text});o>0&&process.stdout.write(`\x1b[${_.length}F`);for(const _ of e)process.stdout.write("\x1b[2K"),process.stdout.write(_+"\n");o++},a=()=>{e||(e=!0,n&&clearInterval(n))};return s(),n=setInterval(()=>{34>o?s():a()},150),a}async run(_=process.argv){await this.boot();const t=l.banner?this.printBanner(_):void 0;try{return await this.command.parseAsync(_)}finally{t&&t(),this.bannerAnimation=void 0}}static accumulateEnvironment(_){this.env=this.env.accumulate(_)}static getEnv(){return this.env}}export{h as CliWrapper,l as DecafCLieEnvironment,c as DefaultCliEnvironment};
2
2
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/utils.ts","../src/CliWrapper.ts"],"sourcesContent":[null,null],"names":["CLIUtils","loadFromFile","path","normalizeImport","import","e","Error","message","importPromise","then","m","default","initialize","command","basePath","name","packageName","description","version","packageVersion","getPackage","JSON","parse","fs","readFileSync","join","split","length","colors","CliWrapper","constructor","crawlLevels","this","modules","rootPath","resolve","__dirname","_command","Command","load","filePath","module","Function","Promise","boot","crawl","includes","commands","find","c","addCommand","levels","readdirSync","reduce","accum","file","statSync","isDirectory","push","match","RegExp","getSlogan","nodeModulesDir","current","root","candidate","existsSync","parent","dirname","slogans","scopeDir","pkgs","pkg","depPath","slogansPath","isFile","raw","parsed","Array","isArray","s","trim","Math","floor","random","printBanner","logger","Logging","get","banner","maxLength","max","line","padStart","forEach","index","color","logFn","info","bind","console","style","text","String","run","args","process","argv","parseAsync"],"mappings":"0KAmBaA,EAQX,yBAAaC,CAAaC,GACxB,IACE,OAAOF,EAASG,gBAAgBC,OAAOF,GACxC,CAAC,MAAOG,GACP,MAAUC,MACR,uBAAuBJ,MAASG,aAAaC,MAAQD,EAAEE,QAAUF,IAEpE,CACF,CAWD,4BAAaF,CAAmBK,GAE9B,OAAOA,EAAcC,MAClBC,GAAiBA,EAAqBC,SAAWD,GAErD,CAUD,iBAAOE,CAAWC,EAAkBC,GAClC,MAAMC,EAAOf,EAASgB,YAAYF,GAClCD,EACGE,KAAKA,GACLE,YAAY,QAAQF,sBACpBG,QAAQlB,EAASmB,eAAeL,GACpC,CAUO,iBAAOM,CAAWN,GACxB,IACE,OAAOO,KAAKC,MACVC,EAAGC,aAAatB,EAAKuB,KAAKX,EAAU,gBAAiB,QAExD,CAAC,MAAOT,GACP,MAAUC,MAAM,+BAA+BQ,MAAaT,IAC7D,CACF,CASD,qBAAOc,CAAeL,GACpB,OAAOd,EAASoB,WAAWN,GAAmB,OAC/C,CASD,kBAAOE,CAAYF,GACjB,MAAMC,EAAQf,EAASoB,WAAWN,GAAgB,KAAaY,MAAM,KACrE,OAAOX,EAAKA,EAAKY,OAAS,EAC3B,ECpGH,MAAMC,EAAS,CACb,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,wBAoBWC,EAKX,WAAAC,CACUhB,EAAmB,KACnBiB,EAAc,GADdC,KAAQlB,SAARA,EACAkB,KAAWD,YAAXA,EALFC,KAAOC,QAA4B,GAOzCD,KAAKE,SAAWhC,EAAKiC,QAAQC,UAAW,KACzC,CAQD,WAAYvB,GAKV,OAJKmB,KAAKK,WACRL,KAAKK,SAAW,IAAIC,EACpBtC,EAASY,WAAWoB,KAAKK,SAAUL,KAAKE,WAEnCF,KAAKK,QACb,CA6BO,UAAME,CAAKC,GACjB,IAAIzB,EACJ,IACE,IAAI0B,QAAezC,EAASC,aAAauC,GAMzC,GAJAzB,EAAO0B,EAAO1B,KACV0B,aAAkBC,WAAUD,EAASA,KACrCA,aAAkBE,UAASF,QAAeA,KAExCA,aAAkBH,GACtB,MAAUhC,MACR,iEAGJ0B,KAAKC,QAAQlB,GAAQ0B,CACtB,CAAC,MAAOpC,GACP,MAAUC,MACR,+BAA+BkC,MAAanC,aAAaC,MAAQD,EAAEE,QAAUF,IAEhF,CACD,OAAOU,CACR,CA+BO,UAAM6B,GACZ,MAAM9B,EAAWZ,EAAKiC,QAAQH,KAAKE,SAAUF,KAAKlB,UAC5CmB,EAAUD,KAAKa,MAAM/B,EAAUkB,KAAKD,aAC1C,IAAK,MAAMU,KAAUR,EAAS,CAC5B,GAAIQ,EAAOK,SAAS,iBAClB,SAEF,IAAI/B,EACJ,IACEA,QAAaiB,KAAKO,KAAKE,EACxB,CAAC,MAAOpC,GAEP,QACD,CAED,IACG2B,KAAKnB,QAAQkC,SAASC,MACpBC,GAAOA,EAA+C,QAAMlC,IAG/D,IACEiB,KAAKnB,QAAQA,QAAQE,GAAMmC,WAAWlB,KAAKC,QAAQlB,GACpD,CAAC,MAAOV,GAER,CACJ,CAMF,CAYO,KAAAwC,CAAM/B,EAAkBqC,EAAiB,GAC/C,OAAIA,EAAU,EACP5B,EAAG6B,YAAYtC,GAAUuC,QAAO,CAACC,EAAiBC,KACvDA,EAAOrD,EAAKuB,KAAKX,EAAUyC,GACvBhC,EAAGiC,SAASD,GAAME,cACpBH,EAAMI,QAAQ1B,KAAKa,MAAMU,EAAMJ,EAAS,IAC/BI,EAAKI,MAAUC,OAAO,uBAA8B,QAC7DN,EAAMI,KAAKH,GAEND,IACN,IATqB,EAUzB,CAES,SAAAO,GAGR,IACIC,EADAC,EADa3B,UAIjB,IACE,KAAO2B,GAAWA,IAAY7D,EAAKoB,MAAMyC,GAASC,MAAM,CACtD,MAAMC,EAAY/D,EAAKuB,KAAKsC,EAAS,gBACrC,GAAIxC,EAAG2C,WAAWD,IAAc1C,EAAGiC,SAASS,GAAWR,cAAe,CACpEK,EAAiBG,EACjB,KACD,CACD,MAAME,EAASjE,EAAKkE,QAAQL,GAC5B,GAAII,IAAWJ,EAAS,MACxBA,EAAUI,CACX,CACF,CAAC,MAED,CAED,MAAME,EAAoB,GAE1B,GAAIP,EAAgB,CAClB,MAAMQ,EAAWpE,EAAKuB,KAAKqC,EAAgB,aAC3C,IACE,GAAIvC,EAAG2C,WAAWI,IAAa/C,EAAGiC,SAASc,GAAUb,cAAe,CAClE,MAAMc,EAAOhD,EAAG6B,YAAYkB,GAC5B,IAAK,MAAME,KAAOD,EAAM,CACtB,MAAME,EAAUvE,EAAKuB,KAAK6C,EAAUE,GACpC,IACE,MAAME,EAAcxE,EAAKuB,KACvBgD,EACA,WACA,SACA,gBAEF,GACElD,EAAG2C,WAAWQ,IACdnD,EAAGiC,SAASkB,GAAaC,SACzB,CACA,MAAMC,EAAMrD,EAAGC,aAAakD,EAAa,SACnCG,EAASxD,KAAKC,MAAMsD,GAC1B,GAAIE,MAAMC,QAAQF,GAChB,IAAK,MAAMG,KAAKH,EACG,iBAANG,GAAkBA,EAAEC,OAAOtD,OAAS,GAC7C0C,EAAQX,KAAKsB,EAAEC,OAItB,CACF,CAAC,MAED,CACF,CACF,CACF,CAAC,MAED,CACF,CAED,OAAuB,IAAnBZ,EAAQ1C,OACH,qCAGF0C,EADKa,KAAKC,MAAMD,KAAKE,SAAWf,EAAQ1C,QAEhD,CAES,WAAA0D,CAAYC,EAAiBC,EAAQC,OAC7C,IAAIjF,EACJ,IACEA,EAAUyB,KAAK6B,WAChB,CAAC,MACAtD,EAAU,oCACX,CACD,MAAMkF,EACJ,g7GAOH/D,MAAM,MACCgE,EAAYD,EAAOpC,QACvB,CAACsC,EAAKC,IAASV,KAAKS,IAAIA,EAAKC,EAAKjE,SAClC,GAEF8D,EAAO/B,KAAK,MAAMnD,EAAQsF,SAASH,EAAY,IAC/CD,EAAOK,SAAQ,CAACF,EAAMG,KACpB,MAAMC,EAAQpE,EAAOmE,EAAQnE,EAAOD,SAAW,GACzCsE,EAAQX,EACVA,EAAOY,KAAKC,KAAKb,IACjBc,KAAwB,GAAZD,OAChB,IAEEF,EADYI,EAAMT,GAAQ,IAAIhB,IAAIoB,GAAOM,KAE1C,CAAC,MAEAL,GAAaL,GAAQ,IAAfW,GACP,IAEJ,CAsBD,SAAMC,CAAIC,EAAiBC,QAAQC,MAGjC,aAFM3E,KAAKY,OACXZ,KAAKqD,cACErD,KAAKnB,QAAQ+F,WAAWH,EAChC"}
1
+ {"version":3,"file":"cli.js","sources":["../src/utils.ts","../src/banners.ts","../src/slogans.ts","../src/environment.ts","../src/CliWrapper.ts"],"sourcesContent":[null,null,null,null,null],"names":["CLIUtils","loadFromFile","path","normalizeImport","import","e","Error","message","importPromise","then","m","default","initialize","command","basePath","name","packageName","description","version","packageVersion","getPackage","JSON","parse","fs","readFileSync","join","split","length","banners","colorPalettes","sunset","ocean","forest","fire","neon","monochrome","pastel","cyberpunk","earth","rainbow","readSlogans","log","for","slogansPath","existsSync","content","toString","error","DefaultCliEnvironment","banner","cliModuleRoot","process","env","CLI_MODULE_TOOT","resolve","cwd","DecafCLieEnvironment","LoggedEnvironment","accumulate","CliWrapper","LoggedClass","this","constructor","crawlLevels","super","modules","moduleSlogans","globalSlogans","rootPath","__dirname","_command","Command","load","filePath","module","Function","Promise","records","dirname","strings","extractSloganStrings","boot","crawl","includes","commands","find","c","addCommand","debug","Object","keys","map","k","levels","readdirSync","reduce","accum","file","statSync","isDirectory","push","match","RegExp","getSlogan","priorityModule","ensureGlobalSlogans","priority","others","otherSlogans","hasPriority","hasOthers","pool","Math","random","floor","entries","filter","flatMap","slogans","gathered","collectSlogansFromPath","nodeModulesDir","findNearestNodeModules","scopeDir","pkgs","pkg","depPath","accumulator","entry","Slogan","trim","value","current","root","candidate","parent","printBanner","args","getPriorityModule","bannerTemplate","paletteKeys","palette","line","maxLength","max","padStart","stop","animateBanner","bannerAnimation","candidates","slice","item","startsWith","trimmed","stopBannerAnimation","undefined","lines","timer","framesRendered","stopped","renderFrame","offset","colored","index","color","style","raw","text","stdout","write","clearInterval","setInterval","run","argv","stopAnimation","parseAsync","accumulateEnvironment","obj","getEnv"],"mappings":"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"}
@@ -11,17 +11,9 @@ const constants_1 = require("./constants.cjs");
11
11
  const utils_1 = require("./utils.cjs");
12
12
  const logging_1 = require("@decaf-ts/logging");
13
13
  const styled_string_builder_1 = require("styled-string-builder");
14
- const colors = [
15
- "\x1b[38;5;215m", // soft orange
16
- "\x1b[38;5;209m", // coral
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
- ];
14
+ const banners_1 = require("./banners.cjs");
15
+ const slogans_1 = require("./slogans.cjs");
16
+ const environment_1 = require("./environment.cjs");
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
- constructor(basePath = "./", crawlLevels = 4) {
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);
@@ -102,6 +99,17 @@ class CliWrapper {
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 = 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.command(name).addCommand(this.modules[name]);
162
+ this.command.addCommand(this.modules[name]);
154
163
  }
155
164
  catch (e) {
156
165
  console.error(e);
157
166
  }
158
167
  }
159
- console.log(`loaded modules:\n${Object.keys(this.modules)
168
+ log.debug(`loaded modules:\n${Object.keys(this.modules)
160
169
  .map((k) => `- ${k}`)
161
170
  .join("\n")}`);
162
171
  }
@@ -184,28 +193,43 @@ class CliWrapper {
184
193
  return accum;
185
194
  }, []);
186
195
  }
187
- getSlogan() {
188
- // Find nearest node_modules from this file's directory to survive bundling
189
- const startDir = __dirname;
190
- let current = startDir;
191
- let nodeModulesDir;
192
- try {
193
- while (current && current !== path_1.default.parse(current).root) {
194
- const candidate = path_1.default.join(current, "node_modules");
195
- if (fs_1.default.existsSync(candidate) && fs_1.default.statSync(candidate).isDirectory()) {
196
- nodeModulesDir = candidate;
197
- break;
198
- }
199
- const parent = path_1.default.dirname(current);
200
- if (parent === current)
201
- break;
202
- current = parent;
203
- }
196
+ getSlogan(priorityModule) {
197
+ this.ensureGlobalSlogans();
198
+ const priority = priorityModule
199
+ ? this.moduleSlogans[priorityModule] || []
200
+ : [];
201
+ const others = this.otherSlogans(priorityModule);
202
+ const hasPriority = priority.length > 0;
203
+ const hasOthers = others.length > 0;
204
+ if (!hasPriority && !hasOthers) {
205
+ return "Decaf: strongly brewed TypeScript.";
204
206
  }
205
- catch {
206
- // ignore errors during traversal
207
+ if (hasPriority && hasOthers) {
208
+ const usePriority = Math.random() < 0.5;
209
+ const pool = usePriority ? priority : others;
210
+ return pool[Math.floor(Math.random() * pool.length)];
211
+ }
212
+ if (hasPriority) {
213
+ return priority[Math.floor(Math.random() * priority.length)];
214
+ }
215
+ return others[Math.floor(Math.random() * others.length)];
216
+ }
217
+ otherSlogans(priorityModule) {
218
+ const modules = Object.entries(this.moduleSlogans)
219
+ .filter(([name]) => name !== priorityModule)
220
+ .flatMap(([, slogans]) => slogans);
221
+ if (this.globalSlogans.length === 0 && modules.length === 0) {
222
+ return [];
207
223
  }
208
- const slogans = [];
224
+ return [...this.globalSlogans, ...modules];
225
+ }
226
+ ensureGlobalSlogans() {
227
+ if (this.globalSlogans.length > 0)
228
+ return;
229
+ const log = this.log.for(this.ensureGlobalSlogans);
230
+ const gathered = [];
231
+ this.collectSlogansFromPath(log, this.rootPath, gathered);
232
+ const nodeModulesDir = this.findNearestNodeModules();
209
233
  if (nodeModulesDir) {
210
234
  const scopeDir = path_1.default.join(nodeModulesDir, "@decaf-ts");
211
235
  try {
@@ -213,24 +237,7 @@ class CliWrapper {
213
237
  const pkgs = fs_1.default.readdirSync(scopeDir);
214
238
  for (const pkg of pkgs) {
215
239
  const depPath = path_1.default.join(scopeDir, pkg);
216
- try {
217
- const slogansPath = path_1.default.join(depPath, "workdocs", "assets", "slogans.json");
218
- if (fs_1.default.existsSync(slogansPath) &&
219
- fs_1.default.statSync(slogansPath).isFile()) {
220
- const raw = fs_1.default.readFileSync(slogansPath, "utf-8");
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
- }
240
+ this.collectSlogansFromPath(log, depPath, gathered);
234
241
  }
235
242
  }
236
243
  }
@@ -238,44 +245,140 @@ class CliWrapper {
238
245
  // ignore scope directory errors
239
246
  }
240
247
  }
241
- if (slogans.length === 0) {
242
- return "Decaf: strongly brewed TypeScript.";
248
+ this.globalSlogans = gathered;
249
+ }
250
+ collectSlogansFromPath(log, basePath, accumulator) {
251
+ try {
252
+ const records = (0, slogans_1.readSlogans)(log, basePath);
253
+ if (!records)
254
+ return;
255
+ for (const entry of records) {
256
+ if (entry && typeof entry.Slogan === "string" && entry.Slogan.trim()) {
257
+ accumulator.push(entry.Slogan.trim());
258
+ }
259
+ }
260
+ }
261
+ catch {
262
+ // readSlogans already logs issues
263
+ }
264
+ }
265
+ extractSloganStrings(records) {
266
+ if (!records || !records.length)
267
+ return [];
268
+ return records
269
+ .map((entry) => (entry && entry.Slogan ? entry.Slogan.trim() : ""))
270
+ .filter((value) => value.length > 0);
271
+ }
272
+ findNearestNodeModules() {
273
+ let current = __dirname;
274
+ while (current && current !== path_1.default.parse(current).root) {
275
+ const candidate = path_1.default.join(current, "node_modules");
276
+ try {
277
+ if (fs_1.default.existsSync(candidate) && fs_1.default.statSync(candidate).isDirectory()) {
278
+ return candidate;
279
+ }
280
+ }
281
+ catch {
282
+ // ignore
283
+ }
284
+ const parent = path_1.default.dirname(current);
285
+ if (parent === current)
286
+ break;
287
+ current = parent;
243
288
  }
244
- const idx = Math.floor(Math.random() * slogans.length);
245
- return slogans[idx];
289
+ return undefined;
246
290
  }
247
- printBanner(logger = logging_1.Logging.get()) {
291
+ printBanner(args) {
248
292
  let message;
249
293
  try {
250
- message = this.getSlogan();
294
+ const priorityModule = this.getPriorityModule(args);
295
+ message = this.getSlogan(priorityModule);
251
296
  }
252
297
  catch {
253
298
  message = "Decaf: strongly brewed TypeScript.";
254
299
  }
255
- const banner = `# ░▒▓███████▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░ ░▒▓████████▓▒░ ░▒▓████████▓▒░ ░▒▓███████▓▒░
256
- # ( ( ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
257
- # ) ) ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
258
- # [=======] ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░ ░▒▓██████▓▒░
259
- # \`-----´ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
260
- # ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
261
- # ░▒▓███████▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓███████▓▒░
262
- #`.split("\n");
300
+ // Select random banner and color palette
301
+ const bannerTemplate = banners_1.banners[Math.floor(Math.random() * banners_1.banners.length)];
302
+ const paletteKeys = Object.keys(banners_1.colorPalettes);
303
+ const palette = banners_1.colorPalettes[paletteKeys[Math.floor(Math.random() * paletteKeys.length)]];
304
+ const banner = bannerTemplate.split("\n").filter((line) => line.length > 0);
263
305
  const maxLength = banner.reduce((max, line) => Math.max(max, line.length), 0);
264
- banner.push(`# ${message.padStart(maxLength - 3)}`);
265
- banner.forEach((line, index) => {
266
- const color = colors[index % colors.length] || "";
267
- const logFn = logger
268
- ? logger.info.bind(logger)
269
- : console.log.bind(console);
270
- try {
271
- const msg = (0, styled_string_builder_1.style)(line || "").raw(color).text;
272
- logFn(msg);
306
+ if (maxLength > 0) {
307
+ banner.push(message.padStart(maxLength));
308
+ }
309
+ else {
310
+ banner.push(message);
311
+ }
312
+ const stop = this.animateBanner(banner, palette);
313
+ this.bannerAnimation = stop;
314
+ return stop;
315
+ }
316
+ getPriorityModule(args) {
317
+ if (!args || args.length <= 2)
318
+ return undefined;
319
+ const candidates = args.slice(2);
320
+ for (const item of candidates) {
321
+ if (!item || item.startsWith("-"))
322
+ continue;
323
+ const trimmed = item.trim();
324
+ if (!trimmed)
325
+ continue;
326
+ if (this.modules[trimmed]) {
327
+ return trimmed;
273
328
  }
274
- catch {
275
- // Fallback to plain output if styling fails for any reason
276
- logFn(String(line || ""));
329
+ return trimmed;
330
+ }
331
+ return undefined;
332
+ }
333
+ stopBannerAnimation() {
334
+ if (this.bannerAnimation) {
335
+ this.bannerAnimation();
336
+ this.bannerAnimation = undefined;
337
+ }
338
+ }
339
+ animateBanner(lines, palette) {
340
+ if (!lines.length) {
341
+ return () => { };
342
+ }
343
+ this.stopBannerAnimation();
344
+ const frameInterval = 150;
345
+ const duration = 5000;
346
+ const totalFrames = Math.max(1, Math.ceil(duration / frameInterval));
347
+ let framesRendered = 0;
348
+ let stopped = false;
349
+ // eslint-disable-next-line prefer-const
350
+ let timer;
351
+ const renderFrame = () => {
352
+ const offset = framesRendered % palette.length;
353
+ const colored = lines.map((line, index) => {
354
+ const color = palette[(index + offset) % palette.length] || "";
355
+ return (0, styled_string_builder_1.style)(line || "").raw(color).text;
356
+ });
357
+ if (framesRendered > 0) {
358
+ process.stdout.write(`\u001b[${lines.length}F`);
359
+ }
360
+ for (const line of colored) {
361
+ process.stdout.write("\u001b[2K");
362
+ process.stdout.write(`${line}\n`);
277
363
  }
278
- });
364
+ framesRendered++;
365
+ };
366
+ const stop = () => {
367
+ if (stopped)
368
+ return;
369
+ stopped = true;
370
+ if (timer)
371
+ clearInterval(timer);
372
+ };
373
+ renderFrame();
374
+ timer = setInterval(() => {
375
+ if (framesRendered >= totalFrames) {
376
+ stop();
377
+ return;
378
+ }
379
+ renderFrame();
380
+ }, frameInterval);
381
+ return stop;
279
382
  }
280
383
  /**
281
384
  * @description Executes the CLI with the provided arguments
@@ -299,8 +402,23 @@ class CliWrapper {
299
402
  */
300
403
  async run(args = process.argv) {
301
404
  await this.boot();
302
- this.printBanner();
303
- return this.command.parseAsync(args);
405
+ const stopAnimation = environment_1.DecafCLieEnvironment.banner
406
+ ? this.printBanner(args)
407
+ : undefined;
408
+ try {
409
+ return await this.command.parseAsync(args);
410
+ }
411
+ finally {
412
+ if (stopAnimation)
413
+ stopAnimation();
414
+ this.bannerAnimation = undefined;
415
+ }
416
+ }
417
+ static accumulateEnvironment(obj) {
418
+ this.env = this.env.accumulate(obj);
419
+ }
420
+ static getEnv() {
421
+ return this.env;
304
422
  }
305
423
  }
306
424
  exports.CliWrapper = CliWrapper;