warscript 0.0.1-dev.ea69747 → 0.0.1-dev.eb24bc1

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 (236) hide show
  1. package/attributes.d.ts +17 -0
  2. package/attributes.lua +23 -0
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -1
  10. package/core/types/frame.lua +93 -1
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/handle.d.ts +2 -1
  13. package/core/types/handle.lua +5 -0
  14. package/core/types/image.d.ts +0 -1
  15. package/core/types/missile.d.ts +2 -2
  16. package/core/types/missile.lua +8 -2
  17. package/core/types/sound.d.ts +17 -24
  18. package/core/types/sound.lua +99 -24
  19. package/core/types/timer.d.ts +6 -7
  20. package/core/types/timer.lua +18 -21
  21. package/core/types/unit.lua +8 -0
  22. package/core/util.d.ts +1 -1
  23. package/core/util.lua +18 -1
  24. package/decl/index.d.ts +1 -0
  25. package/decl/native.d.ts +840 -786
  26. package/engine/ability.d.ts +1 -1
  27. package/engine/behavior.d.ts +10 -10
  28. package/engine/behavior.lua +6 -6
  29. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  30. package/engine/behaviour/ability/always-enabled.lua +31 -0
  31. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  32. package/engine/behaviour/ability/apply-buff.lua +32 -0
  33. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +32 -9
  35. package/engine/behaviour/ability/damage.d.ts +39 -11
  36. package/engine/behaviour/ability/damage.lua +83 -37
  37. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  38. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  39. package/engine/behaviour/ability/heal.d.ts +33 -6
  40. package/engine/behaviour/ability/heal.lua +89 -10
  41. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  42. package/engine/behaviour/ability/instant-impact.lua +4 -15
  43. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  44. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  45. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  46. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  47. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  48. package/engine/behaviour/ability/restore-mana.lua +29 -0
  49. package/engine/behaviour/ability.d.ts +27 -4
  50. package/engine/behaviour/ability.lua +152 -17
  51. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  52. package/engine/behaviour/unit.d.ts +10 -2
  53. package/engine/behaviour/unit.lua +27 -0
  54. package/engine/buff.d.ts +103 -41
  55. package/engine/buff.lua +465 -212
  56. package/engine/game-map.d.ts +7 -0
  57. package/engine/game-map.lua +32 -0
  58. package/engine/internal/ability.d.ts +17 -14
  59. package/engine/internal/ability.lua +80 -76
  60. package/engine/internal/item/ability.lua +106 -0
  61. package/engine/internal/item+owner.lua +2 -2
  62. package/engine/internal/item.d.ts +4 -3
  63. package/engine/internal/item.lua +56 -25
  64. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  65. package/engine/internal/mechanics/ability-duration.lua +3 -1
  66. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  67. package/engine/internal/mechanics/cast-ability.lua +86 -0
  68. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  69. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  70. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  71. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  72. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  73. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  74. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  75. package/engine/internal/object-data/evasion-probability.lua +16 -0
  76. package/engine/internal/unit/ability.d.ts +10 -1
  77. package/engine/internal/unit/ability.lua +36 -14
  78. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  79. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  80. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  81. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  82. package/engine/internal/unit/bonus.d.ts +11 -8
  83. package/engine/internal/unit/bonus.lua +23 -1
  84. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  85. package/engine/internal/unit/detach-missiles.lua +30 -0
  86. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  87. package/engine/internal/unit/ignore-events-items.lua +5 -0
  88. package/engine/internal/unit/item.d.ts +24 -0
  89. package/engine/internal/unit/item.lua +78 -0
  90. package/engine/internal/unit/main-selected.d.ts +13 -0
  91. package/engine/internal/unit/main-selected.lua +51 -0
  92. package/engine/internal/unit+ability.lua +2 -2
  93. package/engine/internal/unit+damage.d.ts +2 -11
  94. package/engine/internal/unit+damage.lua +10 -14
  95. package/engine/internal/unit+spellSteal.lua +1 -2
  96. package/engine/internal/unit+transport.lua +4 -10
  97. package/engine/internal/unit-missile-launch.lua +25 -6
  98. package/engine/internal/unit.d.ts +76 -18
  99. package/engine/internal/unit.lua +466 -167
  100. package/engine/internal/utility.lua +12 -0
  101. package/engine/lightning.d.ts +12 -5
  102. package/engine/lightning.lua +48 -14
  103. package/engine/local-client.d.ts +7 -2
  104. package/engine/local-client.lua +82 -0
  105. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  106. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  107. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  108. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  109. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  110. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  111. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  112. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  113. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  114. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  115. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  117. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  118. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  119. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  120. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  121. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  122. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  123. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  124. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  125. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  126. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  127. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  128. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  129. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  130. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  131. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +4 -4
  132. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  133. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  134. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  135. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  136. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  137. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  138. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  139. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  140. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  141. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  142. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  143. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  144. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  145. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  146. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  147. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  148. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  149. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  150. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  151. package/engine/object-data/entry/ability-type/web.lua +52 -0
  152. package/engine/object-data/entry/ability-type.d.ts +20 -18
  153. package/engine/object-data/entry/ability-type.lua +90 -33
  154. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  155. package/engine/object-data/entry/buff-type/applicable.lua +39 -102
  156. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  157. package/engine/object-data/entry/buff-type.d.ts +6 -13
  158. package/engine/object-data/entry/buff-type.lua +13 -29
  159. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  160. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  161. package/engine/object-data/entry/item-type.d.ts +15 -2
  162. package/engine/object-data/entry/item-type.lua +93 -2
  163. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  164. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  165. package/engine/object-data/entry/sound-preset.lua +140 -0
  166. package/engine/object-data/entry/unit-type.d.ts +50 -3
  167. package/engine/object-data/entry/unit-type.lua +452 -61
  168. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  169. package/engine/object-data/entry/upgrade.d.ts +1 -2
  170. package/engine/object-data/entry/upgrade.lua +4 -4
  171. package/engine/object-data/entry.d.ts +18 -17
  172. package/engine/object-data/entry.lua +60 -32
  173. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  174. package/engine/object-field/ability.d.ts +33 -8
  175. package/engine/object-field/ability.lua +60 -1
  176. package/engine/object-field/unit.d.ts +46 -2
  177. package/engine/object-field/unit.lua +173 -4
  178. package/engine/object-field.d.ts +15 -5
  179. package/engine/object-field.lua +196 -84
  180. package/engine/random.d.ts +1 -0
  181. package/engine/random.lua +9 -0
  182. package/engine/standard/entries/buff-type.d.ts +3 -0
  183. package/engine/standard/entries/buff-type.lua +3 -0
  184. package/engine/standard/entries/sound-preset.d.ts +10 -0
  185. package/engine/standard/entries/sound-preset.lua +10 -0
  186. package/engine/standard/entries/unit-type.d.ts +42 -1
  187. package/engine/standard/entries/unit-type.lua +42 -1
  188. package/engine/standard/fields/ability.d.ts +3 -1
  189. package/engine/standard/fields/ability.lua +3 -1
  190. package/engine/unit.d.ts +4 -0
  191. package/engine/unit.lua +13 -2
  192. package/event.d.ts +2 -3
  193. package/event.lua +9 -5
  194. package/exception.d.ts +2 -0
  195. package/exception.lua +4 -0
  196. package/global/vec2.lua +1 -0
  197. package/index.d.ts +1 -0
  198. package/index.lua +1 -0
  199. package/lualib_bundle.lua +146 -42
  200. package/math/vec2.d.ts +2 -9
  201. package/math.d.ts +0 -2
  202. package/net/socket.d.ts +7 -1
  203. package/net/socket.lua +45 -4
  204. package/network.d.ts +1 -0
  205. package/network.lua +3 -2
  206. package/objutil/ability.d.ts +0 -1
  207. package/objutil/buff.d.ts +0 -1
  208. package/objutil/buff.lua +2 -3
  209. package/objutil/object.d.ts +0 -1
  210. package/objutil/unit.d.ts +0 -1
  211. package/objutil/unit.lua +8 -0
  212. package/package.json +13 -14
  213. package/patch-lua.d.ts +0 -0
  214. package/patch-lua.lua +10 -0
  215. package/property.d.ts +55 -0
  216. package/property.lua +374 -0
  217. package/string.d.ts +30 -0
  218. package/string.lua +14 -0
  219. package/util/stream.d.ts +0 -1
  220. package/utility/arrays.d.ts +13 -6
  221. package/utility/arrays.lua +41 -4
  222. package/utility/bit-set.d.ts +0 -2
  223. package/utility/functions.d.ts +1 -0
  224. package/utility/functions.lua +1 -0
  225. package/utility/lazy.d.ts +2 -0
  226. package/utility/lazy.lua +14 -0
  227. package/utility/linked-set.d.ts +32 -9
  228. package/utility/linked-set.lua +24 -2
  229. package/utility/lua-maps.d.ts +4 -2
  230. package/utility/lua-maps.lua +16 -0
  231. package/utility/lua-sets.d.ts +2 -2
  232. package/utility/lua-sets.lua +3 -0
  233. package/utility/reflection.lua +11 -7
  234. package/utility/types.d.ts +3 -2
  235. package/core/mapbounds.d.ts +0 -8
  236. package/core/mapbounds.lua +0 -12
