hackmud-script-manager 0.20.4-23a791c → 0.20.4-34a1e78

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,20 +1,6 @@
1
- type Replace<T, R> = Omit<T, Extract<keyof R, keyof T>> & R
2
- type ScriptSuccess<T = object> = { ok: true } & T
3
- type ScriptFailure = { ok: false, msg?: string }
4
- type ScriptResponse<T = object> = ScriptSuccess<T> | ScriptFailure
1
+ type Replace<A, B> = Omit<A, keyof B> & BigInt
5
2
  type ErrorScripts = Record<string, () => ScriptFailure>
6
3
 
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
- }
17
-
18
4
  type Subscripts = Record<string, Record<string, (...args: any) => any>> & {
19
5
  accts: ErrorScripts
20
6
  autos: ErrorScripts
@@ -31,17 +17,10 @@ type Subscripts = Record<string, Record<string, (...args: any) => any>> & {
31
17
  users: ErrorScripts
32
18
  }
33
19
 
34
- interface PlayerFullsec {}
35
- interface PlayerHighsec {}
36
- interface PlayerMidsec {}
37
- interface PlayerLowsec {}
38
- interface PlayerNullsec {}
39
-
40
20
  type UpgradeRarityString = "`0noob`" | "`1kiddie`" | "`2h4x0r`" | "`3h4rdc0r3`" | "`4|_|b3|2`" | "`531337`"
41
- type UpgradeRarityNumber = 0 | 1 | 2 | 3 | 4 | 5;
42
- type UpgradeRarity = UpgradeRarityString | UpgradeRarityNumber;
21
+ type UpgradeRarityNumber = 0 | 1 | 2 | 3 | 4 | 5
43
22
 
44
- type UpgradeCore = {
23
+ type UpgradeBase = {
45
24
  name: string
46
25
  type: "lock" | "script_space" | "chat" | "script" | "tool" | "bot_brain" | "glam"
47
26
  up_class?: -1 | 0 | 1 | 2 | 3
@@ -53,12 +32,10 @@ type UpgradeCore = {
53
32
  description: string
54
33
  }
55
34
 
56
- type Upgrade = UpgradeCore & Record<string, null | boolean | number | string>
35
+ type Upgrade = UpgradeBase & Record<string, null | boolean | number | string>
57
36
 
58
- type CLIUpgrade = Omit<UpgradeCore, `rarity`> & {
59
- [x: string]: null | boolean | number | string
60
- rarity: UpgradeRarityString
61
- }
37
+ type CliUpgrade = Omit<UpgradeBase, `rarity`> &
38
+ { [k: string]: null | boolean | number | string, rarity: UpgradeRarityString }
62
39
 
63
40
  type UsersTopItem<R> = { rank: R, name: string, last_activity: string, balance: string }
64
41
  type CorpsTopItem<R> = { rank: R, name: string, worth: string }
@@ -136,26 +113,25 @@ type Fullsec = Subscripts & PlayerFullsec & {
136
113
  }
137
114
 
138
115
  escrow: {
139
- /** **FULLSEC** */ charge: (args: {
140
- cost: number | string
141
- is_unlim?: boolean
142
- }) => null | ScriptFailure
143
-
116
+ /** **FULLSEC** */ charge: (args: { cost: number | string, is_unlim?: boolean }) => null | ScriptFailure
144
117
  confirm: never
145
118
  }
146
119
 
147
- gui: {
148
- chats: never
149
- quiet: never
150
- size: never
151
- vfx: never
152
- vol: never
153
- }
120
+ gui: { chats: never, quiet: never, size: never, vfx: never, vol: never }
154
121
 
155
122
  market: {
156
123
  /** **FULLSEC** */ browse: {
157
124
  (args:
158
- Partial<{ seller: string, listed_before: number, listed_after: number, cost: number | string } & Omit<CLIUpgrade, "rarity">>
125
+ Partial<{
126
+ seller: string | MongoQuerySelector<string>,
127
+ listed_before: number | MongoQuerySelector<number>,
128
+ listed_after: number,
129
+ cost: number | MongoQuerySelector<number> | string,
130
+ rarity: UpgradeRarityNumber | MongoQuerySelector<UpgradeRarityNumber>,
131
+ name: string | MongoQuerySelector<string>
132
+ } & Omit<{
133
+ [k in keyof CliUpgrade]: CliUpgrade[k] | MongoQuerySelector<CliUpgrade[k]>
134
+ }, "rarity">>
159
135
  ): { i: string, name: string, rarity: Upgrade["rarity"], cost: number }[] | ScriptFailure
160
136
 
161
137
  <I extends string>(args: { i: I }): {
@@ -357,7 +333,7 @@ type Fullsec = Subscripts & PlayerFullsec & {
357
333
  * const arr = [ 1, 2, 2, 3, 2 ]
358
334
  *
359
335
  * $D(uniq(arr)) // [ 1, 2, 3, 2 ] */
360
- uniq: (array: T[]) => T[]
336
+ uniq: <T>(array: T[]) => T[]
361
337
 
362
338
  /** Sorts an array of numbers or number-coercible strings in descending order. */
363
339
  u_sort_num_arr_desc: <T>(array: T[]) => T[]
@@ -424,17 +400,17 @@ type Fullsec = Subscripts & PlayerFullsec & {
424
400
  upgrades_of_owner: {
425
401
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?: { filter?: F, full?: false }): (
426
402
  Omit<
427
- Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
403
+ Pick<UpgradeBase, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
428
404
  keyof F
429
405
  > & Pick<F, "tier" | "rarity" | "name" | "type" | "i" | "loaded">
430
406
  )[] | ScriptFailure
431
407
 
432
408
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args: { filter?: F, full: true }): (
433
- Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>
409
+ Omit<UpgradeBase, keyof F> & F & Record<string, null | boolean | number | string>
434
410
  )[] | ScriptFailure
435
411
 
436
412
  <I extends number>(args: { i: I }): (
437
- Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
413
+ Omit<UpgradeBase, "i"> & { [x: string]: null | boolean | number | string, i: I }
438
414
  ) | ScriptFailure
439
415
  }
440
416
 
@@ -460,7 +436,10 @@ type Highsec = Fullsec & PlayerHighsec & {
460
436
  /** **HIGHSEC**
461
437
  * @returns GC balance as number if `is_script` is true (default).
462
438
  * @returns GC balance as string if `is_script` is false. */
463
- balance: ((args?: { is_script?: true }) => number) & ((args: { is_script: false }) => string)
439
+ balance: {
440
+ (args?: { is_script?: true }): number
441
+ (args: { is_script: false }): string
442
+ }
464
443
 
465
444
  /** **HIGHSEC**
466
445
  * @returns Transaction history according to filter.
@@ -511,7 +490,7 @@ type Highsec = Fullsec & PlayerHighsec & {
511
490
  /** **HIGHSEC** */
512
491
  upgrades: {
513
492
  <I extends number>(args: { i: I }): (
514
- Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
493
+ Omit<UpgradeBase, "i"> & { [x: string]: null | boolean | number | string, i: I }
515
494
  ) | ScriptFailure
516
495
 
517
496
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?: {
@@ -519,20 +498,20 @@ type Highsec = Fullsec & PlayerHighsec & {
519
498
  is_script?: true
520
499
  full?: false
521
500
  }): (
522
- Omit<Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">, keyof F> & F &
501
+ Omit<Pick<UpgradeBase, "tier" | "rarity" | "name" | "type" | "i" | "loaded">, keyof F> & F &
523
502
  Record<string, null | boolean | number | string>
524
503
  )[] | ScriptFailure
525
504
 
526
505
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(args?:
527
506
  { filter?: F, is_script?: true, full: true }
528
- ): (Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>)[] | ScriptFailure
507
+ ): (Omit<UpgradeBase, keyof F> & F & Record<string, null | boolean | number | string>)[] | ScriptFailure
529
508
 
530
509
  (args?: { filter?: Partial<Upgrade & { loaded: boolean }>, is_script: false, full?: false }):
531
510
  { msg: string, upgrades: string[] } | ScriptFailure
532
511
 
533
512
  <F extends Partial<Upgrade & { loaded: boolean }> = object>(
534
513
  args?: { filter?: F, is_script: false, full: true }
535
- ): (Omit<UpgradeCore, keyof F | `rarity`> & F & {
514
+ ): (Omit<UpgradeBase, keyof F | `rarity`> & F & {
536
515
  [x: string]: null | boolean | number | string
537
516
  rarity: UpgradeRarityString
538
517
  })[] | ScriptFailure
@@ -630,6 +609,9 @@ type Lowsec = Midsec & PlayerLowsec & {
630
609
  (args: { i: number | number[], to: string, memo?: string }): ScriptResponse
631
610
  (args: { sn: string | string[], to: string, memo?: string }): ScriptResponse
632
611
  }
612
+ /** **LOWSEC** */ expose_access_log: (args: { target: string }) => ScriptResponse
613
+ /** **LOWSEC** */ xfer_gc_from: (args: { target: string, amount: number | string }) => ScriptResponse
614
+ /** **LOWSEC** */ expose_balance: (args: { target: string }) => ScriptResponse
633
615
  }
634
616
  }
635
617
 
@@ -714,294 +696,386 @@ type Nullsec = Lowsec & PlayerNullsec & {
714
696
  }
715
697
  }
716
698
 
717
- type MongoValue = string | number | boolean | Date | MongoValue[] | { [key: string]: MongoValue } | null
699
+ // database
700
+ type MongoPrimitive = null | boolean | number | Date | string
701
+ type MongoValue = MongoPrimitive | MongoValue[] | MongoObject
702
+ type MongoObject = { [k: string]: MongoValue, [k: `$${string}`]: never }
703
+ type MongoQueryValue = MongoPrimitive | MongoQueryValue[] | MongoQueryObject
704
+
705
+ type MongoQueryObject =
706
+ { [k: string]: MongoQueryValue, [k: `$${string}`]: MongoValue, $type?: keyof MongoTypeStringsToTypes | (string & {}) }
707
+
708
+ type MongoTypeStringsToTypes = {
709
+ double: number
710
+ string: string
711
+ object: MongoObject
712
+ array: MongoValue[]
713
+ objectId: ObjectId
714
+ bool: boolean
715
+ date: Date
716
+ null: null
717
+ int: number
718
+ long: number
719
+ }
718
720
 
719
- type MongoCommandValue = string | number | boolean | Date | MongoCommandValue[] | { [key: string]: MongoCommandValue } |
720
- null | undefined
721
+ type MongoTypeString = keyof MongoTypeStringsToTypes
722
+ type MongoTypeNumber = -1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 127
723
+ type MongoId = Exclude<MongoPrimitive, null> | MongoObject
724
+ type MongoQueryId = Exclude<MongoPrimitive, null> | MongoQueryObject
725
+ type MongoDocument = MongoObject & { _id?: MongoId }
726
+
727
+ type MongoQueryType<TQuery extends MongoQueryObject> = {
728
+ -readonly [K in keyof TQuery]:
729
+ TQuery[K] extends MongoPrimitive ?
730
+ TQuery[K]
731
+ : TQuery[K] extends { $type: infer TType } ?
732
+ TType extends keyof MongoTypeStringsToTypes ? MongoTypeStringsToTypes[TType] : unknown
733
+ : TQuery[K] extends { $in: (infer TIn)[] } ?
734
+ TIn
735
+ : keyof TQuery[K] extends `$${string}` ?
736
+ unknown
737
+ : TQuery[K] extends { [k: string]: any } ?
738
+ MongoQueryType<TQuery[K]>
739
+ : never
740
+ }
721
741
 
722
- type Query = { [key: string]: MongoValue | Query } & { _id?: Id, $in?: MongoValue[] }
723
- type Projection = Record<string, boolean | 0 | 1>
742
+ type MongoCommandValue = MongoPrimitive | MongoCommandValue[] | { [k: string]: MongoCommandValue }
743
+ type MongoArraySelectors<T extends MongoValue[] = MongoValue[]> = { $all: T, $elemMatch: T, $size: number }
724
744
 
725
- type MongoCommand = MongoCommandValue & Partial<
726
- { $set: Record<string, MongoCommandValue>, $push: Record<string, MongoCommandValue>, $unset: Record<string, ""> }
745
+ type MongoComparisonSelectors<T extends MongoValue = MongoValue> =
746
+ { $eq: T, $gt: T, $gte: T, $in: T[], $lt: T, $lte: T, $ne: T, $nin: T[] }
747
+
748
+ type MongoElementSelectors = { $exists: boolean, $type: MongoTypeNumber | MongoTypeString }
749
+
750
+ type MongoQuerySelector<T extends MongoValue> = Partial<
751
+ T extends []
752
+ ? MongoArraySelectors<T> & MongoElementSelectors & MongoComparisonSelectors<T>
753
+ : MongoElementSelectors & MongoComparisonSelectors<T>
727
754
  >
728
755
 
729
- type Id = string | number | boolean | Date | Record<string, MongoValue>
730
- type MongoDocument = { [key: string]: MongoValue, _id: Id }
756
+ type MongoQuery<T extends MongoObject> = { [K in keyof T]?: T[K] | MongoQuerySelector<T[K]> } & { _id?: MongoId }
757
+
758
+ type MongoUpdateOperators<T extends MongoObject> = Partial<{
759
+ /* Universal operators */
760
+ $set: Partial<Record<string, MongoCommandValue> & T>
761
+ $setOnInsert: Partial<Record<string, MongoCommandValue> & T>
762
+ $unset: Partial<Record<string, ""> & T>
763
+
764
+ $rename: Partial<Record<string, string> & { [key in keyof T]: string }>
765
+
766
+ /* Date & number operators */
767
+ $inc: Record<string, number> &
768
+ { [K in keyof T as T[K] extends number | Date ? K : never]?: T[K] extends number ? number : Date }
769
+
770
+ $mul: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
771
+ $min: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
772
+ $max: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
773
+
774
+ /* Array operators */
775
+ $pop: Record<string, -1 | 1> & { [K in keyof T as T[K] extends [] ? K : never]?: -1 | 1 }
776
+
777
+ $push: Record<string, MongoCommandValue> & {
778
+ [K in keyof T as T[K] extends [] ? K : never]?: (T[K] extends (infer U)[] ? U : never)
779
+ | MongoUpdateArrayOperatorModifiers<T[K]>
780
+ }
781
+
782
+ $addToSet: Partial<Record<string, MongoCommandValue> & {
783
+ [K in keyof T as T[K] extends [] ? K : never]: (T[K] extends (infer U)[] ? U : never)
784
+ | MongoUpdateArrayOperatorUniversalModifiers<T[K]>
785
+ }>
786
+
787
+ $pull: Partial<Record<string, MongoCommandValue> & {
788
+ [K in keyof T as T[K] extends [] ? K : never]: (T[K] extends (infer U)[] ? U : never)
789
+ | MongoQuerySelector<T[K]>
790
+ }>
791
+
792
+ $pullAll: Record<string, MongoCommandValue> & { [K in keyof T as T[K] extends [] ? K : never]?: T[K] }
793
+ }>
794
+
795
+ type MongoUpdateArrayOperatorUniversalModifiers<T> = { $each?: T extends [] ? T : T[] }
796
+
797
+ type MongoUpdateArrayOperatorModifiers<T> = MongoUpdateArrayOperatorUniversalModifiers<T> &
798
+ { $position?: number, $slice?: number, $sort?: 1 | -1 }
799
+
800
+ type MongoUpdateCommand<Schema extends MongoObject> = MongoUpdateOperators<Schema>
801
+
731
802
  type SortOrder = { [key: string]: 1 | -1 | SortOrder }
732
803
 
733
- type Cursor = {
734
- /** Returns the first document that satisfies the query. */ first: () => MongoDocument | null
735
- /** Returns an array of documents that satisfy the query. */ array: () => MongoDocument[]
804
+ type Cursor<T> = {
805
+ /** Returns the first document that satisfies the query. */ first: () => T | null
806
+ /** Returns an array of documents that satisfy the query. */ array: () => T[]
736
807
  /** Returns the number of documents that match the query. */ count: () => number
737
808
 
738
809
  /** Returns the first document that satisfies the query. Also makes cursor unusable. */
739
- first_and_close: () => MongoDocument
810
+ first_and_close: () => T
740
811
 
741
812
  /** Returns an array of documents that satisfy the query. Also makes cursor unusable. */
742
- array_and_close: () => MongoDocument[]
813
+ array_and_close: () => T[]
743
814
 
744
815
  /** Returns the number of documents that match the query. Also makes cursor unusable. */
745
816
  count_and_close: () => number
746
817
 
747
818
  /** Run `callback` on each document that satisfied the query. */
748
- each: (callback: (document: MongoDocument) => void) => null
819
+ each: (callback: (document: T) => void) => null
749
820
 
750
821
  /** Returns a new cursor with documents sorted as specified.
751
822
  * A value of 1 sorts the property ascending, and -1 descending.
752
823
  * @param order The way the documents are to be sorted. */
753
- sort: (order?: SortOrder) => Cursor
824
+ sort: (order?: SortOrder) => Cursor<T>
754
825
 
755
826
  /** Returns a new cursor without the first number of documents.
756
827
  * @param count Number of documents to skip. */
757
- skip: (count: number) => Cursor
828
+ skip: (count: number) => Cursor<T>
758
829
 
759
830
  /** Returns a new cursor limited to a number of documents as specified.
760
831
  * @param count Number of documents. */
761
- limit: (count: number) => Cursor
832
+ limit: (count: number) => Cursor<T>
762
833
 
763
- /** @param key The key of the documents. */ distinct: ((key: string) => MongoValue[]) & ((key: "_id") => Id[])
834
+ /** @param key The key of the documents. */ distinct: { (key: string): MongoValue[], (key: "_id"): MongoId[] }
764
835
  /** Make cursor unusable. */ close: () => null
765
836
  NumberLong: (number: number) => number
837
+ // TODO what actually is the type here?
766
838
  ObjectId: () => any
767
839
  }
768
840
 
769
- type CLIContext = {
841
+ type CliContext = {
770
842
  /** The name of the user who is calling the script. */ caller: string
771
843
  /** The name of this script. */ this_script: string
772
844
  /** The number of columns in the caller’s terminal. */ cols: number
773
845
  /** The number of rows in the caller’s terminal. */ rows: number
774
846
 
775
847
  /** The name of the script that directly called this script, or null if called on the command line or as a
776
- * scriptor. */ calling_script: null
848
+ * scriptor. */
849
+ calling_script: null
850
+
851
+ is_scriptor?: undefined
852
+ is_brain?: undefined
777
853
  }
778
854
 
779
- type SubscriptContext = Replace<CLIContext, {
855
+ type SubscriptContext = Replace<CliContext, {
780
856
  /** The name of the script that directly called this script, or null if called on the command line or as a scriptor.
781
857
  */
782
858
  calling_script: string
783
859
  }>
784
860
 
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
788
-
789
- /** Subscript space that can call FULLSEC scripts. */ declare const $fs: Fullsec
790
-
791
- /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
792
- declare const $hs: Highsec
793
-
794
- /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
795
- */
796
- declare const $ms: Midsec
797
-
798
- /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
799
- */
800
- declare const $ls: Lowsec
801
-
802
- /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
803
- declare const $ns: Nullsec
804
-
805
- /** Subscript space that can call FULLSEC scripts. */ declare const $4s: typeof $fs
806
-
807
- /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
808
- declare const $3s: typeof $hs
809
-
810
- /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
811
- */
812
- declare const $2s: typeof $ms
813
-
814
- /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
815
- */
816
- declare const $1s: typeof $ls
817
-
818
- /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
819
- declare const $0s: typeof $ns
820
-
821
- /** Subscript space that can call any script. Uses seclevel provided in comment before script (defaults to NULLSEC)
822
- * @example
823
- * // @ seclevel MIDSEC
824
- * // remove the space betwen "@" and "s", there's only a space because otherwise vscode breaks
825
- * export function script() {
826
- * $s.foo.bar() // will be converted to #ms.foo.bar()
827
- * } */
828
- declare const $s: Nullsec
829
-
830
- declare const $db: {
831
- /** Insert a document or documents into a collection.
832
- * @param documents A document or array of documents to insert into the collection. */
833
- i: (documents: object | object[]) => {
834
- ok: 1
835
- n: number
836
- opTime: { ts: "Undefined Conversion", t: number }
837
- electionId: "Undefined Conversion"
838
- operationTime: "Undefined Conversion"
839
- $clusterTime: {
840
- clusterTime: "Undefined Conversion"
841
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
842
- }
843
- }
861
+ type ScriptorContext = Replace<CliContext, { /** Whether the script is being run as a scriptor. */ is_scriptor: true }>
862
+ type BrainContext = Replace<CliContext, { /** Whether the script is being run via a bot brain. */ is_brain: true }>
863
+
864
+ // _id is always returned unless _id: false is passed
865
+ // when anyField: true is given, other fields (except _id) are omitted
866
+
867
+ type MongoProject<TDocument, TProjection> =
868
+ true extends (1 extends TProjection[keyof TProjection] ? true : TProjection[keyof TProjection]) ?
869
+ (TProjection extends { _id: false | 0 } ? {} : { _id: TDocument extends { _id: infer TId } ? TId : MongoId }) &
870
+ {
871
+ [K in
872
+ keyof TDocument as K extends keyof TProjection ? TProjection[K] extends true | 1 ? K : never : never
873
+ ]: TDocument[K]
874
+ } &
875
+ {
876
+ -readonly [K in
877
+ keyof TProjection as TProjection[K] extends true | 1 ? K extends keyof TDocument ? never : K : never
878
+ ]?: MongoValue
879
+ }
880
+ : { [k: string]: MongoValue } & { [K in keyof TDocument as K extends keyof TProjection ? never : K]: TDocument[K] }
844
881
 
845
- /** Remove documents from a collection.
846
- * @param query Specifies deletion criteria using query operators. */
847
- r: (query: Query) => {
848
- ok: 0 | 1
849
- n: number
850
- opTime: { ts: "Undefined Conversion", t: number }
851
- electionId: "Undefined Conversion"
852
- operationTime: "Undefined Conversion"
853
- $clusterTime: {
854
- clusterTime: "Undefined Conversion"
855
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
856
- }
857
- }
882
+ type DeepFreeze<T> = { readonly [P in keyof T]: DeepFreeze<T[P]> }
858
883
 
859
- /** Find documents in a collection or view and returns a cursor to the selected documents.
860
- * @param query Specifies deletion criteria using query operators.
861
- * @param projection Specifies the fields to return in the documents that match the query filter. */
862
- f: (query?: Query, projection?: Projection) => Cursor
863
-
864
- /** Update an existing documents in a collection.
865
- * @param query Specifies deletion criteria using query operators.
866
- * @param command The modifications to apply.
867
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
868
- u: (query: Query | Query[], command: MongoCommand) => {
869
- ok: 0 | 1
870
- nModified: number
871
- n: number
872
- opTime: { ts: "Undefined Conversion", t: number }
873
- electionId: "Undefined Conversion"
874
- operationTime: "Undefined Conversion"
875
- $clusterTime: {
876
- clusterTime: "Undefined Conversion"
877
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
878
- }
879
- }
884
+ declare global {
885
+ type ScriptSuccess<T = unknown> = { ok: true } & T
886
+ type ScriptFailure = { ok: false, msg?: string }
887
+ type ScriptResponse<T = unknown> = ScriptSuccess<T> | ScriptFailure
888
+ type Scriptor<TArgs extends any[] = any[]> = { name: string, call: (...args: TArgs) => unknown }
889
+ type Context = CliContext | SubscriptContext | ScriptorContext | BrainContext
890
+ type ObjectId = { $oid: string }
880
891
 
881
- /** Updates one document within the collection based on the filter.
882
- * @param query Specifies deletion criteria using query operators.
883
- * @param command The modifications to apply.
884
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
885
- u1: (query: Query | Query[], command: MongoCommand) => {
886
- ok: 0 | 1
887
- nModified: number
888
- n: number
889
- opTime: {
890
- ts: "Undefined Conversion"
891
- t: number
892
- }
893
- electionId: "Undefined Conversion"
894
- operationTime: "Undefined Conversion"
895
- $clusterTime: {
896
- clusterTime: "Undefined Conversion"
897
- signature: {
898
- hash: "Undefined Conversion"
899
- keyId: "Undefined Conversion"
900
- }
901
- }
902
- }
892
+ interface PlayerFullsec {}
893
+ interface PlayerHighsec {}
894
+ interface PlayerMidsec {}
895
+ interface PlayerLowsec {}
896
+ interface PlayerNullsec {}
903
897
 
904
- /** Update or insert or insert document.
905
- * Same as Update, but if no documents match the query, one document will be inserted based on the properties in
906
- * both the query and the command.
907
- * The `$setOnInsert` operator is useful to set defaults.
908
- * @param query Specifies deletion criteria using query operators.
909
- * @param command The modifications to apply.
910
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
911
- us: (query: Query | Query[], command: MongoCommand) => {
912
- ok: 0 | 1
913
- nModified: number
914
- n: number
915
- opTime: { ts: "Undefined Conversion", t: number }
916
- electionId: "Undefined Conversion"
917
- operationTime: "Undefined Conversion"
918
- $clusterTime: {
919
- clusterTime: "Undefined Conversion"
920
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
921
- }
898
+ /** Subscript space that can call FULLSEC scripts. */ const $fs: Fullsec
899
+
900
+ /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
901
+ const $hs: Highsec
902
+
903
+ /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
904
+ */
905
+ const $ms: Midsec
906
+
907
+ /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
908
+ */
909
+ const $ls: Lowsec
910
+
911
+ /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
912
+ const $ns: Nullsec
913
+
914
+ /** Subscript space that can call FULLSEC scripts. */ const $4s: typeof $fs
915
+
916
+ /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
917
+ const $3s: typeof $hs
918
+
919
+ /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
920
+ */
921
+ const $2s: typeof $ms
922
+
923
+ /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
924
+ */
925
+ const $1s: typeof $ls
926
+
927
+ /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
928
+ const $0s: typeof $ns
929
+
930
+ /** Subscript space that can call any script. Uses seclevel provided in comment before script (defaults to NULLSEC)
931
+ * @example
932
+ * // @​seclevel MIDSEC
933
+ * // note, do NOT copy paste the above line because there is a zero-width space inserted between "@" and "s"
934
+ * export function script() {
935
+ * $s.foo.bar() // will be converted to #ms.foo.bar()
936
+ * } */
937
+ const $s: Nullsec
938
+
939
+ const $db: {
940
+ /** Insert a document or documents into a collection.
941
+ * @param documents A document or array of documents to insert into the collection. */
942
+ i: <T extends MongoDocument>(documents: (T & { _id?: MongoId }) | (T & { _id?: MongoId })[]) =>
943
+ { n: number, opTime: { t: number }, ok: 0 | 1 }[]
944
+
945
+ /** Remove documents from a collection.
946
+ * @param query Specifies deletion criteria using query operators. */
947
+ r: <T extends MongoDocument>(query: MongoQuery<T>) => { n: number, opTime: { t: number }, ok: 0 | 1 }[]
948
+
949
+ /** Find documents in a collection or view and returns a cursor to the selected documents.
950
+ * @param query Specifies deletion criteria using query operators.
951
+ * @param projection Specifies the fields to return in the documents that match the query filter. */
952
+ f: <
953
+ const TQuery extends MongoQueryObject & { _id?: MongoQueryId },
954
+ const TProjection extends { [k: string]: boolean | 0 | 1 } = {}
955
+ >(query: TQuery, projection?: TProjection) => Cursor<MongoProject<MongoQueryType<TQuery>, TProjection>>
956
+
957
+ /** Update existing documents in a collection.
958
+ * @param query Specifies deletion criteria using query operators.
959
+ * @param command The modifications to apply.
960
+ * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
961
+ u: <T extends MongoDocument>(query: MongoQuery<T> | MongoQuery<T>[], command: MongoUpdateCommand<T>) =>
962
+ { n: number, opTime: { t: number }, ok: 0 | 1, nModified: number }[]
963
+
964
+ /** Updates one document within the collection based on the filter.
965
+ * @param query Specifies deletion criteria using query operators.
966
+ * @param command The modifications to apply.
967
+ * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
968
+ u1: <T extends MongoDocument>(query: MongoQuery<T> | MongoQuery<T>[], command: MongoUpdateCommand<T>) =>
969
+ { n: number, ok: 0 | 1, opTime: { t: number }, nModified: number }[]
970
+
971
+ /** Update or insert document.
972
+ * Same as Update, but if no documents match the query, one document will be inserted based on the properties in
973
+ * both the query and the command.
974
+ * The `$setOnInsert` operator is useful to set defaults.
975
+ * @param query Specifies deletion criteria using query operators.
976
+ * @param command The modifications to apply.
977
+ * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
978
+ us: <T extends MongoDocument>(query: MongoQuery<T> | MongoQuery<T>[], command: MongoUpdateCommand<T>) =>
979
+ { n: number, ok: 0 | 1, opTime: { t: number }, nModified: number }[]
980
+
981
+ ObjectId: () => ObjectId
922
982
  }
983
+
984
+ /** Debug Log.
985
+ *
986
+ * If `$D()` is called in a script you own, the `return` value of the top level script is suppressed and instead an
987
+ * array of every `$D()`’d entry is printed.
988
+ * This lets you use `$D()` like `console.log()`.
989
+ *
990
+ * `$D()` in scripts not owned by you are not shown but the `return` value always is.
991
+ *
992
+ * `$D()` returns the first argument so `$D("Hello, World!") evaluates to `"Hello, World!"` as if the `$D` text wasn't
993
+ * there.
994
+ *
995
+ * `$D()`’d items are returned even if the script times out or errors. */
996
+ function $D<T>(args: T): T
997
+
998
+ /** Function Multi-Call Lock.
999
+ *
1000
+ * This is used by escrow to ensure that it is only used once in script execution.
1001
+ *
1002
+ * The first time (per-script) `$FMCL` is encountered, it returns `undefined`, every other time it `return`s `true`.
1003
+ *
1004
+ * @example
1005
+ * if ($FMCL)
1006
+ * return { ok: false, msg: "This script can only be used once per script execution." }
1007
+ *
1008
+ * // all code here will only run once */
1009
+ const $FMCL: undefined | true
1010
+
1011
+ /** Per-script mutable "global" persistent object that is discarded at the end of top level script execution.
1012
+ *
1013
+ * `$G` persists between script calls until the end of the main script run making it useful for caching db entries when
1014
+ * your script is a subscript.
1015
+ * @example
1016
+ * if (!$G.dbCache)
1017
+ * $G.dbCache = $db.f({ whatever: true }).first() */
1018
+ const $G: Record<string | symbol, any>
1019
+
1020
+ /** This contains a JS timestamp (not Date) set immediately before your code begins running.
1021
+ * @example
1022
+ * $D(Date.now() - _START) // milliseconds left of run time
1023
+ */
1024
+ const _START: number
1025
+
1026
+ /** This contains a JS timestamp (not Date) set immediately before your code begins running.
1027
+ * @example
1028
+ * $D(Date.now() - _ST) // milliseconds left of run time */
1029
+ const _ST: typeof _START
1030
+
1031
+ /** JavaScript timestamp for the end of the script run (`_START + _TIMEOUT`). */ const _END: number
1032
+
1033
+ /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
1034
+ const _TIMEOUT: number
1035
+
1036
+ /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
1037
+ const _TO: typeof _TIMEOUT
1038
+
1039
+ /** The source code of this script as a string. */ const _SOURCE: string
1040
+ /** A unix timestamp of the date this script was built. */ const _BUILD_DATE: number
1041
+
1042
+ /** The user this script has been uploaded to.
1043
+ *
1044
+ * Shorter alternative to `context.this_script.split(".")[0].
1045
+ *
1046
+ * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1047
+ const _SCRIPT_USER: string
1048
+
1049
+ /** @deprecated Use `_SCRIPT_SUBNAME` instead. */
1050
+ const _SCRIPT_NAME: string
1051
+
1052
+ /** The name of this script excluding the user and `.`.
1053
+ *
1054
+ * e.g. in the script `foo.bar`, `_SCRIPT_NAME` is `bar`.
1055
+ *
1056
+ * Shorter alternative to `context.this_script.split(".")[1].
1057
+ *
1058
+ * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1059
+ const _SCRIPT_SUBNAME: string
1060
+
1061
+ /** The full name of this script equivilent to `context.this_script` but should use less characters.
1062
+ *
1063
+ * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1064
+ const _FULL_SCRIPT_NAME: string
1065
+
1066
+ /** The seclevel of this script as a number.
1067
+ *
1068
+ * In rare cases where it's not known at build time, it's `-1`. */
1069
+ const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
1070
+
1071
+ /** Recursively
1072
+ * [`Object.freeze()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
1073
+ * an object and its properties' objects and its properties' objects and so on.
1074
+ *
1075
+ * [Official Hackmud Wiki](https://wiki.hackmud.com/scripting/extensions/deep_freeze) */
1076
+ const DEEP_FREEZE: <T>(value: T) => DeepFreeze<T>
1077
+
1078
+ const _RUN_ID: string
923
1079
  }
924
1080
 
925
- /** Debug Log.
926
- *
927
- * If `$D()` is called in a script you own, the `return` value of the top level script is suppressed and instead an
928
- * array of every `$D()`’d entry is printed.
929
- * This lets you use `$D()` like `console.log()`.
930
- *
931
- * `$D()` in scripts not owned by you are not shown but the `return` value always is.
932
- *
933
- * `$D()` returns the first argument so `$D("Hello, World!") evaluates to `"Hello, World!"` as if the `$D` text wasn't
934
- * there.
935
- *
936
- * `$D()`’d items are returned even if the script times out or errors. */
937
- declare function $D<T>(args: T): T
938
-
939
- /** Function Multi-Call Lock.
940
- *
941
- * This is used by escrow to ensure that it is only used once in script execution.
942
- *
943
- * The first time (per-script) `$FMCL` is encountered, it returns `undefined`, every other time it `return`s `true`.
944
- *
945
- * @example
946
- * if ($FMCL)
947
- * return { ok: false, msg: "This script can only be used once per script execution." }
948
- *
949
- * // all code here will only run once */
950
- declare const $FMCL: undefined | true
951
-
952
- /** Per-script mutable "global" persistent object that is discarded at the end of top level script execution.
953
- *
954
- * `$G` persists between script calls until the end of the main script run making it useful for caching db entries when
955
- * your script is a subscript.
956
- * @example
957
- * if (!$G.dbCache)
958
- * $G.dbCache = $db.f({ whatever: true }).first() */
959
- declare const $G: any
960
-
961
- /** This contains a JS timestamp (not Date) set immediately before your code begins running.
962
- * @example
963
- * $D(Date.now() - _START) // milliseconds left of run time
964
- */
965
- declare const _START: number
966
-
967
- /** This contains a JS timestamp (not Date) set immediately before your code begins running.
968
- * @example
969
- * $D(Date.now() - _ST) // milliseconds left of run time */
970
- declare const _ST: typeof _START
971
-
972
- /** JavaScript timestamp for the end of the script run (`_START + _TIMEOUT`). */ declare const _END: number
973
-
974
- /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
975
- declare const _TIMEOUT: number
976
-
977
- /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
978
- declare const _TO: typeof _TIMEOUT
979
-
980
- /** The source code of this script as a string. */ declare const _SOURCE: string
981
- /** A unix timestamp of the date this script was built. */ declare const _BUILD_DATE: number
982
-
983
- /** The user this script has been uploaded to.
984
- *
985
- * Shorter alternative to `context.this_script.split(".")[0].
986
- *
987
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
988
- declare const _SCRIPT_USER: string
989
-
990
- /** The name of this script excluding the user and `.`.
991
- *
992
- * e.g. in the script `foo.bar`, `_SCRIPT_NAME` is `bar`.
993
- *
994
- * Shorter alternative to `context.this_script.split(".")[1].
995
- *
996
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
997
- declare const _SCRIPT_NAME: string
998
-
999
- /** The full name of this script equivilent to `context.this_script` but should use less characters.
1000
- *
1001
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1002
- declare const _FULL_SCRIPT_NAME: string
1003
-
1004
- /** The seclevel of this script as a number.
1005
- *
1006
- * In rare cases where it's not known at build time, it's `-1`. */
1007
- declare const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
1081
+ export {}