hackmud-script-manager 0.19.1-d57be2a → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hackmud-script-manager",
3
- "version": "0.19.1-d57be2a",
3
+ "version": "0.20.0",
4
4
  "description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
5
5
  "keywords": [
6
6
  "api",
@@ -59,15 +59,18 @@
59
59
  "@rollup/plugin-commonjs": "^25.0.7",
60
60
  "@rollup/plugin-json": "^6.1.0",
61
61
  "@rollup/plugin-node-resolve": "^15.2.3",
62
- "@samual/lib": "0.10.2-e64c5bc",
62
+ "@samual/lib": "0.11.0",
63
63
  "acorn": "^8.11.3",
64
64
  "chalk": "^5.3.0",
65
65
  "chokidar": "^3.6.0",
66
66
  "import-meta-resolve": "^4.0.0",
67
67
  "prettier": "^3.2.5",
68
68
  "proxy-polyfill": "^0.3.2",
69
- "rollup": "^4.14.2",
70
- "terser": "^5.30.3"
69
+ "rollup": "^4.16.4",
70
+ "terser": "^5.30.4"
71
+ },
72
+ "peerDependencies": {
73
+ "typescript": "5.4.5"
71
74
  },
72
75
  "type": "module",
73
76
  "exports": {
@@ -5,7 +5,7 @@ export { preprocess } from "./preprocess";
5
5
  export { transform } from "./transform";
6
6
  export type ProcessOptions = LaxPartial<{
7
7
  /** whether to minify the given code */ minify: boolean;
8
- /** 11 a-z 0-9 characters */ uniqueID: string;
8
+ /** 11 a-z 0-9 characters */ uniqueId: string;
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;
@@ -22,7 +22,7 @@ export type ProcessOptions = LaxPartial<{
22
22
  /** Minifies a given script
23
23
  * @param code JavaScript or TypeScript code
24
24
  * @param options {@link ProcessOptions details} */
25
- export declare function processScript(code: string, { minify: shouldMinify, uniqueID, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats }: ProcessOptions): Promise<{
25
+ export declare function processScript(code: string, { minify: shouldMinify, uniqueId, scriptUser, scriptName, filePath, mangleNames, forceQuineCheats }: ProcessOptions): Promise<{
26
26
  script: string;
27
27
  warnings: {
28
28
  message: string;
@@ -44,7 +44,7 @@ async function processScript(
44
44
  code,
45
45
  {
46
46
  minify: shouldMinify = !0,
47
- uniqueID = Math.floor(Math.random() * 2 ** 52)
47
+ uniqueId = Math.floor(Math.random() * 2 ** 52)
48
48
  .toString(36)
49
49
  .padStart(11, "0"),
50
50
  scriptUser,
@@ -54,7 +54,7 @@ async function processScript(
54
54
  forceQuineCheats
55
55
  }
56
56
  ) {
57
- assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:77:36")
57
+ assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:77:36")
58
58
  const sourceCode = code
59
59
  let autocomplete, statedSeclevel
60
60
  const autocompleteMatch = /^function\s*\(.+\/\/(?<autocomplete>.+)/.exec(code)
@@ -115,7 +115,7 @@ async function processScript(
115
115
  }
116
116
  }
117
117
  }
118
- assert(/^\w{11}$/.exec(uniqueID), "src/processScript/index.ts:158:36")
118
+ assert(/^\w{11}$/.exec(uniqueId), "src/processScript/index.ts:158:36")
119
119
  const plugins = [
120
120
  [babelPluginProposalDecorators.default, { decoratorsBeforeExport: !0 }],
121
121
  [babelPluginTransformClassProperties.default],
@@ -170,7 +170,7 @@ async function processScript(
170
170
  )
171
171
  }
172
172
  } else {
173
- filePathResolved = uniqueID + ".ts"
173
+ filePathResolved = uniqueId + ".ts"
174
174
  const [
175
175
  babelPluginTransformTypescript,
176
176
  babelPluginProposalDoExpressions,
@@ -207,7 +207,7 @@ async function processScript(
207
207
  {
208
208
  name: "hackmud-script-manager",
209
209
  async transform(code, id) {
210
- if (!id.includes("/node_modules/")) return (await preprocess(code, { uniqueID })).code
210
+ if (!id.includes("/node_modules/")) return (await preprocess(code, { uniqueId })).code
211
211
  let program
212
212
  traverse(parse(code, { sourceType: "module" }), {
213
213
  Program(path) {
@@ -235,7 +235,7 @@ async function processScript(
235
235
  seclevelNames = ["NULLSEC", "LOWSEC", "MIDSEC", "HIGHSEC", "FULLSEC"]
236
236
  code = (await bundle.generate({})).output[0].code
237
237
  const { file, seclevel } = transform(parse(code, { sourceType: "module" }), sourceCode, {
238
- uniqueID,
238
+ uniqueId,
239
239
  scriptUser,
240
240
  scriptName
241
241
  })
@@ -244,7 +244,7 @@ async function processScript(
244
244
  `detected seclevel ${seclevelNames[seclevel]} is lower than stated seclevel ${seclevelNames[statedSeclevel]}`
245
245
  )
246
246
  code = generate(file).code
247
- if (shouldMinify) code = await minify(file, { uniqueID, mangleNames, forceQuineCheats, autocomplete })
247
+ if (shouldMinify) code = await minify(file, { uniqueId, mangleNames, forceQuineCheats, autocomplete })
248
248
  else {
249
249
  traverse(file, {
250
250
  MemberExpression({ node: memberExpression }) {
@@ -259,7 +259,7 @@ async function processScript(
259
259
  } else if (includesIllegalString(memberExpression.property.name)) {
260
260
  memberExpression.computed = !0
261
261
  memberExpression.property = t.stringLiteral(
262
- replaceUnsafeStrings(uniqueID, memberExpression.property.name)
262
+ replaceUnsafeStrings(uniqueId, memberExpression.property.name)
263
263
  )
264
264
  }
265
265
  }
@@ -294,25 +294,25 @@ async function processScript(
294
294
  },
295
295
  ObjectProperty({ node: objectProperty }) {
296
296
  if ("Identifier" == objectProperty.key.type && includesIllegalString(objectProperty.key.name)) {
297
- objectProperty.key = t.stringLiteral(replaceUnsafeStrings(uniqueID, objectProperty.key.name))
297
+ objectProperty.key = t.stringLiteral(replaceUnsafeStrings(uniqueId, objectProperty.key.name))
298
298
  objectProperty.shorthand = !1
299
299
  }
300
300
  },
301
301
  StringLiteral({ node }) {
302
- node.value = replaceUnsafeStrings(uniqueID, node.value)
302
+ node.value = replaceUnsafeStrings(uniqueId, node.value)
303
303
  },
304
304
  TemplateLiteral({ node }) {
305
305
  for (const templateElement of node.quasis)
306
306
  if (templateElement.value.cooked) {
307
- templateElement.value.cooked = replaceUnsafeStrings(uniqueID, templateElement.value.cooked)
307
+ templateElement.value.cooked = replaceUnsafeStrings(uniqueId, templateElement.value.cooked)
308
308
  templateElement.value.raw = templateElement.value.cooked
309
309
  .replaceAll("\\", "\\\\")
310
310
  .replaceAll("`", "\\`")
311
311
  .replaceAll("${", "$\\{")
312
- } else templateElement.value.raw = replaceUnsafeStrings(uniqueID, templateElement.value.raw)
312
+ } else templateElement.value.raw = replaceUnsafeStrings(uniqueId, templateElement.value.raw)
313
313
  },
314
314
  RegExpLiteral(path) {
315
- path.node.pattern = replaceUnsafeStrings(uniqueID, path.node.pattern)
315
+ path.node.pattern = replaceUnsafeStrings(uniqueId, path.node.pattern)
316
316
  delete path.node.extra
317
317
  }
318
318
  })
@@ -323,7 +323,7 @@ async function processScript(
323
323
  trailingComma: "none"
324
324
  })
325
325
  }
326
- code = postprocess(code, seclevel, uniqueID)
326
+ code = postprocess(code, seclevel, uniqueId)
327
327
  if (includesIllegalString(code))
328
328
  throw Error(
329
329
  'you found a weird edge case where I wasn\'t able to replace illegal strings like "SC$", please report thx'
@@ -1,7 +1,7 @@
1
1
  import type { File } from "@babel/types";
2
2
  import type { LaxPartial } from "@samual/lib";
3
3
  type MinifyOptions = LaxPartial<{
4
- /** 11 a-z 0-9 characters */ uniqueID: string;
4
+ /** 11 a-z 0-9 characters */ uniqueId: string;
5
5
  /** whether to mangle function and class names (defaults to `false`) */ mangleNames: boolean;
6
6
  /** when set to `true` forces use of quine cheats
7
7
  *
@@ -14,5 +14,5 @@ type MinifyOptions = LaxPartial<{
14
14
  }>;
15
15
  /** @param file babel ast node representing a file containing transformed code
16
16
  * @param options {@link MinifyOptions details} */
17
- export declare function minify(file: File, { uniqueID, mangleNames, forceQuineCheats, autocomplete }?: MinifyOptions): Promise<string>;
17
+ export declare function minify(file: File, { uniqueId, mangleNames, forceQuineCheats, autocomplete }?: MinifyOptions): Promise<string>;
18
18
  export {};
@@ -11,8 +11,8 @@ const { default: generate } = babelGenerator,
11
11
  { default: traverse } = babelTraverse,
12
12
  minifyNumber = async number =>
13
13
  /\$\((?<number>.+)\)/.exec((await terser.minify(`$(${number})`, { ecma: 2015 })).code).groups.number
14
- async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQuineCheats, autocomplete } = {}) {
15
- assert(/^\w{11}$/.exec(uniqueID), "src/processScript/minify.ts:46:36")
14
+ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQuineCheats, autocomplete } = {}) {
15
+ assert(/^\w{11}$/.exec(uniqueId), "src/processScript/minify.ts:46:36")
16
16
  let program
17
17
  traverse(file, {
18
18
  Program(path) {
@@ -32,23 +32,23 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
32
32
  mainFunctionPath.node.params.pop()
33
33
  }
34
34
  for (const global in program.scope.globals) {
35
- if ("arguments" == global || global.startsWith(`$${uniqueID}$`)) continue
35
+ if ("arguments" == global || global.startsWith(`$${uniqueId}$`)) continue
36
36
  const referencePaths = getReferencePathsToGlobal(global, program)
37
37
  if (!(5 + global.length + referencePaths.length >= global.length * referencePaths.length)) {
38
- for (const path of referencePaths) path.replaceWith(t.identifier(`_${uniqueID}_GLOBAL_${global}_`))
38
+ for (const path of referencePaths) path.replaceWith(t.identifier(`_${uniqueId}_GLOBAL_${global}_`))
39
39
  mainFunctionPath.node.body.body.unshift(
40
40
  t.variableDeclaration("let", [
41
- t.variableDeclarator(t.identifier(`_${uniqueID}_GLOBAL_${global}_`), t.identifier(global))
41
+ t.variableDeclarator(t.identifier(`_${uniqueId}_GLOBAL_${global}_`), t.identifier(global))
42
42
  ])
43
43
  )
44
44
  }
45
45
  }
46
- const hashGReferencePaths = getReferencePathsToGlobal(`$${uniqueID}$GLOBAL$`, program)
46
+ const hashGReferencePaths = getReferencePathsToGlobal(`$${uniqueId}$GLOBAL$`, program)
47
47
  if (hashGReferencePaths.length > 3) {
48
- for (const path of hashGReferencePaths) path.replaceWith(t.identifier(`_${uniqueID}_G_`))
48
+ for (const path of hashGReferencePaths) path.replaceWith(t.identifier(`_${uniqueId}_G_`))
49
49
  mainFunctionPath.node.body.body.unshift(
50
50
  t.variableDeclaration("let", [
51
- t.variableDeclarator(t.identifier(`_${uniqueID}_G_`), t.identifier(`$${uniqueID}$GLOBAL$`))
51
+ t.variableDeclarator(t.identifier(`_${uniqueId}_G_`), t.identifier(`$${uniqueId}$GLOBAL$`))
52
52
  ])
53
53
  )
54
54
  }
@@ -64,39 +64,39 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
64
64
  assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:127:60")
65
65
  if ("prototype" == memberExpression.property.name) {
66
66
  memberExpression.computed = !0
67
- memberExpression.property = t.identifier(`_${uniqueID}_PROTOTYPE_PROPERTY_`)
67
+ memberExpression.property = t.identifier(`_${uniqueId}_PROTOTYPE_PROPERTY_`)
68
68
  } else if ("__proto__" == memberExpression.property.name) {
69
69
  memberExpression.computed = !0
70
- memberExpression.property = t.identifier(`_${uniqueID}_PROTO_PROPERTY_`)
70
+ memberExpression.property = t.identifier(`_${uniqueId}_PROTO_PROPERTY_`)
71
71
  } else if (includesIllegalString(memberExpression.property.name)) {
72
72
  memberExpression.computed = !0
73
73
  memberExpression.property = t.stringLiteral(
74
- replaceUnsafeStrings(uniqueID, memberExpression.property.name)
74
+ replaceUnsafeStrings(uniqueId, memberExpression.property.name)
75
75
  )
76
76
  }
77
77
  }
78
78
  },
79
79
  ObjectProperty({ node: objectProperty }) {
80
80
  if ("Identifier" == objectProperty.key.type && includesIllegalString(objectProperty.key.name)) {
81
- objectProperty.key = t.stringLiteral(replaceUnsafeStrings(uniqueID, objectProperty.key.name))
81
+ objectProperty.key = t.stringLiteral(replaceUnsafeStrings(uniqueId, objectProperty.key.name))
82
82
  objectProperty.shorthand = !1
83
83
  }
84
84
  },
85
85
  StringLiteral({ node }) {
86
- node.value = replaceUnsafeStrings(uniqueID, node.value)
86
+ node.value = replaceUnsafeStrings(uniqueId, node.value)
87
87
  },
88
88
  TemplateLiteral({ node }) {
89
89
  for (const templateElement of node.quasis)
90
90
  if (templateElement.value.cooked) {
91
- templateElement.value.cooked = replaceUnsafeStrings(uniqueID, templateElement.value.cooked)
91
+ templateElement.value.cooked = replaceUnsafeStrings(uniqueId, templateElement.value.cooked)
92
92
  templateElement.value.raw = templateElement.value.cooked
93
93
  .replaceAll("\\", "\\\\")
94
94
  .replaceAll("`", "\\`")
95
95
  .replaceAll("${", "$\\{")
96
- } else templateElement.value.raw = replaceUnsafeStrings(uniqueID, templateElement.value.raw)
96
+ } else templateElement.value.raw = replaceUnsafeStrings(uniqueId, templateElement.value.raw)
97
97
  },
98
98
  RegExpLiteral(path) {
99
- path.node.pattern = replaceUnsafeStrings(uniqueID, path.node.pattern)
99
+ path.node.pattern = replaceUnsafeStrings(uniqueId, path.node.pattern)
100
100
  delete path.node.extra
101
101
  }
102
102
  })
@@ -120,8 +120,8 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
120
120
  keep_fnames: !mangleNames
121
121
  })
122
122
  ).code
123
- .replace(RegExp(`_${uniqueID}_PROTOTYPE_PROPERTY_`, "g"), '"prototype"')
124
- .replace(RegExp(`_${uniqueID}_PROTO_PROPERTY_`, "g"), '"__proto__"')
123
+ .replace(RegExp(`_${uniqueId}_PROTOTYPE_PROPERTY_`, "g"), '"prototype"')
124
+ .replace(RegExp(`_${uniqueId}_PROTO_PROPERTY_`, "g"), '"__proto__"')
125
125
  autocomplete &&
126
126
  (scriptBeforeJSONValueReplacement = spliceString(
127
127
  scriptBeforeJSONValueReplacement,
@@ -144,12 +144,12 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
144
144
  ObjectExpression(path) {
145
145
  const o = {}
146
146
  parseObjectExpression(path.node, o) &&
147
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValues.push(o) - 1}_`))
147
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValues.push(o) - 1}_`))
148
148
  },
149
149
  ArrayExpression(path) {
150
150
  const o = []
151
151
  parseArrayExpression(path.node, o) &&
152
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValues.push(o) - 1}_`))
152
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValues.push(o) - 1}_`))
153
153
  }
154
154
  })
155
155
  path.traverse({
@@ -182,7 +182,7 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
182
182
  UnaryExpression(path) {
183
183
  if ("void" == path.node.operator) {
184
184
  if ("NumericLiteral" == path.node.argument.type && !path.node.argument.value) {
185
- path.replaceWith(t.identifier(`_${uniqueID}_UNDEFINED_`))
185
+ path.replaceWith(t.identifier(`_${uniqueId}_UNDEFINED_`))
186
186
  undefinedIsReferenced = !0
187
187
  }
188
188
  } else if ("-" == path.node.operator && "NumericLiteral" == path.node.argument.type) {
@@ -195,7 +195,7 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
195
195
  (path.parent.computed = !0)
196
196
  let jsonValueIndex = jsonValues.indexOf(value)
197
197
  ;-1 == jsonValueIndex && (jsonValueIndex += jsonValues.push(value))
198
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValueIndex}_`))
198
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValueIndex}_`))
199
199
  })()
