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

Sign up to get free protection for your applications and to get access to all the features.
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 {}