hackmud-script-manager 0.20.4-8b61cf2 → 0.20.4-9181c22

Sign up to get free protection for your applications and to get access to all the features.
@@ -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-9181c22",
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,
@@ -201,9 +203,11 @@ async function processScript(
201
203
  [babelPluginProposalRecordAndTuple.default, { syntaxType: "hash", importPolyfill: !0 }]
202
204
  )
203
205
  }
206
+ console.debug("src/processScript/index.ts:256:16", supportedExtensions)
204
207
  const bundle = await rollup({
205
208
  input: filePathResolved,
206
209
  plugins: [
210
+ rollupPluginJSON({ preferConst: !0 }),
207
211
  {
208
212
  name: "hackmud-script-manager",
209
213
  async transform(code, id) {
@@ -228,13 +232,13 @@ async function processScript(
228
232
  babel({ babelHelpers: "bundled", plugins, configFile: !1, extensions: supportedExtensions }),
229
233
  rollupPluginCommonJS(),
230
234
  rollupPluginNodeResolve({ extensions: supportedExtensions }),
231
- rollupPluginJSON()
235
+ !!rootFolderPath && rollupPluginAlias({ entries: [{ find: /^\//, replacement: rootFolderPath + "/" }] })
232
236
  ],
233
237
  treeshake: { moduleSideEffects: !1 }
234
238
  }),
235
239
  seclevelNames = ["NULLSEC", "LOWSEC", "MIDSEC", "HIGHSEC", "FULLSEC"]
236
240
  code = (await bundle.generate({})).output[0].code
237
- const { file, seclevel } = transform(parse(code, { sourceType: "module" }), sourceCode, {
241
+ const { file, seclevel, warnings } = transform(parse(code, { sourceType: "module" }), sourceCode, {
238
242
  uniqueId,
239
243
  scriptUser,
240
244
  scriptName
@@ -249,7 +253,7 @@ async function processScript(
249
253
  traverse(file, {
250
254
  MemberExpression({ node: memberExpression }) {
251
255
  if (!memberExpression.computed) {
252
- assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:321:60")
256
+ assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:328:60")
253
257
  if ("prototype" == memberExpression.property.name) {
254
258
  memberExpression.computed = !0
255
259
  memberExpression.property = t.stringLiteral("prototype")
@@ -279,7 +283,7 @@ async function processScript(
279
283
  break
280
284
  case "ObjectPattern":
281
285
  for (const property of lValue.properties) {
282
- assert("ObjectProperty" == property.type, "src/processScript/index.ts:351:51")
286
+ assert("ObjectProperty" == property.type, "src/processScript/index.ts:358:51")
283
287
  renameVariables(property.value)
284
288
  }
285
289
  break
@@ -328,6 +332,6 @@ async function processScript(
328
332
  throw Error(
329
333
  'you found a weird edge case where I wasn\'t able to replace illegal strings like "SC$", please report thx'
330
334
  )
331
- return { script: code, warnings: [] }
335
+ return { script: code, warnings }
332
336
  }
333
337
  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 = []
@@ -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
  };