hackmud-script-manager 0.20.4-c524114 → 0.20.4-cf7622f

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/env.d.ts CHANGED
@@ -1,19 +1,9 @@
1
- type Replace<T, R> = Omit<T, Extract<keyof R, keyof T>> & R
1
+ type Replace<A, B> = Omit<A, keyof B> & B
2
2
  type ScriptSuccess<T = object> = { ok: true } & T
3
3
  type ScriptFailure = { ok: false, msg?: string }
4
4
  type ScriptResponse<T = object> = ScriptSuccess<T> | ScriptFailure
5
5
  type ErrorScripts = Record<string, () => ScriptFailure>
6
-
7
- type AllOptional<T> = {
8
- [K in keyof T]-?: {} extends Pick<T, K> ? true : false
9
- }[keyof T]
10
-
11
- type Scriptor<Args = unknown, Ret = unknown> = {
12
- name: string,
13
- call: AllOptional<Args> extends true
14
- ? (args?: Args) => Ret
15
- : (args: Args) => Ret
16
- }
6
+ type Scriptor<TArgs extends any[] = any[]> = { name: string, call: (...args: TArgs) => unknown }
17
7
 
18
8
  type Subscripts = Record<string, Record<string, (...args: any) => any>> & {
19
9
  accts: ErrorScripts
@@ -41,7 +31,7 @@ type UpgradeRarityString = "`0noob`" | "`1kiddie`" | "`2h4x0r`" | "`3h4rdc0r3`"
41
31
  type UpgradeRarityNumber = 0 | 1 | 2 | 3 | 4 | 5;
42
32
  type UpgradeRarity = UpgradeRarityString | UpgradeRarityNumber;
43
33
 
44
- type UpgradeCore = {
34
+ type UpgradeBase = {
45
35
  name: string
46
36
  type: "lock" | "script_space" | "chat" | "script" | "tool" | "bot_brain" | "glam"
47
37
  up_class?: -1 | 0 | 1 | 2 | 3
@@ -53,9 +43,9 @@ type UpgradeCore = {
53
43
  description: string
54
44
  }
55
45
 
56
- type Upgrade = UpgradeCore & Record<string, null | boolean | number | string>
46
+ type Upgrade = UpgradeBase & Record<string, null | boolean | number | string>
57
47
 
58
- type CLIUpgrade = Omit<UpgradeCore, `rarity`> & {
48
+ type CliUpgrade = Omit<UpgradeBase, `rarity`> & {
59
49
  [x: string]: null | boolean | number | string
60
50
  rarity: UpgradeRarityString
61
51
  }
@@ -155,7 +145,16 @@ type Fullsec = Subscripts & PlayerFullsec & {
155
145
  market: {
156
146
  /** **FULLSEC** */ browse: {
157
147
  (args:
158
- Partial<{ seller: string, listed_before: number, listed_after: number, cost: number | string } & Omit<CLIUpgrade, "rarity">>
148
+ Partial<{
149
+ seller: string | MongoQuerySelector<string>,
150
+ listed_before: number | MongoQuerySelector<number>,
151
+ listed_after: number,
152
+ cost: number | MongoQuerySelector<number> | string,
153
+ rarity: UpgradeRarityNumber | MongoQuerySelector<UpgradeRarityNumber>,
154
+ name: string | MongoQuerySelector<string>
155
+ } & Omit<{
156
+ [k in keyof CliUpgrade]: CliUpgrade[k] | MongoQuerySelector<CliUpgrade[k]>
157
+ }, "rarity">>
159
158
  ): { i: string, name: string, rarity: Upgrade["rarity"], cost: number }[] | ScriptFailure
160
159
 
161
160
  <I extends string>(args: { i: I }): {
@@ -357,7 +356,7 @@ type Fullsec = Subscripts & PlayerFullsec & {
357
356
  * const arr = [ 1, 2, 2, 3, 2 ]
358
357
  *
359
358
  * $D(uniq(arr)) // [ 1, 2, 3, 2 ] */
360
- uniq: (array: T[]) => T[]
359
+ uniq: <T>(array: T[]) => T[]
361
360
 
362
361
  /** Sorts an array of numbers or number-coercible strings in descending order. */
363
362
  u_sort_num_arr_desc: <T>(array: T[]) => T[]
@@ -424,17 +423,17 @@ type Fullsec = Subscripts & PlayerFullsec & {
424
423
  upgrades_of_owner: {
425
424
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?: { filter?: F, full?: false }): (
426
425
  Omit<
427
- Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
426
+ Pick<UpgradeBase, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
428
427
  keyof F
429
428
  > & Pick<F, "tier" | "rarity" | "name" | "type" | "i" | "loaded">
430
429
  )[] | ScriptFailure
431
430
 
432
431
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args: { filter?: F, full: true }): (
433
- Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>
432
+ Omit<UpgradeBase, keyof F> & F & Record<string, null | boolean | number | string>
434
433
  )[] | ScriptFailure
435
434
 
436
435
  <I extends number>(args: { i: I }): (
437
- Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
436
+ Omit<UpgradeBase, "i"> & { [x: string]: null | boolean | number | string, i: I }
438
437
  ) | ScriptFailure
439
438
  }
440
439
 
@@ -511,7 +510,7 @@ type Highsec = Fullsec & PlayerHighsec & {
511
510
  /** **HIGHSEC** */
512
511
  upgrades: {
513
512
  <I extends number>(args: { i: I }): (
514
- Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
513
+ Omit<UpgradeBase, "i"> & { [x: string]: null | boolean | number | string, i: I }
515
514
  ) | ScriptFailure
516
515
 
517
516
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?: {
@@ -519,20 +518,20 @@ type Highsec = Fullsec & PlayerHighsec & {
519
518
  is_script?: true
520
519
  full?: false
521
520
  }): (
522
- Omit<Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">, keyof F> & F &
521
+ Omit<Pick<UpgradeBase, "tier" | "rarity" | "name" | "type" | "i" | "loaded">, keyof F> & F &
523
522
  Record<string, null | boolean | number | string>
524
523
  )[] | ScriptFailure
525
524
 
526
525
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?:
527
526
  { filter?: F, is_script?: true, full: true }
528
- ): (Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>)[] | ScriptFailure
527
+ ): (Omit<UpgradeBase, keyof F> & F & Record<string, null | boolean | number | string>)[] | ScriptFailure
529
528
 
530
529
  (args?: { filter?: Partial<Upgrade & { loaded: boolean }>, is_script: false, full?: false }):
531
530
  { msg: string, upgrades: string[] } | ScriptFailure
532
531
 
533
532
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(
534
533
  args?: { filter?: F, is_script: false, full: true }
535
- ): (Omit<UpgradeCore, keyof F | `rarity`> & F & {
534
+ ): (Omit<UpgradeBase, keyof F | `rarity`> & F & {
536
535
  [x: string]: null | boolean | number | string
537
536
  rarity: UpgradeRarityString
538
537
  })[] | ScriptFailure
@@ -630,6 +629,9 @@ type Lowsec = Midsec & PlayerLowsec & {
630
629
  (args: { i: number | number[], to: string, memo?: string }): ScriptResponse
631
630
  (args: { sn: string | string[], to: string, memo?: string }): ScriptResponse
632
631
  }
632
+ /** **LOWSEC** */ expose_access_log: (args: { target: string }) => ScriptResponse
633
+ /** **LOWSEC** */ xfer_gc_from: (args: { target: string, amount: number | string }) => ScriptResponse
634
+ /** **LOWSEC** */ expose_balance: (args: { target: string }) => ScriptResponse
633
635
  }
634
636
  }
635
637
 
@@ -714,10 +716,50 @@ type Nullsec = Lowsec & PlayerNullsec & {
714
716
  }
715
717
  }
716
718
 
719
+ type MongoTypeString = "minKey" | "double" | "string" | "object" | "array" | "binData" | "undefined" | "objectId" |
720
+ "bool" | "date" | "null" | "regex" | "dbPointer" | "javascript" | "symbol" | "int" | "timestamp" | "long" | "decimal" | "maxKey";
721
+ type MongoTypeNumber = -1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 127;
722
+
717
723
  type MongoValue = string | number | boolean | Date | MongoValue[] | { [key: string]: MongoValue } | null
718
724
 
719
725
  type MongoCommandValue = string | number | boolean | Date | MongoCommandValue[] | { [key: string]: MongoCommandValue } |
720
- null | undefined
726
+ null | undefined
727
+
728
+ /**
729
+ * Currently unused
730
+ */
731
+ type MongoLogicalSelectors<T extends MongoValue = MongoValue> = {
732
+ $not: T | MongoComparisonSelectors<T> | MongoLogicalSelectors<T>
733
+ $nor: T[]
734
+ $or: T[]
735
+ $and: T[]
736
+ }
737
+
738
+ type MongoArraySelectors<T extends Array<MongoValue> = Array<MongoValue>> = {
739
+ $all: T
740
+ $elemMatch: T
741
+ $size: number
742
+ }
743
+
744
+ type MongoComparisonSelectors<T extends MongoValue = MongoValue> = {
745
+ $eq: T
746
+ $gt: T
747
+ $gte: T
748
+ $in: T[]
749
+ $lt: T
750
+ $lte: T
751
+ $ne: T
752
+ $nin: T[]
753
+ }
754
+
755
+ type MongoElementSelectors = {
756
+ $exists: boolean
757
+ $type: MongoTypeNumber | MongoTypeString
758
+ }
759
+
760
+ type MongoQuerySelector<T extends MongoValue = MongoValue> = Partial<T extends MongoValue[] ?
761
+ (MongoArraySelectors<T> & MongoElementSelectors & MongoComparisonSelectors<T>) :
762
+ (MongoElementSelectors & MongoComparisonSelectors<T>)>
721
763
 
722
764
  type Query = { [key: string]: MongoValue | Query } & { _id?: Id, $in?: MongoValue[] }
723
765
  type Projection = Record<string, boolean | 0 | 1>
@@ -766,7 +808,7 @@ type Cursor = {
766
808
  ObjectId: () => any
767
809
  }
768
810
 
769
- type CLIContext = {
811
+ type CliContext = {
770
812
  /** The name of the user who is calling the script. */ caller: string
771
813
  /** The name of this script. */ this_script: string
772
814
  /** The number of columns in the caller’s terminal. */ cols: number
@@ -774,17 +816,23 @@ type CLIContext = {
774
816
 
775
817
  /** The name of the script that directly called this script, or null if called on the command line or as a
776
818
  * scriptor. */ calling_script: null
819
+ is_scriptor?: undefined
820
+ is_brain?: undefined
777
821
  }
778
822
 
779
- type SubscriptContext = Replace<CLIContext, {
823
+ type SubscriptContext = Replace<CliContext, {
780
824
  /** The name of the script that directly called this script, or null if called on the command line or as a scriptor.
781
825
  */
782
826
  calling_script: string
783
827
  }>
784
828
 
785
- type ScriptorContext = CLIContext & { /** Whether the script is being run as a scriptor. */ is_scriptor: true }
786
- type BrainContext = CLIContext & { /** Whether the script is being run via a bot brain. */ is_brain: true }
787
- type Context = CLIContext | SubscriptContext | ScriptorContext | BrainContext
829
+ type ScriptorContext =
830
+ Replace<CliContext, { /** Whether the script is being run as a scriptor. */ is_scriptor: true }>
831
+
832
+ type BrainContext =
833
+ Replace<CliContext, { /** Whether the script is being run via a bot brain. */ is_brain: true }>
834
+
835
+ type Context = CliContext | SubscriptContext | ScriptorContext | BrainContext
788
836
 
789
837
  /** Subscript space that can call FULLSEC scripts. */ declare const $fs: Fullsec
790
838
 
@@ -827,6 +875,8 @@ declare const $0s: typeof $ns
827
875
  * } */
828
876
  declare const $s: Nullsec
829
877
 
878
+ type ObjectId = { $oid: string }
879
+
830
880
  declare const $db: {
831
881
  /** Insert a document or documents into a collection.
832
882
  * @param documents A document or array of documents to insert into the collection. */
@@ -920,6 +970,8 @@ declare const $db: {
920
970
  signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
921
971
  }
922
972
  }
973
+
974
+ ObjectId: () => ObjectId
923
975
  }
924
976
 
925
977
  /** Debug Log.
@@ -956,7 +1008,7 @@ declare const $FMCL: undefined | true
956
1008
  * @example
957
1009
  * if (!$G.dbCache)
958
1010
  * $G.dbCache = $db.f({ whatever: true }).first() */
959
- declare const $G: any
1011
+ declare const $G: Record<string | symbol, any>
960
1012
 
961
1013
  /** This contains a JS timestamp (not Date) set immediately before your code begins running.
962
1014
  * @example
@@ -1005,3 +1057,14 @@ declare const _FULL_SCRIPT_NAME: string
1005
1057
  *
1006
1058
  * In rare cases where it's not known at build time, it's `-1`. */
1007
1059
  declare const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
1060
+
1061
+ type DeepFreeze<T> = { readonly [P in keyof T]: DeepFreeze<T[P]> }
1062
+
1063
+ /** Recursively
1064
+ * [`Object.freeze()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
1065
+ * an object and its properties' objects and its properties' objects and so on.
1066
+ *
1067
+ * [Official Hackmud Wiki](https://wiki.hackmud.com/scripting/extensions/deep_freeze) */
1068
+ declare const DEEP_FREEZE: <T>(value: T) => DeepFreeze<T>
1069
+
1070
+ declare const _RUN_ID: string
@@ -1,5 +1,6 @@
1
1
  import { readDirectoryWithStats } from "@samual/lib/readDirectoryWithStats"
2
2
  import { basename, resolve } from "path"
3
+ import * as PathPosix from "path/posix"
3
4
  async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
4
5
  const users = new Set()
5
6
  if (hackmudPath)
@@ -29,7 +30,7 @@ async function generateTypeDeclaration(sourceDirectory, hackmudPath) {
29
30
  }
30
31
  })
31
32
  )
32
- sourceDirectory = resolve(sourceDirectory)
33
+ sourceDirectory = PathPosix.resolve(sourceDirectory)
33
34
  let o = ""
34
35
  for (const script of wildScripts) o += `type $${script}$ = typeof import("${sourceDirectory}/${script}").default\n`
35
36
  o += "\n"
package/index.js CHANGED
@@ -7,6 +7,7 @@ export { syncMacros } from "./syncMacros.js"
7
7
  export { watch } from "./watch.js"
8
8
  import "@samual/lib/readDirectoryWithStats"
9
9
  import "path"
10
+ import "path/posix"
10
11
  import "@babel/generator"
11
12
  import "@babel/parser"
12
13
  import "@babel/plugin-proposal-decorators"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hackmud-script-manager",
3
- "version": "0.20.4-c524114",
3
+ "version": "0.20.4-cf7622f",
4
4
  "description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
5
5
  "keywords": [
6
6
  "api",
@@ -204,6 +204,7 @@ async function processScript(
204
204
  const bundle = await rollup({
205
205
  input: filePathResolved,
206
206
  plugins: [
207
+ rollupPluginJSON({ preferConst: !0 }),
207
208
  {
208
209
  name: "hackmud-script-manager",
209
210
  async transform(code, id) {
@@ -227,8 +228,7 @@ async function processScript(
227
228
  },
228
229
  babel({ babelHelpers: "bundled", plugins, configFile: !1, extensions: supportedExtensions }),
229
230
  rollupPluginCommonJS(),
230
- rollupPluginNodeResolve({ extensions: supportedExtensions }),
231
- rollupPluginJSON()
231
+ rollupPluginNodeResolve({ extensions: supportedExtensions })
232
232
  ],
233
233
  treeshake: { moduleSideEffects: !1 }
234
234
  }),
@@ -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, 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'
@@ -43,15 +43,6 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
43
43
  )
44
44
  }
45
45
  }
46
- const hashGReferencePaths = getReferencePathsToGlobal(`$${uniqueId}$GLOBAL$`, program)
47
- if (hashGReferencePaths.length > 3) {
48
- for (const path of hashGReferencePaths) path.replaceWith(t.identifier(`_${uniqueId}_G_`))
49
- mainFunctionPath.node.body.body.unshift(
50
- t.variableDeclaration("let", [
51
- t.variableDeclarator(t.identifier(`_${uniqueId}_G_`), t.identifier(`$${uniqueId}$GLOBAL$`))
52
- ])
53
- )
54
- }
55
46
  const jsonValues = []
56
47
  let scriptBeforeJSONValueReplacement,
57
48
  comment,
@@ -61,7 +52,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
61
52
  traverse(fileBeforeJSONValueReplacement, {
62
53
  MemberExpression({ node: memberExpression }) {
63
54
  if (!memberExpression.computed) {
64
- assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:127:60")
55
+ assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:115:60")
65
56
  if ("prototype" == memberExpression.property.name) {
66
57
  memberExpression.computed = !0
67
58
  memberExpression.property = t.identifier(`_${uniqueId}_PROTOTYPE_PROPERTY_`)
@@ -136,7 +127,8 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
136
127
  const promises = []
137
128
  traverse(file, {
138
129
  FunctionDeclaration(path) {
139
- path.traverse({
130
+ const body = path.get("body")
131
+ body.traverse({
140
132
  Function(path) {
141
133
  "CallExpression" != path.parent.type && "callee" != path.parentKey && path.skip()
142
134
  },
@@ -152,7 +144,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
152
144
  path.replaceWith(t.identifier(`_${uniqueId}_JSON_VALUE_${jsonValues.push(o) - 1}_`))
153
145
  }
154
146
  })
155
- path.traverse({
147
+ body.traverse({
156
148
  TemplateLiteral(path) {
157
149
  if ("TaggedTemplateExpression" == path.parent.type) return
158
150
  const templateLiteral = path.node
@@ -172,7 +164,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
172
164
  },
173
165
  MemberExpression({ node: memberExpression }) {
174
166
  if (!memberExpression.computed) {
175
- assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:259:62")
167
+ assert("Identifier" == memberExpression.property.type, "src/processScript/minify.ts:249:62")
176
168
  if (!(memberExpression.property.name.length < 3)) {
177
169
  memberExpression.computed = !0
178
170
  memberExpression.property = t.stringLiteral(memberExpression.property.name)
@@ -246,7 +238,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
246
238
  })
247
239
  await Promise.all(promises)
248
240
  const functionDeclaration = file.program.body[0]
249
- assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:364:61")
241
+ assert("FunctionDeclaration" == functionDeclaration.type, "src/processScript/minify.ts:354:61")
250
242
  if (jsonValues.length) {
251
243
  hasComment = !0
252
244
  if (1 == jsonValues.length)
@@ -258,7 +250,10 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
258
250
  t.memberExpression(
259
251
  t.taggedTemplateExpression(
260
252
  t.memberExpression(
261
- t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
253
+ t.callExpression(
254
+ t.identifier(`$${uniqueId}$4$SUBSCRIPT$scripts$quine$`),
255
+ []
256
+ ),
262
257
  t.identifier("split")
263
258
  ),
264
259
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
@@ -282,7 +277,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
282
277
  t.memberExpression(
283
278
  t.taggedTemplateExpression(
284
279
  t.memberExpression(
285
- t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
280
+ t.callExpression(t.identifier(`$${uniqueId}$4$SUBSCRIPT$scripts$quine$`), []),
286
281
  t.identifier("split")
287
282
  ),
288
283
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
@@ -307,7 +302,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
307
302
  t.memberExpression(
308
303
  t.taggedTemplateExpression(
309
304
  t.memberExpression(
310
- t.callExpression(t.identifier(`$${uniqueId}$SUBSCRIPT$scripts$quine$`), []),
305
+ t.callExpression(t.identifier(`$${uniqueId}$4$SUBSCRIPT$scripts$quine$`), []),
311
306
  t.identifier("split")
312
307
  ),
313
308
  t.templateLiteral([t.templateElement({ raw: "\t", cooked: "\t" }, !0)], [])
@@ -363,7 +358,7 @@ async function minify(file, { uniqueId = "00000000000", mangleNames = !1, forceQ
363
358
  )
364
359
  }
365
360
  if (1 == forceQuineCheats) return code
366
- assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:495:43")
361
+ assert(scriptBeforeJSONValueReplacement, "src/processScript/minify.ts:485:43")
367
362
  return (
368
363
  countHackmudCharacters(scriptBeforeJSONValueReplacement) <=
369
364
  countHackmudCharacters(code) + Number(hasComment)
@@ -379,7 +374,7 @@ function parseObjectExpression(node, o) {
379
374
  "Identifier" == property.key.type ||
380
375
  "NumericLiteral" == property.key.type ||
381
376
  "StringLiteral" == property.key.type,
382
- "src/processScript/minify.ts:517:4"
377
+ "src/processScript/minify.ts:507:4"
383
378
  )
384
379
  if ("ArrayExpression" == property.value.type) {
385
380
  const childArray = []
@@ -1 +1 @@
1
- export declare const postprocess: (code: string, seclevel: number, uniqueId: string) => string;
1
+ export declare const postprocess: (code: string, uniqueId: string) => string;
@@ -1,12 +1,12 @@
1
- const postprocess = (code, seclevel, uniqueId) =>
1
+ const postprocess = (code, uniqueId) =>
2
2
  code
3
- .replace(/^function\s*\w+\(/, "function(")
3
+ .replace(/^function\s*[\w$]+\(/, "function(")
4
4
  .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$SC_DOLLAR\\$`, "g"), "S\\C$")
5
5
  .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$DB_DOLLAR\\$`, "g"), "D\\B$")
6
6
  .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$D\\$`, "g"), "_\\_D_S")
7
7
  .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$FMCL\\$`, "g"), "_\\_FMCL_")
8
8
  .replace(RegExp(`\\$${uniqueId}\\$\\\\(?:\\\\)?\\$G\\$`, "g"), "_\\_G_")
9
- .replace(RegExp(`\\$${uniqueId}\\$SUBSCRIPT\\$(\\w+)\\$(\\w+)\\$`, "g"), `#${"nlmhf"[seclevel]}s.$1.$2`)
9
+ .replace(RegExp(`\\$${uniqueId}\\$(\\d)\\$SUBSCRIPT\\$(\\w+)\\$(\\w+)\\$`, "g"), "#$1s.$2.$3")
10
10
  .replace(RegExp(`\\$${uniqueId}\\$DEBUG\\$`, "g"), "#D")
11
11
  .replace(RegExp(`\\$${uniqueId}\\$FMCL\\$`, "g"), "#FMCL")
12
12
  .replace(RegExp(`\\$${uniqueId}\\$GLOBAL\\$`, "g"), "#G")
@@ -98,8 +98,10 @@ async function preprocess(code, { uniqueId = "00000000000" } = {}) {
98
98
  t.stringLiteral(resolve("proxy-polyfill/src/proxy.js", import.meta.url).slice(7))
99
99
  )
100
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 }
101
+ if (1 == program.node.body.length && "FunctionDeclaration" == program.node.body[0].type)
102
+ throw Error(
103
+ "Scripts that only contain a single function declaration are no longer supported.\nPrefix the function declaration with `export default`."
104
+ )
105
+ return { code: generate(file).code }
104
106
  }
105
107
  export { preprocess }