hackmud-script-manager 0.19.1-7a27b63 → 0.19.1-8719c7d
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 +1 -1
- package/bin/hsm.js +2 -2
- package/package.json +1 -1
- package/processScript/index.js +1 -1
- package/{src/processScript → processScript}/transform.d.ts +2 -1
- package/processScript/transform.js +55 -28
- /package/{src/bin → bin}/hsm.d.ts +0 -0
- /package/{src/constants.d.ts → constants.d.ts} +0 -0
- /package/{src/generateTypeDeclaration.d.ts → generateTypeDeclaration.d.ts} +0 -0
- /package/{src/index.d.ts → index.d.ts} +0 -0
- /package/{src/processScript → processScript}/index.d.ts +0 -0
- /package/{src/processScript → processScript}/minify.d.ts +0 -0
- /package/{src/processScript → processScript}/postprocess.d.ts +0 -0
- /package/{src/processScript → processScript}/preprocess.d.ts +0 -0
- /package/{src/processScript → processScript}/shared.d.ts +0 -0
- /package/{src/pull.d.ts → pull.d.ts} +0 -0
- /package/{src/push.d.ts → push.d.ts} +0 -0
- /package/{src/syncMacros.d.ts → syncMacros.d.ts} +0 -0
- /package/{src/watch.d.ts → watch.d.ts} +0 -0
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
|
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
@@ -12,7 +12,7 @@ import { pull } from "../pull.js"
|
|
12
12
|
import { syncMacros } from "../syncMacros.js"
|
13
13
|
import "@samual/lib/readDirectoryWithStats"
|
14
14
|
import "@samual/lib/copyFilePersistent"
|
15
|
-
const version = "0.19.1-
|
15
|
+
const version = "0.19.1-8719c7d",
|
16
16
|
options = new Map(),
|
17
17
|
commands = [],
|
18
18
|
userColours = new Cache(user => {
|
@@ -280,7 +280,7 @@ switch (commands[0]) {
|
|
280
280
|
scriptUser =
|
281
281
|
"scripts" == basename(resolve(target, "..")) && "hackmud" == basename(resolve(target, "../../..")) ?
|
282
282
|
basename(resolve(target, "../.."))
|
283
|
-
:
|
283
|
+
: void 0,
|
284
284
|
optionsHasNoMinify = options.has("no-minify")
|
285
285
|
if ((optionsHasNoMinify || options.has("skip-minify")) && options.has("mangle-names")) {
|
286
286
|
logError(
|
package/package.json
CHANGED
package/processScript/index.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import type { File } from "@babel/types";
|
2
|
+
import type { LaxPartial } from "@samual/lib";
|
2
3
|
export type TransformOptions = {
|
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;
|
@@ -11,7 +12,7 @@ export type TransformOptions = {
|
|
11
12
|
* @param file babel ast node representing a file containing preprocessed code
|
12
13
|
* @param sourceCode the original untouched source code
|
13
14
|
* @param options {@link TransformOptions details} */
|
14
|
-
export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?:
|
15
|
+
export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?: LaxPartial<TransformOptions>): {
|
15
16
|
file: File;
|
16
17
|
seclevel: number;
|
17
18
|
};
|
@@ -24,7 +24,7 @@ const { default: traverse } = babelTraverse,
|
|
24
24
|
function transform(
|
25
25
|
file,
|
26
26
|
sourceCode,
|
27
|
-
{ uniqueID = "00000000000", scriptUser
|
27
|
+
{ uniqueID = "00000000000", scriptUser, scriptName = "UNKNOWN", seclevel = 4 } = {}
|
28
28
|
) {
|
29
29
|
const topFunctionName = `_${uniqueID}_SCRIPT_`,
|
30
30
|
exports = new Map(),
|
@@ -42,9 +42,14 @@ function transform(
|
|
42
42
|
if (program.scope.hasGlobal("_BUILD_DATE"))
|
43
43
|
for (const referencePath of getReferencePathsToGlobal("_BUILD_DATE", program))
|
44
44
|
referencePath.replaceWith(t.numericLiteral(Date.now()))
|
45
|
+
let uniqueIdScriptUserNeeded = !1
|
45
46
|
if (program.scope.hasGlobal("_SCRIPT_USER"))
|
46
47
|
for (const referencePath of getReferencePathsToGlobal("_SCRIPT_USER", program))
|
47
|
-
|
48
|
+
if (null == scriptUser) {
|
49
|
+
uniqueIdScriptUserNeeded = !0
|
50
|
+
referencePath.replaceWith(t.identifier(`_${uniqueID}_SCRIPT_USER_`))
|
51
|
+
} else
|
52
|
+
referencePath.replaceWith(t.stringLiteral(1 == scriptUser ? `$${uniqueID}$SCRIPT_USER$` : scriptUser))
|
48
53
|
if (program.scope.hasGlobal("_SCRIPT_NAME"))
|
49
54
|
for (const referencePath of getReferencePathsToGlobal("_SCRIPT_NAME", program))
|
50
55
|
referencePath.replaceWith(t.stringLiteral(1 == scriptName ? `$${uniqueID}$SCRIPT_NAME$` : scriptName))
|
@@ -64,30 +69,30 @@ function transform(
|
|
64
69
|
const referencePath = FunctionReferencePaths[0]
|
65
70
|
assert(
|
66
71
|
"MemberExpression" == referencePath.parent.type,
|
67
|
-
"src/processScript/transform.ts:
|
72
|
+
"src/processScript/transform.ts:99:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
68
73
|
)
|
69
74
|
assert(
|
70
75
|
"Identifier" == referencePath.parent.property.type,
|
71
|
-
"src/processScript/transform.ts:
|
76
|
+
"src/processScript/transform.ts:104:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
72
77
|
)
|
73
78
|
assert(
|
74
79
|
"prototype" == referencePath.parent.property.name,
|
75
|
-
"src/processScript/transform.ts:
|
80
|
+
"src/processScript/transform.ts:109:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
76
81
|
)
|
77
82
|
referencePath.parentPath.replaceWith(createGetFunctionPrototypeNode())
|
78
83
|
} else {
|
79
84
|
for (const referencePath of FunctionReferencePaths) {
|
80
85
|
assert(
|
81
86
|
"MemberExpression" == referencePath.parent.type,
|
82
|
-
"src/processScript/transform.ts:
|
87
|
+
"src/processScript/transform.ts:117:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
83
88
|
)
|
84
89
|
assert(
|
85
90
|
"Identifier" == referencePath.parent.property.type,
|
86
|
-
"src/processScript/transform.ts:
|
91
|
+
"src/processScript/transform.ts:122:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
87
92
|
)
|
88
93
|
assert(
|
89
94
|
"prototype" == referencePath.parent.property.name,
|
90
|
-
"src/processScript/transform.ts:
|
95
|
+
"src/processScript/transform.ts:127:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
|
91
96
|
)
|
92
97
|
functionDotPrototypeIsReferencedMultipleTimes = !0
|
93
98
|
referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_FUNCTION_DOT_PROTOTYPE_`))
|
@@ -123,12 +128,12 @@ function transform(
|
|
123
128
|
const neededDbMethodLets = new Set()
|
124
129
|
if (program.scope.hasGlobal("$db"))
|
125
130
|
for (const referencePath of getReferencePathsToGlobal("$db", program)) {
|
126
|
-
assert("MemberExpression" == referencePath.parentPath.node.type, "src/processScript/transform.ts:
|
127
|
-
assert("Identifier" == referencePath.parentPath.node.property.type, "src/processScript/transform.ts:
|
131
|
+
assert("MemberExpression" == referencePath.parentPath.node.type, "src/processScript/transform.ts:181:69")
|
132
|
+
assert("Identifier" == referencePath.parentPath.node.property.type, "src/processScript/transform.ts:182:72")
|
128
133
|
const databaseOpMethodName = referencePath.parentPath.node.property.name
|
129
134
|
assert(
|
130
135
|
validDBMethods.includes(databaseOpMethodName),
|
131
|
-
`src/processScript/transform.ts:
|
136
|
+
`src/processScript/transform.ts:188:8 invalid db method "${databaseOpMethodName}", valid db methods are "${validDBMethods.join('", "')}"`
|
132
137
|
)
|
133
138
|
if ("CallExpression" == referencePath.parentPath.parentPath?.type)
|
134
139
|
referencePath.parentPath.replaceWith(t.identifier(`$${uniqueID}$DB$${databaseOpMethodName}$`))
|
@@ -161,7 +166,7 @@ function transform(
|
|
161
166
|
if (program.scope.hasGlobal("Object"))
|
162
167
|
for (const referencePath of getReferencePathsToGlobal("Object", program))
|
163
168
|
if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
|
164
|
-
assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:
|
169
|
+
assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:235:64")
|
165
170
|
if ("getPrototypeOf" == referencePath.parent.property.name) {
|
166
171
|
referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_GET_PROTOTYPE_OF_`))
|
167
172
|
needGetPrototypeOf = !0
|
@@ -171,7 +176,7 @@ function transform(
|
|
171
176
|
if (program.scope.hasGlobal("console"))
|
172
177
|
for (const referencePath of getReferencePathsToGlobal("console", program))
|
173
178
|
if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
|
174
|
-
assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:
|
179
|
+
assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:250:64")
|
175
180
|
referencePath.parentPath.replaceWith(
|
176
181
|
t.identifier(`_${uniqueID}_CONSOLE_METHOD_${referencePath.parent.property.name}_`)
|
177
182
|
)
|
@@ -179,13 +184,13 @@ function transform(
|
|
179
184
|
}
|
180
185
|
const lastStatement = program.node.body.at(-1)
|
181
186
|
let exportDefaultName
|
182
|
-
assert(lastStatement, "src/processScript/transform.ts:
|
187
|
+
assert(lastStatement, "src/processScript/transform.ts:264:27 program is empty")
|
183
188
|
if ("ExportNamedDeclaration" == lastStatement.type) {
|
184
189
|
program.node.body.pop()
|
185
190
|
for (const specifier of lastStatement.specifiers) {
|
186
191
|
assert(
|
187
192
|
"ExportSpecifier" == specifier.type,
|
188
|
-
`src/processScript/transform.ts:
|
193
|
+
`src/processScript/transform.ts:270:51 ${specifier.type} is currently unsupported`
|
189
194
|
)
|
190
195
|
const exportedName =
|
191
196
|
"Identifier" == specifier.exported.type ? specifier.exported.name : specifier.exported.value
|
@@ -261,6 +266,28 @@ function transform(
|
|
261
266
|
[t.identifier("context"), t.identifier("args")],
|
262
267
|
t.blockStatement([])
|
263
268
|
)
|
269
|
+
if (uniqueIdScriptUserNeeded) {
|
270
|
+
const mainFunctionParams = mainFunction.params
|
271
|
+
mainFunction.params = [t.restElement(t.identifier(`_${uniqueID}_PARAMS_`))]
|
272
|
+
mainFunction.body.body.unshift(
|
273
|
+
t.variableDeclaration("let", [
|
274
|
+
t.variableDeclarator(t.arrayPattern(mainFunctionParams), t.identifier(`_${uniqueID}_PARAMS_`)),
|
275
|
+
t.variableDeclarator(
|
276
|
+
t.arrayPattern([t.identifier(`_${uniqueID}_SCRIPT_USER_`)]),
|
277
|
+
t.callExpression(
|
278
|
+
t.memberExpression(
|
279
|
+
t.memberExpression(
|
280
|
+
t.memberExpression(t.identifier(`_${uniqueID}_PARAMS_`), t.numericLiteral(0), !0),
|
281
|
+
t.identifier("this_script")
|
282
|
+
),
|
283
|
+
t.identifier("split")
|
284
|
+
),
|
285
|
+
[t.stringLiteral(".")]
|
286
|
+
)
|
287
|
+
)
|
288
|
+
])
|
289
|
+
)
|
290
|
+
}
|
264
291
|
program.node.body = [mainFunction]
|
265
292
|
if (globalBlock.body.length) {
|
266
293
|
;(exports.size || liveExports.size) &&
|
@@ -286,11 +313,11 @@ function transform(
|
|
286
313
|
let hoistedGlobalBlockFunctions = 0
|
287
314
|
for (const [globalBlockIndex, globalBlockStatement] of [...globalBlock.body.entries()].reverse())
|
288
315
|
if ("VariableDeclaration" == globalBlockStatement.type) {
|
289
|
-
assert(1 == globalBlockStatement.declarations.length, "src/processScript/transform.ts:
|
316
|
+
assert(1 == globalBlockStatement.declarations.length, "src/processScript/transform.ts:404:59")
|
290
317
|
const declarator = globalBlockStatement.declarations[0]
|
291
318
|
assert(
|
292
319
|
"Identifier" == declarator.id.type,
|
293
|
-
`src/processScript/transform.ts:
|
320
|
+
`src/processScript/transform.ts:408:51 declarator.id.type was "${declarator.id.type}"`
|
294
321
|
)
|
295
322
|
program.scope.crawl()
|
296
323
|
if (program.scope.hasGlobal(declarator.id.name)) {
|
@@ -305,9 +332,9 @@ function transform(
|
|
305
332
|
Object.keys(program.scope.globals).some(global => globalBlockVariables.has(global))
|
306
333
|
) {
|
307
334
|
const binding = program.scope.getBinding(declarator.id.name)
|
308
|
-
assert(binding, "src/processScript/transform.ts:
|
335
|
+
assert(binding, "src/processScript/transform.ts:427:23")
|
309
336
|
for (const referencePath of binding.referencePaths) {
|
310
|
-
assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:
|
337
|
+
assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:430:56")
|
311
338
|
referencePath.replaceWith(
|
312
339
|
t.memberExpression(
|
313
340
|
t.identifier(`$${uniqueID}$GLOBAL$`),
|
@@ -351,16 +378,16 @@ function transform(
|
|
351
378
|
} else globalBlockVariables.add(declarator.id.name)
|
352
379
|
} else if ("ClassDeclaration" == globalBlockStatement.type) {
|
353
380
|
program.scope.crawl()
|
354
|
-
assert(globalBlockStatement.id, "src/processScript/transform.ts:
|
381
|
+
assert(globalBlockStatement.id, "src/processScript/transform.ts:481:37")
|
355
382
|
if (program.scope.hasGlobal(globalBlockStatement.id.name)) {
|
356
383
|
globalBlock.body.splice(globalBlockIndex, 1)
|
357
384
|
const [globalBlockPath] = program.unshiftContainer("body", globalBlock),
|
358
385
|
[globalBlockStatementPath] = program.unshiftContainer("body", globalBlockStatement)
|
359
386
|
program.scope.crawl()
|
360
387
|
const binding = program.scope.getBinding(globalBlockStatement.id.name)
|
361
|
-
assert(binding, "src/processScript/transform.ts:
|
388
|
+
assert(binding, "src/processScript/transform.ts:493:22")
|
362
389
|
for (const referencePath of binding.referencePaths) {
|
363
|
-
assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:
|
390
|
+
assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:496:55")
|
364
391
|
referencePath.replaceWith(
|
365
392
|
t.memberExpression(
|
366
393
|
t.identifier(`$${uniqueID}$GLOBAL$`),
|
@@ -527,7 +554,7 @@ function transform(
|
|
527
554
|
}
|
528
555
|
},
|
529
556
|
ClassBody({ node: classBody, scope, parent }) {
|
530
|
-
assert(t.isClass(parent), "src/processScript/transform.ts:
|
557
|
+
assert(t.isClass(parent), "src/processScript/transform.ts:663:30")
|
531
558
|
let thisIsReferenced = !1
|
532
559
|
for (const classMethod of classBody.body) {
|
533
560
|
if ("ClassMethod" != classMethod.type) continue
|
@@ -633,23 +660,23 @@ function transform(
|
|
633
660
|
}
|
634
661
|
function processFakeSubscriptObject(fakeSubscriptObjectName) {
|
635
662
|
for (const referencePath of getReferencePathsToGlobal(fakeSubscriptObjectName, program)) {
|
636
|
-
assert("MemberExpression" == referencePath.parent.type, "src/processScript/transform.ts:
|
663
|
+
assert("MemberExpression" == referencePath.parent.type, "src/processScript/transform.ts:777:60")
|
637
664
|
assert("Identifier" == referencePath.parent.property.type)
|
638
665
|
assert(
|
639
666
|
"MemberExpression" == referencePath.parentPath.parentPath?.node.type,
|
640
|
-
"src/processScript/transform.ts:
|
667
|
+
"src/processScript/transform.ts:779:81"
|
641
668
|
)
|
642
669
|
assert(
|
643
670
|
"Identifier" == referencePath.parentPath.parentPath.node.property.type,
|
644
|
-
"src/processScript/transform.ts:
|
671
|
+
"src/processScript/transform.ts:780:83"
|
645
672
|
)
|
646
673
|
assert(
|
647
674
|
/^[_a-z][\d_a-z]{0,24}$/.test(referencePath.parent.property.name),
|
648
|
-
`src/processScript/transform.ts:
|
675
|
+
`src/processScript/transform.ts:784:8 invalid user "${referencePath.parent.property.name}" in subscript`
|
649
676
|
)
|
650
677
|
assert(
|
651
678
|
/^[_a-z][\d_a-z]{0,24}$/.test(referencePath.parentPath.parentPath.node.property.name),
|
652
|
-
`src/processScript/transform.ts:
|
679
|
+
`src/processScript/transform.ts:789:8 invalid script name "${referencePath.parentPath.parentPath.node.property.name}" in subscript`
|
653
680
|
)
|
654
681
|
if ("CallExpression" == referencePath.parentPath.parentPath.parentPath?.type)
|
655
682
|
referencePath.parentPath.parentPath.replaceWith(
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|