1- #!/usr/bin/env node
2-
31import { readFile , mkdir as mkDir , writeFile , rmdir as rmDir } from "fs/promises"
42import { resolve as resolvePath } from "path"
53import { homedir as homeDir } from "os"
64import { build , clear , push , sync , watch } from "hackmud_env-tools"
7- import { red , yellow , green , blue } from "ansi-colors"
5+ import c , { redBright , yellowBright , greenBright , blueBright , cyanBright , magentaBright , bold , dim } from "ansi-colors"
6+
7+ // let o = ""
8+
9+ // for (let key in c) {
10+ // if (![ "alias", "theme", "define", "create", "hasAnsi", "hasColor", "unstyle", "noop", "noop", "clear", "none", "stripColor", "reset", "gray" ].includes(key)) {
11+ // const value: any = c[key]
812
9- type ArgValue = boolean | number | string | ArgValue [ ]
13+ // if (typeof value == "function")
14+ // o += value(key) + " "
15+ // }
16+ // }
17+
18+ // console.log(o)
19+
20+ // console.log(c.redBright("test"), c.redBright.dim("test"), c.red("test"), c.red.dim("test"))
21+
22+ type ArgValue = boolean | number | string /* | ArgValue[]*/
1023
1124const configDir = resolvePath ( homeDir ( ) , ".config" )
1225const configFile = resolvePath ( configDir , "hsm.json" )
@@ -67,48 +80,81 @@ for (let arg of process.argv.slice(2)) {
6780 break
6881 case "push" :
6982 break
70- case "sync" :
83+ case "sync" : {
84+ const config = await getConfig ( )
85+
86+ if ( config . hackmudPath ) {
87+ const srcPath = commands [ 1 ] || "."
88+ const hackmudPath = config . hackmudPath
89+ const users = options . get ( "users" ) ?. toString ( ) . split ( "," ) || [ ]
90+ const scripts = options . get ( "scripts" ) ?. toString ( ) . split ( "," ) || [ ]
91+
92+ const colours = [ redBright , greenBright , yellowBright , blueBright , magentaBright , cyanBright ]
93+
94+ const userColours = new Map < string , string > ( )
95+
96+ sync ( srcPath , hackmudPath , users , scripts , ( file , { minLength, srcLength, users } ) => {
97+ if ( users . length )
98+ console . log ( `synced ${ dim ( file ) } to ${ users . map ( user => {
99+ let colour = userColours . get ( user )
100+
101+ if ( ! colour )
102+ userColours . set ( user , colour = colours [ Math . floor ( Math . random ( ) * colours . length ) ] ( user ) )
103+
104+ return colour
105+ } ) . join ( ", " ) } saving ${ bold ( ( srcLength - minLength ) . toString ( ) ) } chars`)
106+ } )
107+ } else
108+ console . log ( "you need to set hackmudPath in config before you can use this command" )
109+
71110 break
111+ }
112+
72113 case "watch" :
73114 break
74- case "sync" :
75- // console.log(await sync())
76- break
77-
115+
78116 case "config" :
79117 switch ( commands [ 1 ] ) {
80118 case "get" :
81- console . log ( exploreObject ( await getConfig ( ) , ... commands . slice ( 2 ) ) )
119+ console . log ( exploreObject ( await getConfig ( ) , commands . slice ( 2 ) ) )
82120 break
83- case "delete" :
84- break
85- case "set" :
121+
122+ case "delete" : {
123+ const config = await getConfig ( )
86124 const keys = commands . slice ( 2 )
87125
88126 if ( keys . length ) {
89- let value
90-
91- if ( keys . length == 1 ) {
92- value = undefined
93- } else {
94- value = keys . pop ( )
95- }
96-
97- console . log ( { keys, value } )
127+ delete exploreObject ( config , keys . slice ( 0 , - 1 ) ) ?. [ keys . slice ( - 1 ) [ 0 ] ]
128+ console . log ( config )
98129 } else
99130 help ( )
131+
132+ break
133+ }
100134
101- // // exploreObject(await getConfig(), ...keys.slice(0, -1))[keys.slice(-1)[0]] = value
135+ case "set" : {
136+ const config = await getConfig ( )
137+ const keys = commands . slice ( 2 )
138+ const value = keys . pop ( )
139+
140+ if ( keys . length ) {
141+ let object = config
142+
143+ for ( let key of keys . slice ( 0 , - 1 ) )
144+ object = typeof object [ key ] == "object" ? object [ key ] : object [ key ] = { }
102145
103- // let object = await getConfig()
146+ object [ keys . slice ( - 1 ) [ 0 ] ] = value
104147
105- // for (let key of keys.slice(0, -1) )
106- // object = object[key] || {}
148+ if ( config . hackmudPath )
149+ config . hackmudPath = resolvePath ( config . hackmudPath )
107150
108- // object[keys.slice(-1)[0]] = value
151+ console . log ( config )
152+ } else
153+ help ( )
109154
110- // console.log(await getConfig())
111155 break
156+ }
157+
112158 default :
113159 if ( commands [ 1 ] )
114160 console . log ( "unknown command" )
@@ -165,7 +211,7 @@ function help() {
165211 break
166212 default :
167213 // console.log("hsm <build, clear, push, sync, watch, sync, config, help / h, version / v>")
168- console . log ( `${ red ( "hsm" ) } <${ yellow ( "command" ) } > [...${ yellow ( "option" ) } s]\n\n${ yellow ( "command" ) } s:\n ${ green ( "build" ) } - ${ blue ( "info" ) } \n ${ green ( "clear" ) } - ${ blue ( "info" ) } \n\n${ yellow ( "option" ) } s:\n help, h - info\n version, v - info` )
214+ console . log ( `${ redBright ( "hsm" ) } <${ yellowBright ( "command" ) } > [...${ yellowBright ( "option" ) } s]\n\n${ yellowBright ( "command" ) } s:\n ${ greenBright ( "build" ) } - ${ blueBright ( "info" ) } \n ${ greenBright ( "clear" ) } - ${ blueBright ( "info" ) } \n\n${ yellowBright ( "option" ) } s:\n help, h - info\n version, v - info` )
169215 }
170216}
171217
@@ -187,9 +233,12 @@ async function getConfig() {
187233 return config
188234}
189235
190- function exploreObject ( object : any , ... keys : string [ ] ) {
236+ function exploreObject ( object : any , keys : string [ ] , createPath = false ) {
191237 for ( let key of keys )
192- object = object ?. [ key ]
238+ if ( createPath )
239+ object = typeof object [ key ] == "object" ? object [ key ] : object [ key ] = { }
240+ else
241+ object = object ?. [ key ]
193242
194243 return object
195244}
0 commit comments