@@ -3,12 +3,17 @@ local __TS__New = ____lualib.__TS__New
3
3
  local ____exports = {}
4
4
  local ____exception = require("exception")
5
5
  local IllegalArgumentException = ____exception.IllegalArgumentException
6
+ local ____functions = require("utility.functions")
7
+ local identity = ____functions.identity
6
8
  local mathMax = math.max
7
9
  local mathMin = math.min
8
10
  local select = _G.select
9
11
  local tableConcat = table.concat
10
12
  local tableSort = table.sort
11
- ____exports.EMPTY_ARRAY = {}
13
+ local EMPTY_ARRAY = {}
14
+ ____exports.emptyArray = function()
15
+ return EMPTY_ARRAY
16
+ end
12
17
  ____exports.joinToString = function(array, separator, transform)
13
18
  if transform == nil then
14
19
  transform = tostring
@@ -117,6 +122,7 @@ ____exports.mapToLuaSet = function(array, transform)
117
122
  end
118
123
  return result
119
124
  end
125
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
120
126
  ____exports.flatMap = function(array, transform)
121
127
  local result = {}
122
128
  local k = 1
@@ -175,9 +181,16 @@ ____exports.associate = function(array, keySelector, valueSelector)
175
181
  end
176
182
  ____exports.associateBy = function(array, keySelector)