200
200
  )
201
201
  path.skip()
@@ -204,7 +204,7 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
204
204
  NullLiteral(path) {
205
205
  let jsonValueIndex = jsonValues.indexOf(null)
206
206
  ;-1 == jsonValueIndex && (jsonValueIndex += jsonValues.push(null))
207
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValueIndex}_`))
207
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValueIndex}_`))
208
208
  },
209
209
  NumericLiteral(path) {
210
210
  promises.push(
@@ -215,27 +215,27 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
215
215
  (path.parent.computed = !0)
216
216
  let jsonValueIndex = jsonValues.indexOf(path.node.value)
217
217
  ;-1 == jsonValueIndex && (jsonValueIndex += jsonValues.push(path.node.value))
218
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValueIndex}_`))
218
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValueIndex}_`))
219
219
  })()
220
220
  )
221
221
  },
222
222
  StringLiteral(path) {
223
- path.node.value = replaceUnsafeStrings(uniqueID, path.node.value)
223
+ path.node.value = replaceUnsafeStrings(uniqueId, path.node.value)
224
224
  if (JSON.stringify(path.node.value).includes("\\u00") || path.toString().length < 4) return
225
225
  "key" == path.parentKey && "ObjectProperty" == path.parent.type && (path.parent.computed = !0)
226
226
  let jsonValueIndex = jsonValues.indexOf(path.node.value)
227
227
  ;-1 == jsonValueIndex && (jsonValueIndex += jsonValues.push(path.node.value))
228
- path.replaceWith(t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValueIndex}_`))
228
+ path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValueIndex}_`))
229
229
  },
