warscript 0.0.1-dev.b026cc2 → 0.0.1-dev.b23de5c

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 (235) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +6 -0
  8. package/core/types/frame.lua +113 -22
  9. package/core/types/player.d.ts +16 -0
  10. package/core/types/player.lua +60 -15
  11. package/core/types/playerCamera.d.ts +2 -0
  12. package/core/types/playerCamera.lua +123 -5
  13. package/core/types/sound.d.ts +17 -24
  14. package/core/types/sound.lua +99 -24
  15. package/core/types/tileCell.d.ts +11 -1
  16. package/core/types/tileCell.lua +97 -0
  17. package/core/types/timer.d.ts +9 -8
  18. package/core/types/timer.lua +45 -23
  19. package/core/util.d.ts +1 -1
  20. package/core/util.lua +18 -1
  21. package/decl/native.d.ts +846 -790
  22. package/destroyable.d.ts +1 -0
  23. package/destroyable.lua +9 -0
  24. package/engine/behavior.d.ts +16 -3
  25. package/engine/behavior.lua +233 -73
  26. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  27. package/engine/behaviour/ability/always-enabled.lua +31 -0
  28. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  29. package/engine/behaviour/ability/apply-buff.lua +36 -4
  30. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  31. package/engine/behaviour/ability/damage.d.ts +9 -3
  32. package/engine/behaviour/ability/damage.lua +26 -38
  33. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  34. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  35. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  36. package/engine/behaviour/ability/instant-impact.lua +4 -19
  37. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  38. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  39. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  40. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  41. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  42. package/engine/behaviour/ability/restore-mana.lua +6 -6
  43. package/engine/behaviour/ability.d.ts +28 -7
  44. package/engine/behaviour/ability.lua +137 -43
  45. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  46. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  47. package/engine/behaviour/unit.d.ts +45 -2
  48. package/engine/behaviour/unit.lua +289 -6
  49. package/engine/buff.d.ts +128 -52
  50. package/engine/buff.lua +595 -270
  51. package/engine/internal/ability.d.ts +23 -14
  52. package/engine/internal/ability.lua +129 -85
  53. package/engine/internal/item/ability.lua +162 -4
  54. package/engine/internal/item+owner.lua +12 -6
  55. package/engine/internal/item.d.ts +20 -19
  56. package/engine/internal/item.lua +191 -74
  57. package/engine/internal/mechanics/ability-duration.lua +1 -1
  58. package/engine/internal/mechanics/cast-ability.lua +6 -3
  59. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  60. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  61. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  62. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  63. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  64. package/engine/internal/misc/frame-coordinates.lua +21 -0
  65. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  66. package/engine/internal/misc/get-terrain-z.lua +11 -0
  67. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  68. package/engine/internal/misc/player-local-handle.lua +5 -0
  69. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  70. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  71. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  72. package/engine/internal/object-data/evasion-probability.lua +16 -0
  73. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  74. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  75. package/engine/internal/unit/ability.d.ts +45 -1
  76. package/engine/internal/unit/ability.lua +128 -17
  77. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  78. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  79. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  80. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  81. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  82. package/engine/internal/unit/allowed-targets.lua +9 -1
  83. package/engine/internal/unit/attributes.d.ts +17 -0
  84. package/engine/internal/unit/attributes.lua +46 -0
  85. package/engine/internal/unit/bonus.d.ts +8 -2
  86. package/engine/internal/unit/bonus.lua +33 -1
  87. package/engine/internal/unit/fly-height.d.ts +7 -0
  88. package/engine/internal/unit/fly-height.lua +20 -0
  89. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  90. package/engine/internal/unit/ignore-events-items.lua +5 -0
  91. package/engine/internal/unit/interrupts.d.ts +12 -0
  92. package/engine/internal/unit/interrupts.lua +28 -0
  93. package/engine/internal/unit/item.d.ts +24 -0
  94. package/engine/internal/unit/item.lua +78 -0
  95. package/engine/internal/unit/main-selected.d.ts +13 -0
  96. package/engine/internal/unit/main-selected.lua +36 -0
  97. package/engine/internal/unit/order.d.ts +20 -0
  98. package/engine/internal/unit/order.lua +136 -0
  99. package/engine/internal/unit/range-event.d.ts +12 -0
  100. package/engine/internal/unit/range-event.lua +90 -0
  101. package/engine/internal/unit/scale.d.ts +7 -0
  102. package/engine/internal/unit/scale.lua +20 -0
  103. package/engine/internal/unit+ability.lua +12 -3
  104. package/engine/internal/unit+damage.d.ts +2 -11
  105. package/engine/internal/unit+damage.lua +10 -14
  106. package/engine/internal/unit+spellSteal.lua +1 -2
  107. package/engine/internal/unit-missile-launch.lua +70 -13
  108. package/engine/internal/unit.d.ts +64 -30
  109. package/engine/internal/unit.lua +490 -285
  110. package/engine/internal/utility.lua +12 -0
  111. package/engine/lightning.d.ts +12 -5
  112. package/engine/lightning.lua +48 -14
  113. package/engine/local-client.d.ts +9 -2
  114. package/engine/local-client.lua +112 -0
  115. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  116. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  117. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  118. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  119. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  120. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  121. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  122. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  123. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  124. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  125. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  126. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  127. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  128. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  129. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  130. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  131. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  132. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  133. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  134. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  135. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  136. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  137. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  138. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  139. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  140. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  141. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  142. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  143. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  144. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  145. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  146. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  147. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  148. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  149. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  150. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  151. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  152. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  153. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  154. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  155. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  156. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  157. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  158. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  159. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  160. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  161. package/engine/object-data/entry/ability-type/web.lua +52 -0
  162. package/engine/object-data/entry/ability-type.d.ts +21 -17
  163. package/engine/object-data/entry/ability-type.lua +177 -40
  164. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  165. package/engine/object-data/entry/buff-type.d.ts +6 -12
  166. package/engine/object-data/entry/buff-type.lua +13 -29
  167. package/engine/object-data/entry/destructible-type.d.ts +28 -2
  168. package/engine/object-data/entry/destructible-type.lua +155 -0
  169. package/engine/object-data/entry/item-type.d.ts +15 -1
  170. package/engine/object-data/entry/item-type.lua +93 -2
  171. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  172. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  173. package/engine/object-data/entry/sound-preset.lua +140 -0
  174. package/engine/object-data/entry/unit-type.d.ts +25 -5
  175. package/engine/object-data/entry/unit-type.lua +258 -93
  176. package/engine/object-data/entry/upgrade.d.ts +1 -1
  177. package/engine/object-data/entry/upgrade.lua +4 -4
  178. package/engine/object-data/entry.d.ts +16 -14
  179. package/engine/object-data/entry.lua +60 -32
  180. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  181. package/engine/object-field/ability.d.ts +28 -5
  182. package/engine/object-field/ability.lua +59 -5
  183. package/engine/object-field/unit.d.ts +72 -3
  184. package/engine/object-field/unit.lua +268 -7
  185. package/engine/object-field.d.ts +25 -6
  186. package/engine/object-field.lua +359 -116
  187. package/engine/random.d.ts +10 -0
  188. package/engine/random.lua +21 -0
  189. package/engine/standard/entries/buff-type.d.ts +3 -0
  190. package/engine/standard/entries/buff-type.lua +3 -0
  191. package/engine/standard/entries/sound-preset.d.ts +10 -0
  192. package/engine/standard/entries/sound-preset.lua +10 -0
  193. package/engine/standard/fields/ability.d.ts +4 -2
  194. package/engine/standard/fields/ability.lua +4 -2
  195. package/engine/standard/fields/unit.d.ts +12 -0
  196. package/engine/standard/fields/unit.lua +20 -0
  197. package/engine/synchronization.d.ts +11 -0
  198. package/engine/synchronization.lua +77 -0
  199. package/engine/text-tag.d.ts +36 -2
  200. package/engine/text-tag.lua +250 -10
  201. package/engine/unit.d.ts +9 -0
  202. package/engine/unit.lua +9 -0
  203. package/index.d.ts +1 -0
  204. package/index.lua +1 -0
  205. package/net/socket.d.ts +7 -1
  206. package/net/socket.lua +45 -4
  207. package/network.d.ts +1 -0
  208. package/network.lua +3 -2
  209. package/objutil/buff.lua +12 -11
  210. package/objutil/unit.lua +8 -0
  211. package/package.json +2 -2
  212. package/patch-lua.d.ts +0 -0
  213. package/patch-lua.lua +25 -0
  214. package/patch-lualib.lua +1 -1
  215. package/utility/arrays.d.ts +10 -1
  216. package/utility/arrays.lua +45 -3
  217. package/utility/callback-array.d.ts +17 -0
  218. package/utility/callback-array.lua +61 -0
  219. package/utility/functions.d.ts +8 -0
  220. package/utility/functions.lua +13 -0
  221. package/utility/lazy.d.ts +2 -0
  222. package/utility/lazy.lua +14 -0
  223. package/utility/linked-map.d.ts +34 -0
  224. package/utility/linked-map.lua +101 -0
  225. package/utility/linked-set.d.ts +15 -3
  226. package/utility/linked-set.lua +48 -3
  227. package/utility/lua-maps.d.ts +15 -2
  228. package/utility/lua-maps.lua +53 -2
  229. package/utility/lua-sets.d.ts +2 -0
  230. package/utility/lua-sets.lua +7 -0
  231. package/utility/records.lua +20 -1
  232. package/utility/reflection.lua +11 -7
  233. package/utility/types.d.ts +4 -0
  234. package/core/types/order.d.ts +0 -25
  235. package/core/types/order.lua +0 -55