177
183
  local result = {}
178
- for i = 1, #array do
179
- local value = array[i]
180
- result[keySelector(value)] = value
184
+ if type(keySelector) == "function" then
185
+ for i = 1, #array do
186
+ local value = array[i]
187
+ result[keySelector(value)] = value
188
+ end
189
+ else
190
+ for i = 1, #array do
191
+ local value = array[i]
192
+ result[value[keySelector]] = value
193
+ end
181
194
  end
182
195
  return result
183
196
  end
@@ -248,6 +261,30 @@ ____exports.max = function(array)
248
261
  end
249
262
  return mathMax(table.unpack(array))
250
263
  end
264
+ ____exports.maxBy = function(array, selector, ...)
265
+ local result = nil
266
+ local maxValue = -math.huge
267
+ if type(selector) == "function" then
268
+ for i = 1, #array do
269
+ local element = array[i]
270
+ local value = selector(element, ...)
271
+ if value > maxValue then
272
+ result = element
273
+ maxValue = value
274
+ end
275
+ end
276
+ else
277
+ for i = 1, #array do
278
+ local element = array[i]
279
+ local value = element[selector]
280
+ if value > maxValue then
281
+ result = element
282
+ maxValue = value
283
+ end
284
+ end
285
+ end
286
+ return result
287
+ end
251
288
  ____exports.intersperse = function(array, delimiter)
252
289
  local result = {}
