warscript 0.0.1-dev.a73c979 → 0.0.1-dev.a856ae3

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.
Files changed (153) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +16 -0
  7. package/core/types/player.lua +60 -15
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  10. package/core/types/sound.lua +1 -1
  11. package/core/types/tileCell.d.ts +11 -1
  12. package/core/types/tileCell.lua +97 -0
  13. package/core/types/timer.d.ts +3 -1
  14. package/core/types/timer.lua +27 -2
  15. package/decl/native.d.ts +6 -4
  16. package/destroyable.d.ts +1 -0
  17. package/destroyable.lua +9 -0
  18. package/engine/behavior.d.ts +12 -1
  19. package/engine/behavior.lua +199 -65
  20. package/engine/behaviour/ability/apply-buff.lua +4 -4
  21. package/engine/behaviour/ability/damage.d.ts +3 -0
  22. package/engine/behaviour/ability/damage.lua +8 -2
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +31 -1
  29. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  31. package/engine/behaviour/unit.d.ts +15 -5
  32. package/engine/behaviour/unit.lua +126 -22
  33. package/engine/buff.d.ts +65 -21
  34. package/engine/buff.lua +362 -179
  35. package/engine/internal/ability.d.ts +3 -1
  36. package/engine/internal/ability.lua +26 -9
  37. package/engine/internal/item/fields.d.ts +12 -0
  38. package/engine/internal/item/fields.lua +33 -0
  39. package/engine/internal/item+owner.lua +12 -6
  40. package/engine/internal/item.d.ts +9 -15
  41. package/engine/internal/item.lua +46 -69
  42. package/engine/internal/mechanics/cast-ability.lua +6 -3
  43. package/engine/internal/misc/frame-coordinates.lua +21 -0
  44. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  45. package/engine/internal/misc/get-terrain-z.lua +11 -0
  46. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  47. package/engine/internal/misc/player-local-handle.lua +5 -0
  48. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  49. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  50. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  51. package/engine/internal/object-data/health-bonus.lua +16 -0
  52. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  53. package/engine/internal/object-data/mana-bonus.lua +16 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  56. package/engine/internal/unit/ability.d.ts +14 -14
  57. package/engine/internal/unit/ability.lua +72 -45
  58. package/engine/internal/unit/attributes.d.ts +17 -0
  59. package/engine/internal/unit/attributes.lua +46 -0
  60. package/engine/internal/unit/bonus.d.ts +6 -0
  61. package/engine/internal/unit/bonus.lua +33 -3
  62. package/engine/internal/unit/fly-height.d.ts +7 -0
  63. package/engine/internal/unit/fly-height.lua +20 -0
  64. package/engine/internal/unit/interrupts.d.ts +12 -0
  65. package/engine/internal/unit/interrupts.lua +28 -0
  66. package/engine/internal/unit/main-selected.lua +12 -27
  67. package/engine/internal/unit/range-event.d.ts +12 -0
  68. package/engine/internal/unit/range-event.lua +90 -0
  69. package/engine/internal/unit/scale.d.ts +7 -0
  70. package/engine/internal/unit/scale.lua +20 -0
  71. package/engine/internal/unit+ability.lua +10 -1
  72. package/engine/internal/unit+bonus.lua +3 -3
  73. package/engine/internal/unit-missile-launch.lua +52 -14
  74. package/engine/internal/unit.d.ts +19 -24
  75. package/engine/internal/unit.lua +179 -200
  76. package/engine/local-client.d.ts +7 -0
  77. package/engine/local-client.lua +86 -1
  78. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  79. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  81. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  82. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  83. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  84. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  85. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  86. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  87. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  89. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  91. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  92. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  93. package/engine/object-data/entry/ability-type.d.ts +2 -0
  94. package/engine/object-data/entry/ability-type.lua +89 -8
  95. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  96. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  97. package/engine/object-data/entry/destructible-type.lua +155 -0
  98. package/engine/object-data/entry/unit-type.d.ts +15 -2
  99. package/engine/object-data/entry/unit-type.lua +135 -33
  100. package/engine/object-field/ability.d.ts +3 -3
  101. package/engine/object-field/ability.lua +9 -8
  102. package/engine/object-field/item.d.ts +22 -0
  103. package/engine/object-field/item.lua +118 -0
  104. package/engine/object-field/unit.d.ts +20 -5
  105. package/engine/object-field/unit.lua +61 -0
  106. package/engine/object-field.d.ts +12 -4
  107. package/engine/object-field.lua +273 -126
  108. package/engine/random.d.ts +10 -0
  109. package/engine/random.lua +21 -0
  110. package/engine/standard/fields/ability.d.ts +2 -2
  111. package/engine/standard/fields/ability.lua +2 -2
  112. package/engine/standard/fields/item.d.ts +4 -0
  113. package/engine/standard/fields/item.lua +6 -0
  114. package/engine/standard/fields/unit.d.ts +11 -3
  115. package/engine/standard/fields/unit.lua +15 -2
  116. package/engine/synchronization.d.ts +11 -0
  117. package/engine/synchronization.lua +77 -0
  118. package/engine/text-tag.d.ts +1 -1
  119. package/engine/text-tag.lua +92 -17
  120. package/engine/unit.d.ts +5 -0
  121. package/engine/unit.lua +5 -0
  122. package/lualib_bundle.lua +1 -1
  123. package/math.d.ts +2 -0
  124. package/math.lua +14 -0
  125. package/net/socket.lua +1 -1
  126. package/objutil/buff.lua +10 -8
  127. package/objutil/object.lua +1 -1
  128. package/operation.lua +1 -4
  129. package/package.json +5 -5
  130. package/patch-lua.lua +15 -0
  131. package/patch-lualib.lua +1 -1
  132. package/utility/arrays.d.ts +1 -0
  133. package/utility/arrays.lua +8 -0
  134. package/utility/callback-array.d.ts +17 -0
  135. package/utility/callback-array.lua +61 -0
  136. package/utility/functions.d.ts +2 -0
  137. package/utility/functions.lua +7 -0
  138. package/utility/linked-map.d.ts +35 -0
  139. package/utility/linked-map.lua +107 -0
  140. package/utility/linked-set.d.ts +4 -1
  141. package/utility/linked-set.lua +46 -1
  142. package/utility/lua-maps.d.ts +11 -2
  143. package/utility/lua-maps.lua +33 -2
  144. package/utility/lua-sets.d.ts +1 -0
  145. package/utility/lua-sets.lua +4 -0
  146. package/utility/records.lua +20 -1
  147. package/utility/types.d.ts +3 -0
  148. package/utility/unordered-map.d.ts +27 -0
  149. package/utility/unordered-map.lua +99 -0
  150. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  151. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  152. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  153. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -0,0 +1,61 @@
