hackmud-script-manager 0.19.1-003b022 → 0.19.1-02bed1a

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1 @@
1
- export declare const postprocess: (code: string, seclevel: number, uniqueID: string) => string;
2
- export default postprocess;
1
+ export declare const postprocess: (code: string, seclevel: number, uniqueId: string) => string;
@@ -1,20 +1,20 @@
1
- const postprocess = (code, seclevel, uniqueID) =>
1
+ const postprocess = (code, seclevel, uniqueId) =>
2
2
  code
3
3
  .replace(/^function\s*\w+\(/, "function(")
4
- .replace(RegExp(`\\$${uniqueID}\\$\\\\(?:\\\\)?\\$SC_DOLLAR\\$`, "g"), "S\\C$")
5
- .replace(RegExp(`\\$${uniqueID}\\$\\\\(?:\\\\)?\\$DB_DOLLAR\\$`, "g"), "D\\B$")
6
- .replace(RegExp(`\\$${uniqueID}\\$\\\\(?:\\\\)?\\$D\\$`, "g"), "_\\_D_S")
7
- .replace(RegExp(`\\$${uniqueID}\\$\\\\(?:\\\\)?\\$FMCL\\$`, "g"), "_\\_FMCL_")
8
- .replace(RegExp(`\\$${uniqueID}\\$\\\\(?:\\\\)?\\$G\\$`, "g"), "_\\_G_")
9
- .replace(RegExp(`\\$${uniqueID}\\$SUBSCRIPT\\$(\\w+)\\$(\\w+)\\$`, "g"), `#${"nlmhf"[seclevel]}s.$1.$2`)
10
- .replace(RegExp(`\\$${uniqueID}\\$DEBUG\\$`, "g"), "#D")
11
- .replace(RegExp(`\\$${uniqueID}\\$FMCL\\$`, "g"), "#FMCL")
12
- .replace(RegExp(`\\$${uniqueID}\\$GLOBAL\\$`, "g"), "#G")
13
- .replace(RegExp(`\\$${uniqueID}\\$DB\\$(\\w+)\\$`, "g"), "#db.$1")
14
- .replace(RegExp(`\\$${uniqueID}\\$SLASH_SLASH\\$`, "g"), "/\\/")
15
- .replace(RegExp(`\\$${uniqueID}\\$NOT_A_SUBSCRIPT\\$(#[\\w\\.]+)\\(\\$`, "g"), "$1\\(")
16
- .replace(RegExp(`\\$${uniqueID}\\$NOT_A_DB_CALL\\$(\\w+)\\$`, "g"), "#db.$1\\(")
17
- .replace(RegExp(`\\$${uniqueID}\\$NOT_A_DEBUG_CALL\\$`, "g"), "#D\\(")
18
- .replace(RegExp(`\\$${uniqueID}\\$NOT_FMCL\\$`, "g"), "#\\FMCL")
19
- .replace(RegExp(`\\$${uniqueID}\\$NOT_G\\$`, "g"), "#\\G")
20
- export { postprocess as default, postprocess }
4
+ .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$SC_DOLLAR\\$`, "g"), "S\\C$")
5
+ .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$DB_DOLLAR\\$`, "g"), "D\\B$")
6
+ .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$D\\$`, "g"), "_\\_D_S")
7
+ .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$FMCL\\$`, "g"), "_\\_FMCL_")
8
+ .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$G\\$`, "g"), "_\\_G_")
9
+ .replace(RegExp(`\\$${uniqueId}\\$SUBSCRIPT\\$(\\w+)\\$(\\w+)\\$`, "g"), `#${"nlmhf"[seclevel]}s.$1.$2`)
10
+ .replace(RegExp(`\\$${uniqueId}\\$DEBUG\\$`, "g"), "#D")
11
+ .replace(RegExp(`\\$${uniqueId}\\$FMCL\\$`, "g"), "#FMCL")
12
+ .replace(RegExp(`\\$${uniqueId}\\$GLOBAL\\$`, "g"), "#G")
13
+ .replace(RegExp(`\\$${uniqueId}\\$DB\\$(\\w+)\\$`, "g"), "#db.$1")
14
+ .replace(RegExp(`\\$${uniqueId}\\$SLASH_SLASH\\$`, "g"), "/\\/")
15
+ .replace(RegExp(`\\$${uniqueId}\\$NOT_A_SUBSCRIPT\\$(#[\\w\\.]+)\\(\\$`, "g"), "$1\\(")
16
+ .replace(RegExp(`\\$${uniqueId}\\$NOT_A_DB_CALL\\$(\\w+)\\$`, "g"), "#db.$1\\(")
17
+ .replace(RegExp(`\\$${uniqueId}\\$NOT_A_DEBUG_CALL\\$`, "g"), "#D\\(")
18
+ .replace(RegExp(`\\$${uniqueId}\\$NOT_FMCL\\$`, "g"), "#\\FMCL")
19
+ .replace(RegExp(`\\$${uniqueId}\\$NOT_G\\$`, "g"), "#\\G")
20
+ export { postprocess }
@@ -1,12 +1,9 @@
1
- export type PreprocessOptions = {
2
- /** 11 a-z 0-9 characters */
3
- uniqueID: string;
4
- };
5
- /**
6
- * @param code source code for preprocessing
7
- * @param options {@link PreprocessOptions details}
8
- */
9
- export declare const preprocess: (code: string, { uniqueID }?: Partial<PreprocessOptions>) => Promise<{
1
+ import type { LaxPartial } from "@samual/lib";
2
+ export type PreprocessOptions = LaxPartial<{
3
+ uniqueId: string;
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
- preprocess = async (code, { uniqueID = "00000000000" } = {}) => {
11
- assert(/^\w{11}$/.test(uniqueID))
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)
51
- error = error_
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
- 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")
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
- program.scope.hasGlobal("Proxy") &&
95
- file.program.body.unshift(
96
- t.importDeclaration(
97
- [t.importDefaultSpecifier(t.identifier("Proxy"))],
98
- t.stringLiteral((await resolve("proxy-polyfill/src/proxy.js", import.meta.url)).slice(7))
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
- 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 as default, preprocess }
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 const getReferencePathsToGlobal: (name: string, program: NodePath<Program>) => NodePath<Identifier>[];
3
+ export declare function getReferencePathsToGlobal(name: string, program: NodePath<Program>): NodePath<Identifier>[];
4
4
  export declare const includesIllegalString: (toCheck: string) => boolean;
5
- export declare const replaceUnsafeStrings: (uniqueID: string, toReplace: string) => string;
5
+ export declare const replaceUnsafeStrings: (uniqueId: string, toReplace: string) => string;
@@ -1,32 +1,32 @@
1
1
  import t from "@babel/types"
2
2
  import { ensure } from "@samual/lib/assert"
3
- const 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))
10
- variableDeclaration.remove()
11
- return binding.referencePaths
12
- },
13
- includesIllegalString = toCheck =>
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") ||
17
17
  toCheck.includes("__FMCL_") ||
