hackmud-script-manager 0.21.1-7aac667 → 0.21.1-8072045
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 +46 -38
- package/bin/hsm.js +252 -246
- package/env.d.ts +302 -245
- package/generateTypeDeclaration.js +24 -23
- package/index.js +2 -3
- package/package.json +26 -25
- package/processScript/index.d.ts +12 -9
- package/processScript/index.js +94 -72
- package/processScript/minify.d.ts +11 -8
- package/processScript/minify.js +10 -10
- package/processScript/preprocess.d.ts +4 -2
- package/processScript/preprocess.js +7 -7
- package/processScript/transform.d.ts +8 -6
- package/processScript/transform.js +90 -23
- package/pull.d.ts +6 -4
- package/pull.js +1 -1
- package/push.d.ts +23 -18
- package/push.js +6 -6
- package/syncMacros.js +14 -15
- package/watch.d.ts +11 -7
- package/watch.js +6 -7
@@ -1,6 +1,5 @@
|
|
1
|
-
import { readDirectoryWithStats } from "@samual/lib/readDirectoryWithStats"
|
2
1
|
import { basename, resolve } from "path"
|
3
|
-
import
|
2
|
+
import { readDirectoryWithStats } from "@samual/lib/readDirectoryWithStats"
|
4
3
|
async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
|
5
4
|
const users = new Set()
|
6
5
|
if (hackmudPath)
|
@@ -11,33 +10,35 @@ async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
|
|
11
10
|
allScripts = {},
|
12
11
|
allAnyScripts = {}
|
13
12
|
await Promise.all(
|
14
|
-
(await readDirectoryWithStats(sourceDirectory))
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
(await readDirectoryWithStats(sourceDirectory))
|
14
|
+
.filter(({ stats, name }) => !stats.isDirectory() || /^[a-z_][a-z\d_]{0,24}$/.test(name))
|
15
|
+
.map(async ({ stats, name }) => {
|
16
|
+
if (stats.isFile())
|
17
|
+
name.endsWith(".ts")
|
18
|
+
? name.endsWith(".d.ts") || wildScripts.push(basename(name, ".ts"))
|
19
|
+
: name.endsWith(".js") && wildAnyScripts.push(basename(name, ".js"))
|
20
|
+
else if (stats.isDirectory()) {
|
21
|
+
const scripts = [],
|
22
|
+
anyScripts = []
|
23
|
+
allScripts[name] = scripts
|
24
|
+
allAnyScripts[name] = anyScripts
|
25
|
+
users.add(name)
|
26
|
+
for (const child of await readDirectoryWithStats(resolve(sourceDirectory, name)))
|
27
|
+
child.stats.isFile() &&
|
28
|
+
(child.name.endsWith(".ts")
|
29
|
+
? name.endsWith(".d.ts") || scripts.push(basename(child.name, ".ts"))
|
30
|
+
: child.name.endsWith(".js") && anyScripts.push(basename(child.name, ".js")))
|
31
|
+
}
|
32
|
+
})
|
32
33
|
)
|
33
|
-
sourceDirectory = PathPosix.resolve(sourceDirectory)
|
34
34
|
let o = ""
|
35
|
-
for (const script of wildScripts)
|
35
|
+
for (const script of wildScripts)
|
36
|
+
o += `type $${script}$ = typeof import(${JSON.stringify(resolve(sourceDirectory, script))}).default\n`
|
36
37
|
o += "\n"
|
37
38
|
for (const user in allScripts) {
|
38
39
|
const scripts = allScripts[user]
|
39
40
|
for (const script of scripts)
|
40
|
-
o += `type $${user}$${script}$ = typeof import(
|
41
|
+
o += `type $${user}$${script}$ = typeof import(${JSON.stringify(resolve(sourceDirectory, user, script))}).default\n`
|
41
42
|
}
|
42
43
|
o +=
|
43
44
|
"\ntype ArrayRemoveFirst<A> = A extends [ infer FirstItem, ...infer Rest ] ? Rest : never\n\ntype Subscript<T extends (...args: any) => any> =\n\t(...args: ArrayRemoveFirst<Parameters<T>>) => ReturnType<T> | ScriptFailure\n\ntype WildFullsec = Record<string, () => ScriptFailure> & {\n"
|
package/index.js
CHANGED
@@ -5,9 +5,8 @@ export { pull } from "./pull.js"
|
|
5
5
|
export { push } from "./push.js"
|
6
6
|
export { syncMacros } from "./syncMacros.js"
|
7
7
|
export { watch } from "./watch.js"
|
8
|
-
import "@samual/lib/readDirectoryWithStats"
|
9
8
|
import "path"
|
10
|
-
import "
|
9
|
+
import "@samual/lib/readDirectoryWithStats"
|
11
10
|
import "@babel/generator"
|
12
11
|
import "@babel/parser"
|
13
12
|
import "@babel/plugin-proposal-decorators"
|
@@ -47,7 +46,7 @@ import "import-meta-resolve"
|
|
47
46
|
import "./processScript/transform.js"
|
48
47
|
import "@samual/lib/clearObject"
|
49
48
|
import "@samual/lib/copyFilePersistent"
|
49
|
+
import "fs/promises"
|
50
50
|
import "@samual/lib/AutoMap"
|
51
51
|
import "@samual/lib/writeFilePersistent"
|
52
|
-
import "fs/promises"
|
53
52
|
import "chokidar"
|
package/package.json
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
{
|
2
2
|
"name": "hackmud-script-manager",
|
3
|
-
"
|
3
|
+
"type": "module",
|
4
|
+
"version": "0.21.1-8072045",
|
4
5
|
"description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
|
6
|
+
"author": "Samual Norman <me@samual.uk> (https://samual.uk/)",
|
7
|
+
"contributors": [
|
8
|
+
"Daniel Swann (https://github.com/danswann)",
|
9
|
+
"Longboyy",
|
10
|
+
"Helloman892",
|
11
|
+
"Sarah Klocke (https://sarahisweird.dev/)"
|
12
|
+
],
|
13
|
+
"license": "MIT",
|
14
|
+
"homepage": "https://github.com/samualtnorman/hackmud-script-manager#readme",
|
15
|
+
"repository": {
|
16
|
+
"type": "git",
|
17
|
+
"url": "https://github.com/samualtnorman/hackmud-script-manager.git"
|
18
|
+
},
|
19
|
+
"bugs": "https://github.com/samualtnorman/hackmud-script-manager/issues",
|
5
20
|
"keywords": [
|
6
21
|
"api",
|
7
22
|
"command-line",
|
@@ -17,19 +32,17 @@
|
|
17
32
|
"golf",
|
18
33
|
"golfer"
|
19
34
|
],
|
20
|
-
"
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
"Daniel Swann (https://github.com/danswann)",
|
26
|
-
"Longboyy",
|
27
|
-
"Helloman892"
|
28
|
-
],
|
35
|
+
"exports": {
|
36
|
+
".": "./index.js",
|
37
|
+
"./*": "./*.js",
|
38
|
+
"./*.js": "./*.js"
|
39
|
+
},
|
29
40
|
"main": "index.js",
|
30
|
-
"
|
31
|
-
"
|
32
|
-
|
41
|
+
"bin": {
|
42
|
+
"hsm": "bin/hsm.js"
|
43
|
+
},
|
44
|
+
"peerDependencies": {
|
45
|
+
"typescript": "^5.4.5"
|
33
46
|
},
|
34
47
|
"dependencies": {
|
35
48
|
"@babel/generator": "^7.26.2",
|
@@ -75,18 +88,6 @@
|
|
75
88
|
"rollup": "^4.27.4",
|
76
89
|
"terser": "^5.36.0"
|
77
90
|
},
|
78
|
-
"peerDependencies": {
|
79
|
-
"typescript": "^5.4.5"
|
80
|
-
},
|
81
|
-
"type": "module",
|
82
|
-
"exports": {
|
83
|
-
".": "./index.js",
|
84
|
-
"./*": "./*.js",
|
85
|
-
"./*.js": "./*.js"
|
86
|
-
},
|
87
|
-
"bin": {
|
88
|
-
"hsm": "bin/hsm.js"
|
89
|
-
},
|
90
91
|
"engines": {
|
91
92
|
"node": "^18 || >=20"
|
92
93
|
}
|
package/processScript/index.d.ts
CHANGED
@@ -9,20 +9,23 @@ export type ProcessOptions = LaxPartial<{
|
|
9
9
|
/** the user going to be hosting this script (or set to `true` if not yet known) */ scriptUser: string | true;
|
10
10
|
filePath: string;
|
11
11
|
/** whether to mangle function and class names (defaults to `false`) */ mangleNames: boolean;
|
12
|
-
/**
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
/**
|
13
|
+
* when set to `true` forces use of quine cheats
|
14
|
+
*
|
15
|
+
* when set to `false` forces quine cheats not to be used
|
16
|
+
*
|
17
|
+
* when left unset or set to `undefined`, automatically uses or doesn't use quine cheats based on character count
|
18
|
+
*/
|
18
19
|
forceQuineCheats: boolean;
|
19
20
|
rootFolderPath: string;
|
20
21
|
}> & {
|
21
22
|
scriptName: string | true;
|
22
23
|
};
|
23
|
-
/**
|
24
|
-
|
25
|
-
|
24
|
+
/**
|
25
|
+
* Minifies a given script
|
26
|
+
* @param code JavaScript or TypeScript code
|
27
|
+
* @param options {@link ProcessOptions details}
|
28
|
+
*/
|
26
29
|
export declare function processScript(code: string, { minify: shouldMinify, uniqueId, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats, rootFolderPath }: ProcessOptions): Promise<{
|
27
30
|
script: string;
|
28
31
|
warnings: {
|
package/processScript/index.js
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
-
import
|
1
|
+
import { relative, isAbsolute, sep } from "path"
|
2
|
+
import f32fhtc0ktfq84afkvak6xwp from "@babel/generator"
|
2
3
|
import { parse } from "@babel/parser"
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import
|
11
|
-
import
|
12
|
-
import
|
13
|
-
import
|
14
|
-
import
|
15
|
-
import
|
16
|
-
import
|
17
|
-
import
|
18
|
-
import
|
4
|
+
import jt6w4z2lvmfkblngexw9l9wg from "@babel/plugin-proposal-decorators"
|
5
|
+
import zcaqhzusgvsoi2gishyb72to from "@babel/plugin-proposal-destructuring-private"
|
6
|
+
import xes6d3s5rum7xj224qugy7on from "@babel/plugin-proposal-explicit-resource-management"
|
7
|
+
import dd0rqe9346tamfbxyvddl4yj from "@babel/plugin-transform-class-properties"
|
8
|
+
import wx29ry6muzcjh9n9g62r95gu from "@babel/plugin-transform-class-static-block"
|
9
|
+
import qcwwih7yuelcgp2zsloqnjr4 from "@babel/plugin-transform-exponentiation-operator"
|
10
|
+
import ez19e21mz73mll9wxfykyw07 from "@babel/plugin-transform-json-strings"
|
11
|
+
import vd7myomkrcmcfpm93nrx9kkc from "@babel/plugin-transform-logical-assignment-operators"
|
12
|
+
import mw53z57ogk4k0qxaulqs7hur from "@babel/plugin-transform-nullish-coalescing-operator"
|
13
|
+
import oox83tsy1y6a31sqju1hrmsx from "@babel/plugin-transform-numeric-separator"
|
14
|
+
import b8fc1ommbmr91idzubf822m5 from "@babel/plugin-transform-object-rest-spread"
|
15
|
+
import txofwbtd4i8fitzwb4zvrj3e from "@babel/plugin-transform-optional-catch-binding"
|
16
|
+
import q40h63iq1x13ej9z1p5o7nz7 from "@babel/plugin-transform-optional-chaining"
|
17
|
+
import pztmuxbkqlwf2wb0pt40zy6w from "@babel/plugin-transform-private-property-in-object"
|
18
|
+
import aic8ut1pgdh3ic5p295ge7y4 from "@babel/plugin-transform-unicode-sets-regex"
|
19
|
+
import bllgrfz6aotgd3ezg3mw89jw from "@babel/traverse"
|
19
20
|
import t from "@babel/types"
|
20
21
|
import rollupPluginAlias from "@rollup/plugin-alias"
|
21
22
|
import { babel } from "@rollup/plugin-babel"
|
@@ -23,7 +24,6 @@ import rollupPluginCommonJS from "@rollup/plugin-commonjs"
|
|
23
24
|
import rollupPluginJSON from "@rollup/plugin-json"
|
24
25
|
import rollupPluginNodeResolve from "@rollup/plugin-node-resolve"
|
25
26
|
import { assert } from "@samual/lib/assert"
|
26
|
-
import { relative } from "path"
|
27
27
|
import prettier from "prettier"
|
28
28
|
import { rollup } from "rollup"
|
29
29
|
import { supportedExtensions } from "../constants.js"
|
@@ -38,9 +38,24 @@ import "acorn"
|
|
38
38
|
import "terser"
|
39
39
|
import "import-meta-resolve"
|
40
40
|
import "@samual/lib/clearObject"
|
41
|
-
const
|
42
|
-
|
43
|
-
|
41
|
+
const generate = f32fhtc0ktfq84afkvak6xwp.default,
|
42
|
+
babelPluginProposalDecorators = jt6w4z2lvmfkblngexw9l9wg.default,
|
43
|
+
babelPluginProposalDestructuringPrivate = zcaqhzusgvsoi2gishyb72to.default,
|
44
|
+
babelPluginProposalExplicitResourceManagement = xes6d3s5rum7xj224qugy7on.default,
|
45
|
+
babelPluginTransformClassProperties = dd0rqe9346tamfbxyvddl4yj.default,
|
46
|
+
babelPluginTransformClassStaticBlock = wx29ry6muzcjh9n9g62r95gu.default,
|
47
|
+
babelPluginTransformExponentiationOperator = qcwwih7yuelcgp2zsloqnjr4.default,
|
48
|
+
babelPluginTransformJsonStrings = ez19e21mz73mll9wxfykyw07.default,
|
49
|
+
babelPluginTransformLogicalAssignmentOperators = vd7myomkrcmcfpm93nrx9kkc.default,
|
50
|
+
babelPluginTransformNullishCoalescingOperator = mw53z57ogk4k0qxaulqs7hur.default,
|
51
|
+
babelPluginTransformNumericSeparator = oox83tsy1y6a31sqju1hrmsx.default,
|
52
|
+
babelPluginTransformObjectRestSpread = b8fc1ommbmr91idzubf822m5.default,
|
53
|
+
babelPluginTransformOptionalCatchBinding = txofwbtd4i8fitzwb4zvrj3e.default,
|
54
|
+
babelPluginTransformOptionalChaining = q40h63iq1x13ej9z1p5o7nz7.default,
|
55
|
+
babelPluginTransformPrivatePropertyInObject = pztmuxbkqlwf2wb0pt40zy6w.default,
|
56
|
+
babelPluginTransformUnicodeSetsRegex = aic8ut1pgdh3ic5p295ge7y4.default,
|
57
|
+
traverse = bllgrfz6aotgd3ezg3mw89jw.default,
|
58
|
+
{ format } = prettier
|
44
59
|
async function processScript(
|
45
60
|
code,
|
46
61
|
{
|
@@ -56,7 +71,7 @@ async function processScript(
|
|
56
71
|
rootFolderPath
|
57
72
|
}
|
58
73
|
) {
|
59
|
-
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:
|
74
|
+
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:82:36")
|
60
75
|
const sourceCode = code
|
61
76
|
let autocomplete, statedSeclevel
|
62
77
|
const autocompleteMatch = /^function\s*\(.+\/\/(?<autocomplete>.+)/.exec(code)
|
@@ -117,30 +132,30 @@ async function processScript(
|
|
117
132
|
}
|
118
133
|
}
|
119
134
|
}
|
120
|
-
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:
|
135
|
+
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:161:36")
|
121
136
|
const plugins = [
|
122
|
-
[babelPluginProposalDecorators
|
123
|
-
[babelPluginTransformClassProperties
|
124
|
-
[babelPluginTransformClassStaticBlock
|
125
|
-
[babelPluginTransformPrivatePropertyInObject
|
126
|
-
[babelPluginTransformLogicalAssignmentOperators
|
127
|
-
[babelPluginTransformNumericSeparator
|
128
|
-
[babelPluginTransformNullishCoalescingOperator
|
129
|
-
[babelPluginTransformOptionalChaining
|
130
|
-
[babelPluginTransformOptionalCatchBinding
|
131
|
-
[babelPluginTransformJsonStrings
|
132
|
-
[babelPluginTransformObjectRestSpread
|
133
|
-
[babelPluginTransformExponentiationOperator
|
134
|
-
[babelPluginTransformUnicodeSetsRegex
|
135
|
-
[babelPluginProposalDestructuringPrivate
|
136
|
-
[babelPluginProposalExplicitResourceManagement
|
137
|
+
[babelPluginProposalDecorators, { decoratorsBeforeExport: !0 }],
|
138
|
+
[babelPluginTransformClassProperties],
|
139
|
+
[babelPluginTransformClassStaticBlock],
|
140
|
+
[babelPluginTransformPrivatePropertyInObject],
|
141
|
+
[babelPluginTransformLogicalAssignmentOperators],
|
142
|
+
[babelPluginTransformNumericSeparator],
|
143
|
+
[babelPluginTransformNullishCoalescingOperator],
|
144
|
+
[babelPluginTransformOptionalChaining],
|
145
|
+
[babelPluginTransformOptionalCatchBinding],
|
146
|
+
[babelPluginTransformJsonStrings],
|
147
|
+
[babelPluginTransformObjectRestSpread],
|
148
|
+
[babelPluginTransformExponentiationOperator],
|
149
|
+
[babelPluginTransformUnicodeSetsRegex],
|
150
|
+
[babelPluginProposalDestructuringPrivate],
|
151
|
+
[babelPluginProposalExplicitResourceManagement]
|
137
152
|
]
|
138
153
|
let filePathResolved
|
139
154
|
if (filePath) {
|
140
155
|
filePathResolved = relative(".", filePath)
|
141
156
|
if (filePath.endsWith(".ts"))
|
142
157
|
plugins.push([
|
143
|
-
|
158
|
+
await import("@babel/plugin-transform-typescript").then(module => module.default),
|
144
159
|
{ allowDeclareFields: !0, optimizeConstEnums: !0 }
|
145
160
|
])
|
146
161
|
else {
|
@@ -153,22 +168,22 @@ async function processScript(
|
|
153
168
|
babelPluginProposalThrowExpressions,
|
154
169
|
babelPluginProposalRecordAndTuple
|
155
170
|
] = await Promise.all([
|
156
|
-
import("@babel/plugin-proposal-do-expressions"),
|
157
|
-
import("@babel/plugin-proposal-function-bind"),
|
158
|
-
import("@babel/plugin-proposal-function-sent"),
|
159
|
-
import("@babel/plugin-proposal-partial-application"),
|
160
|
-
import("@babel/plugin-proposal-pipeline-operator"),
|
161
|
-
import("@babel/plugin-proposal-throw-expressions"),
|
162
|
-
import("@babel/plugin-proposal-record-and-tuple")
|
171
|
+
import("@babel/plugin-proposal-do-expressions").then(module => module.default),
|
172
|
+
import("@babel/plugin-proposal-function-bind").then(module => module.default),
|
173
|
+
import("@babel/plugin-proposal-function-sent").then(module => module.default),
|
174
|
+
import("@babel/plugin-proposal-partial-application").then(module => module.default),
|
175
|
+
import("@babel/plugin-proposal-pipeline-operator").then(module => module.default),
|
176
|
+
import("@babel/plugin-proposal-throw-expressions").then(module => module.default),
|
177
|
+
import("@babel/plugin-proposal-record-and-tuple").then(module => module.default)
|
163
178
|
])
|
164
179
|
plugins.push(
|
165
|
-
[babelPluginProposalDoExpressions
|
166
|
-
[babelPluginProposalFunctionBind
|
167
|
-
[babelPluginProposalFunctionSent
|
168
|
-
[babelPluginProposalPartialApplication
|
169
|
-
[babelPluginProposalPipelineOperator
|
170
|
-
[babelPluginProposalThrowExpressions
|
171
|
-
[babelPluginProposalRecordAndTuple
|
180
|
+
[babelPluginProposalDoExpressions],
|
181
|
+
[babelPluginProposalFunctionBind],
|
182
|
+
[babelPluginProposalFunctionSent],
|
183
|
+
[babelPluginProposalPartialApplication],
|
184
|
+
[babelPluginProposalPipelineOperator, { proposal: "hack", topicToken: "%" }],
|
185
|
+
[babelPluginProposalThrowExpressions],
|
186
|
+
[babelPluginProposalRecordAndTuple, { syntaxType: "hash", importPolyfill: !0 }]
|
172
187
|
)
|
173
188
|
}
|
174
189
|
} else {
|
@@ -183,24 +198,24 @@ async function processScript(
|
|
183
198
|
babelPluginProposalThrowExpressions,
|
184
199
|
babelPluginProposalRecordAndTuple
|
185
200
|
] = await Promise.all([
|
186
|
-
import("@babel/plugin-transform-typescript"),
|
187
|
-
import("@babel/plugin-proposal-do-expressions"),
|
188
|
-
import("@babel/plugin-proposal-function-bind"),
|
189
|
-
import("@babel/plugin-proposal-function-sent"),
|
190
|
-
import("@babel/plugin-proposal-partial-application"),
|
191
|
-
import("@babel/plugin-proposal-pipeline-operator"),
|
192
|
-
import("@babel/plugin-proposal-throw-expressions"),
|
193
|
-
import("@babel/plugin-proposal-record-and-tuple")
|
201
|
+
import("@babel/plugin-transform-typescript").then(module => module.default),
|
202
|
+
import("@babel/plugin-proposal-do-expressions").then(module => module.default),
|
203
|
+
import("@babel/plugin-proposal-function-bind").then(module => module.default),
|
204
|
+
import("@babel/plugin-proposal-function-sent").then(module => module.default),
|
205
|
+
import("@babel/plugin-proposal-partial-application").then(module => module.default),
|
206
|
+
import("@babel/plugin-proposal-pipeline-operator").then(module => module.default),
|
207
|
+
import("@babel/plugin-proposal-throw-expressions").then(module => module.default),
|
208
|
+
import("@babel/plugin-proposal-record-and-tuple").then(module => module.default)
|
194
209
|
])
|
195
210
|
plugins.push(
|
196
|
-
[babelPluginTransformTypescript
|
197
|
-
[babelPluginProposalDoExpressions
|
198
|
-
[babelPluginProposalFunctionBind
|
199
|
-
[babelPluginProposalFunctionSent
|
200
|
-
[babelPluginProposalPartialApplication
|
201
|
-
[babelPluginProposalPipelineOperator
|
202
|
-
[babelPluginProposalThrowExpressions
|
203
|
-
[babelPluginProposalRecordAndTuple
|
211
|
+
[babelPluginTransformTypescript, { allowDeclareFields: !0, optimizeConstEnums: !0 }],
|
212
|
+
[babelPluginProposalDoExpressions],
|
213
|
+
[babelPluginProposalFunctionBind],
|
214
|
+
[babelPluginProposalFunctionSent],
|
215
|
+
[babelPluginProposalPartialApplication],
|
216
|
+
[babelPluginProposalPipelineOperator, { proposal: "hack", topicToken: "%" }],
|
217
|
+
[babelPluginProposalThrowExpressions],
|
218
|
+
[babelPluginProposalRecordAndTuple, { syntaxType: "hash", importPolyfill: !0 }]
|
204
219
|
)
|
205
220
|
}
|
206
221
|
const bundle = await rollup({
|
@@ -209,8 +224,15 @@ async function processScript(
|
|
209
224
|
rollupPluginJSON({ preferConst: !0 }),
|
210
225
|
{
|
211
226
|
name: "hackmud-script-manager",
|
227
|
+
resolveId(source) {
|
228
|
+
if (source == filePathResolved) return filePathResolved
|
229
|
+
},
|
230
|
+
async load(id) {
|
231
|
+
if (id == filePathResolved) return (await preprocess(code, { uniqueId })).code
|
232
|
+
},
|
212
233
|
async transform(code, id) {
|
213
|
-
if (id
|
234
|
+
if (id == filePathResolved) return
|
235
|
+
if (isAbsolute(id) && !id.includes(`${sep}node_modules${sep}`))
|
214
236
|
return (await preprocess(code, { uniqueId })).code
|
215
237
|
let program
|
216
238
|
traverse(parse(code, { sourceType: "module" }), {
|
@@ -253,7 +275,7 @@ async function processScript(
|
|
253
275
|
traverse(file, {
|
254
276
|
MemberExpression({ node: memberExpression }) {
|
255
277
|
if (!memberExpression.computed) {
|
256
|
-
assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:
|
278
|
+
assert("Identifier" == memberExpression.property.type, "src/processScript/index.ts:336:60")
|
257
279
|
if ("prototype" == memberExpression.property.name) {
|
258
280
|
memberExpression.computed = !0
|
259
281
|
memberExpression.property = t.stringLiteral("prototype")
|
@@ -283,7 +305,7 @@ async function processScript(
|
|
283
305
|
break
|
284
306
|
case "ObjectPattern":
|
285
307
|
for (const property of lValue.properties) {
|
286
|
-
assert("ObjectProperty" == property.type, "src/processScript/index.ts:
|
308
|
+
assert("ObjectProperty" == property.type, "src/processScript/index.ts:367:51")
|
287
309
|
renameVariables(property.value)
|
288
310
|
}
|
289
311
|
break
|
@@ -3,16 +3,19 @@ import type { LaxPartial } from "@samual/lib";
|
|
3
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
|
-
/**
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
/**
|
7
|
+
* when set to `true` forces use of quine cheats
|
8
|
+
*
|
9
|
+
* when set to `false` forces quine cheats not to be used
|
10
|
+
*
|
11
|
+
* when left unset or set to `undefined`, automatically uses or doesn't use quine cheats based on character count
|
12
|
+
*/
|
12
13
|
forceQuineCheats: boolean;
|
13
14
|
/** the comment inserted after the function signature */ autocomplete: string;
|
14
15
|
}>;
|
15
|
-
/**
|
16
|
-
|
16
|
+
/**
|
17
|
+
* @param file babel ast node representing a file containing transformed code
|
18
|
+
* @param options {@link MinifyOptions details}
|
19
|
+
*/
|
17
20
|
export declare function minify(file: File, { uniqueId, mangleNames, forceQuineCheats, autocomplete }?: MinifyOptions): Promise<string>;
|
18
21
|
export {};
|
package/processScript/minify.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import f32fhtc0ktfq84afkvak6xwp from "@babel/generator"
|
2
|
+
import bllgrfz6aotgd3ezg3mw89jw from "@babel/traverse"
|
3
3
|
import t from "@babel/types"
|
4
4
|
import { assert } from "@samual/lib/assert"
|
5
5
|
import { countHackmudCharacters } from "@samual/lib/countHackmudCharacters"
|
@@ -7,12 +7,12 @@ import { spliceString } from "@samual/lib/spliceString"
|
|
7
7
|
import { tokenizer, tokTypes } from "acorn"
|
8
8
|
import * as terser from "terser"
|
9
9
|
import { getReferencePathsToGlobal, includesIllegalString, replaceUnsafeStrings } from "./shared.js"
|
10
|
-
const
|
11
|
-
|
10
|
+
const generate = f32fhtc0ktfq84afkvak6xwp.default,
|
11
|
+
traverse = bllgrfz6aotgd3ezg3mw89jw.default,
|
12
12
|
minifyNumber = async number =>
|
13
13
|
/\$\((?<number>.+)\)/.exec((await terser.minify(`$(${number})`, { ecma: 2015 })).code).groups.number
|
14
14
|
async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQuineCheats, autocomplete } = {}) {
|
15
|
-
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/minify.ts:
|
15
|
+
assert(/^\w{11}$/.exec(uniqueId), "src/processScript/minify.ts:45:36")
|
16
16
|
let program
|
17
17
|
traverse(file, {
|
18
18
|
Program(path) {
|
@@ -52,7 +52,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
|
|
52
52
|
traverse(fileBeforeJSONValueReplacement, {
|
53
53
|
MemberExpression({ node: memberExpression }) {
|
54
54
|
if (!memberExpression.computed) {
|
55
|
-
assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:
|
55
|
+
assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:113:60")
|
56
56
|
if ("prototype" == memberExpression.property.name) {
|
57
57
|
memberExpression.computed = !0
|
58
58
|
memberExpression.property = t.identifier(`_${uniqueId}_PROTOTYPE_PROPERTY_`)
|
@@ -164,7 +164,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
|
|
164
164
|
},
|
165
165
|
MemberExpression({ node: memberExpression }) {
|
166
166
|
if (!memberExpression.computed) {
|
167
|
-
assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:
|
167
|
+
assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:248:62")
|
168
168
|
if (!(memberExpression.property.name.length < 3)) {
|
169
169
|
memberExpression.computed = !0
|
170
170
|
memberExpression.property = t.stringLiteral(memberExpression.property.name)
|
@@ -238,7 +238,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
|
|
238
238
|
})
|
239
239
|
await Promise.all(promises)
|
240
240
|
const functionDeclaration = file.program.body[0]
|
241
|
-
assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:
|
241
|
+
assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:350:61")
|
242
242
|
if (jsonValues.length) {
|
243
243
|
hasComment = !0
|
244
244
|
if (1 == jsonValues.length)
|
@@ -358,7 +358,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
|
|
358
358
|
)
|
359
359
|
}
|
360
360
|
if (1 == forceQuineCheats) return code
|
361
|
-
assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:
|
361
|
+
assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:481:43")
|
362
362
|
return countHackmudCharacters(scriptBeforeJSONValueReplacement) <= countHackmudCharacters(code) + Number(hasComment)
|
363
363
|
? scriptBeforeJSONValueReplacement
|
364
364
|
: code
|
@@ -371,7 +371,7 @@ function parseObjectExpression(node, o) {
|
|
371
371
|
"Identifier" == property.key.type ||
|
372
372
|
"NumericLiteral" == property.key.type ||
|
373
373
|
"StringLiteral" == property.key.type,
|
374
|
-
"src/processScript/minify.ts:
|
374
|
+
"src/processScript/minify.ts:503:4"
|
375
375
|
)
|
376
376
|
if ("ArrayExpression" == property.value.type) {
|
377
377
|
const childArray = []
|
@@ -2,8 +2,10 @@ import type { LaxPartial } from "@samual/lib";
|
|
2
2
|
export type PreprocessOptions = LaxPartial<{
|
3
3
|
uniqueId: string;
|
4
4
|
}>;
|
5
|
-
/**
|
6
|
-
|
5
|
+
/**
|
6
|
+
* @param code source code for preprocessing
|
7
|
+
* @param options {@link PreprocessOptions details}
|
8
|
+
*/
|
7
9
|
export declare function preprocess(code: string, { uniqueId }?: PreprocessOptions): Promise<{
|
8
10
|
code: string;
|
9
11
|
}>;
|
@@ -1,14 +1,14 @@
|
|
1
|
-
import
|
1
|
+
import f32fhtc0ktfq84afkvak6xwp from "@babel/generator"
|
2
2
|
import { parse } from "@babel/parser"
|
3
|
-
import
|
3
|
+
import bllgrfz6aotgd3ezg3mw89jw from "@babel/traverse"
|
4
4
|
import t from "@babel/types"
|
5
5
|
import { assert } from "@samual/lib/assert"
|
6
6
|
import { spliceString } from "@samual/lib/spliceString"
|
7
7
|
import { resolve } from "import-meta-resolve"
|
8
|
-
const
|
9
|
-
|
8
|
+
const generate = f32fhtc0ktfq84afkvak6xwp.default,
|
9
|
+
traverse = bllgrfz6aotgd3ezg3mw89jw.default
|
10
10
|
async function preprocess(code, { uniqueId = "00000000000" } = {}) {
|
11
|
-
assert(/^\w{11}$/.test(uniqueId), "src/processScript/preprocess.ts:
|
11
|
+
assert(/^\w{11}$/.test(uniqueId), "src/processScript/preprocess.ts:20:36")
|
12
12
|
const sourceCode = code
|
13
13
|
let lengthBefore, file, program
|
14
14
|
do {
|
@@ -47,11 +47,11 @@ async function preprocess(code, { uniqueId = "00000000000" } = {}) {
|
|
47
47
|
})
|
48
48
|
break
|
49
49
|
} catch (error_) {
|
50
|
-
assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:
|
50
|
+
assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:64:42")
|
51
51
|
error = error_
|
52
52
|
}
|
53
53
|
if ("BABEL_PARSER_SYNTAX_ERROR" != error.code || "PrivateInExpectedIn" != error.reasonCode) {
|
54
|
-
console.
|
54
|
+
console.error(/.+/.exec(code.slice(error.pos))?.[0])
|
55
55
|
throw error
|
56
56
|
}
|
57
57
|
const codeSlice = code.slice(error.pos)
|
@@ -7,12 +7,14 @@ export type TransformOptions = LaxPartial<{
|
|
7
7
|
}> & {
|
8
8
|
scriptName: string | true;
|
9
9
|
};
|
10
|
-
/**
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
/**
|
11
|
+
* transform a given babel `File` to be hackmud compatible
|
12
|
+
*
|
13
|
+
* (returned File will need `postprocess()`ing)
|
14
|
+
* @param file babel ast node representing a file containing preprocessed code
|
15
|
+
* @param sourceCode the original untouched source code
|
16
|
+
* @param options {@link TransformOptions details}
|
17
|
+
*/
|
16
18
|
export declare function transform(file: File, sourceCode: string, { uniqueId, scriptUser, scriptName, seclevel }: TransformOptions): {
|
17
19
|
file: File;
|
18
20
|
seclevel: number;
|