1
+ local ____exports = {}
2
+ local safeCall, tableUnpack
3
+ function ____exports.invokeCallbacks(array)
4
+ local length = array[1] or 2
5
+ local i = 2
6
+ while i ~= length do
7
+ local callback = array[i]
8
+ i = i + 1
9
+ local argsCount = array[i]
10
+ i = i + 1
11
+ safeCall(
12
+ callback,
13
+ tableUnpack(array, i, i + argsCount - 1)
14
+ )
15
+ i = i + argsCount
16
+ end
17
+ end
18
+ safeCall = warpack.safeCall
19
+ local select = _G.select
20
+ local tableMove = table.move
21
+ tableUnpack = table.unpack
22
+ ____exports.callbackArray = function() return {} end
23
+ local function doNothing()
24
+ end
25
+ function ____exports.addCallback(array, callback, ...)
26
+ local id = array[1] or 2
27
+ local i = id
28
+ array[i] = callback
29
+ local argsCount = select("#", ...)
30
+ i = i + 1
31
+ array[i] = argsCount
32
+ for j = 1, argsCount do
33
+ i = i + 1
34
+ array[i] = (select(j, ...))
35
+ end
36
+ array[1] = i + 1
37
+ return id
38
+ end
39
+ function ____exports.clearCallbacks(array)
40
+ local length = array[1] or 2
41
+ tableMove(array, length, length + length - 2, 1)
42
+ end
43
+ function ____exports.consumeCallback(array, id)
44
+ local callback = array[id]
45
+ array[id] = doNothing
46
+ id = id + 1
47
+ local argsCount = array[id]
48
+ id = id + 1
49
+ safeCall(
50
+ callback,
51
+ tableUnpack(array, id, id + argsCount - 1)
52
+ )
53
+ end
54
+ function ____exports.consumeCallbacks(array)
55
+ local length = array[1] or 2
56
+ ____exports.invokeCallbacks(array)
57
+ local newLength = array[1] or 2
58
+ tableMove(array, length, length + newLength - 3, 2)
59
+ array[1] = newLength - length + 2
60
+ end
61
+ return ____exports
@@ -9,3 +9,5 @@ export declare const secondArgument: <T>(_: unknown, value: T) => T;
9
9
  export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
