warscript 0.0.1-dev.dd8349d → 0.0.1-dev.e147c49

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 (313) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.d.ts +1 -0
  4. package/core/types/frame.lua +136 -58
  5. package/core/types/handle.lua +9 -9
  6. package/core/types/item.d.ts +1 -0
  7. package/core/types/item.lua +1 -0
  8. package/core/types/player.d.ts +18 -1
  9. package/core/types/player.lua +76 -26
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/playerColor.lua +4 -3
  13. package/core/types/sound.d.ts +1 -1
  14. package/core/types/sound.lua +14 -9
  15. package/core/types/tileCell.d.ts +11 -1
  16. package/core/types/tileCell.lua +97 -0
  17. package/core/types/timer.d.ts +3 -1
  18. package/core/types/timer.lua +27 -2
  19. package/core/types/unit.d.ts +4 -0
  20. package/core/types/unit.lua +4 -0
  21. package/decl/native.d.ts +711 -11
  22. package/destroyable.d.ts +1 -0
  23. package/destroyable.lua +9 -0
  24. package/engine/behavior.d.ts +14 -1
  25. package/engine/behavior.lua +230 -70
  26. package/engine/behaviour/ability/apply-buff.lua +5 -5
  27. package/engine/behaviour/ability/damage.d.ts +3 -0
  28. package/engine/behaviour/ability/damage.lua +18 -15
  29. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  30. package/engine/behaviour/ability/emulate-impact.lua +16 -7
  31. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  32. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  33. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  34. package/engine/behaviour/ability/restore-mana.lua +6 -6
  35. package/engine/behaviour/ability.d.ts +12 -6
  36. package/engine/behaviour/ability.lua +49 -17
  37. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  38. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  39. package/engine/behaviour/unit.d.ts +28 -5
  40. package/engine/behaviour/unit.lua +186 -27
  41. package/engine/buff.d.ts +75 -28
  42. package/engine/buff.lua +433 -196
  43. package/engine/index.d.ts +2 -1
  44. package/engine/internal/ability.d.ts +9 -1
  45. package/engine/internal/ability.lua +96 -44
  46. package/engine/internal/item/ability.lua +51 -1
  47. package/engine/internal/item/fields.d.ts +12 -0
  48. package/engine/internal/item/fields.lua +33 -0
  49. package/engine/internal/item+owner.d.ts +1 -0
  50. package/engine/internal/item+owner.lua +19 -6
  51. package/engine/internal/item.d.ts +24 -14
  52. package/engine/internal/item.lua +176 -85
  53. package/engine/internal/mechanics/cast-ability.lua +6 -3
  54. package/engine/internal/misc/frame-coordinates.lua +21 -0
  55. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  56. package/engine/internal/misc/get-terrain-z.lua +11 -0
  57. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  58. package/engine/internal/misc/player-local-handle.lua +5 -0
  59. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  60. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  61. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  62. package/engine/internal/object-data/health-bonus.lua +16 -0
  63. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  64. package/engine/internal/object-data/mana-bonus.lua +16 -0
  65. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  66. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  67. package/engine/internal/unit/ability.d.ts +35 -0
  68. package/engine/internal/unit/ability.lua +113 -12
  69. package/engine/internal/unit/appearance.d.ts +15 -0
  70. package/engine/internal/unit/appearance.lua +85 -0
  71. package/engine/internal/unit/attributes.d.ts +17 -0
  72. package/engine/internal/unit/attributes.lua +46 -0
  73. package/engine/internal/unit/bag.d.ts +18 -0
  74. package/engine/internal/unit/bag.lua +63 -0
  75. package/engine/internal/unit/bonus.d.ts +6 -0
  76. package/engine/internal/unit/bonus.lua +33 -3
  77. package/engine/internal/unit/buff.d.ts +2 -2
  78. package/engine/internal/unit/buff.lua +34 -19
  79. package/engine/internal/unit/equipment.d.ts +36 -0
  80. package/engine/internal/unit/equipment.lua +169 -0
  81. package/engine/internal/unit/fly-height.d.ts +7 -0
  82. package/engine/internal/unit/fly-height.lua +20 -0
  83. package/engine/internal/unit/interrupts.d.ts +12 -0
  84. package/engine/internal/unit/interrupts.lua +28 -0
  85. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +3 -3
  86. package/engine/internal/unit/{item.lua → inventory.lua} +25 -26
  87. package/engine/internal/unit/main-selected.lua +12 -27
  88. package/engine/internal/unit/order.d.ts +20 -0
  89. package/engine/internal/unit/order.lua +136 -0
  90. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  91. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  92. package/engine/internal/unit/range-event.d.ts +12 -0
  93. package/engine/internal/unit/range-event.lua +90 -0
  94. package/engine/internal/unit/scale.d.ts +7 -0
  95. package/engine/internal/unit/scale.lua +20 -0
  96. package/engine/internal/unit+ability.lua +10 -1
  97. package/engine/internal/unit+bonus.lua +3 -3
  98. package/engine/internal/unit+damage.d.ts +9 -0
  99. package/engine/internal/unit+damage.lua +33 -0
  100. package/engine/internal/unit-missile-data.lua +58 -32
  101. package/engine/internal/unit-missile-launch.lua +52 -14
  102. package/engine/internal/unit.d.ts +19 -24
  103. package/engine/internal/unit.lua +233 -246
  104. package/engine/local-client.d.ts +27 -0
  105. package/engine/local-client.lua +518 -54
  106. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  107. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  108. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  109. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  110. package/engine/object-data/auxiliary/equipment-type.d.ts +13 -0
  111. package/engine/object-data/auxiliary/equipment-type.lua +2 -0
  112. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  113. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  114. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  115. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  117. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  118. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  119. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  120. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  121. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  122. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  123. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  124. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  125. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  126. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  127. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  128. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  129. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  130. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  131. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  132. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  133. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  134. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  135. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  136. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  137. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  138. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  139. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  140. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  141. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  142. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  143. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  144. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  145. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  146. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  147. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  148. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  149. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  150. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  151. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  152. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  153. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  154. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  155. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  156. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  157. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  158. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  159. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  160. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  161. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  162. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  163. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  164. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  165. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  166. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  167. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  168. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  169. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  170. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  171. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  172. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  173. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  174. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  175. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  176. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  177. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  178. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  179. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  180. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  181. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  182. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  183. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  184. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  185. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  186. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  187. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  188. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  189. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  190. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  191. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  192. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  193. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  194. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  195. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  196. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  197. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  198. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  199. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  200. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  201. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  202. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  203. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  204. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  205. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  206. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  207. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  208. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  209. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  210. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  211. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  212. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  213. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  214. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  215. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  216. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  217. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  218. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  219. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  220. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  221. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  222. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  223. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  224. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  225. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  226. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  227. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  228. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  229. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  230. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  231. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  232. package/engine/object-data/entry/ability-type.d.ts +12 -3
  233. package/engine/object-data/entry/ability-type.lua +142 -8
  234. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  235. package/engine/object-data/entry/buff-type.d.ts +6 -2
  236. package/engine/object-data/entry/buff-type.lua +26 -0
  237. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  238. package/engine/object-data/entry/destructible-type.lua +181 -0
  239. package/engine/object-data/entry/item-type.d.ts +12 -3
  240. package/engine/object-data/entry/item-type.lua +52 -0
  241. package/engine/object-data/entry/lightning-type.d.ts +2 -2
  242. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  243. package/engine/object-data/entry/unit-type.d.ts +62 -4
  244. package/engine/object-data/entry/unit-type.lua +474 -38
  245. package/engine/object-data/entry/upgrade.d.ts +2 -2
  246. package/engine/object-data/entry.d.ts +4 -1
  247. package/engine/object-field/ability.d.ts +3 -3
  248. package/engine/object-field/ability.lua +9 -8
  249. package/engine/object-field/item.d.ts +22 -0
  250. package/engine/object-field/item.lua +118 -0
  251. package/engine/object-field/unit.d.ts +31 -5
  252. package/engine/object-field/unit.lua +95 -0
  253. package/engine/object-field.d.ts +18 -7
  254. package/engine/object-field.lua +294 -135
  255. package/engine/random.d.ts +10 -0
  256. package/engine/random.lua +21 -0
  257. package/engine/standard/entries/ability-type.d.ts +3102 -7
  258. package/engine/standard/entries/ability-type.lua +0 -6
  259. package/engine/standard/entries/item-type.d.ts +1299 -0
  260. package/engine/standard/entries/item-type.lua +2 -0
  261. package/engine/standard/entries/unit-type.d.ts +5 -0
  262. package/engine/standard/entries/unit-type.lua +5 -0
  263. package/engine/standard/fields/ability.d.ts +2 -2
  264. package/engine/standard/fields/ability.lua +2 -2
  265. package/engine/standard/fields/item.d.ts +4 -0
  266. package/engine/standard/fields/item.lua +6 -0
  267. package/engine/standard/fields/unit.d.ts +12 -0
  268. package/engine/standard/fields/unit.lua +20 -0
  269. package/engine/synchronization.d.ts +11 -0
  270. package/engine/synchronization.lua +77 -0
  271. package/engine/text-tag.d.ts +36 -2
  272. package/engine/text-tag.lua +250 -10
  273. package/engine/unit.d.ts +10 -1
  274. package/engine/unit.lua +10 -1
  275. package/event.d.ts +1 -1
  276. package/lualib_bundle.lua +1 -1
  277. package/math.d.ts +2 -0
  278. package/math.lua +14 -0
  279. package/net/socket.lua +1 -1
  280. package/network.lua +25 -1
  281. package/objutil/buff.lua +10 -8
  282. package/objutil/object.lua +1 -1
  283. package/operation.d.ts +8 -1
  284. package/operation.lua +38 -18
  285. package/package.json +3 -23
  286. package/patch-lua.lua +15 -0
  287. package/patch-lualib.lua +1 -1
  288. package/utility/arrays.d.ts +1 -0
  289. package/utility/arrays.lua +8 -0
  290. package/utility/callback-array.d.ts +17 -0
  291. package/utility/callback-array.lua +61 -0
  292. package/utility/functions.d.ts +7 -0
  293. package/utility/functions.lua +12 -0
  294. package/utility/linked-map.d.ts +35 -0
  295. package/utility/linked-map.lua +107 -0
  296. package/utility/linked-set.d.ts +4 -1
  297. package/utility/linked-set.lua +46 -1
  298. package/utility/lua-maps.d.ts +12 -2
  299. package/utility/lua-maps.lua +37 -2
  300. package/utility/lua-sets.d.ts +1 -0
  301. package/utility/lua-sets.lua +4 -0
  302. package/utility/random.d.ts +102 -0
  303. package/utility/random.lua +273 -0
  304. package/utility/records.lua +20 -1
  305. package/utility/types.d.ts +3 -0
  306. package/utility/unordered-map.d.ts +27 -0
  307. package/utility/unordered-map.lua +99 -0
  308. package/core/types/order.d.ts +0 -26
  309. package/core/types/order.lua +0 -65
  310. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  311. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  312. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  313. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -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
