hackmud-script-manager 0.19.1-cb8d65f → 0.19.1-d57be2a

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # Hackmud Script Manager
2
2
  Command made for [hackmud-environment](https://github.com/samualtnorman/hackmud-environment), which is a scripting environment for hackmud with minification, autocompletes / intellisense, and TypeScript support.
3
3
 
4
- Install with `npm install hackmud-script-manager -g` to make the `hsm` command available everywhere.
4
+ Install with `npm install -g hackmud-script-manager` to make the `hsm` command available everywhere.
5
5
 
6
6
  ## Features
7
7
  - Minification
package/bin/hsm.js CHANGED
@@ -1,23 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { Cache } from "@samual/lib/Cache"
3
3
  import { assert } from "@samual/lib/assert"
4
- import { catchError } from "@samual/lib/catchError"
5
4
  import { countHackmudCharacters } from "@samual/lib/countHackmudCharacters"
6
- import { getDeepObjectProperty } from "@samual/lib/getDeepObjectProperty"
7
- import { isRecord } from "@samual/lib/isRecord"
8
- import { setDeepObjectProperty } from "@samual/lib/setDeepObjectProperty"
9
5
  import { writeFilePersistent } from "@samual/lib/writeFilePersistent"
10
- import { readFile, writeFile, mkdir, rmdir } from "fs/promises"
6
+ import { writeFile, readFile } from "fs/promises"
11
7
  import { homedir } from "os"
12
- import { resolve, extname, basename, dirname, relative } from "path"
8
+ import { extname, basename, resolve, dirname, relative } from "path"
13
9
  import { supportedExtensions } from "../constants.js"
14
10
  import { generateTypeDeclaration } from "../generateTypeDeclaration.js"
15
11
  import { pull } from "../pull.js"
16
12
  import { syncMacros } from "../syncMacros.js"
17
13
  import "@samual/lib/readDirectoryWithStats"
18
14
  import "@samual/lib/copyFilePersistent"
19
- const configDirectoryPath = resolve(homedir(), ".config"),
20
- configFilePath = resolve(configDirectoryPath, "hsm.json"),
15
+ const version = "0.19.1-d57be2a",
21
16
  options = new Map(),
22
17
  commands = [],
23
18
  userColours = new Cache(user => {
@@ -42,29 +37,10 @@ for (const argument of process.argv.slice(2))
42
37
  else for (const option of key.slice(1)) options.set(option, value)
43
38
  } else commands.push(argument)
44
39
  if ("v" == commands[0] || "version" == commands[0] || options.get("version") || options.get("v")) {
45
- console.log("0.19.1-cb8d65f")
40
+ console.log(version)
46
41
  process.exit()
47
42
  }
48
- let configDidNotExist = !1
49
- const configPromise = readFile(configFilePath, { encoding: "utf-8" }).then(
50
- configFile => {
51
- const [temporaryConfig, error] = catchError(() => JSON.parse(configFile))
52
- if (error || !isRecord(temporaryConfig)) {
53
- log("Config file was corrupted, resetting")
54
- return {}
55
- }
56
- if ("hackmudPath" in temporaryConfig && "string" != typeof temporaryConfig.hackmudPath) {
57
- log('Property "hackmudPath" of config file was corrupted, removing')
58
- delete temporaryConfig.hackmudPath
59
- }
60
- return temporaryConfig
61
- },
62
- () => {
63
- configDidNotExist = !0
64
- return {}
65
- }
66
- ),
67
- pushModule = import("../push.js"),
43
+ const pushModule = import("../push.js"),
68
44
  processScriptModule = import("../processScript/index.js"),
69
45
  watchModule = import("../watch.js"),
70
46
  chokidarModule = import("chokidar"),
@@ -86,12 +62,10 @@ if (options.get("help") || options.get("h")) {
86
62
  process.exit()
87
63
  }
88
64
  let autoExit = !0
89
- const getDefaultHackmudPath = () =>
90
- "win32" == process.platform ? resolve(process.env.APPDATA, "hackmud") : resolve(homedir(), ".config/hackmud")
91
65
  switch (commands[0]) {
92
66
  case "push":
93
67
  {
94
- const { hackmudPath = getDefaultHackmudPath() } = await configPromise,
68
+ const hackmudPath = getHackmudPath(),
95
69
  sourcePath = commands[1]
96
70
  if (!sourcePath) {
97
71
  logError("Must provide the directory to push from\n")
@@ -160,7 +134,7 @@ switch (commands[0]) {
160
134
  case "dev":
161
135
  case "watch":
162
136
  {
163
- const { hackmudPath = getDefaultHackmudPath() } = await configPromise,
137
+ const hackmudPath = getHackmudPath(),
164
138
  sourcePath = commands[1]
165
139
  if (!sourcePath) {
166
140
  logError("Must provide the directory to watch\n")
@@ -234,7 +208,7 @@ switch (commands[0]) {
234
208
  break
235
209
  case "pull":
236
210
  {
237
- const { hackmudPath = getDefaultHackmudPath() } = await configPromise,
211
+ const hackmudPath = getHackmudPath(),
238
212
  script = commands[1]
239
213
  if (!script) {
240
214
  logError("Must provide the script to pull\n")
@@ -250,7 +224,7 @@ switch (commands[0]) {
250
224
  break
251
225
  case "sync-macros":
252
226
  {
253
- const { hackmudPath = getDefaultHackmudPath() } = await configPromise,
227
+ const hackmudPath = getHackmudPath(),
254
228
  { macrosSynced, usersSynced } = await syncMacros(hackmudPath)
255
229
  log(`Synced ${macrosSynced} macros to ${usersSynced} users`)
256
230
  }
@@ -268,13 +242,10 @@ switch (commands[0]) {
268
242
  }
269
243
  const sourcePath = resolve(target),
270
244
  outputPath = commands[2] || "./player.d.ts",
271
- typeDeclaration = await generateTypeDeclaration(
272
- sourcePath,
273
- (await configPromise).hackmudPath || getDefaultHackmudPath()
274
- )
245
+ typeDeclaration = await generateTypeDeclaration(sourcePath, getHackmudPath())
275
246
  let typeDeclarationPath = resolve(outputPath)
276
247
  await writeFile(typeDeclarationPath, typeDeclaration).catch(error => {
277
- assert(error instanceof Error, "src/bin/hsm.ts:365:35")
248
+ assert(error instanceof Error, "src/bin/hsm.ts:327:35")
278
249
  if ("EISDIR" != error.code) throw error
279
250
  typeDeclarationPath = resolve(typeDeclarationPath, "player.d.ts")
280
251
  return writeFile(typeDeclarationPath, typeDeclaration)
@@ -282,66 +253,6 @@ switch (commands[0]) {
282
253
  log("Wrote type declaration to " + chalk.bold(typeDeclarationPath))
283
254
  }
284
255
  break
285
- case "config":
286
- switch (commands[1]) {
287
- case "get":
288
- {
289
- const key = commands[2],
290
- config = await configPromise
291
- if (key) {
292
- const [value, error] = catchError(() => getDeepObjectProperty(config, key.split(".")))
293
- error ? logError("Could not get key " + colourV(key))
294
- : "string" == typeof value ? log(value)
295
- : console.log(value)
296
- } else console.log(config)
297
- }
298
- break
299
- case "delete":
300
- {
301
- const key = commands[2]
302
- if (!key) {
303
- logError("Must provide a key to delete\n")
304
- logHelp()
305
- break
306
- }
307
- const keys = key.split("."),
308
- lastKey = keys.pop(),
309
- config = await configPromise,
310
- object = getDeepObjectProperty(config, keys)
311
- if (isRecord(object)) {
312
- delete object[lastKey]
313
- await updateConfig(config)
314
- log(`Removed ${colourV(key)} from config file:`)
315
- console.log(config)
316
- } else log("Could not delete " + colourV(key))
317
- }
318
- break
319
- case "set":
320
- {
321
- const key = commands[2],
322
- value = commands[3]
323
- if (!key) {
324
- logError("Must provide a key and value\n")
325
- logHelp()
326
- break
327
- }
328
- if (!value) {
329
- logError(`Must provide a value for the key ${colourV(key)}\n`)
330
- logHelp()
331
- break
332
- }
333
- const config = await configPromise
334
- setDeepObjectProperty(config, key.split("."), value)
335
- log(`Set ${colourV(key)} to ${colourV(value)}:`)
336
- console.log(config)
337
- await updateConfig(config)
338
- }
339
- break
340
- default:
341
- commands[1] && logError(`Unknown command: ${colourL(commands[1])}\n`)
342
- logHelp()
343
- }
344
- break
345
256
  case "help":
346
257
  case "h":
347
258
  logHelp()
@@ -369,7 +280,7 @@ switch (commands[0]) {
369
280
  scriptUser =
370
281
  "scripts" == basename(resolve(target, "..")) && "hackmud" == basename(resolve(target, "../../..")) ?
371
282
  basename(resolve(target, "../.."))
372
- : "UNKNOWN",
283
+ : void 0,
373
284
  optionsHasNoMinify = options.has("no-minify")
374
285
  if ((optionsHasNoMinify || options.has("skip-minify")) && options.has("mangle-names")) {
375
286
  logError(
@@ -405,7 +316,7 @@ switch (commands[0]) {
405
316
  : fileBaseName + ".js"
406
317
  )
407
318
  const golfFile = () =>
408
- readFile(target, { encoding: "utf-8" }).then(async source => {
319
+ readFile(target, { encoding: "utf8" }).then(async source => {
409
320
  const timeStart = performance.now(),
410
321
  { script, warnings } = await processScript(source, {
411
322
  minify: !(options.get("no-minify") || options.get("skip-minify")),
@@ -446,47 +357,23 @@ switch (commands[0]) {
446
357
  autoExit && process.exit()
447
358
  function logHelp() {
448
359
  const pushCommandDescription = "Push scripts from a directory to hackmud user's scripts directories",
449
- forceQuineCheatsOptionDescription = `Force quine cheats on. Use ${colourN("--force-quine-cheats")}=${colourV("false")} to force off`
450
- console.log(colourN("Version") + colourS(": ") + colourV("0.19.1-cb8d65f"))
360
+ forceQuineCheatsOptionDescription = `Force quine cheats on. Use ${colourN("--force-quine-cheats")}=${colourV("false")} to force off`,
361
+ hackmudPathOption = `${colourN("--hackmud-path")}=${colourB("<path>")}\n Override hackmud path`
362
+ console.log(colourN("Version") + colourS(": ") + colourV(version))
451
363
  switch (commands[0]) {
452
- case "config":
453
- switch (commands[1]) {
454
- case "get":
455
- console.log(
456
- `\n${colourJ("Retrieve a value from the config file")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(`${commands[0]} ${commands[1]}`)} ${colourB("<key>")}`
457
- )
458
- break
459
- case "set":
460
- console.log(
461
- `\n${colourJ("Assign a value to the config file")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(`${commands[0]} ${commands[1]}`)} ${colourB("<key> <value>")}`
462
- )
463
- break
464
- case "delete":
465
- console.log(
466
- `\n${colourJ("Remove a key and value from the config file")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(`${commands[0]} ${commands[1]}`)} ${colourB("<key>")}`
467
- )
468
- break
469
- default:
470
- console.log(
471
- colourS(
472
- `${colourN("Config path")}: ${colourV(configFilePath)}\n\n${colourJ("Modify the config file")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0] + " get")} ${colourB("<key>")}\n Retrieve a value from the config file\n${colourC("hsm")} ${colourL(commands[0] + " set")} ${colourB("<key> <value>")}\n Assign a value to the config file\n${colourC("hsm")} ${colourL(commands[0] + " delete")} ${colourB("<key>")}\n Remove a key and value from the config file`
473
- )
474
- )
475
- }
476
- break
477
364
  case "dev":
478
365
  case "watch":
479
366
  case "push":
480
367
  console.log(
481
368
  colourS(
482
- `\n${colourJ("push" == commands[0] ? pushCommandDescription : "Watch a directory and push a script when modified")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB('<directory> ["<script user>.<script name>"...]')}\n\n${colourA("Arguments:")}\n${colourB("<directory>")}\n The source directory containing your scripts\n${colourB("<script user>")}\n A user to push script(s) to. Can be set to wild card (${colourV("*")}) which will try\n and discover users to push to\n${colourB("<script name>")}\n Name of a script to push. Can be set to wild card (${colourV("*")}) to find all scripts\n\n${colourA("Options:")}\n${colourN("--no-minify")}\n Skip minification to produce a "readable" script\n${colourN("--mangle-names")}\n Reduce character count further but lose function names in error call stacks\n${colourN("--force-quine-cheats")}\n ${forceQuineCheatsOptionDescription}\n${"push" == commands[0] ? "" : `${colourN("--type-declaration-path")}=${colourB("<path>")}\n Path to generate a type declaration file for the scripts\n`}\n${colourA("Examples:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")}\n\tPushes all scripts found in ${colourV("src")} folder to all users\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("bar")}\n Pushes a script named ${colourL("bar")} found in ${colourV("src")} folder to user ${userColours.get("foo")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("bar")} ${colourC("baz")}${colourV(".")}${colourL("qux")}\n Multiple can be specified.\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("*")}\n\tPushes all scripts found in ${colourV("src")} folder to user ${userColours.get("foo")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("*")}${colourV(".")}${colourL("foo")}\n\tPushes all scripts named ${colourL("foo")} found in ${colourV("src")} folder to all user\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("*")}${colourV(".")}${colourL("*")}\n\tPushes all scripts found in ${colourV("src")} folder to all users`
369
+ `\n${colourJ("push" == commands[0] ? pushCommandDescription : "Watch a directory and push a script when modified")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB('<directory> ["<script user>.<script name>"...]')}\n\n${colourA("Arguments:")}\n${colourB("<directory>")}\n The source directory containing your scripts\n${colourB("<script user>")}\n A user to push script(s) to. Can be set to wild card (${colourV("*")}) which will try\n and discover users to push to\n${colourB("<script name>")}\n Name of a script to push. Can be set to wild card (${colourV("*")}) to find all scripts\n\n${colourA("Options:")}\n${colourN("--no-minify")}\n Skip minification to produce a "readable" script\n${colourN("--mangle-names")}\n Reduce character count further but lose function names in error call stacks\n${colourN("--force-quine-cheats")}\n ${forceQuineCheatsOptionDescription}\n${hackmudPathOption}\n${"push" == commands[0] ? "" : `${colourN("--type-declaration-path")}=${colourB("<path>")}\n Path to generate a type declaration file for the scripts\n`}\n${colourA("Examples:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")}\n\tPushes all scripts found in ${colourV("src")} folder to all users\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("bar")}\n Pushes a script named ${colourL("bar")} found in ${colourV("src")} folder to user ${userColours.get("foo")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("bar")} ${colourC("baz")}${colourV(".")}${colourL("qux")}\n Multiple can be specified\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("foo")}${colourV(".")}${colourL("*")}\n\tPushes all scripts found in ${colourV("src")} folder to user ${userColours.get("foo")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("*")}${colourV(".")}${colourL("foo")}\n\tPushes all scripts named ${colourL("foo")} found in ${colourV("src")} folder to all user\n${colourC("hsm")} ${colourL(commands[0])} ${colourV("src")} ${colourC("*")}${colourV(".")}${colourL("*")}\n\tPushes all scripts found in ${colourV("src")} folder to all users`
483
370
  )
484
371
  )
485
372
  break
486
373
  case "pull":
487
374
  console.log(
488
375
  colourS(
489
- `\n${colourJ("Pull a script a from a hackmud user's script directory")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB("<script user>")}${colourV(".")}${colourB("<script name>")}`
376
+ `\n${colourJ("Pull a script a from a hackmud user's script directory")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB("<script user>")}${colourV(".")}${colourB("<script name>")}\n\n${colourA("Options:")}\n${hackmudPathOption}`
490
377
  )
491
378
  )
492
379
  break
@@ -504,46 +391,47 @@ function logHelp() {
504
391
  case "gen-types":
505
392
  console.log(
506
393
  colourS(
507
- `${colourJ("Generate a type declaration file for a directory of scripts")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB("<directory> [output path]")}`
394
+ `${colourJ("Generate a type declaration file for a directory of scripts")}\n\n${colourA("Usage:")}\n${colourC("hsm")} ${colourL(commands[0])} ${colourB("<directory> [output path]")}\n\n${colourA("Options:")}\n${hackmudPathOption}`
508
395
  )
509
396
  )
510
397
  break
511
398
  case "sync-macros":
512
- console.log("\n" + colourJ("Sync macros across all hackmud users"))
399
+ console.log(
400
+ colourS(
401
+ `\n${colourJ("Sync macros across all hackmud users")}\n\n${colourA("Options:")}\n${hackmudPathOption}`
402
+ )
403
+ )
513
404
  break
514
405
  default:
515
406
  console.log(
516
407
  colourS(
517
- `\n${colourJ("Hackmud Script Manager")}\n\n${colourA("Commands:")}\n${colourL("push")}\n ${pushCommandDescription}\n${colourL("dev")}\n Watch a directory and push a script when modified\n${colourL("golf")}\n Minify a script file on the spot\n${colourL("gen-dts")}\n Generate a type declaration file for a directory of scripts\n${colourL("sync-macros")}\n Sync macros across all hackmud users\n${colourL("config")}\n Modify and view the config file\n${colourL("pull")}\n Pull a script a from a hackmud user's script directory`
408
+ `\n${colourJ("Hackmud Script Manager")}\n\n${colourA("Commands:")}\n${colourL("push")}\n ${pushCommandDescription}\n${colourL("dev")}\n Watch a directory and push a script when modified\n${colourL("golf")}\n Minify a script file on the spot\n${colourL("gen-dts")}\n Generate a type declaration file for a directory of scripts\n${colourL("sync-macros")}\n Sync macros across all hackmud users\n${colourL("pull")}\n Pull a script a from a hackmud user's script directory`
518
409
  )
519
410
  )
520
411
  }
521
412
  }
522
- async function updateConfig(config) {
523
- const json = JSON.stringify(config, void 0, "\t")
524
- configDidNotExist && log("Creating config file at " + configFilePath)
525
- await writeFile(configFilePath, json).catch(async error => {
526
- switch (error.code) {
527
- case "EISDIR":
528
- await rmdir(configFilePath)
529
- break
530
- case "ENOENT":
531
- await mkdir(configDirectoryPath)
532
- break
533
- default:
534
- throw error
535
- }
536
- await writeFile(configFilePath, json)
537
- })
538
- }
539
- function logInfo({ file, users, minLength, error }, hackmudPath) {
413
+ function logInfo({ path, users, characterCount, error }, hackmudPath) {
414
+ path = relative(".", path)
540
415
  error ?
541
- logError(`error "${chalk.bold(error.message)}" in ${chalk.bold(file)}`)
542
- : console.log(
543
- `pushed ${chalk.bold(file)} to ${users.map(user => chalk.bold(userColours.get(user))).join(", ")} | ${chalk.bold(minLength + "")} chars | ${chalk.bold(resolve(hackmudPath, users[0], "scripts", basename(file, extname(file))) + ".js")}`
416
+ logError(`Error "${chalk.bold(error.message)}" in ${chalk.bold(path)}`)
417
+ : log(
418
+ `Pushed ${chalk.bold(path)} to ${users.map(user => chalk.bold(userColours.get(user))).join(", ")} | ${chalk.bold(characterCount + "")} chars | ${chalk.bold(resolve(hackmudPath, users[0], "scripts", basename(path, extname(path))) + ".js")}`
544
419
  )
545
420
  }
546
421
  function logError(message) {
547
422
  console.error(colourD(message))
548
423
  process.exitCode = 1
549
424
  }
425
+ function getHackmudPath() {
426
+ const hackmudPathOption = options.get("hackmud-path")
427
+ if (null != hackmudPathOption && "string" != typeof hackmudPathOption) {
428
+ logError(`Option ${colourN("--hackmud-path")} must be a string, got ${colourV(hackmudPathOption)}\n`)
429
+ logHelp()
430
+ process.exit(1)
431
+ }
432
+ return (
433
+ hackmudPathOption ||
434
+ process.env.HSM_HACKMUD_PATH ||
435
+ ("win32" == process.platform ? resolve(process.env.APPDATA, "hackmud") : resolve(homedir(), ".config/hackmud"))
436
+ )
437
+ }
@@ -1,2 +1 @@
1
1
  export declare function generateTypeDeclaration(sourceDirectory: string, hackmudPath?: string): Promise<string>;
2
- export default generateTypeDeclaration;
@@ -65,4 +65,4 @@ async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
65
65
  o += "}\n"
66
66
  return o
67
67
  }
68
- export { generateTypeDeclaration as default, generateTypeDeclaration }
68
+ export { generateTypeDeclaration }
@@ -6,8 +6,8 @@ export { push } from "./push";
6
6
  export { syncMacros } from "./syncMacros";
7
7
  export { watch } from "./watch";
8
8
  export type Info = {
9
- file: string;
9
+ path: string;
10
10
  users: string[];
11
- minLength: number;
11
+ characterCount: number;
12
12
  error: Error | undefined;
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hackmud-script-manager",
3
- "version": "0.19.1-cb8d65f",
3
+ "version": "0.19.1-d57be2a",
4
4
  "description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
5
5
  "keywords": [
6
6
  "api",
@@ -71,9 +71,13 @@
71
71
  },
72
72
  "type": "module",
73
73
  "exports": {
74
+ ".": "./index.js",
74
75
  "./*": "./*.js",
75
76
  "./*.js": "./*.js"
76
77
  },
78
+ "bin": {
79
+ "hsm": "bin/hsm.js"
80
+ },
77
81
  "engines": {
78
82
  "node": "^18 || >=20"
79
83
  }
@@ -3,11 +3,10 @@ export { minify } from "./minify";
3
3
  export { postprocess } from "./postprocess";
4
4
  export { preprocess } from "./preprocess";
5
5
  export { transform } from "./transform";
6
- export type ProcessOptions = {
6
+ export type ProcessOptions = LaxPartial<{
7
7
  /** whether to minify the given code */ minify: boolean;
8
8
  /** 11 a-z 0-9 characters */ uniqueID: string;
9
9
  /** the user going to be hosting this script (or set to `true` if not yet known) */ scriptUser: string | true;
10
- /** the name of this script (or set to `true` if not yet known) */ scriptName: string | true;
11
10
  filePath: string;
12
11
  /** whether to mangle function and class names (defaults to `false`) */ mangleNames: boolean;
13
12
  /** when set to `true` forces use of quine cheats
@@ -17,15 +16,16 @@ export type ProcessOptions = {
17
16
  * when left unset or set to `undefined`, automatically uses or doesn't use quine cheats based on character count
18
17
  */
19
18
  forceQuineCheats: boolean;
19
+ }> & {
20
+ scriptName: string | true;
20
21
  };
21
22
  /** Minifies a given script
22
23
  * @param code JavaScript or TypeScript code
23
24
  * @param options {@link ProcessOptions details} */
24
- export declare function processScript(code: string, { minify: shouldMinify, uniqueID, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats }?: LaxPartial<ProcessOptions>): Promise<{
25
+ export declare function processScript(code: string, { minify: shouldMinify, uniqueID, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats }: ProcessOptions): Promise<{
25
26
  script: string;
26
27
  warnings: {
27
28
  message: string;
28
29
  line: number;
29
30
  }[];
30
31
  }>;
31
- export default processScript;
@@ -47,14 +47,14 @@ async function processScript(
47
47
  uniqueID = Math.floor(Math.random() * 2 ** 52)
48
48
  .toString(36)
49
49
  .padStart(11, "0"),
50
- scriptUser = "UNKNOWN",
51
- scriptName = "UNKNOWN",
50
+ scriptUser,
51
+ scriptName,
52
52
  filePath,
53
53
  mangleNames = !1,
54
54
  forceQuineCheats
55
- } = {}
55
+ }
56
56
  ) {
57
- assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:78:36")
57
+ assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:77:36")
58
58
  const sourceCode = code
59
59
  let autocomplete, statedSeclevel
60
60
  const autocompleteMatch = /^function\s*\(.+\/\/(?<autocomplete>.+)/.exec(code)
@@ -115,7 +115,7 @@ async function processScript(
115
115
  }
116
116
  }
117
117
  }
118
- assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:159:36")
118
+ assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:158:36")
119
119
  const plugins = [
120
120
  [babelPluginProposalDecorators.default, { decoratorsBeforeExport: !0 }],
121
121
  [babelPluginTransformClassProperties.default],
@@ -249,7 +249,7 @@ async function processScript(
249
249
  traverse(file, {
250
250
  MemberExpression({ node: memberExpression }) {
251
251
  if (!memberExpression.computed) {
252
- assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:322:60")
252
+ assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:321:60")
253
253
  if ("prototype" == memberExpression.property.name) {
254
254
  memberExpression.computed = !0
255
255
  memberExpression.property = t.stringLiteral("prototype")
@@ -279,7 +279,7 @@ async function processScript(
279
279
  break
280
280
  case "ObjectPattern":
281
281
  for (const property of lValue.properties) {
282
- assert("ObjectProperty" == property.type, "src/processScript/index.ts:352:51")
282
+ assert("ObjectProperty" == property.type, "src/processScript/index.ts:351:51")
283
283
  renameVariables(property.value)
284
284
  }
285
285
  break
@@ -330,4 +330,4 @@ async function processScript(
330
330
  )
331
331
  return { script: code, warnings: [] }
332
332
  }
333
- export { processScript as default, minify, postprocess, preprocess, processScript, transform }
333
+ export { minify, postprocess, preprocess, processScript, transform }
@@ -1,6 +1,6 @@
1
1
  import type { File } from "@babel/types";
2
2
  import type { LaxPartial } from "@samual/lib";
3
- type MinifyOptions = {
3
+ type MinifyOptions = LaxPartial<{
4
4
  /** 11 a-z 0-9 characters */ uniqueID: string;
5
5
  /** whether to mangle function and class names (defaults to `false`) */ mangleNames: boolean;
6
6
  /** when set to `true` forces use of quine cheats
@@ -11,8 +11,8 @@ type MinifyOptions = {
11
11
  */
12
12
  forceQuineCheats: boolean;
13
13
  /** the comment inserted after the function signature */ autocomplete: string;
14
- };
14
+ }>;
15
15
  /** @param file babel ast node representing a file containing transformed code
16
16
  * @param options {@link MinifyOptions details} */
17
- export declare function minify(file: File, { uniqueID, mangleNames, forceQuineCheats, autocomplete }?: LaxPartial<MinifyOptions>): Promise<string>;
18
- export default minify;
17
+ export declare function minify(file: File, { uniqueID, mangleNames, forceQuineCheats, autocomplete }?: MinifyOptions): Promise<string>;
18
+ export {};
@@ -377,15 +377,15 @@ function parseObjectExpression(node, o) {
377
377
  "Identifier" == property.key.type ||
378
378
  "NumericLiteral" == property.key.type ||
379
379
  "StringLiteral" == property.key.type,
380
- "src/processScript/minify.ts:518:4"
380
+ "src/processScript/minify.ts:516:4"
381
381
  )
382
382
  if ("ArrayExpression" == property.value.type) {
383
383
  const childArray = []
384
- if (!parseArrayExpression(property.value, childArray)) return !1
384
+ if (property.value.elements.length && !parseArrayExpression(property.value, childArray)) return !1
385
385
  o["Identifier" == property.key.type ? property.key.name : property.key.value] = childArray
386
386
  } else if ("ObjectExpression" == property.value.type) {
387
387
  const childObject = {}
388
- if (!parseObjectExpression(property.value, childObject)) return !1
388
+ if (property.value.properties.length && !parseObjectExpression(property.value, childObject)) return !1
389
389
  o["Identifier" == property.key.type ? property.key.name : property.key.value] = childObject
390
390
  } else if ("NullLiteral" == property.value.type)
391
391
  o["Identifier" == property.key.type ? property.key.name : property.key.value] = null
@@ -409,11 +409,11 @@ function parseArrayExpression(node, o) {
409
409
  if (!element) return !1
410
410
  if ("ArrayExpression" == element.type) {
411
411
  const childArray = []
412
- if (!parseArrayExpression(element, childArray)) return !1
412
+ if (!element.elements.length && parseArrayExpression(element, childArray)) return !1
413
413
  o.push(childArray)
414
414
  } else if ("ObjectExpression" == element.type) {
415
415
  const childObject = {}
416
- if (!parseObjectExpression(element, childObject)) return !1
416
+ if (element.properties.length && !parseObjectExpression(element, childObject)) return !1
417
417
  o.push(childObject)
418
418
  } else if ("NullLiteral" == element.type) o.push(null)
419
419
  else if (
@@ -441,4 +441,4 @@ function getFunctionBodyStart(code) {
441
441
  }
442
442
  return tokens.getToken().start
443
443
  }
444
- export { minify as default, minify }
444
+ export { minify }
@@ -1,2 +1 @@
1
1
  export declare const postprocess: (code: string, seclevel: number, uniqueID: string) => string;
2
- export default postprocess;
@@ -17,4 +17,4 @@ const postprocess = (code, seclevel, uniqueID) =>
17
17
  .replace(RegExp(`\\$${uniqueID}\\$NOT_A_DEBUG_CALL\\$`, "g"), "#D\\(")
18
18
  .replace(RegExp(`\\$${uniqueID}\\$NOT_FMCL\\$`, "g"), "#\\FMCL")
19
19
  .replace(RegExp(`\\$${uniqueID}\\$NOT_G\\$`, "g"), "#\\G")
20
- export { postprocess as default, postprocess }
20
+ export { postprocess }
@@ -1,9 +1,9 @@
1
- export type PreprocessOptions = {
2
- /** 11 a-z 0-9 characters */ uniqueID: string;
3
- };
1
+ import type { LaxPartial } from "@samual/lib";
2
+ export type PreprocessOptions = LaxPartial<{
3
+ uniqueID: string;
4
+ }>;
4
5
  /** @param code source code for preprocessing
5
6
  * @param options {@link PreprocessOptions details} */
6
- export declare function preprocess(code: string, { uniqueID }?: Partial<PreprocessOptions>): Promise<{
7
+ export declare function preprocess(code: string, { uniqueID }?: PreprocessOptions): Promise<{
7
8
  code: string;
8
9
  }>;
9
- export default preprocess;
@@ -8,7 +8,7 @@ import { resolve } from "import-meta-resolve"
8
8
  const { default: traverse } = babelTraverse,
9
9
  { default: generate } = babelGenerator
10
10
  async function preprocess(code, { uniqueID = "00000000000" } = {}) {
11
- assert(/^\w{11}$/.test(uniqueID), "src/processScript/preprocess.ts:23:36")
11
+ assert(/^\w{11}$/.test(uniqueID), "src/processScript/preprocess.ts:22:36")
12
12
  const sourceCode = code
13
13
  let lengthBefore, file, program
14
14
  do {
@@ -47,7 +47,7 @@ async function preprocess(code, { uniqueID = "00000000000" } = {}) {
47
47
  })
48
48
  break
49
49
  } catch (error_) {
50
- assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:67:42")
50
+ assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:66:42")
51
51
  error = error_
52
52
  }
53
53
  if ("BABEL_PARSER_SYNTAX_ERROR" != error.code || "PrivateInExpectedIn" != error.reasonCode) {
@@ -102,4 +102,4 @@ async function preprocess(code, { uniqueID = "00000000000" } = {}) {
102
102
  { code: "export default " + generate(file).code }
103
103
  : { code: generate(file).code }
104
104
  }
105
- export { preprocess as default, preprocess }
105
+ export { preprocess }
@@ -1,9 +1,11 @@
1
1
  import type { File } from "@babel/types";
2
- export type TransformOptions = {
2
+ import type { LaxPartial } from "@samual/lib";
3
+ export type TransformOptions = LaxPartial<{
3
4
  /** 11 a-z 0-9 characters */ uniqueID: string;
4
5
  /** the user going to be hosting this script (or set to `true` if not yet known) */ scriptUser: string | true;
5
- /** the name of this script (or set to `true` if not yet known) */ scriptName: string | true;
6
6
  seclevel: number;
7
+ }> & {
8
+ scriptName: string | true;
7
9
  };
8
10
  /** transform a given babel `File` to be hackmud compatible
9
11
  *
@@ -11,8 +13,7 @@ export type TransformOptions = {
11
13
  * @param file babel ast node representing a file containing preprocessed code
12
14
  * @param sourceCode the original untouched source code
13
15
  * @param options {@link TransformOptions details} */
14
- export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?: Partial<TransformOptions>): {
16
+ export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }: TransformOptions): {
15
17
  file: File;
16
18
  seclevel: number;
17
19
  };
18
- export default transform;