10
10
  export declare const increment: (value: number) => number;
11
11
  export declare const or: (lhs: boolean, rhs: boolean) => boolean;
12
+ export type Transform<T, R> = (<T, R>(value: T) => R) | KeysOfType<T, R>;
13
+ export declare const transform: <T, R>(object: T, transform: Transform<T, R>) => R;
@@ -93,4 +93,11 @@ ____exports.secondArgument = function(_, value) return value end
93
93
  ____exports.thirdArgument = function(_first, _second, value) return value end
94
94
  ____exports.increment = function(value) return value + 1 end
95
95
  ____exports["or"] = function(lhs, rhs) return lhs or rhs end
96
+ ____exports.transform = function(object, transform)
97
+ if type(transform) == "function" then
98
+ return transform(object)
99
+ else
100
+ return object[transform]
101
+ end
102
+ end
96
103
  return ____exports
@@ -0,0 +1,35 @@
1
+ /** @noSelfInFile */
2
+ import { ReadonlyLinkedSet } from "./linked-set";
3
+ type IteratorState<K extends AnyNotNil, V> = {
4
+ n?: K;
5
+ t: LuaMap<K, K>;
6
+ v: LuaMap<K, V>;
7
+ };
8
+ type OneSidedTypeGuard = {
9
+ readonly __oneSidedTypeGuard: unique symbol;
10
+ };
11
+ export interface ReadonlyLinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
12
+ readonly keys: ReadonlyLinkedSet<K>;
13
+ get(key: K): V | undefined;
14
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
15
+ readonly size: number;
16
+ }
17
+ export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
18
+ readonly __linkedMap: unique symbol;
19
+ }
20
+ export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinkedMap<K, V> {
21
+ private k;
22
+ private v;
23
+ get keys(): ReadonlyLinkedSet<K>;
24
+ get(key: K): V | undefined;
25
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
26
+ put(key: K, value: V): void;
27
+ remove(key: K): boolean;
28
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
29
+ get size(): number;
30
+ protected __len(): number;
31
+ protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
32
+ }
33
+ export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
34
+ export declare const mutableLinkedMap: <K extends AnyNotNil, V>() => LinkedMap<K, V>;
35
+ export {};
@@ -0,0 +1,107 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
6
+ local ____exports = {}
7
+ local ____linked_2Dset = require("utility.linked-set")
8
+ local LinkedSet = ____linked_2Dset.LinkedSet
9
+ local ____exception = require("exception")
10
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
11
+ local function linkedMapNext(state)
12
+ local n = state.n
13
+ state.n = state.t[n]
14
+ return n, state.v[n]
15
+ end
16
+ ____exports.LinkedMap = __TS__Class()
17
+ local LinkedMap = ____exports.LinkedMap
18
+ LinkedMap.name = "LinkedMap"
19
+ function LinkedMap.prototype.____constructor(self)
20
+ self.k = __TS__New(LinkedSet)
21
+ self.v = {}
22
+ end
23
+ function LinkedMap.prototype.get(self, key)
24
+ return self.v[key]
25
+ end
26
+ function LinkedMap.prototype.getOrPut(self, key, defaultValue)
27
+ local value = self.v[key]
28
+ if value ~= nil then
29
+ return value
30
+ end
31
+ value = defaultValue()
32
+ self.k:add(key)
33
+ self.v[key] = value
34
+ return value
35
+ end
36
+ function LinkedMap.prototype.put(self, key, value)
37
+ self.k:add(key)
38
+ self.v[key] = value
39
+ end
40
+ function LinkedMap.prototype.remove(self, key)
41
+ if self.k:remove(key) then
42
+ self.v[key] = nil
43
+ return true
44
+ end
45
+ return false
46
+ end
47
+ function LinkedMap.prototype.contains(self, key)
48
+ return self.keys:contains(key)
49
+ end
50
+ function LinkedMap.prototype.__len(self)
51
+ return self.keys.size
52
+ end
53
+ function LinkedMap.prototype.__pairs(self)
54
+ return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
55
+ end
56
+ __TS__SetDescriptor(
57
+ LinkedMap.prototype,
58
+ "keys",
59
+ {get = function(self)
60
+ return self.k
61
+ end},
62
+ true
63
+ )
64
+ __TS__SetDescriptor(
65
+ LinkedMap.prototype,
66
+ "size",
67
+ {get = function(self)
68
+ return self.keys.size
69
+ end},
70
+ true
71
+ )
72
+ local emptyIteratorState = {t = {}, v = {}}
73
+ local EmptyLinkedMap = __TS__Class()
74
+ EmptyLinkedMap.name = "EmptyLinkedMap"
75
+ __TS__ClassExtends(EmptyLinkedMap, ____exports.LinkedMap)
76
+ function EmptyLinkedMap.prototype.getOrPut(self)
77
+ error(
78
+ __TS__New(UnsupportedOperationException),
79
+ 0
80
+ )
81
+ end
82
+ function EmptyLinkedMap.prototype.put(self)
83
+ error(
84
+ __TS__New(UnsupportedOperationException),
85
+ 0
86
+ )
87
+ end
88
+ function EmptyLinkedMap.prototype.remove(self)
89
+ error(
90
+ __TS__New(UnsupportedOperationException),
91
+ 0
92
+ )
93
+ end
94
+ function EmptyLinkedMap.prototype.__len(self)
95
+ return 0
96
+ end
97
+ function EmptyLinkedMap.prototype.__pairs(self)
98
+ return linkedMapNext, emptyIteratorState, nil
99
+ end
100
+ local EMPTY_LINKED_MAP = __TS__New(EmptyLinkedMap)
101
+ ____exports.emptyLinkedMap = function()
102
+ return EMPTY_LINKED_MAP
103
+ end
104
+ ____exports.mutableLinkedMap = function()
105
+ return __TS__New(____exports.LinkedMap)
106
+ end
107
+ return ____exports
@@ -14,7 +14,7 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
14
14
  next(key: T): T | undefined;
