Skip to content

Commit 7a4164b

Browse files
committed
first commit
1 parent 6235f90 commit 7a4164b

7 files changed

Lines changed: 356 additions & 0 deletions

File tree

.github/dependabot.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# To get started with Dependabot version updates, you'll need to specify which
2+
# package ecosystems to update and where the package manifests are located.
3+
# Please see the documentation for all configuration options:
4+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5+
6+
version: 2
7+
updates:
8+
- package-ecosystem: "npm" # See documentation for possible values
9+
directory: "/" # Location of package manifests
10+
schedule:
11+
interval: "daily"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,6 @@ dist
102102

103103
# TernJS port file
104104
.tern-port
105+
106+
*.js
107+
*.d.ts

.vscode/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"files.exclude": {
3+
"**/.*": true,
4+
"**/*.d.ts": true,
5+
"**/*.js": { "when": "$(basename).ts" }
6+
},
7+
"typescript.tsdk": "node_modules/typescript/lib"
8+
}

index.ts

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
#!/usr/bin/env node
2+
3+
import { readFile, mkdir as mkDir, writeFile, rmdir as rmDir } from "fs/promises"
4+
import { resolve as resolvePath } from "path"
5+
import { homedir as homeDir } from "os"
6+
import { build, clear, push, sync, watch } from "hackmud_env-tools"
7+
import { red, yellow, green, blue } from "ansi-colors"
8+
9+
type ArgValue = boolean | number | string | ArgValue[]
10+
11+
const configDir = resolvePath(homeDir(), ".config")
12+
const configFile = resolvePath(configDir, "hsm.json")
13+
14+
const options = new Map<string, ArgValue>()
15+
const commands: string[] = []
16+
17+
// const helpConfig = {
18+
// config: {
19+
// set: [ "key", "value" ]
20+
// }
21+
// }
22+
23+
let config: Partial<{
24+
hackmudPath: string
25+
defaultUser: string
26+
[key: string]: any
27+
}> | undefined
28+
29+
for (let arg of process.argv.slice(2)) {
30+
if (arg[0] == "-") {
31+
let [ key, valueRaw ] = arg.split("=")
32+
let value: ArgValue = valueRaw
33+
34+
if (value)
35+
if (value == "true")
36+
value = true
37+
else if (value == "false")
38+
value = false
39+
else {
40+
let number = Number(value)
41+
42+
if (isFinite(number))
43+
value = number
44+
}
45+
else
46+
value = true
47+
48+
if (arg[1] == "-")
49+
options.set(key.slice(2), value)
50+
else
51+
for (let option of key.slice(1))
52+
options.set(option, value)
53+
} else
54+
commands.push(arg)
55+
}
56+
57+
(async () => {
58+
if (options.get("version") || options.get("v"))
59+
version()
60+
else if (options.get("help") || options.get("h"))
61+
help()
62+
else
63+
switch (commands[0]) {
64+
case "build":
65+
break
66+
case "clear":
67+
break
68+
case "push":
69+
break
70+
case "sync":
71+
break
72+
case "watch":
73+
break
74+
case "sync":
75+
// console.log(await sync())
76+
break
77+
78+
case "config":
79+
switch (commands[1]) {
80+
case "get":
81+
console.log(exploreObject(await getConfig(), ...commands.slice(2)))
82+
break
83+
case "delete":
84+
break
85+
case "set":
86+
const keys = commands.slice(2)
87+
88+
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 })
98+
} else
99+
help()
100+
101+
// // exploreObject(await getConfig(), ...keys.slice(0, -1))[keys.slice(-1)[0]] = value
102+
103+
// let object = await getConfig()
104+
105+
// for (let key of keys.slice(0, -1))
106+
// object = object[key] || {}
107+
108+
// object[keys.slice(-1)[0]] = value
109+
110+
// console.log(await getConfig())
111+
break
112+
default:
113+
if (commands[1])
114+
console.log("unknown command")
115+
116+
help()
117+
}
118+
119+
break
120+
case "help":
121+
case "h":
122+
help()
123+
break
124+
case "version":
125+
case "v":
126+
version()
127+
break
128+
default:
129+
if (commands[0])
130+
console.log("unknown command")
131+
132+
help()
133+
}
134+
135+
if (config) {
136+
const json = JSON.stringify(config)
137+
138+
writeFile(configFile, json).catch(async error => {
139+
switch (error.code) {
140+
case "EISDIR":
141+
await rmDir(configFile)
142+
break
143+
case "ENOENT":
144+
await mkDir(configDir)
145+
break
146+
default:
147+
throw error
148+
}
149+
150+
writeFile(configFile, json)
151+
})
152+
}
153+
})()
154+
155+
function help() {
156+
switch (commands[0]) {
157+
case "config":
158+
switch (commands[1]) {
159+
case "set":
160+
console.log("hsm config set <key> <value>")
161+
break
162+
default:
163+
console.log("hsm config <get, delete, set>")
164+
}
165+
break
166+
default:
167+
// 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`)
169+
}
170+
}
171+
172+
async function version() {
173+
console.log(JSON.parse(await readFile(resolvePath(__dirname, "package.json"), { encoding: "utf-8" })).version || "unknown")
174+
}
175+
176+
async function getConfig() {
177+
if (config)
178+
return config
179+
180+
try {
181+
config = JSON.parse(await readFile(configFile, { encoding: "utf-8" }))
182+
} finally {
183+
if (typeof config != "object")
184+
config = {}
185+
}
186+
187+
return config
188+
}
189+
190+
function exploreObject(object: any, ...keys: string[]) {
191+
for (let key of keys)
192+
object = object?.[key]
193+
194+
return object
195+
}

package-lock.json

Lines changed: 95 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"name": "hackmud-script-manager",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"build": "npx tsc",
8+
"watch": "npx tsc --watch"
9+
},
10+
"repository": {
11+
"type": "git",
12+
"url": "git+https://github.com/samualtnorman/hackmud-script-manager.git"
13+
},
14+
"author": "Samual Norman",
15+
"license": "MIT",
16+
"bugs": {
17+
"url": "https://github.com/samualtnorman/hackmud-script-manager/issues"
18+
},
19+
"homepage": "https://github.com/samualtnorman/hackmud-script-manager#readme",
20+
"dependencies": {
21+
"ansi-colors": "^4.1.1",
22+
"hackmud_env-tools": "^1.0.2"
23+
},
24+
"devDependencies": {
25+
"@types/node": "^14.6.0",
26+
"typescript": "^4.0.2"
27+
},
28+
"bin": {
29+
"hsm": "index.js"
30+
},
31+
"files": [
32+
"index.js"
33+
]
34+
}

tsconfig.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"compilerOptions": {
3+
"target": "ES2017",
4+
"module": "commonjs",
5+
"strict": true,
6+
"esModuleInterop": true,
7+
"skipLibCheck": true,
8+
"forceConsistentCasingInFileNames": true
9+
}
10+
}

0 commit comments

Comments
 (0)