18
18
  toCheck.includes("__G_"),
19
- replaceUnsafeStrings = (uniqueID, toReplace) =>
19
+ replaceUnsafeStrings = (uniqueId, toReplace) =>
20
20
  toReplace
21
- .replaceAll("SC$", `$${uniqueID}$\\$SC_DOLLAR$`)
22
- .replaceAll("DB$", `$${uniqueID}$\\$DB_DOLLAR$`)
23
- .replaceAll("__D_S", `$${uniqueID}$\\$D$`)
24
- .replaceAll("__FMCL_", `$${uniqueID}$\\$FMCL$`)
25
- .replaceAll("__G_", `$${uniqueID}$\\$G$`)
26
- .replaceAll("//", `$${uniqueID}$SLASH_SLASH$`)
27
- .replaceAll(/#[0-4fhmln]?s(?:\.[_a-z][\d_a-z]{0,24}){2}\(/g, `$${uniqueID}$NOT_A_SUBSCRIPT$$$&$`)
28
- .replaceAll(/#db\.(?<methodName>[irfu]|u1|us|ObjectId)\(/g, `$${uniqueID}$NOT_A_DB_CALL$$$1$`)
29
- .replaceAll("#D(", `$${uniqueID}$NOT_A_DEBUG_CALL$`)
30
- .replaceAll("#FMCL", `$${uniqueID}$NOT_FMCL$`)
31
- .replaceAll("#G", `$${uniqueID}$NOT_G$`)
21
+ .replaceAll("SC$", `$${uniqueId}$\\$SC_DOLLAR$`)
22
+ .replaceAll("DB$", `$${uniqueId}$\\$DB_DOLLAR$`)
23
+ .replaceAll("__D_S", `$${uniqueId}$\\$D$`)
24
+ .replaceAll("__FMCL_", `$${uniqueId}$\\$FMCL$`)
25
+ .replaceAll("__G_", `$${uniqueId}$\\$G$`)
26
+ .replaceAll("//", `$${uniqueId}$SLASH_SLASH$`)
27
+ .replaceAll(/#[0-4fhmln]?s(?:\.[_a-z][\d_a-z]{0,24}){2}\(/g, `$${uniqueId}$NOT_A_SUBSCRIPT$$$&$`)
28
+ .replaceAll(/#db\.(?<methodName>[irfu]|u1|us|ObjectId)\(/g, `$${uniqueId}$NOT_A_DB_CALL$$$1$`)
29
+ .replaceAll("#D(", `$${uniqueId}$NOT_A_DEBUG_CALL$`)
30
+ .replaceAll("#FMCL", `$${uniqueId}$NOT_FMCL$`)
31
+ .replaceAll("#G", `$${uniqueId}$NOT_G$`)
32
32
  export { getReferencePathsToGlobal, includesIllegalString, replaceUnsafeStrings }
@@ -1,24 +1,19 @@
1
1
  import type { File } from "@babel/types";
2
- export type TransformOptions = {
3
- /** 11 a-z 0-9 characters */
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
- * transform a given babel `File` to be hackmud compatible
13
- *
14
- * (returned File will need `postprocess()`ing)
15
- *
16
- * @param file babel ast node representing a file containing preprocessed code
17
- * @param sourceCode the original untouched source code
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;