15
15
  previous(key: T): T | undefined;
16
16
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
17
- size: number;
17
+ readonly size: number;
18
18
  forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
19
19
  toArray(): T[];
20
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
@@ -36,9 +36,11 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
36
36
  copyOf(): LinkedSet<T>;
37
37
  first(): T | undefined;
38
38
  last(): T | undefined;
39
+ pop(): T | undefined;
39
40
  next(key: T): T | undefined;
40
41
  previous(key: T): T | undefined;
41
42
  add(key: T): boolean;
43
+ protected addBefore(value: T, key: T): boolean;
42
44
  remove(key: T): boolean;
43
45
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
44
46
  clear(): void;
@@ -47,6 +49,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
47
49
  toArray(): T[];
48
50
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
49
51
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
52
+ protected __len(): number;
50
53
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
51
54
  }
52
55
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
@@ -42,6 +42,23 @@ end
42
42
  function LinkedSet.prototype.last(self)
43
43
  return self.l
44
44
  end
45
+ function LinkedSet.prototype.pop(self)
46
+ local f = self.f
47
+ if f == nil then
48
+ return nil
49
+ end
50
+ local n = self.n
51
+ local next = n[f]
52
+ n[f] = nil
53
+ self.f = next
54
+ if next ~= nil then
55
+ self.p[next] = nil
56
+ else
57
+ self.l = nil
58
+ end
59
+ self.s = self.s - 1
60
+ return f
61
+ end
45
62
  function LinkedSet.prototype.next(self, key)
46
63
  return self.n[key]
47
64
  end
@@ -68,6 +85,23 @@ function LinkedSet.prototype.add(self, key)
68
85
  end
69
86
  return true
70
87
  end
