hackmud-script-manager 0.20.4-03d5600 → 0.20.4-06a037b
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.
- package/README.md +4 -0
- package/bin/hsm.js +46 -28
- package/env.d.ts +315 -310
- package/index.js +1 -1
- package/package.json +39 -39
- package/processScript/index.js +2 -2
- package/processScript/preprocess.js +5 -3
- package/processScript/transform.js +66 -73
- package/push.js +4 -4
- package/watch.js +8 -7
package/README.md
CHANGED
@@ -20,6 +20,10 @@ You can read about how HSM works [in my blog post](https://samual.uk/blog/js-cod
|
|
20
20
|
> ```
|
21
21
|
> You will need to run `Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser` in PowerShell as an administrator. For more information, see [Microsoft's page about Execution Policies](https://learn.microsoft.com/en-gb/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.4).
|
22
22
|
|
23
|
+

|
24
|
+

|
25
|
+

|
26
|
+
|
23
27
|
## Features
|
24
28
|
- Minification
|
25
29
|
- This includes auto quine cheating.
|
package/bin/hsm.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
-
import {
|
2
|
+
import { AutoMap } from "@samual/lib/AutoMap"
|
3
3
|
import { assert } from "@samual/lib/assert"
|
4
4
|
import { countHackmudCharacters } from "@samual/lib/countHackmudCharacters"
|
5
5
|
import { writeFilePersistent } from "@samual/lib/writeFilePersistent"
|
@@ -13,10 +13,10 @@ import { syncMacros } from "../syncMacros.js"
|
|
13
13
|
import "@samual/lib/readDirectoryWithStats"
|
14
14
|
import "path/posix"
|
15
15
|
import "@samual/lib/copyFilePersistent"
|
16
|
-
const
|
16
|
+
const formatOption = name => colourN(`-${1 == name.length ? "" : "-"}${name}`),
|
17
17
|
options = new Map(),
|
18
18
|
commands = [],
|
19
|
-
userColours = new
|
19
|
+
userColours = new AutoMap(user => {
|
20
20
|
let hash = 0
|
21
21
|
for (const char of user) hash += (hash >> 1) + hash + "xi1_8ratvsw9hlbgm02y5zpdcn7uekof463qj".indexOf(char) + 1
|
22
22
|
return [colourJ, colourK, colourM, colourW, colourL, colourB][hash % 6](user)
|
@@ -46,6 +46,7 @@ const pushModule = import("../push.js"),
|
|
46
46
|
colourB = chalk.rgb(202, 202, 202),
|
47
47
|
colourC = chalk.rgb(155, 155, 155),
|
48
48
|
colourD = chalk.rgb(255, 0, 0),
|
49
|
+
colourF = chalk.rgb(255, 128, 0),
|
49
50
|
colourJ = chalk.rgb(255, 244, 4),
|
50
51
|
colourK = chalk.rgb(243, 249, 152),
|
51
52
|
colourL = chalk.rgb(30, 255, 0),
|
@@ -54,8 +55,14 @@ const pushModule = import("../push.js"),
|
|
54
55
|
colourS = chalk.rgb(122, 178, 244),
|
55
56
|
colourV = chalk.rgb(255, 0, 236),
|
56
57
|
colourW = chalk.rgb(255, 150, 224)
|
58
|
+
process.version.startsWith("v21.") &&
|
59
|
+
console.warn(
|
60
|
+
colourF(
|
61
|
+
"Warning: Support for Node.js 21 will be dropped in the next minor version of HSM\n You should update your version of Node.js\n https://nodejs.org/en/download/package-manager"
|
62
|
+
)
|
63
|
+
)
|
57
64
|
if ("v" == commands[0] || "version" == commands[0] || popOption("version", "v")?.value) {
|
58
|
-
console.log(
|
65
|
+
console.log("0.20.4-06a037b")
|
59
66
|
process.exit()
|
60
67
|
}
|
61
68
|
if (popOption("help", "h")?.value) {
|
@@ -76,7 +83,7 @@ switch (commands[0]) {
|
|
76
83
|
noMinifyIncompatibleOption = mangleNamesOption || forceQuineCheatsOption
|
77
84
|
if (noMinifyOption && noMinifyIncompatibleOption) {
|
78
85
|
logError(
|
79
|
-
`Options ${
|
86
|
+
`Options ${formatOption(noMinifyOption.name)} and ${formatOption(noMinifyIncompatibleOption.name)} are incompatible\n`
|
80
87
|
)
|
81
88
|
logHelp()
|
82
89
|
process.exit(1)
|
@@ -99,6 +106,7 @@ switch (commands[0]) {
|
|
99
106
|
)
|
100
107
|
process.exit(1)
|
101
108
|
}
|
109
|
+
complainAboutUnrecognisedOptions()
|
102
110
|
const { processScript } = await processScriptModule,
|
103
111
|
fileBaseName = basename(target, fileExtension),
|
104
112
|
fileBaseNameEndsWithDotSrc = fileBaseName.endsWith(".src"),
|
@@ -171,15 +179,15 @@ switch (commands[0]) {
|
|
171
179
|
}
|
172
180
|
} else scripts.push("*.*")
|
173
181
|
if ("push" == commands[0]) {
|
174
|
-
const { push, MissingSourceFolderError, MissingHackmudFolderError, NoUsersError } =
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
182
|
+
const { push, MissingSourceFolderError, MissingHackmudFolderError, NoUsersError } = await pushModule
|
183
|
+
complainAboutUnrecognisedOptions()
|
184
|
+
const infos = await push(sourcePath, hackmudPath, {
|
185
|
+
scripts,
|
186
|
+
onPush: info => logInfo(info, hackmudPath),
|
187
|
+
minify: noMinifyOption && !noMinifyOption.value,
|
188
|
+
mangleNames: mangleNamesOption?.value,
|
189
|
+
forceQuineCheats: forceQuineCheatsOption?.value
|
190
|
+
})
|
183
191
|
if (infos instanceof Error) {
|
184
192
|
logError(infos.message)
|
185
193
|
if (infos instanceof MissingSourceFolderError || infos instanceof NoUsersError) {
|
@@ -193,12 +201,13 @@ switch (commands[0]) {
|
|
193
201
|
} else infos.length || logError("Could not find any scripts to push")
|
194
202
|
} else {
|
195
203
|
const typeDeclarationPathOption = popOption(
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
204
|
+
"type-declaration-path",
|
205
|
+
"type-declaration",
|
206
|
+
"dts",
|
207
|
+
"gen-types"
|
208
|
+
)
|
209
|
+
complainAboutUnrecognisedOptions()
|
210
|
+
const { watch } = await watchModule
|
202
211
|
watch(sourcePath, hackmudPath, {
|
203
212
|
scripts,
|
204
213
|
onPush: info => logInfo(info, hackmudPath),
|
@@ -222,6 +231,7 @@ switch (commands[0]) {
|
|
222
231
|
logHelp()
|
223
232
|
process.exit(1)
|
224
233
|
}
|
234
|
+
complainAboutUnrecognisedOptions()
|
225
235
|
const sourcePath = commands[2] || "."
|
226
236
|
await pull(sourcePath, hackmudPath, script).catch(error => {
|
227
237
|
console.error(error)
|
@@ -231,8 +241,9 @@ switch (commands[0]) {
|
|
231
241
|
break
|
232
242
|
case "sync-macros":
|
233
243
|
{
|
234
|
-
const hackmudPath = getHackmudPath()
|
235
|
-
|
244
|
+
const hackmudPath = getHackmudPath()
|
245
|
+
complainAboutUnrecognisedOptions()
|
246
|
+
const { macrosSynced, usersSynced } = await syncMacros(hackmudPath)
|
236
247
|
log(`Synced ${macrosSynced} macros to ${usersSynced} users`)
|
237
248
|
}
|
238
249
|
break
|
@@ -248,12 +259,13 @@ switch (commands[0]) {
|
|
248
259
|
logHelp()
|
249
260
|
process.exit(1)
|
250
261
|
}
|
262
|
+
complainAboutUnrecognisedOptions()
|
251
263
|
const sourcePath = resolve(target),
|
252
264
|
outputPath = commands[2] || "./player.d.ts",
|
253
265
|
typeDeclaration = await generateTypeDeclaration(sourcePath, hackmudPath)
|
254
266
|
let typeDeclarationPath = resolve(outputPath)
|
255
267
|
await writeFile(typeDeclarationPath, typeDeclaration).catch(error => {
|
256
|
-
assert(error instanceof Error, "src/bin/hsm.ts:
|
268
|
+
assert(error instanceof Error, "src/bin/hsm.ts:343:35")
|
257
269
|
if ("EISDIR" != error.code) throw error
|
258
270
|
typeDeclarationPath = resolve(typeDeclarationPath, "player.d.ts")
|
259
271
|
return writeFile(typeDeclarationPath, typeDeclaration)
|
@@ -274,7 +286,7 @@ function logHelp() {
|
|
274
286
|
const pushCommandDescription = "Push scripts from a directory to hackmud user's scripts directories",
|
275
287
|
forceQuineCheatsOptionDescription = `Force quine cheats on. Use ${colourN("--force-quine-cheats")}=${colourV("false")} to force off`,
|
276
288
|
hackmudPathOption = `${colourN("--hackmud-path")}=${colourB("<path>")}\n Override hackmud path`
|
277
|
-
console.log(colourN("Version") + colourS(": ") + colourV(
|
289
|
+
console.log(colourN("Version") + colourS(": ") + colourV("0.20.4-06a037b"))
|
278
290
|
switch (commands[0]) {
|
279
291
|
case "dev":
|
280
292
|
case "watch":
|
@@ -352,7 +364,7 @@ function getHackmudPath() {
|
|
352
364
|
}
|
353
365
|
function assertOptionIsBoolean(option) {
|
354
366
|
if ("boolean" != typeof option.value) {
|
355
|
-
logError(`The value for ${
|
367
|
+
logError(`The value for ${formatOption(option.name)} must be ${colourV("true")} or ${colourV("false")}\n`)
|
356
368
|
logHelp()
|
357
369
|
process.exit(1)
|
358
370
|
}
|
@@ -360,9 +372,7 @@ function assertOptionIsBoolean(option) {
|
|
360
372
|
function popOption(...names) {
|
361
373
|
const presentOptionNames = names.filter(name => options.has(name))
|
362
374
|
if (!presentOptionNames.length) return
|
363
|
-
const presentOptionNamesWithDashDash = presentOptionNames.map(
|
364
|
-
colourN(`-${1 == name.length ? "" : "-"}${name}`)
|
365
|
-
)
|
375
|
+
const presentOptionNamesWithDashDash = presentOptionNames.map(formatOption)
|
366
376
|
if (presentOptionNames.length > 1) {
|
367
377
|
logError(
|
368
378
|
`The options ${presentOptionNamesWithDashDash.join(", ")} are aliases for each other. Please only specify one`
|
@@ -373,3 +383,11 @@ function popOption(...names) {
|
|
373
383
|
options.delete(presentOptionNames[0])
|
374
384
|
return { name: presentOptionNamesWithDashDash[0], value }
|
375
385
|
}
|
386
|
+
function complainAboutUnrecognisedOptions() {
|
387
|
+
if (options.size) {
|
388
|
+
logError(
|
389
|
+
`Unrecognised option${options.size > 1 ? "s" : ""}: ${[...options.keys()].map(formatOption).join(", ")}`
|
390
|
+
)
|
391
|
+
process.exit(1)
|
392
|
+
}
|
393
|
+
}
|