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

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.
@@ -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;