88
+ function LinkedSet.prototype.addBefore(self, value, key)
89
+ local n = self.n
90
+ local p = self.p
91
+ local previous = p[value]
92
+ if previous ~= nil then
93
+ n[previous] = key
94
+ p[key] = previous
95
+ elseif value == self.f then
96
+ self.f = key
97
+ else
98
+ return false
99
+ end
100
+ n[key] = value
101
+ p[value] = key
102
+ self.s = self.s + 1
103
+ return true
104
+ end
71
105
  function LinkedSet.prototype.remove(self, key)
72
106
  local n = self.n
73
107
  local next = n[key]
@@ -107,8 +141,9 @@ function LinkedSet.prototype.forEach(self, action, ...)
107
141
  local n = self.n
108
142
  local c = self.f
109
143
  while c ~= nil do
144
+ local next = n[c]
110
145
  action(c, ...)
111
- c = n[c]
146
+ c = next
112
147
  end
113
148
  end
114
149
  function LinkedSet.prototype.toArray(self)
@@ -153,6 +188,9 @@ function LinkedSet.prototype.sortBy(self, selector)
153
188
  self.f = array[1]
154
189
  self.l = array[s]
155
190
  end
191
+ function LinkedSet.prototype.__len(self)
192
+ return self.s
193
+ end
156
194
  function LinkedSet.prototype.__pairs(self)
157
195
  return linkedSetNext, {t = self.n, n = self.f}, nil
158
196
  end
@@ -164,6 +202,7 @@ __TS__SetDescriptor(
164
202
  end},
165
203
  true
166
204
  )
205
+ local emptyIteratorState = {t = {}}
167
206
  local EmptyLinkedSet = __TS__Class()
168
207
  EmptyLinkedSet.name = "EmptyLinkedSet"
169
208
  __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
@@ -173,6 +212,12 @@ function EmptyLinkedSet.prototype.add(self)
173
212
  0
174
213
  )
175
214
  end
215
+ function EmptyLinkedSet.prototype.__len(self)
216
+ return 0
217
+ end
218
+ function EmptyLinkedSet.prototype.__pairs(self)
219
+ return linkedSetNext, emptyIteratorState, nil
220
+ end
176
221
  local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
222
  ____exports.emptyLinkedSet = function()
178
223
  return EMPTY_LINKED_SET
@@ -4,6 +4,15 @@ export declare const emptyLuaMap: <K extends AnyNotNil, V>() => ReadonlyLuaMap<K
4
4
  export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
5
5
  export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
6
6
  export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40>>) => LuaMap<K, V>;
7
- export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
8
- export declare const mapValues: <K extends AnyNotNil, V1, V2>(luaMap: LuaMap<K, V1>, transform: (value: V1) => V2) => LuaMap<K, V2>;
7
+ export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: ReadonlyLuaMap<K, V | undefined | null>) => LuaMap<V, K>;
8
+ export declare const toLuaMap: <K extends PropertyKey, V>(record: Record<K, V>) => LuaMap<K, V>;
9
+ export declare const flattenKeys: <K extends AnyNotNil, V>(luaMap: ReadonlyLuaMap<readonly K[], V> | ReadonlyLuaMap<K[], V>) => LuaMap<K, V>;
10
+ export declare const mapKeys: {
11
+ <K1 extends AnyNotNil, K2 extends AnyNotNil, V>(luaMap: ReadonlyLuaMap<K1, V>, transform: (value: K1) => K2): LuaMap<K2, V>;
12
+ <K1 extends AnyNotNil, K2 extends keyof K1, V>(luaMap: ReadonlyLuaMap<K1, V>, key: K2): K1[K2] extends AnyNotNil ? LuaMap<K1[K2], V> : never;
13
+ };
14
+ export declare const mapValues: {
15
+ <K extends AnyNotNil, V1, V2>(luaMap: ReadonlyLuaMap<K, V1>, transform: (value: V1) => V2): LuaMap<K, V2>;
16
+ <K extends AnyNotNil, V1, V2 extends keyof V1>(luaMap: ReadonlyLuaMap<K, V1>, key: V2): LuaMap<K, V1[V2]>;
17
+ };
9
18
  export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
@@ -27,10 +27,41 @@ ____exports.luaMapInvert = function(luaMap)
27
27
  end
28
28
  return invertLuaMap
29
29
  end
