hackmud-script-manager 0.20.4-8b61cf2 → 0.20.4-8b994a4

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.
@@ -1,5 +1,6 @@
1
1
  import { readDirectoryWithStats } from "@samual/lib/readDirectoryWithStats"
2
2
  import { basename, resolve } from "path"
3
+ import * as PathPosix from "path/posix"
3
4
  async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
4
5
  const users = new Set()
5
6
  if (hackmudPath)
@@ -29,7 +30,7 @@ async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
29
30
  }
30
31
  })
31
32
  )
32
- sourceDirectory = resolve(sourceDirectory)
33
+ sourceDirectory = PathPosix.resolve(sourceDirectory)
33
34
  let o = ""
34
35
  for (const script of wildScripts) o += `type $${script}$ = typeof import("${sourceDirectory}/${script}").default\n`
35
36
  o += "\n"
package/index.d.ts CHANGED
@@ -10,4 +10,7 @@ export type Info = {
10
10
  users: string[];
11
11
  characterCount: number;
12
12
  error: Error | undefined;
13
+ warnings: {
14
+ message: string;
15
+ }[];
13
16
  };
package/index.js CHANGED
@@ -7,6 +7,7 @@ export { syncMacros } from "./syncMacros.js"
7
7
  export { watch } from "./watch.js"
8
8
  import "@samual/lib/readDirectoryWithStats"
9
9
  import "path"
10
+ import "path/posix"
10
11
  import "@babel/generator"
11
12
  import "@babel/parser"
12
13
  import "@babel/plugin-proposal-decorators"
@@ -26,6 +27,7 @@ import "@babel/plugin-transform-private-property-in-object"
26
27
  import "@babel/plugin-transform-unicode-sets-regex"
27
28
  import "@babel/traverse"
28
29
  import "@babel/types"
30
+ import "@rollup/plugin-alias"
29
31
  import "@rollup/plugin-babel"
30
32
  import "@rollup/plugin-commonjs"
31
33
  import "@rollup/plugin-json"
@@ -45,7 +47,7 @@ import "import-meta-resolve"
45
47
  import "./processScript/transform.js"
46
48
  import "@samual/lib/clearObject"
47
49
  import "@samual/lib/copyFilePersistent"
48
- import "@samual/lib/Cache"
50
+ import "@samual/lib/AutoMap"
49
51
  import "@samual/lib/writeFilePersistent"
50
52
  import "fs/promises"
51
53
  import "chokidar"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hackmud-script-manager",
3
- "version": "0.20.4-8b61cf2",
3
+ "version": "0.20.4-8b994a4",
4
4
  "description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
5
5
  "keywords": [
6
6
  "api",
@@ -31,50 +31,51 @@
31
31
  "url": "https://github.com/samualtnorman/hackmud-script-manager.git"
32
32
  },