253
290
  local length = #array
@@ -1,5 +1,3 @@
1
- /// <reference types="@warscript/language-extensions" />
2
- /// <reference types="@typescript-to-lua/language-extensions" />
3
1
  /** @noSelfInFile */
4
2
  interface IBitSet<T extends number> {
5
3
  readonly has: LuaBitwiseAndEqualsRightMethod<T>;
@@ -3,3 +3,4 @@ export declare const apply: {
3
3
  <T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
+ export declare const identity: <T>(value: T) => T;
@@ -87,4 +87,5 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
90
91
  return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export declare const lazyRecord: <K extends keyof any, V>(initializer: (key: K) => V) => Readonly<Record<K, V>>;
@@ -0,0 +1,14 @@
1
+ local ____exports = {}
2
+ local rawset = _G.rawset
3
+ local setmetatable = _G.setmetatable
4
+ ____exports.lazyRecord = function(initializer)
5
+ return setmetatable(
6
+ {},
7
+ {__index = function(self, key)
8
+ local value = initializer(key)
9
+ rawset(self, key, value)
10
+ return value
11
+ end}
12
+ )
13
+ end
14
+ return ____exports
@@ -1,13 +1,33 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
2
+ import { NonEmptyArray, ReadonlyNonEmptyArray } from "./types";
3
3
  type IteratorState<T extends AnyNotNil> = {
4
4
  t: LuaMap<T, T>;
5
5
  n?: T;
6
6
  };
7
- export interface LinkedSet<T> extends LuaPairsKeyIterable<T> {
8
- readonly __linkedHashSet: unique symbol;
7
+ type OneSidedTypeGuard = {
8
+ readonly __oneSidedTypeGuard: unique symbol;
9
+ };
10
+ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
11
+ copyOf(): LinkedSet<T>;
12
+ first(): T | undefined;
13
+ last(): T | undefined;
14
+ next(key: T): T | undefined;
15
+ previous(key: T): T | undefined;
16
+ contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
17
+ size: number;
18
+ forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
19
+ toArray(): T[];
20
+ sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
21
+ }
22
+ export interface ReadonlyNonEmptyLinkedSet<T extends AnyNotNil> extends ReadonlyLinkedSet<T> {
23
+ first(): T;
24
+ last(): T;
25
+ toArray(): NonEmptyArray<T>;
26
+ }
27
+ export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
28
+ readonly __linkedSet: unique symbol;
9
29
  }
10
- export declare class LinkedSet<T extends AnyNotNil> {
30
+ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet<T> {
11
31
  private n;
12
32
  private p;
13
33
  private f?;
@@ -20,9 +40,7 @@ export declare class LinkedSet<T extends AnyNotNil> {
20
40
  previous(key: T): T | undefined;
21
41
  add(key: T): boolean;
22
42
  remove(key: T): boolean;
23
- contains(key: AnyNotNil): key is T & {
24
- readonly __oneSidedTypeGuard: unique symbol;
25
- };
43
+ contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
26
44
  clear(): void;
27
45
  get size(): number;
28
46
  forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
@@ -31,6 +49,11 @@ export declare class LinkedSet<T extends AnyNotNil> {
31
49
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
32
50
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
33
51
  }
34
- export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
35
- export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
52
+ export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
53
+ export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
54
+ export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
55
+ export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
56
+ export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
57
+ export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
58
+ export declare const nonEmptyLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyNonEmptyArray<T>) => ReadonlyNonEmptyLinkedSet<T>;
36
59
  export {};
@@ -2,9 +2,12 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
5
6
  local ____exports = {}
6
7
  local ____arrays = require("utility.arrays")
7
8
  local sortBy = ____arrays.sortBy
9
+ local ____exception = require("exception")
10
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
8
11
  local function linkedSetNext(state)
9
12
  local n = state.n
10
13
  state.n = state.t[n]
@@ -161,14 +164,30 @@ __TS__SetDescriptor(
161
164
  end},
162
165
  true
163
166
  )
164
- ____exports.linkedSetOf = function(...)
167
+ local EmptyLinkedSet = __TS__Class()
168
+ EmptyLinkedSet.name = "EmptyLinkedSet"
169
+ __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
170
+ function EmptyLinkedSet.prototype.add(self)
171
+ error(
172
+ __TS__New(UnsupportedOperationException),
173
+ 0
174
+ )
175
+ end
176
+ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
+ ____exports.emptyLinkedSet = function()
178
+ return EMPTY_LINKED_SET
179
+ end
180
+ ____exports.mutableLinkedSet = function()
181
+ return __TS__New(____exports.LinkedSet)
182
+ end
183
+ ____exports.mutableLinkedSetOf = function(...)
165
184
  local linkedSet = __TS__New(____exports.LinkedSet)
166
185
  for i = 1, select("#", ...) do
167
186
  linkedSet:add((select(i, ...)))
168
187
  end
169
188
  return linkedSet
170
189
  end
171
- ____exports.linkedSetOfNotNull = function(...)
190
+ ____exports.mutableLinkedSetOfNotNull = function(...)
172
191
  local linkedSet = __TS__New(____exports.LinkedSet)
173
192
  for i = 1, select("#", ...) do
174
193
  local element = (select(i, ...))
@@ -178,4 +197,7 @@ ____exports.linkedSetOfNotNull = function(...)
178
197
  end
179
198
  return linkedSet
180
199
  end
200
+ ____exports.linkedSetOf = function(...) return ____exports.mutableLinkedSetOf(...) end
201
+ ____exports.linkedSetOfNotNull = function(...) return ____exports.mutableLinkedSetOfNotNull(...) end
202
+ ____exports.nonEmptyLinkedSetOf = function(...) return ____exports.linkedSetOf(...) end
181
203
  return ____exports
@@ -1,6 +1,8 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Flatten, TupleOf } from "./types";
4
- export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 2 | 1 | 22 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 31 | 40 | 30 | 32 | 23 | 24 | 25 | 26 | 28 | 29 | 33 | 34 | 35 | 36 | 37 | 38 | 39>>) => LuaMap<K, V>;
3
+ export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
4
+ export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
5
+ 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>;
5
6
  export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
