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/README.md +4 -0
- package/bin/hsm.js +296 -262
- package/env.d.ts +363 -289
- package/generateTypeDeclaration.js +2 -1
- package/index.d.ts +3 -0
- package/index.js +2 -1
- package/package.json +38 -38
- package/processScript/index.d.ts +0 -1
- package/processScript/index.js +5 -5
- package/processScript/minify.js +11 -17
- package/processScript/postprocess.d.ts +1 -1
- package/processScript/postprocess.js +3 -3
- package/processScript/preprocess.js +5 -3
- package/processScript/transform.d.ts +3 -0
- package/processScript/transform.js +110 -97
- package/push.d.ts +9 -1
- package/push.js +38 -16
- package/watch.js +25 -26
package/env.d.ts
CHANGED
@@ -1,20 +1,6 @@
|
|
1
|
-
type Replace<
|
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
|
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 =
|
35
|
+
type Upgrade = UpgradeBase & Record<string, null | boolean | number | string>
|
57
36
|
|
58
|
-
type
|
59
|
-
[
|
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<{
|
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<
|
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<
|
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<
|
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:
|
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<
|
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<
|
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<
|
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<
|
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
|
-
|
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
|
720
|
-
|
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
|
723
|
-
type
|
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
|
726
|
-
{ $
|
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
|
730
|
-
|
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: () =>
|
735
|
-
/** Returns an array of documents that satisfy the query. */ array: () =>
|
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: () =>
|
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: () =>
|
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:
|
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: (
|
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
|
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. */
|
848
|
+
* scriptor. */
|
849
|
+
calling_script: null
|
850
|
+
|
851
|
+
is_scriptor?: undefined
|
852
|
+
is_brain?: undefined
|
777
853
|
}
|
778
854
|
|
779
|
-
type SubscriptContext = Replace<
|
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 =
|
786
|
-
type BrainContext =
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
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
|
-
|
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
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
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
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
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
|
-
/**
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
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
|
-
|
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 {}
|