33
33
  "dependencies": {
34
- "@babel/generator": "^7.24.4",
35
- "@babel/parser": "^7.24.4",
36
- "@babel/plugin-proposal-decorators": "^7.24.1",
37
- "@babel/plugin-proposal-destructuring-private": "^7.24.1",
38
- "@babel/plugin-proposal-do-expressions": "^7.24.1",
39
- "@babel/plugin-proposal-explicit-resource-management": "^7.24.1",
40
- "@babel/plugin-proposal-function-bind": "^7.24.1",
41
- "@babel/plugin-proposal-function-sent": "^7.24.1",
42
- "@babel/plugin-proposal-partial-application": "^7.24.1",
43
- "@babel/plugin-proposal-pipeline-operator": "^7.24.1",
44
- "@babel/plugin-proposal-record-and-tuple": "^7.24.1",
45
- "@babel/plugin-proposal-throw-expressions": "^7.24.1",
46
- "@babel/plugin-transform-class-properties": "^7.24.1",
47
- "@babel/plugin-transform-class-static-block": "^7.24.4",
48
- "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
49
- "@babel/plugin-transform-json-strings": "^7.24.1",
50
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
51
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
52
- "@babel/plugin-transform-numeric-separator": "^7.24.1",
53
- "@babel/plugin-transform-object-rest-spread": "^7.24.1",
54
- "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
55
- "@babel/plugin-transform-optional-chaining": "^7.24.1",
56
- "@babel/plugin-transform-private-property-in-object": "^7.24.1",
57
- "@babel/plugin-transform-typescript": "^7.24.4",
58
- "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
59
- "@babel/traverse": "^7.24.1",
60
- "@babel/types": "^7.24.0",
34
+ "@babel/generator": "^7.26.2",
35
+ "@babel/parser": "^7.26.2",
36
+ "@babel/plugin-proposal-decorators": "^7.25.9",
37
+ "@babel/plugin-proposal-destructuring-private": "^7.26.0",
38
+ "@babel/plugin-proposal-do-expressions": "^7.25.9",
39
+ "@babel/plugin-proposal-explicit-resource-management": "^7.25.9",
40
+ "@babel/plugin-proposal-function-bind": "^7.25.9",
41
+ "@babel/plugin-proposal-function-sent": "^7.25.9",
42
+ "@babel/plugin-proposal-partial-application": "^7.25.9",
43
+ "@babel/plugin-proposal-pipeline-operator": "^7.25.9",
44
+ "@babel/plugin-proposal-record-and-tuple": "^7.25.9",
45
+ "@babel/plugin-proposal-throw-expressions": "^7.25.9",
46
+ "@babel/plugin-transform-class-properties": "^7.25.9",
47
+ "@babel/plugin-transform-class-static-block": "^7.26.0",
48
+ "@babel/plugin-transform-exponentiation-operator": "^7.25.9",
49
+ "@babel/plugin-transform-json-strings": "^7.25.9",
50
+ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
51
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
52
+ "@babel/plugin-transform-numeric-separator": "^7.25.9",
53
+ "@babel/plugin-transform-object-rest-spread": "^7.25.9",
54
+ "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
55
+ "@babel/plugin-transform-optional-chaining": "^7.25.9",
56
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
57
+ "@babel/plugin-transform-typescript": "^7.25.9",
58
+ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
59
+ "@babel/traverse": "^7.25.9",
60
+ "@babel/types": "^7.26.0",
61
61
  "@bloomberg/record-tuple-polyfill": "^0.0.4",
62
+ "@rollup/plugin-alias": "^5.1.1",
62
63
  "@rollup/plugin-babel": "^6.0.4",
63
- "@rollup/plugin-commonjs": "^25.0.7",
64
+ "@rollup/plugin-commonjs": "^28.0.1",
64
65
  "@rollup/plugin-json": "^6.1.0",
65
- "@rollup/plugin-node-resolve": "^15.2.3",
66
- "@samual/lib": "0.11.0",
67
- "acorn": "^8.11.3",
66
+ "@rollup/plugin-node-resolve": "^15.3.0",
67
+ "@samual/lib": "^0.13.0",
68
+ "acorn": "^8.14.0",
68
69
  "chalk": "^5.3.0",
69
- "chokidar": "^3.6.0",
70
- "import-meta-resolve": "^4.0.0",
71
- "prettier": "^3.2.5",
70
+ "chokidar": "^4.0.1",
71
+ "import-meta-resolve": "^4.1.0",
72
+ "prettier": "^3.3.3",
72
73
  "proxy-polyfill": "^0.3.2",
73
- "rollup": "^4.16.4",
74
- "terser": "^5.30.4"
74
+ "rollup": "^4.27.4",
75
+ "terser": "^5.36.0"
75
76
  },
76
77
  "peerDependencies": {
77
- "typescript": "5.4.5"
78
+ "typescript": "^5.4.5"
78
79
  },
79
80
  "type": "module",
