@@ -3,6 +3,8 @@ import * as fs from 'node:fs/promises';
33import { homedir } from 'node:os' ;
44import { dirname , resolve } from 'node:path' ;
55import { fileURLToPath } from 'node:url' ;
6+ import { styleText } from 'node:util' ;
7+ import { config } from './index.mjs' ;
68import { downloadFiles , downloadSelectedFiles } from './utils/download-files.mjs' ;
79import { findPackageRoot } from './utils/find-package-root.mjs' ;
810import { interactiveCategorySelection , prepareMenu , scanAvailableRules , selectRules } from './utils/interactive-menu.mjs' ;
@@ -15,26 +17,58 @@ const defaultOutput = resolve(homedir(), 'Downloads', '.cursor');
1517
1618/** @returns {void } */
1719export const help = ( ) => {
18- const repository = packageJson ?. repository ?. url ?. replace ( 'git+' , '' ) . replace ( '.git' , '' ) ?? 'https://github.com/usrrname/cursorrules' ;
20+
21+ const repository = packageJson ?. repository ?. url ?. replace ( 'git+' , '' ) . replace ( '.git' , '' ) ?? 'https://github.com/usrrname/cursorrules'
22+
23+ const repoLink = styleText ( 'underline' , repository )
1924 const version = packageJson ?. version ;
25+ const title = styleText ( [ 'bgMagenta' ] , `@usrrname/cursorrules v${ version } ` )
26+ const description = packageJson ?. description + ` β¦` ;
27+ const usage = styleText ( 'magentaBright' , `npx @usrrname/cursorrules` )
28+ const options = styleText ( 'dim' , `[options]` )
29+
30+ /** @param {string } key */
31+ const getFlagDescription = ( key ) => {
32+ switch ( key ) {
33+ case 'flat' :
34+ return styleText ( 'green' , 'install all rules without parent directory' ) ;
35+ case 'help' :
36+ return styleText ( 'green' , 'help instructions' ) ;
37+ case 'interactive' :
38+ return styleText ( 'green' , 'select the rules you want' ) ;
39+ case 'output' :
40+ return styleText ( 'green' , 'set output directory (Default: .cursor/)' ) ;
41+ case 'version' :
42+ return styleText ( 'green' , 'show package version' ) ;
43+ case 'interactive' :
44+ return styleText ( 'green' , 'select the rules you want' ) ;
45+ }
46+ }
47+ const tableContent = Object . entries ( config ?. options || { } ) . map ( ( [ key , value ] ) => {
48+ return {
49+ flag : `-${ value ?. short } ` ,
50+ name : `--${ key } ` ,
51+ description : getFlagDescription ( key ) ,
52+ type : value ?. type ,
53+ default : value ?. default ? `(Default: ${ value ?. default } )` : '' ,
54+ }
55+ } )
2056
2157 console . info ( `
22- ββββββββββββββββββββββββββββββββββββββββ
23- β @usrrname/cursorrules v${ version } β
24- ββββββββββββββββββββββββββββββββββββββββ
25- A standard library of Cursor Rules ...with otaku vibes (βΏα΄ΝΛ¬α΄Ν)βΎβΎ
26-
27- Usage:
28- =======================================
29- npx @usrrname/cursorrules [options]
30-
31- Options:
32- -f, --flat: Install all rules without parent directory
33- -h, --help: Help instructions <----- You are here
34- -i, --interactive: Select the rules you want
35- -o, --output: Set output directory (Default: .cursor/)
36- -v, --version: Show package version
37- ${ repository }
58+ ββββββββββββββββββββββββββββββββββββββββ
59+ β ${ title } β
60+ ββββββββββββββββββββββββββββββββββββββββ
61+ (βΏα΄ΝΛ¬α΄Ν)βΎβΎ
62+
63+ ${ description }
64+
65+ Usage:
66+ ========================================
67+ ${ usage } ${ options }
68+
69+ ${ tableContent . map ( item => `${ item . name } ${ item . flag } ${ item . type } ${ item . description } ${ item . default } ` ) . join ( '\n' ) }
70+
71+ ${ repoLink }
3872` ) ;
3973}
4074
0 commit comments