package/network.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Event } from "./event";
3
3
  import { Player } from "./core/types/player";
4
4
  import { Operation, OperationContinue, OperationMonitor } from "./operation";
5
+ export declare const MAX_PAYLOAD_LENGTH = 255;
5
6
  export declare const onReceive: {
6
7
  [prefix: string]: Event<[Player, string]>;
7
8
  } & {
package/network.lua CHANGED
@@ -25,6 +25,7 @@ local concat = table.concat
25
25
  local pack = string.pack
26
26
  local sub = string.sub
27
27
  local ____unpack = string.unpack
28
+ ____exports.MAX_PAYLOAD_LENGTH = 255
28
29
  ____exports.onReceive = setmetatable(
29
30
  {},
30
31
  {__index = function(self, prefix)
@@ -42,11 +43,11 @@ ____exports.onReceive = setmetatable(
42
43
  end}
43
44
  )
44
45
  function ____exports.send(id, payload)
45
- if #payload > 255 then
46
+ if #payload > ____exports.MAX_PAYLOAD_LENGTH then
46
47
  error(
47
48
  __TS__New(
48
49
  IllegalArgumentException,
49
- "payload length must be <= 256, but was " .. tostring(#payload)
50
+ (("payload length must be <= " .. tostring(____exports.MAX_PAYLOAD_LENGTH)) .. ", but was ") .. tostring(#payload)
50
51
  ),
51
52
  0
52
53
  )
package/objutil/buff.lua CHANGED
@@ -20,7 +20,6 @@ local AbilityDefinitionInnerFire = ____ability.AbilityDefinitionInnerFire
20
20
  local AbilityDefinitionSearingArrows = ____ability.AbilityDefinitionSearingArrows
21
21
  local AbilityDefinitionSlowPoison = ____ability.AbilityDefinitionSlowPoison
22
22
  local ____unit = require("core.types.unit")
23
- local AttackType = ____unit.AttackType
24
23
  local DamageType = ____unit.DamageType
25
24
  local Unit = ____unit.Unit
26
25
  local ____dummy = require("core.dummy")
@@ -30,6 +29,8 @@ local ____timer = require("core.types.timer")
30
29
  local Timer = ____timer.Timer
31
30
  local ____exception = require("exception")
32
31
  local IllegalStateException = ____exception.IllegalStateException
32
+ local ____linked_2Dmap = require("utility.linked-map")
33
+ local LinkedMap = ____linked_2Dmap.LinkedMap
33
34
  local ____assert = _G.assert
34
35
  local ____pairs = _G.pairs
35
36
  ____exports.BuffDefinition = __TS__Class()
@@ -462,7 +463,7 @@ local buffs = setmetatable(
462
463
  {
463
464
  __mode = "k",
464
465
  __index = function(self, unit)
465
- local ____table = {}
466
+ local ____table = __TS__New(LinkedMap)
466
467
  self[unit] = ____table
467
468
  return ____table
468
469
  end
@@ -495,7 +496,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
495
496
  end
496
497
  local constructor = self.constructor
497
498
  local instances = buffs[unit]
498
- local instance = instances[constructor]
499
+ local instance = instances:get(constructor)
499
500
  if instance then
500
501
  instance:destroy()
501
502
  if not instance.destroyed then
@@ -508,7 +509,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
508
509
  )
509
510
  end
510
511
  end
511
- instances[constructor] = self
512
+ instances:put(constructor, self)
512
513
  if preset then
513
514
  local unitHandle = unit.handle
514
515
  local slowPoisonMethod = not preset.positive and not preset.magic
@@ -587,13 +588,13 @@ function Buff.apply(self, ...)
587
588
  end
588
589
  end
589
590
  function Buff.getInstance(self, unit)
590
- return buffs[unit][self]
591
+ return buffs[unit]:get(self)
591
592
  end
592
593
  function Buff.isApplied(self, unit)
593
- return buffs[unit][self] ~= nil
594
+ return buffs[unit]:get(self) ~= nil
594
595
  end
595
596
  function Buff.ifApplied(self, unit, action)
596
- local instance = buffs[unit][self]
597
+ local instance = buffs[unit]:get(self)
597
598
  if instance then
598
599
  ____assert(__TS__InstanceOf(instance, self))
599
600
  action(instance)
@@ -616,7 +617,7 @@ function Buff.prototype.destroy(self)
616
617
  if self.preset then
617
618
  self.unit:removeAbility(self.preset.buffId)
618
619
  end
619
- buffs[self.unit][self.constructor] = nil
620
+ buffs[self.unit]:remove(self.constructor)
620
621
  self.destroyed = true
621
622
  end
622
623
  function Buff.prototype.onDispel(self, source)
@@ -756,14 +757,14 @@ for ____, pointDispelAbilityId in ipairs(pointDispelAbilityIds) do
756
757
  end)
757
758
  end
758
759
  Unit.onDamaging:addListener(function(source, target, event)
759
- if event.amount == 0 and event.attackType == AttackType.SPELL and event.damageType == DamageType.NORMAL and not event.isAttack then
760
+ if event.amount == 0 and event.attackType == 0 and event.damageType == DamageType.NORMAL and not event.isAttack then
760
761
  Timer:run(function()
761
762
  checkBuffs(target, true, source)
762
763
  end)
763
764
  end
764
765
  end)
765
- Unit.onItemPickup:addListener(function(unit, item)
766
- if item.powerup and item:hasAbility(fourCC("APdi")) then
766
+ Unit.itemPickedUpEvent:addListener(function(unit, item)
767
+ if item.isPowerUp and item:hasAbility(fourCC("APdi")) then
767
768
  end
768
769
  end)
769
770
  return ____exports
package/objutil/unit.lua CHANGED
@@ -11,6 +11,8 @@ local ____exports = {}
11
11
  local ____object = require("objutil.object")
12
12
  local ObjectDefinition = ____object.ObjectDefinition
13
13
  local idgen = require("objutil.idgen")
14
+ local ____config = require("config")
15
+ local WarscriptConfig = ____config.WarscriptConfig
14
16
  local attackTypes = setmetatable(
15
17
  {
16
18
  normal = "normal",
@@ -593,6 +595,9 @@ __TS__SetDescriptor(
593
595
  end,
594
596
  set = function(self, v)
595
597
  self:setStringField("umdl", v)
598
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
599
+ self:setStringField("upor", "")
600
+ end
596
601
  end
597
602
  },
598
603
  true
@@ -606,6 +611,9 @@ __TS__SetDescriptor(
606
611
  end,
607
612
  set = function(self, v)
608
613
  self.object:setField("umdl:hd", v)
614
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
615
+ self.object:setField("upor:hd", "")
616
+ end
609
617
  end
610
618
  },
611
619
  true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.b026cc2",
4
+ "version": "0.0.1-dev.b23de5c",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -24,7 +24,7 @@
24
24
  "@warscript/language-extensions": "^0.0.1",
25
25
  "@warscript/tstl-plugin": "^0.0.4",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.880fc91"
27
+ "warpack": "0.0.1-dev.e490aaf"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
package/patch-lua.d.ts ADDED
File without changes
package/patch-lua.lua ADDED
@@ -0,0 +1,25 @@
1
+ local error = _G.error
2
+ local getmetatable = _G.getmetatable
3
+ local ipairs = _G.ipairs
4
+ local select = _G.select
5
+ local tostring = _G.tostring
6
+ local tableconcat = table.concat
7
+
8
+ _G.ipairs = function(t)
9
+ local metatable = getmetatable(t)
10
+ if metatable and metatable.__ipairs then
11
+ return metatable.__ipairs(t)
12
+ end
13
+ return ipairs(t)
14
+ end
15
+
16
+ _G.assert = function(v, ...)
17
+ if not v then
18
+ local args = {}
19
+ for i = 1, select("#", ...) do
20
+ args[i] = tostring(select(i, ...))
21
+ end
22
+ error(tableconcat(args, " "))
23
+ end
24
+ return v, ...
25
+ end
package/patch-lualib.lua CHANGED
@@ -3,7 +3,7 @@ local lualib = _G.require("lualib_bundle")
3
3
  local next = _G.next
4
4
  local ____type = _G.type
5
5
  lualib.__TS__ArrayIsArray = function(value)
6
- return ____type(value) == "table" and (value[1] ~= nil or ({next(value)}) == nil) and value.constructor == nil
6
+ return ____type(value) == "table" and (value[1] ~= nil or (next(value)) == nil) and value.constructor == nil
7
7
  end
8
8
  local __TS__SetDescriptor = lualib.__TS__SetDescriptor
9
9
  lualib.__TS__ObjectDefineProperty = function(target, key, desc)
@@ -5,6 +5,7 @@ export declare const joinToString: <T>(array: readonly T[], separator: string, t
5
5
  export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
6
6
  export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
7
7
  export declare const toLuaSet: <T extends AnyNotNil>(array: readonly T[]) => LuaSet<T>;
8
+ export declare const contains: <T>(array: readonly T[], element: T) => boolean;
8
9
  export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: ((value: T, ...args: Args) => void) | KeysOfType<T, (this: T, ...args: Args) => void>, ...args: Args) => void;
9
10
  export declare const all: {
10
11
  <T>(array: readonly T[], transform: (value: T) => boolean): boolean;
@@ -22,6 +23,7 @@ export declare const mapToLuaSet: {
22
23
  <T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
23
24
  <T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
24
25
  };
26
+ export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
25
27
  export declare const flatMap: {
26
28
  <T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
27
29
  <T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
@@ -32,7 +34,10 @@ export declare const flatMapToLuaSet: {
32
34
  };
33
35
  export declare const mapIndexed: <T, R>(array: readonly T[], transform: (index: number, value: T) => R) => R[];
34
36
  export declare const associate: <T, K extends AnyNotNil, V>(array: readonly T[], keySelector: (value: T) => K, valueSelector: (value: T) => V) => LuaMap<K, V>;
35
- export declare const associateBy: <K extends AnyNotNil, V>(array: readonly V[], keySelector: (value: V) => K) => LuaMap<K, V>;
37
+ export declare const associateBy: {
38
+ <K extends AnyNotNil, V>(array: readonly V[], keySelector: (value: V) => K): LuaMap<K, V>;
39
+ <K extends KeysOfType<V, AnyNotNil>, V>(array: readonly V[], keySelector: K): LuaMap<V[K] extends AnyNotNil ? V[K] : never, V>;
40
+ };
36
41
  export declare const associateByIndexed: <K extends AnyNotNil, V>(array: readonly V[], keySelector: (index: number, value: V) => K) => LuaMap<K, V>;
37
42
  export declare const associateWith: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (value: K) => V) => LuaMap<K, V>;
38
43
  export declare const associateWithIndexed: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (index: number, value: K) => V) => LuaMap<K, V>;
@@ -41,6 +46,10 @@ export declare const average: (array: readonly number[]) => number;
41
46
  export declare const sum: (array: readonly number[]) => number;
42
47
  export declare const product: (array: readonly number[]) => number;
43
48
  export declare const max: (array: readonly number[]) => number;
49
+ export declare const maxBy: {
50
+ <T, Args extends any[]>(array: readonly T[], selector: (value: T, ...args: Args) => number, ...args: Args): T | undefined;
51
+ <T, K extends KeysOfType<T, number>>(array: readonly T[], key: K): T | undefined;
52
+ };
44
53
  export declare const intersperse: <T>(array: readonly T[], delimiter: T) => T[];
45
54
  export declare const zip: <T, R, V>(array: readonly T[], otherArray: readonly R[], transform: (value: T, otherValue: R) => V) => V[];
46
55
  export declare const chunked: <T>(array: readonly T[], size: number) => T[][];
@@ -3,6 +3,8 @@ 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
@@ -47,6 +49,14 @@ ____exports.toLuaSet = function(array)
47
49
  end
48
50
  return result
49
51
  end
52
+ ____exports.contains = function(array, element)
53
+ for i = 1, #array do
54
+ if array[i] == element then
55
+ return true
56
+ end
57
+ end
58
+ return false
59
+ end
50
60
  ____exports.forEach = function(array, consumerOrKey, ...)
51
61
  if type(consumerOrKey) == "function" then
52
62
  for i = 1, #array do
@@ -120,6 +130,7 @@ ____exports.mapToLuaSet = function(array, transform)
120
130
  end
121
131
  return result
122
132
  end
133
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
123
134
  ____exports.flatMap = function(array, transform)
124
135
  local result = {}
125
136
  local k = 1
@@ -178,9 +189,16 @@ ____exports.associate = function(array, keySelector, valueSelector)
178
189
  end
179
190
  ____exports.associateBy = function(array, keySelector)
180
191
  local result = {}
181
- for i = 1, #array do
182
- local value = array[i]
183
- result[keySelector(value)] = value
192
+ if type(keySelector) == "function" then
193
+ for i = 1, #array do
194
+ local value = array[i]
195
+ result[keySelector(value)] = value
196
+ end
197
+ else
198
+ for i = 1, #array do
199
+ local value = array[i]
200
+ result[value[keySelector]] = value
201
+ end
184
202
  end
185
203
  return result
186
204
  end
@@ -251,6 +269,30 @@ ____exports.max = function(array)
251
269
  end
252
270
  return mathMax(table.unpack(array))
253
271
  end
272
+ ____exports.maxBy = function(array, selector, ...)
273
+ local result = nil
274
+ local maxValue = -math.huge
275
+ if type(selector) == "function" then
276
+ for i = 1, #array do
277
+ local element = array[i]
278
+ local value = selector(element, ...)
279
+ if value > maxValue then
280
+ result = element
281
+ maxValue = value
282
+ end
283
+ end
284
+ else
285
+ for i = 1, #array do
286
+ local element = array[i]
287
+ local value = element[selector]
288
+ if value > maxValue then
289
+ result = element
290
+ maxValue = value
291
+ end
292
+ end
293
+ end
294
+ return result
295
+ end
254
296
  ____exports.intersperse = function(array, delimiter)
255
297
  local result = {}
256
298
  local length = #array
@@ -0,0 +1,17 @@
1
+ /** @noSelfInFile */
2
+ type Callback = {
3
+ readonly __callback: unique symbol;
4
+ };
5
+ export type CallbackId = number & {
6
+ readonly __callbackId: unique symbol;
7
+ };
8
+ export type CallbackArray = {
9
+ readonly __callbackArray: unique symbol;
10
+ } & Callback[];
11
+ export declare const callbackArray: () => CallbackArray;
12
+ export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): CallbackId;
13
+ export declare function clearCallbacks(this: void, array: CallbackArray): void;
14
+ export declare function consumeCallback(this: void, array: CallbackArray, id: CallbackId): void;
15
+ export declare function consumeCallbacks(this: void, array: CallbackArray): void;
16
+ export declare function invokeCallbacks(this: void, array: CallbackArray): void;
17
+ export {};
@@ -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
@@ -3,3 +3,11 @@ 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;
7
+ export declare const firstArgument: <T>(value: T) => T;
8
+ export declare const secondArgument: <T>(_: unknown, value: T) => T;
9
+ export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
10
+ export declare const increment: (value: number) => number;
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;
@@ -87,4 +87,17 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
91
+ ____exports.firstArgument = ____exports.identity
92
+ ____exports.secondArgument = function(_, value) return value end
93
+ ____exports.thirdArgument = function(_first, _second, value) return value end
94
+ ____exports.increment = function(value) return value + 1 end
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
90
103
  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
@@ -0,0 +1,34 @@
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 __linkedSet: 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 __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
31
+ }
32
+ export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
33
+ export declare const mutableLinkedMap: <K extends AnyNotNil, V>() => LinkedMap<K, V>;
34
+ export {};
@@ -0,0 +1,101 @@
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.__pairs(self)
51
+ return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
52
+ end
53
+ __TS__SetDescriptor(
54
+ LinkedMap.prototype,
55
+ "keys",
56
+ {get = function(self)
57
+ return self.k
58
+ end},
59
+ true
60
+ )
61
+ __TS__SetDescriptor(
62
+ LinkedMap.prototype,
63
+ "size",
64
+ {get = function(self)
65
+ return self.keys.size
66
+ end},
67
+ true
68
+ )
69
+ local emptyIteratorState = {t = {}, v = {}}
70
+ local EmptyLinkedMap = __TS__Class()
71
+ EmptyLinkedMap.name = "EmptyLinkedMap"
72
+ __TS__ClassExtends(EmptyLinkedMap, ____exports.LinkedMap)
73
+ function EmptyLinkedMap.prototype.getOrPut(self)
74
+ error(
75
+ __TS__New(UnsupportedOperationException),
76
+ 0
77
+ )
78
+ end
79
+ function EmptyLinkedMap.prototype.put(self)
80
+ error(
81
+ __TS__New(UnsupportedOperationException),
82
+ 0
83
+ )
84
+ end
85
+ function EmptyLinkedMap.prototype.remove(self)
86
+ error(
87
+ __TS__New(UnsupportedOperationException),
88
+ 0
89
+ )
90
+ end
91
+ function EmptyLinkedMap.prototype.__pairs(self)
92
+ return linkedMapNext, emptyIteratorState, nil
93
+ end
94
+ local EMPTY_LINKED_MAP = __TS__New(EmptyLinkedMap)
95
+ ____exports.emptyLinkedMap = function()
96
+ return EMPTY_LINKED_MAP
97
+ end
98
+ ____exports.mutableLinkedMap = function()
99
+ return __TS__New(____exports.LinkedMap)
100
+ end
101
+ return ____exports
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { NonEmptyArray, ReadonlyNonEmptyArray } from "./types";
2
3
  type IteratorState<T extends AnyNotNil> = {
3
4
  t: LuaMap<T, T>;
4
5
  n?: T;
@@ -13,11 +14,16 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
13
14
  next(key: T): T | undefined;
14
15
  previous(key: T): T | undefined;
15
16
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
16
- size: number;
17
+ readonly size: number;
17
18
  forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
18
19
  toArray(): T[];
19
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
20
21
  }
22
+ export interface ReadonlyNonEmptyLinkedSet<T extends AnyNotNil> extends ReadonlyLinkedSet<T> {
23
+ first(): T;
24
+ last(): T;
25
+ toArray(): NonEmptyArray<T>;
26
+ }
21
27
  export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
22
28
  readonly __linkedSet: unique symbol;
23
29
  }
@@ -30,9 +36,11 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
30
36
  copyOf(): LinkedSet<T>;
31
37
  first(): T | undefined;
32
38
  last(): T | undefined;
39
+ pop(): T | undefined;
33
40
  next(key: T): T | undefined;
34
41
  previous(key: T): T | undefined;
35
42
  add(key: T): boolean;
43
+ protected addBefore(value: T, key: T): boolean;
36
44
  remove(key: T): boolean;
37
45
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
38
46
  clear(): void;
@@ -44,6 +52,10 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
44
52
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
45
53
  }
46
54
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
47
- export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
48
- export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
55
+ export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
56
+ export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
57
+ export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
58
+ export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
59
+ export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
60
+ export declare const nonEmptyLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyNonEmptyArray<T>) => ReadonlyNonEmptyLinkedSet<T>;
49
61
  export {};