80
81
  "exports": {
@@ -16,16 +16,16 @@ export type ProcessOptions = LaxPartial<{
16
16
  * when left unset or set to `undefined`, automatically uses or doesn't use quine cheats based on character count
17
17
  */
18
18
  forceQuineCheats: boolean;
19
+ rootFolderPath: string;
19
20
  }> & {
20
21
  scriptName: string | true;
21
22
  };
22
23
  /** Minifies a given script
23
24
  * @param code JavaScript or TypeScript code
24
25
  * @param options {@link ProcessOptions details} */
25
- export declare function processScript(code: string, { minify: shouldMinify, uniqueId, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats }: ProcessOptions): Promise<{
26
+ export declare function processScript(code: string, { minify: shouldMinify, uniqueId, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats, rootFolderPath }: ProcessOptions): Promise<{
26
27
  script: string;
27
28
  warnings: {
28
29
  message: string;
29
- line: number;
30
30
  }[];
31
31
  }>;
@@ -17,12 +17,13 @@ import babelPluginTransformPrivatePropertyInObject from "@babel/plugin-transform
17
17
  import babelPluginTransformUnicodeSetsRegex from "@babel/plugin-transform-unicode-sets-regex"
18
18
  import babelTraverse from "@babel/traverse"
19
19
  import t from "@babel/types"
20
+ import rollupPluginAlias from "@rollup/plugin-alias"
20
21
  import { babel } from "@rollup/plugin-babel"
21
22
  import rollupPluginCommonJS from "@rollup/plugin-commonjs"
22
23
  import rollupPluginJSON from "@rollup/plugin-json"
23
24
  import rollupPluginNodeResolve from "@rollup/plugin-node-resolve"
24
25
  import { assert } from "@samual/lib/assert"
25
- import { resolve } from "path"
26
+ import { relative } from "path"
26
27
  import prettier from "prettier"
27
28
  import { rollup } from "rollup"
28
29
  import { supportedExtensions } from "../constants.js"
@@ -51,10 +52,11 @@ async function processScript(
51
52
  scriptName,
52
53
  filePath,
53
54
  mangleNames = !1,
54
- forceQuineCheats
55
+ forceQuineCheats,
56
+ rootFolderPath
55
57
  }
56
58
  ) {
57
- assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:77:36")
59
+ assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:81:36")
58
60
  const sourceCode = code
59
61
  let autocomplete, statedSeclevel
60
62
  const autocompleteMatch = /^function\s*\(.+\/\/(?<autocomplete>.+)/.exec(code)
@@ -115,7 +117,7 @@ async function processScript(
115
117
  }
116
118
  }
117
119
  }
118
- assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:158:36")
120
+ assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:162:36")
119
121
  const plugins = [
120
122
  [babelPluginProposalDecorators.default, { decoratorsBeforeExport: !0 }],
121
123
  [babelPluginTransformClassProperties.default],
@@ -135,7 +137,7 @@ async function processScript(
135
137
  ]
136
138
  let filePathResolved
137
139
  if (filePath) {
138
- filePathResolved = resolve(filePath)
140
+ filePathResolved = relative(".", filePath)
139
141
  if (filePath.endsWith(".ts"))
140
142
  plugins.push([
141
143
  (await import("@babel/plugin-transform-typescript")).default,
@@ -204,6 +206,7 @@ async function processScript(
204
206
  const bundle = await rollup({
205
207
  input: filePathResolved,
206
208
  plugins: [
209
+ rollupPluginJSON({ preferConst: !0 }),
207
210
  {
208
211
  name: "hackmud-script-manager",
209
212
  async transform(code, id) {
@@ -228,13 +231,13 @@ async function processScript(
228
231
  babel({ babelHelpers: "bundled", plugins, configFile: !1, extensions: supportedExtensions }),
229
232
  rollupPluginCommonJS(),
230
233
  rollupPluginNodeResolve({ extensions: supportedExtensions }),
231
- rollupPluginJSON()
234
+ !!rootFolderPath && rollupPluginAlias({ entries: [{ find: /^\//, replacement: rootFolderPath + "/" }] })
232
235
  ],
233
236
  treeshake: { moduleSideEffects: !1 }
234
237
  }),
235
238
  seclevelNames = ["NULLSEC", "LOWSEC", "MIDSEC", "HIGHSEC", "FULLSEC"]
236
239
  code = (await bundle.generate({})).output[0].code
237
- const { file, seclevel } = transform(parse(code, { sourceType: "module" }), sourceCode, {
240
+ const { file, seclevel, warnings } = transform(parse(code, { sourceType: "module" }), sourceCode, {
238
241
  uniqueId,
239
242
  scriptUser,
240
243
  scriptName
@@ -249,7 +252,7 @@ async function processScript(
249
252
  traverse(file, {
250
253
  MemberExpression({ node: memberExpression }) {
251
254
  if (!memberExpression.computed) {
252
- assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:321:60")
255
+ assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:326:60")
253
256
  if ("prototype" == memberExpression.property.name) {
254
257
  memberExpression.computed = !0
255
258
  memberExpression.property = t.stringLiteral("prototype")
@@ -279,7 +282,7 @@ async function processScript(
279
282
  break
280
283
  case "ObjectPattern":
281
284
  for (const property of lValue.properties) {
282
- assert("ObjectProperty" == property.type, "src/processScript/index.ts:351:51")
285
+ assert("ObjectProperty" == property.type, "src/processScript/index.ts:356:51")
283
286
  renameVariables(property.value)
284
287
  }
285
288
  break
@@ -328,6 +331,6 @@ async function processScript(
328
331
  throw Error(
329
332
  'you found a weird edge case where I wasn\'t able to replace illegal strings like "SC$", please report thx'
330
333
  )
331
- return { script: code, warnings: [] }
334
+ return { script: code, warnings }
332
335
  }
333
336
  export { minify, postprocess, preprocess, processScript, transform }
@@ -43,15 +43,6 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
43
43
  )
44
44
  }
45
45
  }
46
- const hashGReferencePaths = getReferencePathsToGlobal(`$${uniqueId}$GLOBAL$`, program)
47
- if (hashGReferencePaths.length > 3) {
48
- for (const path of hashGReferencePaths) path.replaceWith(t.identifier(`_${uniqueId}_G_`))
49
- mainFunctionPath.node.body.body.unshift(
50
- t.variableDeclaration("let", [
51
- t.variableDeclarator(t.identifier(`_${uniqueId}_G_`), t.identifier(`$${uniqueId}$GLOBAL$`))
52
- ])
53
- )
54
- }
55
46
  const jsonValues = []
56
47
  let scriptBeforeJSONValueReplacement,
57
48
  comment,
@@ -61,7 +52,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
61
52
  traverse(fileBeforeJSONValueReplacement, {
62
53
  MemberExpression({ node: memberExpression }) {
63
54
  if (!memberExpression.computed) {
64
- assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:127:60")
55
+ assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:115:60")
65
56
  if ("prototype" == memberExpression.property.name) {
66
57
  memberExpression.computed = !0
67
58
  memberExpression.property = t.identifier(`_${uniqueId}_PROTOTYPE_PROPERTY_`)
@@ -173,7 +164,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
173
164
  },
174
165
  MemberExpression({ node: memberExpression }) {
175
166
  if (!memberExpression.computed) {
176
- assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:261:62")
167
+ assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:249:62")
177
168
  if (!(memberExpression.property.name.length < 3)) {
178
169
  memberExpression.computed = !0
179
170
  memberExpression.property = t.stringLiteral(memberExpression.property.name)
@@ -247,7 +238,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
247
238
  })
248
239
  await Promise.all(promises)
249
240
  const functionDeclaration = file.program.body[0]
250
- assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:366:61")
241
+ assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:354:61")
251
242
  if (jsonValues.length) {
252
243
  hasComment = !0
253
244
  if (1 == jsonValues.length)
@@ -367,7 +358,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
367
358
  )
368
359
  }
369
360
  if (1 == forceQuineCheats) return code
370
- assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:497:43")
361
+ assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:485:43")
371
362
  return (
372
363
  countHackmudCharacters(scriptBeforeJSONValueReplacement) <=
373
364
  countHackmudCharacters(code) + Number(hasComment)
@@ -383,7 +374,7 @@ function parseObjectExpression(node, o) {
383
374
  "Identifier" == property.key.type ||
384
375
  "NumericLiteral" == property.key.type ||
385
376
  "StringLiteral" == property.key.type,
386
- "src/processScript/minify.ts:519:4"
377
+ "src/processScript/minify.ts:507:4"
387
378
  )
388
379
  if ("ArrayExpression" == property.value.type) {
389
380
  const childArray = []
@@ -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:22:36")
11
+ assert(/^\w{11}$/.test(uniqueId), "src/processScript/preprocess.ts:23: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:66:42")
50
+ assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:67:42")
51
51
  error = error_
52
52
  }
53
53
  if ("BABEL_PARSER_SYNTAX_ERROR" != error.code || "PrivateInExpectedIn" != error.reasonCode) {
@@ -98,8 +98,10 @@ async function preprocess(code, { uniqueId = "00000000000" } = {}) {
98
98
  t.stringLiteral(resolve("proxy-polyfill/src/proxy.js", import.meta.url).slice(7))
99
99
  )
100
100
  )
101
- return 1 == program.node.body.length && "FunctionDeclaration" == program.node.body[0].type ?
102
- { code: "export default " + generate(file).code }
103
- : { code: generate(file).code }
101
+ if (1 == program.node.body.length && "FunctionDeclaration" == program.node.body[0].type)
102
+ throw Error(
103
+ "Scripts that only contain a single function declaration are no longer supported.\nPrefix the function declaration with `export default`."
104
+ )
105
+ return { code: generate(file).code }
104
106
  }
105
107
  export { preprocess }
@@ -16,4 +16,7 @@ export type TransformOptions = LaxPartial<{
16
16
  export declare function transform(file: File, sourceCode: string, { uniqueId, scriptUser, scriptName, seclevel }: TransformOptions): {
17
17
  file: File;
18
18
  seclevel: number;
19
+ warnings: {
20
+ message: string;
21
+ }[];
19
22
  };