30
+ ____exports.toLuaMap = function(record)
31
+ return record
32
+ end
33
+ ____exports.flattenKeys = function(luaMap)
34
+ local result = {}
35
+ for keys, value in pairs(luaMap) do
36
+ for ____, key in ipairs(keys) do
37
+ result[key] = value
38
+ end
39
+ end
40
+ return result
41
+ end
42
+ ____exports.mapKeys = function(luaMap, transform)
43
+ local result = {}
44
+ if type(transform) == "function" then
45
+ for key, value in pairs(luaMap) do
46
+ result[transform(key)] = value
47
+ end
48
+ else
49
+ for key, value in pairs(luaMap) do
50
+ result[key[transform]] = value
51
+ end
52
+ end
53
+ return result
54
+ end
30
55
  ____exports.mapValues = function(luaMap, transform)
31
56
  local result = {}
32
- for key, value in pairs(luaMap) do
33
- result[key] = transform(value)
57
+ if type(transform) == "function" then
58
+ for key, value in pairs(luaMap) do
59
+ result[key] = transform(value)
60
+ end
61
+ else
62
+ for key, value in pairs(luaMap) do
63
+ result[key] = value[transform]
64
+ end
34
65
  end
35
66
  return result
36
67
  end
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ export declare const emptyLuaSet: <T extends AnyNotNil>() => ReadonlyLuaSet<T>;
2
3
  export declare const mutableLuaSet: <T extends AnyNotNil>() => LuaSet<T>;
3
4
  export declare const luaSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LuaSet<T>;
4
5
  export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LuaSet<T>;
@@ -1,5 +1,9 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ local EMPTY_LUA_SET = {}
4
+ ____exports.emptyLuaSet = function()
5
+ return EMPTY_LUA_SET
6
+ end
3
7
  ____exports.mutableLuaSet = function()
4
8
  return {}
5
9
  end
@@ -1,9 +1,28 @@
1
1
  local ____exports = {}
2
+ local ____pairs = _G.pairs
3
+ local tableSort = table.sort
2
4
  ____exports.invertRecord = function(record)
3
5
  local invertRecord = {}
4
- for key, value in pairs(record) do
6
+ for key, value in ____pairs(record) do
5
7
  invertRecord[value] = key
6
8
  end
7
9
  return invertRecord
8
10
  end
11
+ local sortedKeysInternal = {}
12
+ local lastSortedKeysLength = 0
13
+ ---
14
+ -- @internal For use by internal systems only.
15
+ ____exports.sortedKeysUnnested = function(record)
16
+ local length = 0
17
+ for key in ____pairs(record) do
18
+ length = length + 1
19
+ sortedKeysInternal[length] = key
20
+ end
21
+ for i = length + 1, lastSortedKeysLength do
22
+ sortedKeysInternal[i] = nil
23
+ end
24
+ lastSortedKeysLength = length
25
+ tableSort(sortedKeysInternal)
26
+ return sortedKeysInternal
27
+ end
9
28
  return ____exports
@@ -37,4 +37,7 @@ export type Flatten<T extends readonly any[], A extends readonly any[] = []> = T
37
37
  export type Prohibit<T, K extends keyof any> = T & {
38
38
  [P in K]?: never;
39
39
  };
40
+ type TupleSplit<T, N extends number, O extends readonly any[] = readonly []> = O["length"] extends N ? [O, T] : T extends readonly [infer F, ...infer R] ? TupleSplit<readonly [...R], N, readonly [...O, F]> : [O, T];
41
+ export type TakeFirst<T extends readonly any[], N extends number> = TupleSplit<T, N>[0];
42
+ export type SkipFirst<T extends readonly any[], N extends number> = TupleSplit<T, N>[1];
40
43
  export {};