230
230
  ObjectProperty({ node }) {
231
231
  if (node.computed || "Identifier" != node.key.type || node.key.name.length < 4) return
232
232
  let jsonValueIndex = jsonValues.indexOf(node.key.name)
233
233
  ;-1 == jsonValueIndex && (jsonValueIndex += jsonValues.push(node.key.name))
234
234
  node.computed = !0
235
- node.key = t.identifier(`_${uniqueID}_JSON_VALUE_${jsonValueIndex}_`)
235
+ node.key = t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValueIndex}_`)
236
236
  },
237
237
  RegExpLiteral(path) {
238
- path.node.pattern = replaceUnsafeStrings(uniqueID, path.node.pattern)
238
+ path.node.pattern = replaceUnsafeStrings(uniqueId, path.node.pattern)
239
239
  delete path.node.extra
240
240
  }
241
241
  })
@@ -251,17 +251,17 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
251
251
  if ("string" != typeof jsonValues[0] || jsonValues[0].includes("\n") || jsonValues[0].includes("\t")) {
252
252
  const variableDeclaration = t.variableDeclaration("let", [
253
253
  t.variableDeclarator(
254
- t.identifier(`_${uniqueID}_JSON_VALUE_0_`),
254
+ t.identifier(`_${uniqueId}_JSON_VALUE_0_`),
255
255
  t.callExpression(t.memberExpression(t.identifier("JSON"), t.identifier("parse")), [
256
256
  t.memberExpression(
257
257
  t.taggedTemplateExpression(
258
258
  t.memberExpression(
259
- t.callExpression(t.identifier(`$${uniqueID}$SUBSCRIPT$scripts$quine$`), []),
259
+ t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
260
260
  t.identifier("split")
261
261
  ),
262
262
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
263
263
  ),
264
- t.identifier(`$${uniqueID}$SPLIT_INDEX$`),
264
+ t.identifier(`$${uniqueId}$SPLIT_INDEX$`),
265
265
  !0
266
266
  )
267
267
  ])
@@ -269,30 +269,30 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
269
269
  ])
270
270
  undefinedIsReferenced &&
271
271
  variableDeclaration.declarations.push(
272
- t.variableDeclarator(t.identifier(`_${uniqueID}_UNDEFINED_`))
272
+ t.variableDeclarator(t.identifier(`_${uniqueId}_UNDEFINED_`))
273
273
  )
274
274
  functionDeclaration.body.body.unshift(variableDeclaration)
275
275
  comment = JSON.stringify(jsonValues[0])
276
276
  } else {
277
277
  const variableDeclaration = t.variableDeclaration("let", [
278
278
  t.variableDeclarator(
279
- t.identifier(`_${uniqueID}_JSON_VALUE_0_`),
279
+ t.identifier(`_${uniqueId}_JSON_VALUE_0_`),
280
280
  t.memberExpression(
281
281
  t.taggedTemplateExpression(
282
282
  t.memberExpression(
283
- t.callExpression(t.identifier(`$${uniqueID}$SUBSCRIPT$scripts$quine$`), []),
283
+ t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
284
284
  t.identifier("split")
285
285
  ),
286
286
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
287
287
  ),
288
- t.identifier(`$${uniqueID}$SPLIT_INDEX$`),
288
+ t.identifier(`$${uniqueId}$SPLIT_INDEX$`),
289
289
  !0
290
290
  )
291
291
  )
292
292
  ])
293
293
  undefinedIsReferenced &&
294
294
  variableDeclaration.declarations.push(
295
- t.variableDeclarator(t.identifier(`_${uniqueID}_UNDEFINED_`))
295
+ t.variableDeclarator(t.identifier(`_${uniqueId}_UNDEFINED_`))
296
296
  )
297
297
  functionDeclaration.body.body.unshift(variableDeclaration)
298
298
  comment = jsonValues[0]
@@ -300,31 +300,31 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
300
300
  else {
301
301
  const variableDeclaration = t.variableDeclaration("let", [
302
302
  t.variableDeclarator(
303
- t.arrayPattern(jsonValues.map((_, index) => t.identifier(`_${uniqueID}_JSON_VALUE_${index}_`))),
303
+ t.arrayPattern(jsonValues.map((_, index) => t.identifier(`_${uniqueId}_JSON_VALUE_${index}_`))),
304
304
  t.callExpression(t.memberExpression(t.identifier("JSON"), t.identifier("parse")), [
305
305
  t.memberExpression(
306
306
  t.taggedTemplateExpression(
307
307
  t.memberExpression(
308
- t.callExpression(t.identifier(`$${uniqueID}$SUBSCRIPT$scripts$quine$`), []),
308
+ t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
309
309
  t.identifier("split")
310
310
  ),
311
311
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
312
312
  ),
313
- t.identifier(`$${uniqueID}$SPLIT_INDEX$`),
313
+ t.identifier(`$${uniqueId}$SPLIT_INDEX$`),
314
314
  !0
315
315
  )
316
316
  ])
317
317
  )
318
318
  ])
319
319
  undefinedIsReferenced &&
320
- variableDeclaration.declarations.push(t.variableDeclarator(t.identifier(`_${uniqueID}_UNDEFINED_`)))
320
+ variableDeclaration.declarations.push(t.variableDeclarator(t.identifier(`_${uniqueId}_UNDEFINED_`)))
321
321
  functionDeclaration.body.body.unshift(variableDeclaration)
322
322
  comment = JSON.stringify(jsonValues)
323
323
  }
324
324
  } else
325
325
  undefinedIsReferenced &&
326
326
  functionDeclaration.body.body.unshift(
327
- t.variableDeclaration("let", [t.variableDeclarator(t.identifier(`_${uniqueID}_UNDEFINED_`))])
327
+ t.variableDeclaration("let", [t.variableDeclarator(t.identifier(`_${uniqueId}_UNDEFINED_`))])
328
328
  )
329
329
  code = generate(file).code
330
330
  }
@@ -356,7 +356,7 @@ async function minify(file, { uniqueID = "00000000000", mangleNames = !1, forceQ
356
356
  getFunctionBodyStart(code) + 1
357
357
  )
358
358
  code = code.replace(
359
- `$${uniqueID}$SPLIT_INDEX$`,
359
+ `$${uniqueId}$SPLIT_INDEX$`,
360
360
  await minifyNumber(code.split("\t").findIndex(part => part == comment))
361
361
  )
362
362
  }
@@ -1 +1 @@
1
- export declare const postprocess: (code: string, seclevel: number, uniqueID: string) => string;
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")
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
20
  export { postprocess }
@@ -1,9 +1,9 @@
1
1
  import type { LaxPartial } from "@samual/lib";
2
2
  export type PreprocessOptions = LaxPartial<{
3
- uniqueID: string;
3
+ uniqueId: string;
4
4
  }>;
5
5
  /** @param code source code for preprocessing
6
6
  * @param options {@link PreprocessOptions details} */
7
- export declare function preprocess(code: string, { uniqueID }?: PreprocessOptions): Promise<{
7
+ export declare function preprocess(code: string, { uniqueId }?: PreprocessOptions): Promise<{
8
8
  code: string;
9
9
  }>;
@@ -7,8 +7,8 @@ import { spliceString } from "@samual/lib/spliceString"
7
7
  import { resolve } from "import-meta-resolve"
8
8
  const { default: traverse } = babelTraverse,
9
9
  { default: generate } = babelGenerator
10
- async function preprocess(code, { uniqueID = "00000000000" } = {}) {
11
- assert(/^\w{11}$/.test(uniqueID), "src/processScript/preprocess.ts:22:36")
10
+ async function preprocess(code, { uniqueId = "00000000000" } = {}) {
11
+ assert(/^\w{11}$/.test(uniqueId), "src/processScript/preprocess.ts:22:36")
12
12
  const sourceCode = code
13
13
  let lengthBefore, file, program
14
14
  do {
@@ -61,9 +61,9 @@ async function preprocess(code, { uniqueID = "00000000000" } = {}) {
61
61
  else if ((match = /^#[0-4fhmln]?s\./.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
62
62
  else if ((match = /^#D[^\w$]/.exec(codeSlice))) code = spliceString(code, "$", error.pos, 1)
63
63
  else if ((match = /^#FMCL/.exec(codeSlice)))
64
- code = spliceString(code, `$${uniqueID}$FMCL$`, error.pos, match[0].length)
64
+ code = spliceString(code, `$${uniqueId}$FMCL$`, error.pos, match[0].length)
65
65
  else if ((match = /^#G/.exec(codeSlice)))
66
- code = spliceString(code, `$${uniqueID}$GLOBAL$`, error.pos, match[0].length)
66
+ code = spliceString(code, `$${uniqueId}$GLOBAL$`, error.pos, match[0].length)
67
67
  else {
68
68
  if (!(match = /^#db\./.exec(codeSlice))) throw error
69
69
  code = spliceString(code, "$", error.pos, 1)
@@ -2,4 +2,4 @@ import type { NodePath } from "@babel/traverse";
2
2
  import type { Identifier, Program } from "@babel/types";
3
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;
@@ -16,17 +16,17 @@ const includesIllegalString = toCheck =>
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,7 +1,7 @@
1
1
  import type { File } from "@babel/types";
2
2
  import type { LaxPartial } from "@samual/lib";
3
3
  export type TransformOptions = LaxPartial<{
4
- /** 11 a-z 0-9 characters */ uniqueID: string;
4
+ /** 11 a-z 0-9 characters */ uniqueId: string;
5
5
  /** the user going to be hosting this script (or set to `true` if not yet known) */ scriptUser: string | true;
6
6
  seclevel: number;
7
7
  }> & {
@@ -13,7 +13,7 @@ export type TransformOptions = LaxPartial<{
13
13
  * @param file babel ast node representing a file containing preprocessed code
14
14
  * @param sourceCode the original untouched source code
15
15
  * @param options {@link TransformOptions details} */
16
- export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }: TransformOptions): {
16
+ export declare function transform(file: File, sourceCode: string, { uniqueId, scriptUser, scriptName, seclevel }: TransformOptions): {
17
17
  file: File;
18
18
  seclevel: number;
19
19
  };