6
7
  export declare const mapValues: <K extends AnyNotNil, V1, V2>(luaMap: LuaMap<K, V1>, transform: (value: V1) => V2) => LuaMap<K, V2>;
8
+ export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
@@ -1,5 +1,13 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ local setmetatable = _G.setmetatable
4
+ local weakKeysMetatable = {__mode = "k"}
5
+ ____exports.mutableLuaMap = function()
6
+ return {}
7
+ end
8
+ ____exports.mutableWeakLuaMap = function()
9
+ return setmetatable({}, weakKeysMetatable)
10
+ end
3
11
  ____exports.luaMapOf = function(...)
4
12
  local luaMap = {}
5
13
  for i = 1, select("#", ...), 2 do
@@ -22,4 +30,12 @@ ____exports.mapValues = function(luaMap, transform)
22
30
  end
23
31
  return result
24
32
  end
33
+ ____exports.getOrPut = function(luaMap, key, defaultValue)
34
+ local value = luaMap[key]
35
+ if value == nil then
36
+ value = defaultValue()
37
+ luaMap[key] = value
38
+ end
39
+ return value
40
+ end
25
41
  return ____exports
@@ -1,6 +1,6 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
2
+ export declare const mutableLuaSet: <T extends AnyNotNil>() => LuaSet<T>;
3
3
  export declare const luaSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LuaSet<T>;
4
- export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LuaSet<T>;
4
+ export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LuaSet<T>;
5
5
  export declare const luaSetIntersection: <T extends AnyNotNil>(firstLuaSet: ReadonlyLuaSet<T>, secondLuaSet: ReadonlyLuaSet<T>) => LuaSet<T>;
6
6
  export declare const luaSetContainsAnyOf: <T extends AnyNotNil>(luaSet: ReadonlyLuaSet<T>, ...elements: readonly T[]) => boolean;