@@ -1,8 +1,18 @@
1
1
  /** @noSelfInFile */
2
2
  import { Flatten, TupleOf } from "./types";
3
+ export declare const emptyLuaMap: <K extends AnyNotNil, V>() => ReadonlyLuaMap<K, V>;
3
4
  export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
4
5
  export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
5
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>;
6
- export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
7
- 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
+ };
8
18
  export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
@@ -2,6 +2,10 @@ local ____exports = {}
2
2
  local select = _G.select
3
3
  local setmetatable = _G.setmetatable
4
4
  local weakKeysMetatable = {__mode = "k"}
5
+ local EMPTY_LUA_MAP = {}
6
+ ____exports.emptyLuaMap = function()
7
+ return EMPTY_LUA_MAP
8
+ end
5
9
  ____exports.mutableLuaMap = function()
6
10
  return {}
7
11
  end
@@ -23,10 +27,41 @@ ____exports.luaMapInvert = function(luaMap)
23
27
  end
24
28
  return invertLuaMap
25
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
26
55
  ____exports.mapValues = function(luaMap, transform)
27
56
  local result = {}
28
- for key, value in pairs(luaMap) do
29
- 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
30
65
  end
31
66
  return result
32
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
@@ -0,0 +1,102 @@
1
+ /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "./types";
3
+ /**
4
+ * A client-local pseudorandom generator that is safe to advance inside a local block.
5
+ *
6
+ * Instances are independent of each other and of the game's synchronous randomness.
7
+ */
8
+ export declare class AsyncRandom {
9
+ private a;
10
+ private b;
11
+ private c;
12
+ private d;
13
+ /**
14
+ * Creates a generator seeded with the given `seed`,
15
+ * or with client-local entropy if no seed is given.
16
+ */
17
+ constructor(seed?: number);
18
+ /** Resets the generator to the state defined by the given `seed`. */
19
+ setSeed(seed: number): void;
20
+ /**
21
+ * Folds freshly gathered client-local entropy, optionally together with the given `value`,
22
+ * into the current state.
23
+ *
24
+ * Useful to make streams of different clients diverge even further, e.g. by mixing in values
25
+ * that are local by definition, such as the local player's id or the local mouse position.
26
+ */
27
+ addEntropy(value?: number | string): void;
28
+ /** Advances the state and returns the next 32-bit word. */
29
+ private next;
30
+ /** Returns a uniformly distributed value in `[0, bound)`, where `bound` is in `[1, 2^32]`. */
31
+ private nextBounded;
32
+ /** Returns the given amount (`0` to `32`) of random bits as a non-negative integer. */
33
+ nextBits(bitCount: number): number;
34
+ /**
35
+ * Returns a uniformly distributed integer, both bounds being inclusive:
36
+ * in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
37
+ */
38
+ nextInteger(upperBound?: number): number;
39
+ nextInteger(lowerBound: number, upperBound: number): number;
40
+ /**
41
+ * Returns a uniformly distributed float with 53 bits of precision, the upper bound being
42
+ * exclusive: in `[0, upperBound)` when called with a single bound,
43
+ * in `[lowerBound, upperBound)` otherwise.
44
+ */
45
+ nextFloat(upperBound?: number): number;
46
+ nextFloat(lowerBound: number, upperBound: number): number;
47
+ /** Returns `true` with the given `probability`, or with a probability of one half by default. */
48
+ nextBoolean(probability?: number): boolean;
49
+ /** Returns a uniformly distributed angle in degrees, in `[0, 360)`. */
50
+ nextAngle(): number;
51
+ /** Returns a uniformly distributed point within `range` of the given center. */
52
+ nextXY(centerX: number, centerY: number, range: number): LuaMultiReturn<[x: number, y: number]>;
53
+ /** Returns a uniformly distributed element of the given `array`. */
54
+ nextElement<T>(array: ReadonlyNonEmptyArray<T>): T;
55
+ nextElement<T>(array: ReadonlyArray<T>): T | undefined;
56
+ /** Returns a uniformly distributed one of the given `elements`. */
57
+ nextOf<T>(element: T, ...elements: T[]): T;
58
+ nextOf<T>(...elements: T[]): T | undefined;
59
+ /** Shuffles the given `array` in place, each permutation being equally likely. */
60
+ shuffle(array: unknown[]): void;
61
+ }
62
+ /**
63
+ * Folds freshly gathered client-local entropy, optionally together with the given `value`,
64
+ * into the state of the generator backing the `asyncRandom*` functions.
65
+ */
66
+ export declare const addAsyncRandomEntropy: (value?: number | string) => void;
67
+ /** Returns the given amount (`0` to `32`) of random bits as a non-negative integer. */
68
+ export declare const asyncRandomBits: (bitCount: number) => number;
69
+ /**
70
+ * Returns a uniformly distributed integer, both bounds being inclusive:
71
+ * in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
72
+ */
73
+ export declare const asyncRandomInteger: {
74
+ (upperBound?: number): number;
75
+ (lowerBound: number, upperBound: number): number;
76
+ };
77
+ /**
78
+ * Returns a uniformly distributed float with 53 bits of precision, the upper bound being exclusive:
79
+ * in `[0, upperBound)` when called with a single bound, in `[lowerBound, upperBound)` otherwise.
80
+ */
81
+ export declare const asyncRandomFloat: {
82
+ (upperBound?: number): number;
83
+ (lowerBound: number, upperBound: number): number;
84
+ };
85
+ /** Returns `true` with the given `probability`, or with a probability of one half by default. */
86
+ export declare const asyncRandomBoolean: (probability?: number) => boolean;
87
+ /** Returns a uniformly distributed angle in degrees, in `[0, 360)`. */
88
+ export declare const asyncRandomAngle: () => number;
89
+ /** Returns a uniformly distributed point within `range` of the given center. */
90
+ export declare const asyncRandomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
91
+ /** Returns a uniformly distributed element of the given `array`. */
92
+ export declare const asyncRandomElement: {
93
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
94
+ <T>(array: ReadonlyArray<T>): T | undefined;
95
+ };
96
+ /** Returns a uniformly distributed one of the given `elements`. */
97
+ export declare const asyncRandom: {
98
+ <T>(element: T, ...elements: T[]): T;
99
+ <T>(...elements: T[]): T | undefined;
100
+ };
101
+ /** Shuffles the given `array` in place, each permutation being equally likely. */
102
+ export declare const asyncShuffle: (array: unknown[]) => void;
@@ -0,0 +1,273 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local ____exports = {}
5
+ local ____exception = require("exception")
6
+ local IllegalArgumentException = ____exception.IllegalArgumentException
7
+ local ____math = require("math")
8
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
9
+ local PI = ____math.PI
10
+ local cos = ____math.cos
11
+ local sin = ____math.sin
12
+ local sqrt = ____math.sqrt
13
+ local clock = os.clock
14
+ local time = os.time
15
+ local byte = string.byte
16
+ local pack = string.pack
17
+ local ____unpack = string.unpack
18
+ local select = _G.select
19
+ local toString = _G.tostring
20
+ local globals = _G
21
+ local UINT32_MASK = 4294967295
22
+ local POW_2_32 = 4294967296
23
+ --- 2^26, used to join two draws into a 53-bit mantissa.
24
+ local POW_2_26 = 67108864
25
+ --- 2^53, the amount of representable values of a 53-bit mantissa.
26
+ local POW_2_53 = 9007199254740992
27
+ local GOLDEN_RATIO_32 = 2654435769
28
+ local FNV_PRIME_32 = 16777619
29
+ --- The SplitMix32 finalizer: avalanches a 32-bit value.
30
+ local function mix(value)
31
+ local z = value & UINT32_MASK
32
+ z = (z ~ z >> 16) * 569420461 & UINT32_MASK
33
+ z = (z ~ z >> 15) * 1935289751 & UINT32_MASK
34
+ return (z ~ z >> 15) & UINT32_MASK
35
+ end
36
+ --- Folds the bytes of `value` into `hash` (FNV-1a).
37
+ local function hashString(hash, value)
38
+ for i = 1, #value do
39
+ hash = (hash ~ byte(value, i)) * FNV_PRIME_32 & UINT32_MASK
40
+ end
41
+ return hash
42
+ end
43
+ --- Folds the exact bit pattern of `value` into `hash`, without assuming it is an integer.
44
+ local function hashNumber(hash, value)
45
+ local low, high = ____unpack(
46
+ "<i4i4",
47
+ pack("<d", value)
48
+ )
49
+ return mix(mix(hash ~ low & UINT32_MASK) ~ high & UINT32_MASK)
50
+ end
51
+ local entropyCounter = 0
52
+ --- Gathers 32 bits of client-local entropy.
53
+ --
54
+ -- Every source is local by nature: the wall clock and the process CPU time drift apart between
55
+ -- machines, and the heap addresses of freshly allocated tables and of loaded code differ between
56
+ -- processes. The CPU time is read once more at the end, so that the time the gathering itself took
57
+ -- contributes as well.
58
+ local function collectEntropy()
59
+ entropyCounter = entropyCounter + 1
60
+ local entropy = mix(GOLDEN_RATIO_32 ~ entropyCounter)
61
+ entropy = mix(entropy ~ time() & UINT32_MASK)
62
+ entropy = hashNumber(
63
+ entropy,
64
+ clock()
65
+ )
66
+ entropy = mix(hashString(
67
+ entropy,
68
+ toString({})
69
+ ))
70
+ entropy = mix(hashString(
71
+ entropy,
72
+ toString({})
73
+ ))
74
+ entropy = mix(hashString(
75
+ entropy,
76
+ toString(globals)
77
+ ))
78
+ entropy = mix(hashString(
79
+ entropy,
80
+ toString(mix)
81
+ ))
82
+ return hashNumber(
83
+ entropy,
84
+ clock()
85
+ )
86
+ end
87
+ --- A client-local pseudorandom generator that is safe to advance inside a local block.
88
+ --
89
+ -- Instances are independent of each other and of the game's synchronous randomness.
90
+ ____exports.AsyncRandom = __TS__Class()
91
+ local AsyncRandom = ____exports.AsyncRandom
92
+ AsyncRandom.name = "AsyncRandom"
93
+ function AsyncRandom.prototype.____constructor(self, seed)
94
+ self.a = 0
95
+ self.b = 0
96
+ self.c = 0
97
+ self.d = 0
98
+ self:setSeed(seed or collectEntropy())
99
+ end
100
+ function AsyncRandom.prototype.setSeed(self, seed)
101
+ local z = hashNumber(GOLDEN_RATIO_32, seed)
102
+ z = z + GOLDEN_RATIO_32 & UINT32_MASK
103
+ local a = mix(z)
104
+ z = z + GOLDEN_RATIO_32 & UINT32_MASK
105
+ local b = mix(z)
106
+ z = z + GOLDEN_RATIO_32 & UINT32_MASK
107
+ local c = mix(z)
108
+ z = z + GOLDEN_RATIO_32 & UINT32_MASK
109
+ local d = mix(z)
110
+ self.a = a
111
+ self.b = b
112
+ self.c = c
113
+ self.d = a | b | c | d ~= 0 and d or GOLDEN_RATIO_32
114
+ end
115
+ function AsyncRandom.prototype.addEntropy(self, value)
116
+ local entropy = collectEntropy()
117
+ if type(value) == "number" then
118
+ entropy = hashNumber(entropy, value)
119
+ elseif value ~= nil then
120
+ entropy = hashString(entropy, value)
121
+ end
122
+ local a = self.a ~ mix(entropy)
123
+ local b = self.b ~ mix(a)
124
+ local c = self.c ~ mix(b)
125
+ local d = self.d ~ mix(c)
126
+ self.a = a
127
+ self.b = b
128
+ self.c = c
129
+ self.d = a | b | c | d ~= 0 and d or GOLDEN_RATIO_32
130
+ self:next()
131
+ end
132
+ function AsyncRandom.prototype.next(self)
133
+ local a = self.a
134
+ local b = self.b
135
+ local result = b * 5 & UINT32_MASK
136
+ result = (result << 7 | result >> 25) & UINT32_MASK
137
+ result = result * 9 & UINT32_MASK
138
+ local t = b << 9 & UINT32_MASK
139
+ local c = self.c ~ a
140
+ local d = self.d ~ b
141
+ self.a = a ~ d
142
+ self.b = b ~ c
143
+ self.c = c ~ t
144
+ self.d = (d << 11 | d >> 21) & UINT32_MASK
145
+ return result
146
+ end
147
+ function AsyncRandom.prototype.nextBounded(self, bound)
148
+ if bound <= 1 then
149
+ return 0
150
+ end
151
+ local limit = POW_2_32 - POW_2_32 % bound
152
+ local value = self:next()
153
+ while value >= limit do
154
+ value = self:next()
155
+ end
156
+ return value % bound
157
+ end
158
+ function AsyncRandom.prototype.nextBits(self, bitCount)
159
+ return self:next() >> 32 - bitCount
160
+ end
161
+ function AsyncRandom.prototype.nextInteger(self, m, n)
162
+ local lowerBound = n ~= nil and m or 0
163
+ local upperBound = n ~= nil and n or (m or MAXIMUM_INTEGER)
164
+ if upperBound < lowerBound then
165
+ error(
166
+ __TS__New(
167
+ IllegalArgumentException,
168
+ ((("Upper bound (" .. tostring(upperBound)) .. ") is less than lower bound (") .. tostring(lowerBound)) .. ")."
169
+ ),
170
+ 0
171
+ )
172
+ end
173
+ return lowerBound + self:nextBounded(upperBound - lowerBound + 1)
174
+ end
175
+ function AsyncRandom.prototype.nextFloat(self, m, n)
176
+ local high = self:next() >> 5
177
+ local low = self:next() >> 6
178
+ local value = (high * POW_2_26 + low) / POW_2_53
179
+ return n ~= nil and m + value * (n - m) or value * (m or MAXIMUM_INTEGER)
180
+ end
181
+ function AsyncRandom.prototype.nextBoolean(self, probability)
182
+ local ____temp_0
183
+ if probability == nil then
184
+ ____temp_0 = self:next() >> 31 ~= 0
185
+ else
186
+ ____temp_0 = self:nextFloat() < probability
187
+ end
188
+ return ____temp_0
189
+ end
190
+ function AsyncRandom.prototype.nextAngle(self)
191
+ return self:nextFloat() * 360
192
+ end
193
+ function AsyncRandom.prototype.nextXY(self, centerX, centerY, range)
194
+ local r = range * sqrt(self:nextFloat())
195
+ local t = self:nextFloat() * 2 * PI
196
+ return centerX + r * cos(t), centerY + r * sin(t)
197
+ end
198
+ function AsyncRandom.prototype.nextElement(self, array)
199
+ local length = #array
200
+ local ____temp_1
201
+ if length ~= 0 then
202
+ ____temp_1 = array[self:nextBounded(length) + 1]
203
+ else
204
+ ____temp_1 = nil
205
+ end
206
+ return ____temp_1
207
+ end
208
+ function AsyncRandom.prototype.nextOf(self, ...)
209
+ local count = select("#", ...)
210
+ local ____temp_2
211
+ if count ~= 0 then
212
+ ____temp_2 = (select(
213
+ self:nextBounded(count) + 1,
214
+ ...
215
+ ))
216
+ else
217
+ ____temp_2 = nil
218
+ end
219
+ return ____temp_2
220
+ end
221
+ function AsyncRandom.prototype.shuffle(self, array)
222
+ for i = #array - 1, 1, -1 do
223
+ local j = self:nextBounded(i + 1)
224
+ local value = array[i + 1]
225
+ array[i + 1] = array[j + 1]
226
+ array[j + 1] = value
227
+ end
228
+ end
229
+ local defaultAsyncRandom
230
+ local function getDefaultAsyncRandom()
231
+ defaultAsyncRandom = defaultAsyncRandom or __TS__New(____exports.AsyncRandom)
232
+ return defaultAsyncRandom
233
+ end
234
+ --- Folds freshly gathered client-local entropy, optionally together with the given `value`,
235
+ -- into the state of the generator backing the `asyncRandom*` functions.
236
+ ____exports.addAsyncRandomEntropy = function(value)
237
+ getDefaultAsyncRandom():addEntropy(value)
238
+ end
239
+ --- Returns the given amount (`0` to `32`) of random bits as a non-negative integer.
240
+ ____exports.asyncRandomBits = function(bitCount)
241
+ return getDefaultAsyncRandom():nextBits(bitCount)
242
+ end
243
+ --- Returns a uniformly distributed integer, both bounds being inclusive:
244
+ -- in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
245
+ ____exports.asyncRandomInteger = function(m, n) return n ~= nil and getDefaultAsyncRandom():nextInteger(m, n) or getDefaultAsyncRandom():nextInteger(m) end
246
+ --- Returns a uniformly distributed float with 53 bits of precision, the upper bound being exclusive:
247
+ -- in `[0, upperBound)` when called with a single bound, in `[lowerBound, upperBound)` otherwise.
248
+ ____exports.asyncRandomFloat = function(m, n) return n ~= nil and getDefaultAsyncRandom():nextFloat(m, n) or getDefaultAsyncRandom():nextFloat(m) end
249
+ --- Returns `true` with the given `probability`, or with a probability of one half by default.
250
+ ____exports.asyncRandomBoolean = function(probability)
251
+ return getDefaultAsyncRandom():nextBoolean(probability)
252
+ end
253
+ --- Returns a uniformly distributed angle in degrees, in `[0, 360)`.
254
+ ____exports.asyncRandomAngle = function()
255
+ return getDefaultAsyncRandom():nextAngle()
256
+ end
257
+ --- Returns a uniformly distributed point within `range` of the given center.
258
+ ____exports.asyncRandomXY = function(centerX, centerY, range)
259
+ return getDefaultAsyncRandom():nextXY(centerX, centerY, range)
260
+ end
261
+ --- Returns a uniformly distributed element of the given `array`.
262
+ ____exports.asyncRandomElement = function(array)
263
+ return getDefaultAsyncRandom():nextElement(array)
264
+ end
265
+ --- Returns a uniformly distributed one of the given `elements`.
266
+ ____exports.asyncRandom = function(...)
267
+ return getDefaultAsyncRandom():nextOf(...)
268
+ end
269
+ --- Shuffles the given `array` in place, each permutation being equally likely.
270
+ ____exports.asyncShuffle = function(array)
271
+ getDefaultAsyncRandom():shuffle(array)
272
+ end
273
+ return ____exports
@@ -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 {};