@@ -0,0 +1,27 @@
1
+ /** @noSelfInFile */
2
+ type OneSidedTypeGuard = {
3
+ readonly __oneSidedTypeGuard: unique symbol;
4
+ };
5
+ export interface ReadonlyUnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
6
+ get(key: K): V | undefined;
7
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
8
+ readonly size: number;
9
+ }
10
+ export interface UnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
11
+ readonly __unorderedMap: unique symbol;
12
+ }
13
+ export declare class UnorderedMap<K extends AnyNotNil, V> implements ReadonlyUnorderedMap<K, V> {
14
+ private readonly v;
15
+ private s;
16
+ get(key: K): V | undefined;
17
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
18
+ put(key: K, value: V): void;
19
+ remove(key: K): boolean;
20
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
21
+ get size(): number;
22
+ protected __len(): number;
23
+ protected __pairs(this: UnorderedMap<K, V>): ReturnType<typeof pairs>;
24
+ }
25
+ export declare const emptyUnorderedMap: <K extends AnyNotNil, V>() => ReadonlyUnorderedMap<K, V>;
26
+ export declare const mutableUnorderedMap: <K extends AnyNotNil, V>() => UnorderedMap<K, V>;
27
+ export {};
@@ -0,0 +1,99 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
5
+ local __TS__New = ____lualib.__TS__New
6
+ local ____exports = {}
7
+ local ____exception = require("exception")
8
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
9
+ ____exports.UnorderedMap = __TS__Class()
10
+ local UnorderedMap = ____exports.UnorderedMap
11
+ UnorderedMap.name = "UnorderedMap"
12
+ function UnorderedMap.prototype.____constructor(self)
13
+ self.v = {}
14
+ self.s = 0
15
+ end
16
+ function UnorderedMap.prototype.get(self, key)
17
+ return self.v[key]
18
+ end
19
+ function UnorderedMap.prototype.getOrPut(self, key, defaultValue)
20
+ local value = self.v[key]
21
+ if value ~= nil then
22
+ return value
23
+ end
24
+ value = defaultValue()
25
+ if value ~= nil then
26
+ self.v[key] = value
27
+ self.s = self.s + 1
28
+ end
29
+ return value
30
+ end
31
+ function UnorderedMap.prototype.put(self, key, value)
32
+ local has = self.v[key] ~= nil
33
+ self.v[key] = value
34
+ if value ~= nil and not has then
35
+ self.s = self.s + 1
36
+ elseif value == nil and has then
37
+ self.s = self.s - 1
38
+ end
39
+ end
40
+ function UnorderedMap.prototype.remove(self, key)
41
+ if self.v[key] ~= nil then
42
+ self.v[key] = nil
43
+ self.s = self.s - 1
44
+ return true
45
+ end
46
+ return false
47
+ end
48
+ function UnorderedMap.prototype.contains(self, key)
49
+ return self.v[key] ~= nil
50
+ end
51
+ function UnorderedMap.prototype.__len(self)
52
+ return self.s
53
+ end
54
+ function UnorderedMap.prototype.__pairs(self)
55
+ return pairs(self.v)
56
+ end
57
+ __TS__SetDescriptor(
58
+ UnorderedMap.prototype,
59
+ "size",
60
+ {get = function(self)
61
+ return self.s
62
+ end},
63
+ true
64
+ )
65
+ local EmptyUnorderedMap = __TS__Class()
66
+ EmptyUnorderedMap.name = "EmptyUnorderedMap"
67
+ __TS__ClassExtends(EmptyUnorderedMap, ____exports.UnorderedMap)
68
+ function EmptyUnorderedMap.prototype.getOrPut(self)
69
+ error(
70
+ __TS__New(UnsupportedOperationException),
71
+ 0
72
+ )
73
+ end
74
+ function EmptyUnorderedMap.prototype.put(self)
75
+ error(
76
+ __TS__New(UnsupportedOperationException),
77
+ 0
78
+ )
79
+ end
80
+ function EmptyUnorderedMap.prototype.remove(self)
81
+ error(
82
+ __TS__New(UnsupportedOperationException),
83
+ 0
84
+ )
85
+ end
86
+ function EmptyUnorderedMap.prototype.__len(self)
87
+ return 0
88
+ end
89
+ function EmptyUnorderedMap.prototype.__pairs(self)
90
+ return pairs(self.v)
91
+ end
92
+ local EMPTY_UNORDERED_MAP = __TS__New(EmptyUnorderedMap)
93
+ ____exports.emptyUnorderedMap = function()
94
+ return EMPTY_UNORDERED_MAP
95
+ end
96
+ ____exports.mutableUnorderedMap = function()
97
+ return __TS__New(____exports.UnorderedMap)
98
+ end
99
+ return ____exports