@@ -1,5 +1,8 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ ____exports.mutableLuaSet = function()
4
+ return {}
5
+ end
3
6
  ____exports.luaSetOf = function(...)
4
7
  local luaSet = {}
5
8
  for i = 1, select("#", ...) do
@@ -5,21 +5,25 @@ local checkNotNull = ____preconditions.checkNotNull
5
5
  -- @internal For use by internal systems only.
6
6
  ____exports.implementReadonlyNumberIndexSupplier = function(clazz, supplier)
7
7
  local metatable = checkNotNull(getmetatable(clazz))
8
- local originalIndex = checkNotNull(metatable.__index)
8
+ local originalIndex = checkNotNull(rawget(metatable, "__index"))
9
9
  local memoizedValueByKey = {}
10
- metatable.__index = setmetatable(
11
- memoizedValueByKey,
12
- {__index = function(self, key)
10
+ rawset(
11
+ metatable,
12
+ "__index",
13
+ function(self, key)
13
14
  if type(key) == "number" then
14
- local value = supplier(key)
15
- memoizedValueByKey[key] = value
15
+ local value = memoizedValueByKey[key]
16
+ if value == nil then
17
+ value = supplier(key)
18
+ memoizedValueByKey[key] = value
19
+ end
16
20
  return value
17
21
  end
18
22
  if type(originalIndex) == "function" then
19
23
  return originalIndex(self, key)
20
24
  end
21
25
  return originalIndex[key]
22
- end}
26
+ end
23
27
  )
24
28
  end
25
29
  ____exports.getClass = function(object)
@@ -2,6 +2,7 @@
2
2
  export type AnyNonNullable = {};
3
3
  export type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
4
4
  export type NonEmptyArray<T> = [T, ...T[]];
5
+ export type ReadonlyNonEmptyArray<T> = readonly [T, ...T[]];
5
6
  export type InvertRecordType<T extends Record<PropertyKey, PropertyKey | null | undefined>> = {
6
7
  [P in keyof T as NonNullable<T[P]>]: P;
7
8
  };
@@ -12,14 +13,14 @@ export type ValueOf<T> = T[keyof T];
12
13
  export type EntryOf<T> = ValueOf<{
13
14
  [K in keyof T]: [K, T[K]];
14
15
  }>;
15
- export type MutableKeys<T extends object> = {
16
+ export type MutableKeys<T extends object> = keyof T & {
16
17
  [P in keyof T]-?: IfEquals<{
17
18
  [Q in P]: T[P];
18
19
  }, {
19
20
  -readonly [Q in P]: T[P];
20
21
  }, P>;
21
22
  }[keyof T];
22
- export type ReadonlyKeys<T extends object> = {
23
+ export type ReadonlyKeys<T extends object> = keyof T & {
23
24
  [P in keyof T]-?: IfEquals<{
24
25
  [Q in P]: T[P];
25
26
  }, {
@@ -1,8 +0,0 @@
1
- /** @noSelfInFile */
2
- import { Rect } from "./types/rect";
3
- import { Region } from "./types/region";
4
- export declare const boundRect: Rect;
5
- export declare const boundRegion: Region;
6
- export declare const boundMin: Readonly<Vec2>;
7
- export declare const boundMax: Readonly<Vec2>;
8
- export declare const boundCenter: Readonly<Vec2>;
@@ -1,12 +0,0 @@
1
- local ____exports = {}
2
- local ____rect = require("core.types.rect")
3
- local Rect = ____rect.Rect
4
- local ____region = require("core.types.region")
5
- local Region = ____region.Region
6
- ____exports.boundRect = Rect:of(GetWorldBounds())
7
- ____exports.boundRegion = Region:create()
8
- ____exports.boundRegion:addRect(____exports.boundRect)
9
- ____exports.boundMin = vec2(____exports.boundRect.minX, ____exports.boundRect.minY)
10
- ____exports.boundMax = vec2(____exports.boundRect.maxX, ____exports.boundRect.maxY)
11
- ____exports.boundCenter = (____exports.boundMin + ____exports.boundMax) * 0.5
12
- return ____exports