hackmud-script-manager 0.19.1-bd545f5 → 0.19.1-cb8d65f

Sign up to get free protection for your applications and to get access to all the features.
@@ -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:23: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:67: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
- }
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
105
  export { preprocess as default, preprocess }
@@ -1,16 +1,16 @@
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") ||