hackmud-script-manager 0.19.1-98e81f8 → 0.19.1-b040eb5
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.d.ts +0 -0
- package/bin/hsm.js +147 -300
- package/env.d.ts +1357 -0
- package/generateTypeDeclaration.d.ts +1 -2
- package/generateTypeDeclaration.js +19 -19
- package/index.d.ts +2 -2
- package/index.js +2 -1
- package/package.json +8 -6
- package/processScript/index.d.ts +17 -26
- package/processScript/index.js +258 -241
- package/processScript/minify.d.ts +15 -21
- package/processScript/minify.js +381 -395
- package/processScript/postprocess.d.ts +0 -1
- package/processScript/postprocess.js +1 -1
- package/processScript/preprocess.d.ts +6 -9
- package/processScript/preprocess.js +94 -94
- package/processScript/shared.d.ts +1 -1
- package/processScript/shared.js +11 -11
- package/processScript/transform.d.ts +13 -18
- package/processScript/transform.js +597 -550
- package/pull.d.ts +5 -9
- package/pull.js +2 -2
- package/push.d.ts +24 -33
- package/push.js +88 -213
- package/syncMacros.d.ts +1 -2
- package/syncMacros.js +7 -6
- package/watch.d.ts +10 -16
- package/watch.js +30 -31
- package/tsconfig.tsbuildinfo +0 -1
@@ -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
|
20
|
+
export { postprocess }
|
@@ -1,12 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import type { LaxPartial } from "@samual/lib";
|
2
|
+
export type PreprocessOptions = LaxPartial<{
|
3
3
|
uniqueID: string;
|
4
|
-
}
|
5
|
-
/**
|
6
|
-
|
7
|
-
|
8
|
-
*/
|
9
|
-
export declare const preprocess: (code: string, { uniqueID }?: Partial<PreprocessOptions>) => Promise<{
|
4
|
+
}>;
|
5
|
+
/** @param code source code for preprocessing
|
6
|
+
* @param options {@link PreprocessOptions details} */
|
7
|
+
export declare function preprocess(code: string, { uniqueID }?: PreprocessOptions): Promise<{
|
10
8
|
code: string;
|
11
9
|
}>;
|
12
|
-
export default preprocess;
|
@@ -6,100 +6,100 @@ import { assert } from "@samual/lib/assert"
|
|
6
6
|
import { spliceString } from "@samual/lib/spliceString"
|
7
7
|
import { resolve } from "import-meta-resolve"
|
8
8
|
const { default: traverse } = babelTraverse,
|
9
|
-
{ default: generate } = babelGenerator
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
}
|
53
|
-
if ("BABEL_PARSER_SYNTAX_ERROR" != error.code || "PrivateInExpectedIn" != error.reasonCode) {
|
54
|
-
console.log(/.+/.exec(code.slice(error.pos))?.[0])
|
55
|
-
throw error
|
56
|
-
}
|
57
|
-
const codeSlice = code.slice(error.pos)
|
58
|
-
let match
|
59
|
-
if ((match = /^#[0-4fhmln]s\.scripts\.quine\(\)/.exec(codeSlice)))
|
60
|
-
code = spliceString(code, JSON.stringify(sourceCode), error.pos, match[0].length)
|
61
|
-
else if ((match = /^#[0-4fhmln]?s\./.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
|
62
|
-
else if ((match = /^#D[^\w$]/.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
|
63
|
-
else if ((match = /^#FMCL/.exec(codeSlice)))
|
64
|
-
code = spliceString(code, `$${uniqueID}$FMCL$`, error.pos, match[0].length)
|
65
|
-
else if ((match = /^#G/.exec(codeSlice)))
|
66
|
-
code = spliceString(code, `$${uniqueID}$GLOBAL$`, error.pos, match[0].length)
|
67
|
-
else {
|
68
|
-
if (!(match = /^#db\./.exec(codeSlice))) throw error
|
69
|
-
code = spliceString(code, "$", error.pos, 1)
|
70
|
-
}
|
9
|
+
{ default: generate } = babelGenerator
|
10
|
+
async function preprocess(code, { uniqueID = "00000000000" } = {}) {
|
11
|
+
assert(/^\w{11}$/.test(uniqueID), "src/processScript/preprocess.ts:22:36")
|
12
|
+
const sourceCode = code
|
13
|
+
let lengthBefore, file, program
|
14
|
+
do {
|
15
|
+
lengthBefore = code.length
|
16
|
+
code = code
|
17
|
+
.replace(/^\s+/, "")
|
18
|
+
.replace(/^\/\/.*/, "")
|
19
|
+
.replace(/^\/\*[\s\S]*?\*\//, "")
|
20
|
+
} while (code.length != lengthBefore)
|
21
|
+
code = code.replace(/^function\s*\(/, "export default function (")
|
22
|
+
for (;;) {
|
23
|
+
let error
|
24
|
+
try {
|
25
|
+
file = parse(code, {
|
26
|
+
plugins: [
|
27
|
+
"typescript",
|
28
|
+
["decorators", { decoratorsBeforeExport: !0 }],
|
29
|
+
"doExpressions",
|
30
|
+
"functionBind",
|
31
|
+
"functionSent",
|
32
|
+
"partialApplication",
|
33
|
+
["pipelineOperator", { proposal: "hack", topicToken: "%" }],
|
34
|
+
"throwExpressions",
|
35
|
+
["recordAndTuple", { syntaxType: "hash" }],
|
36
|
+
"classProperties",
|
37
|
+
"classPrivateProperties",
|
38
|
+
"classPrivateMethods",
|
39
|
+
"logicalAssignment",
|
40
|
+
"numericSeparator",
|
41
|
+
"nullishCoalescingOperator",
|
42
|
+
"optionalChaining",
|
43
|
+
"optionalCatchBinding",
|
44
|
+
"objectRestSpread"
|
45
|
+
],
|
46
|
+
sourceType: "module"
|
47
|
+
})
|
48
|
+
break
|
49
|
+
} catch (error_) {
|
50
|
+
assert(error_ instanceof SyntaxError, "src/processScript/preprocess.ts:66:42")
|
51
|
+
error = error_
|
71
52
|
}
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
53
|
+
if ("BABEL_PARSER_SYNTAX_ERROR" != error.code || "PrivateInExpectedIn" != error.reasonCode) {
|
54
|
+
console.log(/.+/.exec(code.slice(error.pos))?.[0])
|
55
|
+
throw error
|
56
|
+
}
|
57
|
+
const codeSlice = code.slice(error.pos)
|
58
|
+
let match
|
59
|
+
if ((match = /^#[0-4fhmln]s\.scripts\.quine\(\)/.exec(codeSlice)))
|
60
|
+
code = spliceString(code, JSON.stringify(sourceCode), error.pos, match[0].length)
|
61
|
+
else if ((match = /^#[0-4fhmln]?s\./.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
|
62
|
+
else if ((match = /^#D[^\w$]/.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
|
63
|
+
else if ((match = /^#FMCL/.exec(codeSlice)))
|
64
|
+
code = spliceString(code, `$${uniqueID}$FMCL$`, error.pos, match[0].length)
|
65
|
+
else if ((match = /^#G/.exec(codeSlice)))
|
66
|
+
code = spliceString(code, `$${uniqueID}$GLOBAL$`, error.pos, match[0].length)
|
67
|
+
else {
|
68
|
+
if (!(match = /^#db\./.exec(codeSlice))) throw error
|
69
|
+
code = spliceString(code, "$", error.pos, 1)
|
70
|
+
}
|
71
|
+
}
|
72
|
+
traverse(file, {
|
73
|
+
Program(path) {
|
74
|
+
program = path
|
75
|
+
path.skip()
|
76
|
+
}
|
77
|
+
})
|
78
|
+
const needRecord = program.scope.hasGlobal("Record"),
|
79
|
+
needTuple = program.scope.hasGlobal("Tuple")
|
80
|
+
;(needRecord || needTuple) &&
|
81
|
+
file.program.body.unshift(
|
82
|
+
t.importDeclaration(
|
83
|
+
needRecord ?
|
84
|
+
needTuple ?
|
85
|
+
[
|
86
|
+
t.importSpecifier(t.identifier("Record"), t.identifier("Record")),
|
87
|
+
t.importSpecifier(t.identifier("Tuple"), t.identifier("Tuple"))
|
88
|
+
]
|
89
|
+
: [t.importSpecifier(t.identifier("Record"), t.identifier("Record"))]
|
90
|
+
: [t.importSpecifier(t.identifier("Tuple"), t.identifier("Tuple"))],
|
91
|
+
t.stringLiteral("@bloomberg/record-tuple-polyfill")
|
93
92
|
)
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
)
|
93
|
+
)
|
94
|
+
program.scope.hasGlobal("Proxy") &&
|
95
|
+
file.program.body.unshift(
|
96
|
+
t.importDeclaration(
|
97
|
+
[t.importDefaultSpecifier(t.identifier("Proxy"))],
|
98
|
+
t.stringLiteral(resolve("proxy-polyfill/src/proxy.js", import.meta.url).slice(7))
|
100
99
|
)
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
}
|
105
|
-
|
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 }
|
104
|
+
}
|
105
|
+
export { preprocess }
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { NodePath } from "@babel/traverse";
|
2
2
|
import type { Identifier, Program } from "@babel/types";
|
3
|
-
export declare
|
3
|
+
export declare function getReferencePathsToGlobal(name: string, program: NodePath<Program>): NodePath<Identifier>[];
|
4
4
|
export declare const includesIllegalString: (toCheck: string) => boolean;
|
5
5
|
export declare const replaceUnsafeStrings: (uniqueID: string, toReplace: string) => string;
|
package/processScript/shared.js
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
import t from "@babel/types"
|
2
2
|
import { ensure } from "@samual/lib/assert"
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
function getReferencePathsToGlobal(name, program) {
|
4
|
+
const [variableDeclaration] = program.unshiftContainer(
|
5
|
+
"body",
|
6
|
+
t.variableDeclaration("let", [t.variableDeclarator(t.identifier(name))])
|
7
|
+
)
|
8
|
+
program.scope.crawl()
|
9
|
+
const binding = ensure(program.scope.getBinding(name), "src/processScript/shared.ts:12:57")
|
10
|
+
variableDeclaration.remove()
|
11
|
+
return binding.referencePaths
|
12
|
+
}
|
13
|
+
const includesIllegalString = toCheck =>
|
14
14
|
toCheck.includes("SC$") ||
|
15
15
|
toCheck.includes("DB$") ||
|
16
16
|
toCheck.includes("__D_S") ||
|
@@ -1,24 +1,19 @@
|
|
1
1
|
import type { File } from "@babel/types";
|
2
|
-
|
3
|
-
|
4
|
-
uniqueID: string;
|
5
|
-
/** the user going to be hosting this script (or set to `true` if not yet known) */
|
6
|
-
scriptUser: string | true;
|
7
|
-
/** the name of this script (or set to `true` if not yet known) */
|
8
|
-
scriptName: string | true;
|
2
|
+
import type { LaxPartial } from "@samual/lib";
|
3
|
+
export type TransformOptions = LaxPartial<{
|
4
|
+
/** 11 a-z 0-9 characters */ uniqueID: string;
|
5
|
+
/** the user going to be hosting this script (or set to `true` if not yet known) */ scriptUser: string | true;
|
9
6
|
seclevel: number;
|
7
|
+
}> & {
|
8
|
+
scriptName: string | true;
|
10
9
|
};
|
11
|
-
/**
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
* @param options {@link TransformOptions details}
|
19
|
-
*/
|
20
|
-
export declare const transform: (file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?: Partial<TransformOptions>) => {
|
10
|
+
/** transform a given babel `File` to be hackmud compatible
|
11
|
+
*
|
12
|
+
* (returned File will need `postprocess()`ing)
|
13
|
+
* @param file babel ast node representing a file containing preprocessed code
|
14
|
+
* @param sourceCode the original untouched source code
|
15
|
+
* @param options {@link TransformOptions details} */
|
16
|
+
export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }: TransformOptions): {
|
21
17
|
file: File;
|
22
18
|
seclevel: number;
|
23
19
|
};
|
24
|
-
export default transform;
|