hackmud-script-manager 0.20.4-550e28d → 0.20.4-6815ce0

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,16 +1,9 @@
1
1
  type Replace<A, B> = Omit<A, keyof B> & B
2
- type ScriptSuccess<T = object> = { ok: true } & T
2
+ type ScriptSuccess<T = unknown> = { ok: true } & T
3
3
  type ScriptFailure = { ok: false, msg?: string }
4
- type ScriptResponse<T = object> = ScriptSuccess<T> | ScriptFailure
4
+ type ScriptResponse<T = unknown> = ScriptSuccess<T> | ScriptFailure
5
5
  type ErrorScripts = Record<string, () => ScriptFailure>
6
6
 
7
- type AllOptional<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? true : false }[keyof T]
8
-
9
- type Scriptor<Args = unknown, Ret = unknown> = {
10
- name: string
11
- call: AllOptional<Args> extends true ? (args?: Args) => Ret : (args: Args) => Ret
12
- }
13
-
14
7
  type Subscripts = Record<string, Record<string, (...args: any) => any>> & {
15
8
  accts: ErrorScripts
16
9
  autos: ErrorScripts
@@ -34,8 +27,7 @@ interface PlayerLowsec {}
34
27
  interface PlayerNullsec {}
35
28
 
36
29
  type UpgradeRarityString = "`0noob`" | "`1kiddie`" | "`2h4x0r`" | "`3h4rdc0r3`" | "`4|_|b3|2`" | "`531337`"
37
- type UpgradeRarityNumber = 0 | 1 | 2 | 3 | 4 | 5;
38
- type UpgradeRarity = UpgradeRarityString | UpgradeRarityNumber;
30
+ type UpgradeRarityNumber = 0 | 1 | 2 | 3 | 4 | 5
39
31
 
40
32
  type UpgradeBase = {
41
33
  name: string
@@ -51,10 +43,8 @@ type UpgradeBase = {
51
43
 
52
44
  type Upgrade = UpgradeBase & Record<string, null | boolean | number | string>
53
45
 
54
- type CliUpgrade = Omit<UpgradeBase, `rarity`> & {
55
- [x: string]: null | boolean | number | string
56
- rarity: UpgradeRarityString
57
- }
46
+ type CliUpgrade = Omit<UpgradeBase, `rarity`> &
47
+ { [k: string]: null | boolean | number | string, rarity: UpgradeRarityString }
58
48
 
59
49
  type UsersTopItem<R> = { rank: R, name: string, last_activity: string, balance: string }
60
50
  type CorpsTopItem<R> = { rank: R, name: string, worth: string }
@@ -132,21 +122,11 @@ type Fullsec = Subscripts & PlayerFullsec & {
132
122
  }
133
123
 
134
124
  escrow: {
135
- /** **FULLSEC** */ charge: (args: {
136
- cost: number | string
137
- is_unlim?: boolean
138
- }) => null | ScriptFailure
139
-
125
+ /** **FULLSEC** */ charge: (args: { cost: number | string, is_unlim?: boolean }) => null | ScriptFailure
140
126
  confirm: never
141
127
  }
142
128
 
143
- gui: {
144
- chats: never
145
- quiet: never
146
- size: never
147
- vfx: never
148
- vol: never
149
- }
129
+ gui: { chats: never, quiet: never, size: never, vfx: never, vol: never }
150
130
 
151
131
  market: {
152
132
  /** **FULLSEC** */ browse: {
@@ -465,7 +445,10 @@ type Highsec = Fullsec & PlayerHighsec & {
465
445
  /** **HIGHSEC**
466
446
  * @returns GC balance as number if `is_script` is true (default).
467
447
  * @returns GC balance as string if `is_script` is false. */
468
- balance: ((args?: { is_script?: true }) => number) & ((args: { is_script: false }) => string)
448
+ balance: {
449
+ (args?: { is_script?: true }): number
450
+ (args: { is_script: false }): string
451
+ }
469
452
 
470
453
  /** **HIGHSEC**
471
454
  * @returns Transaction history according to filter.
@@ -635,6 +618,9 @@ type Lowsec = Midsec & PlayerLowsec & {
635
618
  (args: { i: number | number[], to: string, memo?: string }): ScriptResponse
636
619
  (args: { sn: string | string[], to: string, memo?: string }): ScriptResponse
637
620
  }
621
+ /** **LOWSEC** */ expose_access_log: (args: { target: string }) => ScriptResponse
622
+ /** **LOWSEC** */ xfer_gc_from: (args: { target: string, amount: number | string }) => ScriptResponse
623
+ /** **LOWSEC** */ expose_balance: (args: { target: string }) => ScriptResponse
638
624
  }
639
625
  }
640
626
 
@@ -719,95 +705,145 @@ type Nullsec = Lowsec & PlayerNullsec & {
719
705
  }
720
706
  }
721
707
 
722
- type MongoTypeString = "minKey" | "double" | "string" | "object" | "array" | "binData" | "undefined" | "objectId" |
723
- "bool" | "date" | "null" | "regex" | "dbPointer" | "javascript" | "symbol" | "int" | "timestamp" | "long" | "decimal" | "maxKey";
724
- type MongoTypeNumber = -1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 127;
708
+ // database
709
+ type MongoPrimitive = null | boolean | number | Date | string
710
+ type MongoValue = MongoPrimitive | MongoValue[] | MongoObject
711
+ type MongoObject = { [k: string]: MongoValue, [k: `$${string}`]: never }
712
+ type MongoQueryValue = MongoPrimitive | MongoQueryValue[] | MongoQueryObject
713
+
714
+ type MongoQueryObject =
715
+ { [k: string]: MongoQueryValue, [k: `$${string}`]: MongoValue, $type?: keyof MongoTypeStringsToTypes | (string & {}) }
716
+
717
+ type MongoTypeStringsToTypes = {
718
+ double: number
719
+ string: string
720
+ object: MongoObject
721
+ array: MongoValue[]
722
+ objectId: ObjectId
723
+ bool: boolean
724
+ date: Date
725
+ null: null
726
+ int: number
727
+ long: number
728
+ }
725
729
 
726
- type MongoValue = string | number | boolean | Date | MongoValue[] | { [key: string]: MongoValue } | null
730
+ type MongoTypeString = keyof MongoTypeStringsToTypes
731
+ type MongoTypeNumber = -1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 127
732
+ type MongoId = Exclude<MongoPrimitive, null> | MongoObject
733
+ type MongoQueryId = Exclude<MongoPrimitive, null> | MongoQueryObject
734
+ type MongoDocument = MongoObject & { _id?: MongoId }
735
+
736
+ type MongoQueryType<TQuery extends MongoQueryObject> = {
737
+ -readonly [K in keyof TQuery]:
738
+ TQuery[K] extends MongoPrimitive ?
739
+ TQuery[K]
740
+ : TQuery[K] extends { $type: infer TType } ?
741
+ TType extends keyof MongoTypeStringsToTypes ? MongoTypeStringsToTypes[TType] : unknown
742
+ : TQuery[K] extends { $in: (infer TIn)[] } ?
743
+ TIn
744
+ : keyof TQuery[K] extends `$${string}` ?
745
+ unknown
746
+ : TQuery[K] extends { [k: string]: any } ?
747
+ MongoQueryType<TQuery[K]>
748
+ : never
749
+ }
727
750
 
728
- type MongoCommandValue = string | number | boolean | Date | MongoCommandValue[] | { [key: string]: MongoCommandValue } |
729
- null | undefined
751
+ type MongoCommandValue = MongoPrimitive | MongoCommandValue[] | { [k: string]: MongoCommandValue }
752
+ type MongoArraySelectors<T extends MongoValue[] = MongoValue[]> = { $all: T, $elemMatch: T, $size: number }
730
753
 
731
- /**
732
- * Currently unused
733
- */
734
- type MongoLogicalSelectors<T extends MongoValue = MongoValue> = {
735
- $not: T | MongoComparisonSelectors<T> | MongoLogicalSelectors<T>
736
- $nor: T[]
737
- $or: T[]
738
- $and: T[]
739
- }
754
+ type MongoComparisonSelectors<T extends MongoValue = MongoValue> =
755
+ { $eq: T, $gt: T, $gte: T, $in: T[], $lt: T, $lte: T, $ne: T, $nin: T[] }
740
756
 
741
- type MongoArraySelectors<T extends Array<MongoValue> = Array<MongoValue>> = {
742
- $all: T
743
- $elemMatch: T
744
- $size: number
745
- }
757
+ type MongoElementSelectors = { $exists: boolean, $type: MongoTypeNumber | MongoTypeString }
746
758
 
747
- type MongoComparisonSelectors<T extends MongoValue = MongoValue> = {
748
- $eq: T
749
- $gt: T
750
- $gte: T
751
- $in: T[]
752
- $lt: T
753
- $lte: T
754
- $ne: T
755
- $nin: T[]
756
- }
759
+ type MongoQuerySelector<T extends MongoValue> = Partial<
760
+ T extends []
761
+ ? MongoArraySelectors<T> & MongoElementSelectors & MongoComparisonSelectors<T>
762
+ : MongoElementSelectors & MongoComparisonSelectors<T>
763
+ >
757
764
 
758
- type MongoElementSelectors = {
759
- $exists: boolean
760
- $type: MongoTypeNumber | MongoTypeString
761
- }
765
+ type MongoQuery<T extends MongoObject> = { [K in keyof T]?: T[K] | MongoQuerySelector<T[K]> } & { _id?: MongoId }
762
766
 
763
- type MongoQuerySelector<T extends MongoValue = MongoValue> = Partial<T extends MongoValue[] ?
764
- (MongoArraySelectors<T> & MongoElementSelectors & MongoComparisonSelectors<T>) :
765
- (MongoElementSelectors & MongoComparisonSelectors<T>)>
767
+ type MongoUpdateOperators<T extends MongoObject> = Partial<{
768
+ /* Universal operators */
769
+ $set: Partial<Record<string, MongoCommandValue> & T>
770
+ $setOnInsert: Partial<Record<string, MongoCommandValue> & T>
771
+ $unset: Partial<Record<string, ""> & T>
766
772
 
767
- type Query = { [key: string]: MongoValue | Query } & { _id?: Id, $in?: MongoValue[] }
768
- type Projection = Record<string, boolean | 0 | 1>
773
+ $rename: Partial<Record<string, string> & { [key in keyof T]: string }>
769
774
 
770
- type MongoCommand = MongoCommandValue & Partial<
771
- { $set: Record<string, MongoCommandValue>, $push: Record<string, MongoCommandValue>, $unset: Record<string, ""> }
772
- >
775
+ /* Date & number operators */
776
+ $inc: Record<string, number> &
777
+ { [K in keyof T as T[K] extends number | Date ? K : never]?: T[K] extends number ? number : Date }
778
+
779
+ $mul: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
780
+ $min: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
781
+ $max: Record<string, number> & { [K in keyof T as T[K] extends number ? K : never]?: number }
782
+
783
+ /* Array operators */
784
+ $pop: Record<string, -1 | 1> & { [K in keyof T as T[K] extends [] ? K : never]?: -1 | 1 }
785
+
786
+ $push: Record<string, MongoCommandValue> & {
787
+ [K in keyof T as T[K] extends [] ? K : never]?: (T[K] extends (infer U)[] ? U : never)
788
+ | MongoUpdateArrayOperatorModifiers<T[K]>
789
+ }
790
+
791
+ $addToSet: Partial<Record<string, MongoCommandValue> & {
792
+ [K in keyof T as T[K] extends [] ? K : never]: (T[K] extends (infer U)[] ? U : never)
793
+ | MongoUpdateArrayOperatorUniversalModifiers<T[K]>
794
+ }>
795
+
796
+ $pull: Partial<Record<string, MongoCommandValue> & {
797
+ [K in keyof T as T[K] extends [] ? K : never]: (T[K] extends (infer U)[] ? U : never)
798
+ | MongoQuerySelector<T[K]>
799
+ }>
800
+
801
+ $pullAll: Record<string, MongoCommandValue> & { [K in keyof T as T[K] extends [] ? K : never]?: T[K] }
802
+ }>
803
+
804
+ type MongoUpdateArrayOperatorUniversalModifiers<T> = { $each?: T extends [] ? T : T[] }
805
+
806
+ type MongoUpdateArrayOperatorModifiers<T> = MongoUpdateArrayOperatorUniversalModifiers<T> &
807
+ { $position?: number, $slice?: number, $sort?: 1 | -1 }
808
+
809
+ type MongoUpdateCommand<Schema extends MongoObject> = MongoUpdateOperators<Schema>
773
810
 
774
- type Id = string | number | boolean | Date | Record<string, MongoValue>
775
- type MongoDocument = { [key: string]: MongoValue, _id: Id }
776
811
  type SortOrder = { [key: string]: 1 | -1 | SortOrder }
777
812
 
778
- type Cursor = {
779
- /** Returns the first document that satisfies the query. */ first: () => MongoDocument | null
780
- /** Returns an array of documents that satisfy the query. */ array: () => MongoDocument[]
813
+ type Cursor<T> = {
814
+ /** Returns the first document that satisfies the query. */ first: () => T | null
815
+ /** Returns an array of documents that satisfy the query. */ array: () => T[]
781
816
  /** Returns the number of documents that match the query. */ count: () => number
782
817
 
783
818
  /** Returns the first document that satisfies the query. Also makes cursor unusable. */
784
- first_and_close: () => MongoDocument
819
+ first_and_close: () => T
785
820
 
786
821
  /** Returns an array of documents that satisfy the query. Also makes cursor unusable. */
787
- array_and_close: () => MongoDocument[]
822
+ array_and_close: () => T[]
788
823
 
789
824
  /** Returns the number of documents that match the query. Also makes cursor unusable. */
790
825
  count_and_close: () => number
791
826
 
792
827
  /** Run `callback` on each document that satisfied the query. */
793
- each: (callback: (document: MongoDocument) => void) => null
828
+ each: (callback: (document: T) => void) => null
794
829
 
795
830
  /** Returns a new cursor with documents sorted as specified.
796
831
  * A value of 1 sorts the property ascending, and -1 descending.
797
832
  * @param order The way the documents are to be sorted. */
798
- sort: (order?: SortOrder) => Cursor
833
+ sort: (order?: SortOrder) => Cursor<T>
799
834
 
800
835
  /** Returns a new cursor without the first number of documents.
801
836
  * @param count Number of documents to skip. */
802
- skip: (count: number) => Cursor
837
+ skip: (count: number) => Cursor<T>
803
838
 
804
839
  /** Returns a new cursor limited to a number of documents as specified.
805
840
  * @param count Number of documents. */
806
- limit: (count: number) => Cursor
841
+ limit: (count: number) => Cursor<T>
807
842
 
808
- /** @param key The key of the documents. */ distinct: ((key: string) => MongoValue[]) & ((key: "_id") => Id[])
843
+ /** @param key The key of the documents. */ distinct: { (key: string): MongoValue[], (key: "_id"): MongoId[] }
809
844
  /** Make cursor unusable. */ close: () => null
810
845
  NumberLong: (number: number) => number
846
+ // TODO what actually is the type here?
811
847
  ObjectId: () => any
812
848
  }
813
849
 
@@ -818,7 +854,9 @@ type CliContext = {
818
854
  /** The number of rows in the caller’s terminal. */ rows: number
819
855
 
820
856
  /** The name of the script that directly called this script, or null if called on the command line or as a
821
- * scriptor. */ calling_script: null
857
+ * scriptor. */
858
+ calling_script: null
859
+
822
860
  is_scriptor?: undefined
823
861
  is_brain?: undefined
824
862
  }
@@ -829,245 +867,212 @@ type SubscriptContext = Replace<CliContext, {
829
867
  calling_script: string
830
868
  }>
831
869
 
832
- type ScriptorContext =
833
- Replace<CliContext, { /** Whether the script is being run as a scriptor. */ is_scriptor: true }>
834
-
835
- type BrainContext =
836
- Replace<CliContext, { /** Whether the script is being run via a bot brain. */ is_brain: true }>
837
-
838
- type Context = CliContext | SubscriptContext | ScriptorContext | BrainContext
839
-
840
- /** Subscript space that can call FULLSEC scripts. */ declare const $fs: Fullsec
841
-
842
- /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
843
- declare const $hs: Highsec
844
-
845
- /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
846
- */
847
- declare const $ms: Midsec
848
-
849
- /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
850
- */
851
- declare const $ls: Lowsec
852
-
853
- /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
854
- declare const $ns: Nullsec
870
+ type ScriptorContext = Replace<CliContext, { /** Whether the script is being run as a scriptor. */ is_scriptor: true }>
871
+ type BrainContext = Replace<CliContext, { /** Whether the script is being run via a bot brain. */ is_brain: true }>
872
+
873
+ // _id is always returned unless _id: false is passed
874
+ // when anyField: true is given, other fields (except _id) are omitted
875
+
876
+ type MongoProject<TDocument, TProjection> =
877
+ true extends (1 extends TProjection[keyof TProjection] ? true : TProjection[keyof TProjection]) ?
878
+ (TProjection extends { _id: false | 0 } ? {} : { _id: TDocument extends { _id: infer TId } ? TId : MongoId }) &
879
+ {
880
+ [K in
881
+ keyof TDocument as K extends keyof TProjection ? TProjection[K] extends true | 1 ? K : never : never
882
+ ]: TDocument[K]
883
+ } &
884
+ {
885
+ -readonly [K in
886
+ keyof TProjection as TProjection[K] extends true | 1 ? K extends keyof TDocument ? never : K : never
887
+ ]?: MongoValue
888
+ }
889
+ : { [k: string]: MongoValue } & { [K in keyof TDocument as K extends keyof TProjection ? never : K]: TDocument[K] }
855
890
 
856
- /** Subscript space that can call FULLSEC scripts. */ declare const $4s: typeof $fs
891
+ type DeepFreeze<T> = { readonly [P in keyof T]: DeepFreeze<T[P]> }
857
892
 
858
- /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
859
- declare const $3s: typeof $hs
893
+ declare global {
894
+ type Scriptor<TArgs extends any[] = any[]> = { name: string, call: (...args: TArgs) => unknown }
895
+ type Context = CliContext | SubscriptContext | ScriptorContext | BrainContext
896
+ type ObjectId = { $oid: string }
860
897
 
861
- /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
862
- */
863
- declare const $2s: typeof $ms
898
+ /** Subscript space that can call FULLSEC scripts. */ const $fs: Fullsec
864
899
 
865
- /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
866
- */
867
- declare const $1s: typeof $ls
900
+ /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
901
+ const $hs: Highsec
868
902
 
869
- /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
870
- declare const $0s: typeof $ns
903
+ /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
904
+ */
905
+ const $ms: Midsec
871
906
 
872
- /** Subscript space that can call any script. Uses seclevel provided in comment before script (defaults to NULLSEC)
873
- * @example
874
- * // @ seclevel MIDSEC
875
- * // remove the space betwen "@" and "s", there's only a space because otherwise vscode breaks
876
- * export function script() {
877
- * $s.foo.bar() // will be converted to #ms.foo.bar()
878
- * } */
879
- declare const $s: Nullsec
907
+ /** Subscript space that can call LOWSEC and above scripts. Makes your script LOWSEC (overrides higher security levels).
908
+ */
909
+ const $ls: Lowsec
880
910
 
881
- type ObjectId = { $oid: string }
911
+ /** Subscript space that can call any script. Makes your script NULLSEC (overrides higher security levels). */
912
+ const $ns: Nullsec
882
913
 
883
- declare const $db: {
884
- /** Insert a document or documents into a collection.
885
- * @param documents A document or array of documents to insert into the collection. */
886
- i: (documents: object | object[]) => {
887
- ok: 1
888
- n: number
889
- opTime: { ts: "Undefined Conversion", t: number }
890
- electionId: "Undefined Conversion"
891
- operationTime: "Undefined Conversion"
892
- $clusterTime: {
893
- clusterTime: "Undefined Conversion"
894
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
895
- }
896
- }
914
+ /** Subscript space that can call FULLSEC scripts. */ const $4s: typeof $fs
897
915
 
898
- /** Remove documents from a collection.
899
- * @param query Specifies deletion criteria using query operators. */
900
- r: (query: Query) => {
901
- ok: 0 | 1
902
- n: number
903
- opTime: { ts: "Undefined Conversion", t: number }
904
- electionId: "Undefined Conversion"
905
- operationTime: "Undefined Conversion"
906
- $clusterTime: {
907
- clusterTime: "Undefined Conversion"
908
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
909
- }
910
- }
916
+ /** Subscript space that can call HIGHSEC and above scripts. Makes your script HIGHSEC (overrides FULLSEC). */
917
+ const $3s: typeof $hs
911
918
 
912
- /** Find documents in a collection or view and returns a cursor to the selected documents.
913
- * @param query Specifies deletion criteria using query operators.
914
- * @param projection Specifies the fields to return in the documents that match the query filter. */
915
- f: (query?: Query, projection?: Projection) => Cursor
916
-
917
- /** Update an existing documents in a collection.
918
- * @param query Specifies deletion criteria using query operators.
919
- * @param command The modifications to apply.
920
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
921
- u: (query: Query | Query[], command: MongoCommand) => {
922
- ok: 0 | 1
923
- nModified: number
924
- n: number
925
- opTime: { ts: "Undefined Conversion", t: number }
926
- electionId: "Undefined Conversion"
927
- operationTime: "Undefined Conversion"
928
- $clusterTime: {
929
- clusterTime: "Undefined Conversion"
930
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
931
- }
932
- }
933
-
934
- /** Updates one document within the collection based on the filter.
935
- * @param query Specifies deletion criteria using query operators.
936
- * @param command The modifications to apply.
937
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
938
- u1: (query: Query | Query[], command: MongoCommand) => {
939
- ok: 0 | 1
940
- nModified: number
941
- n: number
942
- opTime: {
943
- ts: "Undefined Conversion"
944
- t: number
945
- }
946
- electionId: "Undefined Conversion"
947
- operationTime: "Undefined Conversion"
948
- $clusterTime: {
949
- clusterTime: "Undefined Conversion"
950
- signature: {
951
- hash: "Undefined Conversion"
952
- keyId: "Undefined Conversion"
953
- }
954
- }
955
- }
919
+ /** Subscript space that can call MIDSEC and above scripts. Makes your script MIDSEC (overrides higher security levels).
920
+ */
921
+ const $2s: typeof $ms
956
922
 
957
- /** Update or insert or insert document.
958
- * Same as Update, but if no documents match the query, one document will be inserted based on the properties in
959
- * both the query and the command.
960
- * The `$setOnInsert` operator is useful to set defaults.
961
- * @param query Specifies deletion criteria using query operators.
962
- * @param command The modifications to apply.
963
- * {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters} */
964
- us: (query: Query | Query[], command: MongoCommand) => {
965
- ok: 0 | 1
966
- nModified: number
967
- n: number
968
- opTime: { ts: "Undefined Conversion", t: number }
969
- electionId: "Undefined Conversion"
970
- operationTime: "Undefined Conversion"
971
- $clusterTime: {
972
- clusterTime: "Undefined Conversion"
973
- signature: { hash: "Undefined Conversion", keyId: "Undefined Conversion" }
974
- }
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
975
982
  }
976
983
 
977
- ObjectId: () => ObjectId
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
+ /** The name of this script excluding the user and `.`.
1050
+ *
1051
+ * e.g. in the script `foo.bar`, `_SCRIPT_NAME` is `bar`.
1052
+ *
1053
+ * Shorter alternative to `context.this_script.split(".")[1].
1054
+ *
1055
+ * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1056
+ const _SCRIPT_NAME: string
1057
+
1058
+ /** The full name of this script equivilent to `context.this_script` but should use less characters.
1059
+ *
1060
+ * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1061
+ const _FULL_SCRIPT_NAME: string
1062
+
1063
+ /** The seclevel of this script as a number.
1064
+ *
1065
+ * In rare cases where it's not known at build time, it's `-1`. */
1066
+ const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
1067
+
1068
+ /** Recursively
1069
+ * [`Object.freeze()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
1070
+ * an object and its properties' objects and its properties' objects and so on.
1071
+ *
1072
+ * [Official Hackmud Wiki](https://wiki.hackmud.com/scripting/extensions/deep_freeze) */
1073
+ const DEEP_FREEZE: <T>(value: T) => DeepFreeze<T>
1074
+
1075
+ const _RUN_ID: string
978
1076
  }
979
1077
 
980
- /** Debug Log.
981
- *
982
- * If `$D()` is called in a script you own, the `return` value of the top level script is suppressed and instead an
983
- * array of every `$D()`’d entry is printed.
984
- * This lets you use `$D()` like `console.log()`.
985
- *
986
- * `$D()` in scripts not owned by you are not shown but the `return` value always is.
987
- *
988
- * `$D()` returns the first argument so `$D("Hello, World!") evaluates to `"Hello, World!"` as if the `$D` text wasn't
989
- * there.
990
- *
991
- * `$D()`’d items are returned even if the script times out or errors. */
992
- declare function $D<T>(args: T): T
993
-
994
- /** Function Multi-Call Lock.
995
- *
996
- * This is used by escrow to ensure that it is only used once in script execution.
997
- *
998
- * The first time (per-script) `$FMCL` is encountered, it returns `undefined`, every other time it `return`s `true`.
999
- *
1000
- * @example
1001
- * if ($FMCL)
1002
- * return { ok: false, msg: "This script can only be used once per script execution." }
1003
- *
1004
- * // all code here will only run once */
1005
- declare const $FMCL: undefined | true
1006
-
1007
- /** Per-script mutable "global" persistent object that is discarded at the end of top level script execution.
1008
- *
1009
- * `$G` persists between script calls until the end of the main script run making it useful for caching db entries when
1010
- * your script is a subscript.
1011
- * @example
1012
- * if (!$G.dbCache)
1013
- * $G.dbCache = $db.f({ whatever: true }).first() */
1014
- declare const $G: Record<string | symbol, any>
1015
-
1016
- /** This contains a JS timestamp (not Date) set immediately before your code begins running.
1017
- * @example
1018
- * $D(Date.now() - _START) // milliseconds left of run time
1019
- */
1020
- declare const _START: number
1021
-
1022
- /** This contains a JS timestamp (not Date) set immediately before your code begins running.
1023
- * @example
1024
- * $D(Date.now() - _ST) // milliseconds left of run time */
1025
- declare const _ST: typeof _START
1026
-
1027
- /** JavaScript timestamp for the end of the script run (`_START + _TIMEOUT`). */ declare const _END: number
1028
-
1029
- /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
1030
- declare const _TIMEOUT: number
1031
-
1032
- /** The number of milliseconds a script can run for. Normally `5000` though it has been known to change. */
1033
- declare const _TO: typeof _TIMEOUT
1034
-
1035
- /** The source code of this script as a string. */ declare const _SOURCE: string
1036
- /** A unix timestamp of the date this script was built. */ declare const _BUILD_DATE: number
1037
-
1038
- /** The user this script has been uploaded to.
1039
- *
1040
- * Shorter alternative to `context.this_script.split(".")[0].
1041
- *
1042
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1043
- declare const _SCRIPT_USER: string
1044
-
1045
- /** The name of this script excluding the user and `.`.
1046
- *
1047
- * e.g. in the script `foo.bar`, `_SCRIPT_NAME` is `bar`.
1048
- *
1049
- * Shorter alternative to `context.this_script.split(".")[1].
1050
- *
1051
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1052
- declare const _SCRIPT_NAME: string
1053
-
1054
- /** The full name of this script equivilent to `context.this_script` but should use less characters.
1055
- *
1056
- * In rare cases where it's not known at build time, it's `"UNKNOWN"`. */
1057
- declare const _FULL_SCRIPT_NAME: string
1058
-
1059
- /** The seclevel of this script as a number.
1060
- *
1061
- * In rare cases where it's not known at build time, it's `-1`. */
1062
- declare const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
1063
-
1064
- type DeepFreeze<T> = { readonly [P in keyof T]: DeepFreeze<T[P]> }
1065
-
1066
- /** Recursively
1067
- * [`Object.freeze()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
1068
- * an object and its properties' objects and its properties' objects and so on.
1069
- *
1070
- * [Official Hackmud Wiki](https://wiki.hackmud.com/scripting/extensions/deep_freeze) */
1071
- declare const DEEP_FREEZE: <T>(value: T) => DeepFreeze<T>
1072
-
1073
- declare const _RUN_ID: string
1078
+ export {}