warscript 0.0.1-dev.697548e → 0.0.1-dev.6af7b85

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.
@@ -24,11 +24,23 @@ local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
24
24
  local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
25
25
  local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
26
26
  local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
27
+ local ____lua_2Dsets = require("utility.lua-sets")
28
+ local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
29
+ local ____socket = require("net.socket")
30
+ local Socket = ____socket.Socket
31
+ local ____lua_2Dmaps = require("utility.lua-maps")
32
+ local getOrPut = ____lua_2Dmaps.getOrPut
33
+ local luaMapInvert = ____lua_2Dmaps.luaMapInvert
34
+ local luaMapOf = ____lua_2Dmaps.luaMapOf
35
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
27
36
  local frameClick = BlzFrameClick
28
37
  local frameGetEnable = BlzFrameGetEnable
29
38
  local frameIsVisible = BlzFrameIsVisible
30
39
  local frameSetEnable = BlzFrameSetEnable
31
40
  local frameSetScale = BlzFrameSetScale
41
+ local getHandleId = GetHandleId
42
+ local getOriginFrame = BlzGetOriginFrame
43
+ local location = Location
32
44
  local ____rawget = _G.rawget
33
45
  local rawset = _G.rawset
34
46
  local invoke = Event.invoke
@@ -130,6 +142,30 @@ do
130
142
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
131
143
  end
132
144
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
145
+ local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
146
+ local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
147
+ local seenAsyncInitOriginFrameTypes = mutableLuaSet()
148
+ local seenAsyncInitOriginFrameTypesSocket = __TS__New(Socket)
149
+ local seenPlayersByAsyncInitOriginFrameType = mutableLuaMap()
150
+ seenAsyncInitOriginFrameTypesSocket.onMessage:addListener(function(player, key)
151
+ local asyncInitOriginFrameType = asyncInitOriginFrameTypeByKey[key]
152
+ if asyncInitOriginFrameType ~= nil then
153
+ getOrPut(seenPlayersByAsyncInitOriginFrameType, asyncInitOriginFrameType, mutableLuaSet)[player] = true
154
+ end
155
+ end)
156
+ local function haveAllPlayersSeenAsyncInitOriginFrameType(frame)
157
+ local players = seenPlayersByAsyncInitOriginFrameType[frame]
158
+ if players == nil then
159
+ return false
160
+ end
161
+ for ____, player in ipairs(Player.all) do
162
+ if player.isUser and player.isPlaying and not (players[player] ~= nil) then
163
+ return false
164
+ end
165
+ end
166
+ keyByAsyncInitOriginFrameType[frame] = nil
167
+ return true
168
+ end
133
169
  ____exports.Frame = __TS__Class()
134
170
  local Frame = ____exports.Frame
135
171
  Frame.name = "Frame"
@@ -308,7 +344,17 @@ function Frame.byOrigin(self, frameType, index)
308
344
  if index == nil then
309
345
  index = 0
310
346
  end
311
- return self:of(BlzGetOriginFrame(frameType, index))
347
+ local frame = getOriginFrame(frameType, index)
348
+ local asyncInitOriginFrameTypeKey = keyByAsyncInitOriginFrameType[frameType]
349
+ if index == 0 and asyncInitOriginFrameTypeKey ~= nil and not haveAllPlayersSeenAsyncInitOriginFrameType(frameType) then
350
+ if getHandleId(frame) == 0 or seenAsyncInitOriginFrameTypes[frameType] ~= nil then
351
+ location(0, 0)
352
+ else
353
+ seenAsyncInitOriginFrameTypes[frameType] = true
354
+ seenAsyncInitOriginFrameTypesSocket:send(asyncInitOriginFrameTypeKey)
355
+ end
356
+ end
357
+ return self:of(frame)
312
358
  end
313
359
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
314
360
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
2
  import { Item } from "../../engine/internal/item";
3
3
  import "../../engine/internal/item+owner";
4
+ import "../../engine/internal/item/fields";
4
5
  export { Item };
@@ -2,5 +2,6 @@ local ____exports = {}
2
2
  local ____item = require("engine.internal.item")
3
3
  local Item = ____item.Item
4
4
  require("engine.internal.item+owner")
5
+ require("engine.internal.item.fields")
5
6
  ____exports.Item = Item
6
7
  return ____exports
@@ -10,9 +10,6 @@ local Unit = ____unit.Unit
10
10
  local ____ability = require("engine.standard.fields.ability")
11
11
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
12
12
  local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
13
- local ____math = require("math")
14
- local max = ____math.max
15
- local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
16
13
  local ____sound = require("core.types.sound")
17
14
  local Sound3D = ____sound.Sound3D
18
15
  local SoundSettings = ____sound.SoundSettings
@@ -31,7 +28,11 @@ function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
31
28
  return false
32
29
  end
33
30
  caster.mana = caster.mana - manaCost
34
- self.ability.cooldownRemaining = max(cooldown, MINIMUM_POSITIVE_NORMALIZED_FLOAT)
31
+ if cooldown == 0 then
32
+ self.ability:interruptCast()
33
+ else
34
+ self.ability.cooldownRemaining = cooldown
35
+ end
35
36
  self:flashCasterEffect(caster)
36
37
  local soundPresetId = self.ability:getField(ABILITY_SF_EFFECT_SOUND)
37
38
  if soundPresetId ~= "" then
package/engine/buff.d.ts CHANGED
@@ -219,6 +219,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
219
219
  [K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
220
220
  };
221
221
  private readonly handle;
222
+ readonly previousBuff?: Buff;
222
223
  private _timer?;
223
224
  private readonly _level?;
224
225
  private readonly _spellStealPriority?;
package/engine/buff.lua CHANGED
@@ -404,7 +404,8 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
404
404
  buffByTypeId = {}
405
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
406
406
  end
407
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
408
409
  if ____opt_15 ~= nil then
409
410
  ____opt_15:destroy()
410
411
  end
@@ -14,6 +14,8 @@ local abilityActionDummy = ____ability.abilityActionDummy
14
14
  local doAbilityAction = ____ability.doAbilityAction
15
15
  local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
16
16
  local startItemCooldown = ____ability.startItemCooldown
17
+ local ____timer = require("core.types.timer")
18
+ local Timer = ____timer.Timer
17
19
  local getUnitAbilityLevel = GetUnitAbilityLevel
18
20
  local setUnitAbilityLevel = SetUnitAbilityLevel
19
21
  local setAbilityIntegerField = BlzSetAbilityIntegerField
@@ -35,8 +37,6 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
35
37
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
36
38
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
37
39
  local getHandleId = GetHandleId
38
- local getItemBooleanField = BlzGetItemBooleanField
39
- local setItemBooleanField = BlzSetItemBooleanField
40
40
  local unitHideAbility = BlzUnitHideAbility
41
41
  local unitDisableAbility = BlzUnitDisableAbility
42
42
  local match = string.match
@@ -516,11 +516,14 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
516
516
  )
517
517
  end
518
518
  function ItemAbility.prototype.interruptCast(self)
519
- local handle = self.owner.handle
520
- local activelyUsed = getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED)
521
- if activelyUsed then
522
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, false)
523
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
519
+ local item = self.owner
520
+ local itemHandle = item.handle
521
+ local ____opt_1 = item.owner
522
+ local itemOwnerHandle = ____opt_1 and ____opt_1.handle
523
+ local cooldownRemaining = doAbilityActionForceDummy(itemHandle, itemOwnerHandle, getAbilityCooldown, self.typeId)
524
+ if cooldownRemaining == 0 then
525
+ startItemCooldown(itemHandle, itemOwnerHandle, 1)
526
+ Timer:run(startItemCooldown, itemHandle, itemOwnerHandle, 0)
524
527
  end
525
528
  end
526
529
  function ItemAbility.prototype.onDestroy(self)
@@ -543,17 +546,17 @@ __TS__SetDescriptor(
543
546
  {
544
547
  get = function(self)
545
548
  local item = self.owner
546
- local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
547
- local ____item_handle_3 = item.handle
548
- local ____opt_1 = item.owner
549
- return ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, getAbilityCooldown, self.typeId)
549
+ local ____doAbilityActionForceDummy_6 = doAbilityActionForceDummy
550
+ local ____item_handle_5 = item.handle
551
+ local ____opt_3 = item.owner
552
+ return ____doAbilityActionForceDummy_6(____item_handle_5, ____opt_3 and ____opt_3.handle, getAbilityCooldown, self.typeId)
550
553
  end,
551
554
  set = function(self, cooldownRemaining)
552
555
  local item = self.owner
553
- local ____startItemCooldown_8 = startItemCooldown
554
- local ____item_handle_7 = item.handle
555
- local ____opt_5 = item.owner
556
- ____startItemCooldown_8(____item_handle_7, ____opt_5 and ____opt_5.handle, cooldownRemaining)
556
+ local ____startItemCooldown_10 = startItemCooldown
557
+ local ____item_handle_9 = item.handle
558
+ local ____opt_7 = item.owner
559
+ ____startItemCooldown_10(____item_handle_9, ____opt_7 and ____opt_7.handle, cooldownRemaining)
557
560
  end
558
561
  },
559
562
  true
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ declare module "../item" {
3
+ interface Item {
4
+ canBeSold: boolean;
5
+ }
6
+ }
7
+ declare module "../item" {
8
+ interface Item {
9
+ isActivelyUsed: boolean;
10
+ }
11
+ }
12
+ export {};
@@ -0,0 +1,33 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____item = require("engine.internal.item")
5
+ local Item = ____item.Item
6
+ local ____item = require("engine.standard.fields.item")
7
+ local CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD = ____item.CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD
8
+ local IS_ACTIVELY_USED_ITEM_FIELD = ____item.IS_ACTIVELY_USED_ITEM_FIELD
9
+ __TS__ObjectDefineProperty(
10
+ Item.prototype,
11
+ "canBeSold",
12
+ {
13
+ get = function(self)
14
+ return CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:getValue(self)
15
+ end,
16
+ set = function(self, value)
17
+ CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:setValue(self, value)
18
+ end
19
+ }
20
+ )
21
+ __TS__ObjectDefineProperty(
22
+ Item.prototype,
23
+ "isActivelyUsed",
24
+ {
25
+ get = function(self)
26
+ return IS_ACTIVELY_USED_ITEM_FIELD:getValue(self)
27
+ end,
28
+ set = function(self, value)
29
+ IS_ACTIVELY_USED_ITEM_FIELD:setValue(self, value)
30
+ end
31
+ }
32
+ )
33
+ return ____exports
@@ -32,8 +32,6 @@ export declare class Item extends Handle<jitem> {
32
32
  get dropsOnDeath(): boolean;
33
33
  set canBeDropped(canBeDropped: boolean);
34
34
  get canBeDropped(): boolean;
35
- set canBeSold(canBeSold: boolean);
36
- get canBeSold(): boolean;
37
35
  set perishes(perishes: boolean);
38
36
  get perishes(): boolean;
39
37
  set isPowerUp(isPowerUp: boolean);
@@ -42,8 +40,6 @@ export declare class Item extends Handle<jitem> {
42
40
  get isDead(): boolean;
43
41
  set isInvulnerable(isInvulnerable: boolean);
44
42
  get isInvulnerable(): boolean;
45
- set isActivelyUsed(isActivelyUsed: boolean);
46
- get isActivelyUsed(): boolean;
47
43
  set visible(v: boolean);
48
44
  get visible(): boolean;
49
45
  set level(v: number);
@@ -356,19 +356,6 @@ __TS__SetDescriptor(
356
356
  },
357
357
  true
358
358
  )
359
- __TS__SetDescriptor(
360
- Item.prototype,
361
- "canBeSold",
362
- {
363
- get = function(self)
364
- return isItemPawnable(self.handle)
365
- end,
366
- set = function(self, canBeSold)
367
- setItemPawnable(self.handle, canBeSold)
368
- end
369
- },
370
- true
371
- )
372
359
  __TS__SetDescriptor(
373
360
  Item.prototype,
374
361
  "perishes",
@@ -427,30 +414,6 @@ __TS__SetDescriptor(
427
414
  },
428
415
  true
429
416
  )
430
- __TS__SetDescriptor(
431
- Item.prototype,
432
- "isActivelyUsed",
433
- {
434
- get = function(self)
435
- return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
436
- end,
437
- set = function(self, isActivelyUsed)
438
- local handle = self.handle
439
- local powerUp = isItemPowerup(handle)
440
- local perishes = getItemBooleanField(handle, ITEM_BF_PERISHABLE)
441
- local dropsOnDeath = getItemBooleanField(handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
442
- local canBeDropped = getItemBooleanField(handle, ITEM_BF_CAN_BE_DROPPED)
443
- local canBeSold = isItemPawnable(handle)
444
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, isActivelyUsed)
445
- setItemPawnable(handle, canBeSold)
446
- setItemDroppable(handle, canBeDropped)
447
- setItemDropOnDeath(handle, dropsOnDeath)
448
- setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
449
- setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
450
- end
451
- },
452
- true
453
- )
454
417
  __TS__SetDescriptor(
455
418
  Item.prototype,
456
419
  "visible",
@@ -21,7 +21,7 @@ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
21
21
  local handleByUnitItems = setmetatable({}, {__mode = "k"})
22
22
  local function unitItemsNext(handle, index)
23
23
  local slot = index & 7
24
- if (index & 4294967295) >> 3 == slot then
24
+ if index >> 3 == slot then
25
25
  return nil, nil
26
26
  end
27
27
  return index + 1, Item:of(unitItemInSlot(handle, slot))
@@ -12,6 +12,7 @@ export declare class LocalClient {
12
12
  static get isHD(): boolean;
13
13
  static get graphicsMode(): GraphicsMode;
14
14
  static get isActive(): boolean;
15
+ static get isMinimized(): boolean;
15
16
  static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
16
17
  static get mouseFocusUnit(): Async<Unit> | undefined;
17
18
  static get mainSelectedUnit(): Async<Unit> | undefined;
@@ -19,5 +20,9 @@ export declare class LocalClient {
19
20
  previousMainSelectedUnit: Unit | undefined,
20
21
  newMainSelectedUnit: Unit | undefined
21
22
  ]>;
23
+ static get isInTargetingMode(): boolean;
24
+ static readonly targetingModeEnterEvent: Event<[]>;
25
+ static readonly targetingModeLeaveEvent: Event<[]>;
26
+ static readonly targetingModeStateChangeEvent: Event<[]>;
22
27
  static readonly onDisconnect: TriggerEvent<[]>;
23
28
  }
@@ -1,10 +1,11 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
+ local __TS__New = ____lualib.__TS__New
3
4
  local __TS__Class = ____lualib.__TS__Class
4
5
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
5
6
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
6
- local __TS__New = ____lualib.__TS__New
7
7
  local ____exports = {}
8
+ local actualizeTargetingModeState
8
9
  local ____unit = require("core.types.unit")
9
10
  local Unit = ____unit.Unit
10
11
  local ____event = require("event")
@@ -18,6 +19,8 @@ local ____timer = require("core.types.timer")
18
19
  local Timer = ____timer.Timer
19
20
  local ____color = require("core.types.color")
20
21
  local Color = ____color.Color
22
+ local ____arrays = require("utility.arrays")
23
+ local array = ____arrays.array
21
24
  local loadTOCFile = BlzLoadTOCFile
22
25
  local getLocalClientWidth = BlzGetLocalClientWidth
23
26
  local getLocalClientHeight = BlzGetLocalClientHeight
@@ -62,6 +65,10 @@ local function compareUnitsSelectionPriority(a, b)
62
65
  end
63
66
  local mainSelectedUnitChangeEvent
64
67
  local previousMainSelectedUnit
68
+ local lastTargetingModeState = false
69
+ local targetingModeEnterEvent = __TS__New(Event)
70
+ local targetingModeLeaveEvent = __TS__New(Event)
71
+ local targetingModeStateChangeEvent = __TS__New(Event)
65
72
  ____exports.LocalClient = __TS__Class()
66
73
  local LocalClient = ____exports.LocalClient
67
74
  LocalClient.name = "LocalClient"
@@ -128,6 +135,13 @@ __TS__ObjectDefineProperty(
128
135
  return isLocalClientActive()
129
136
  end}
130
137
  )
138
+ __TS__ObjectDefineProperty(
139
+ LocalClient,
140
+ "isMinimized",
141
+ {get = function(self)
142
+ return getLocalClientHeight() == 0
143
+ end}
144
+ )
131
145
  __TS__ObjectDefineProperty(
132
146
  LocalClient,
133
147
  "mouseFocusUnit",
@@ -181,6 +195,16 @@ __TS__ObjectDefineProperty(
181
195
  return mainSelectedUnitChangeEvent
182
196
  end}
183
197
  )
198
+ __TS__ObjectDefineProperty(
199
+ LocalClient,
200
+ "isInTargetingMode",
201
+ {get = function(self)
202
+ return actualizeTargetingModeState()
203
+ end}
204
+ )
205
+ LocalClient.targetingModeEnterEvent = targetingModeEnterEvent
206
+ LocalClient.targetingModeLeaveEvent = targetingModeLeaveEvent
207
+ LocalClient.targetingModeStateChangeEvent = targetingModeStateChangeEvent
184
208
  LocalClient.onDisconnect = __TS__New(
185
209
  TriggerEvent,
186
210
  function(trigger)
@@ -188,6 +212,37 @@ LocalClient.onDisconnect = __TS__New(
188
212
  end,
189
213
  function() return end
190
214
  )
215
+ local commandButtons = array(
216
+ 12,
217
+ function(i) return Frame:byOrigin(ORIGIN_FRAME_COMMAND_BUTTON, i) end
218
+ )
219
+ local function getTargetingModeState()
220
+ for i = 0, 10 do
221
+ if commandButtons[i + 1].visible then
222
+ return false
223
+ end
224
+ end
225
+ return commandButtons[12].visible
226
+ end
227
+ actualizeTargetingModeState = function()
228
+ if getTargetingModeState() then
229
+ if not lastTargetingModeState then
230
+ lastTargetingModeState = true
231
+ Event.invoke(targetingModeEnterEvent)
232
+ Event.invoke(targetingModeStateChangeEvent)
233
+ end
234
+ return true
235
+ end
236
+ if lastTargetingModeState then
237
+ lastTargetingModeState = false
238
+ Event.invoke(targetingModeLeaveEvent)
239
+ Event.invoke(targetingModeStateChangeEvent)
240
+ end
241
+ return false
242
+ end
243
+ Timer.onPeriod[1 / 64]:addListener(function()
244
+ actualizeTargetingModeState()
245
+ end)
191
246
  warpack.afterMapInit(function()
192
247
  rawset(
193
248
  ____exports.LocalClient,
@@ -0,0 +1,22 @@
1
+ /** @noSelfInFile */
2
+ import { ObjectField } from "../object-field";
3
+ import { Item } from "../internal/item";
4
+ import { ItemType, ItemTypeId } from "../object-data/entry/item-type";
5
+ export declare abstract class ItemField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<ItemType, Item, ValueType, NativeFieldType> {
6
+ protected get instanceClass(): typeof Item;
7
+ protected getObjectDataEntryId(instance: Item): ItemTypeId;
8
+ }
9
+ export declare class ItemBooleanField extends ItemField<boolean, jitembooleanfield> {
10
+ protected get defaultValue(): boolean;
11
+ protected getNativeFieldById(id: number): jitembooleanfield;
12
+ protected hasNativeFieldValue(): boolean;
13
+ protected getNativeFieldValue(instance: Item): boolean;
14
+ protected setNativeFieldValue(instance: Item, value: boolean): boolean;
15
+ }
16
+ export declare class ItemIntegerField extends ItemField<number, jitemintegerfield> {
17
+ protected get defaultValue(): number;
18
+ protected getNativeFieldById(id: number): jitemintegerfield;
19
+ protected hasNativeFieldValue(): boolean;
20
+ protected getNativeFieldValue(instance: Item): number;
21
+ protected setNativeFieldValue(instance: Item, value: number): boolean;
22
+ }
@@ -0,0 +1,118 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local ____exports = {}
6
+ local ____object_2Dfield = require("engine.object-field")
7
+ local ObjectField = ____object_2Dfield.ObjectField
8
+ local ____item = require("engine.internal.item")
9
+ local Item = ____item.Item
10
+ local ____lua_2Dsets = require("utility.lua-sets")
11
+ local luaSetOf = ____lua_2Dsets.luaSetOf
12
+ local convertItemBooleanField = ConvertItemBooleanField
13
+ local convertItemIntegerField = ConvertItemIntegerField
14
+ local getItemBooleanField = BlzGetItemBooleanField
15
+ local getItemIntegerField = BlzGetItemIntegerField
16
+ local isItemPawnable = IsItemPawnable
17
+ local isItemPowerup = IsItemPowerup
18
+ local setItemBooleanField = BlzSetItemBooleanField
19
+ local setItemDropOnDeath = SetItemDropOnDeath
20
+ local setItemDroppable = SetItemDroppable
21
+ local setItemPawnable = SetItemPawnable
22
+ local setItemIntegerField = BlzSetItemIntegerField
23
+ ____exports.ItemField = __TS__Class()
24
+ local ItemField = ____exports.ItemField
25
+ ItemField.name = "ItemField"
26
+ __TS__ClassExtends(ItemField, ObjectField)
27
+ function ItemField.prototype.getObjectDataEntryId(self, instance)
28
+ return instance.typeId
29
+ end
30
+ __TS__SetDescriptor(
31
+ ItemField.prototype,
32
+ "instanceClass",
33
+ {get = function(self)
34
+ return Item
35
+ end},
36
+ true
37
+ )
38
+ local nativeItemBooleanFieldIds = luaSetOf(
39
+ fourCC("ipaw"),
40
+ fourCC("iusa")
41
+ )
42
+ ____exports.ItemBooleanField = __TS__Class()
43
+ local ItemBooleanField = ____exports.ItemBooleanField
44
+ ItemBooleanField.name = "ItemBooleanField"
45
+ __TS__ClassExtends(ItemBooleanField, ____exports.ItemField)
46
+ function ItemBooleanField.prototype.getNativeFieldById(self, id)
47
+ return convertItemBooleanField(id)
48
+ end
49
+ function ItemBooleanField.prototype.hasNativeFieldValue(self)
50
+ return nativeItemBooleanFieldIds[self.id] ~= nil
51
+ end
52
+ function ItemBooleanField.prototype.getNativeFieldValue(self, instance)
53
+ return getItemBooleanField(instance.handle, self.nativeField)
54
+ end
55
+ function ItemBooleanField.prototype.setNativeFieldValue(self, instance, value)
56
+ if self.id == fourCC("iusa") then
57
+ local handle = instance.handle
58
+ local powerUp = isItemPowerup(handle)
59
+ local perishes = getItemBooleanField(handle, ITEM_BF_PERISHABLE)
60
+ local dropsOnDeath = getItemBooleanField(handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
61
+ local canBeDropped = getItemBooleanField(handle, ITEM_BF_CAN_BE_DROPPED)
62
+ local canBeSold = isItemPawnable(handle)
63
+ local result = setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, value)
64
+ setItemPawnable(handle, canBeSold)
65
+ setItemDroppable(handle, canBeDropped)
66
+ setItemDropOnDeath(handle, dropsOnDeath)
67
+ setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
68
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
69
+ return result
70
+ end
71
+ return setItemBooleanField(instance.handle, self.nativeField, value)
72
+ end
73
+ __TS__SetDescriptor(
74
+ ItemBooleanField.prototype,
75
+ "defaultValue",
76
+ {get = function(self)
77
+ return false
78
+ end},
79
+ true
80
+ )
81
+ local nativeItemIntegerFieldIds = luaSetOf(
82
+ fourCC("ilev"),
83
+ fourCC("iuse"),
84
+ fourCC("icid"),
85
+ fourCC("ihtp"),
86
+ fourCC("ihpc"),
87
+ fourCC("ipri"),
88
+ fourCC("iarm"),
89
+ fourCC("iclr"),
90
+ fourCC("iclg"),
91
+ fourCC("iclb"),
92
+ fourCC("ical")
93
+ )
94
+ ____exports.ItemIntegerField = __TS__Class()
95
+ local ItemIntegerField = ____exports.ItemIntegerField
96
+ ItemIntegerField.name = "ItemIntegerField"
97
+ __TS__ClassExtends(ItemIntegerField, ____exports.ItemField)
98
+ function ItemIntegerField.prototype.getNativeFieldById(self, id)
99
+ return convertItemIntegerField(id)
100
+ end
101
+ function ItemIntegerField.prototype.hasNativeFieldValue(self)
102
+ return nativeItemIntegerFieldIds[self.id] ~= nil
103
+ end
104
+ function ItemIntegerField.prototype.getNativeFieldValue(self, instance)
105
+ return getItemIntegerField(instance.handle, self.nativeField)
106
+ end
107
+ function ItemIntegerField.prototype.setNativeFieldValue(self, instance, value)
108
+ return setItemIntegerField(instance.handle, self.nativeField, value)
109
+ end
110
+ __TS__SetDescriptor(
111
+ ItemIntegerField.prototype,
112
+ "defaultValue",
113
+ {get = function(self)
114
+ return 0
115
+ end},
116
+ true
117
+ )
118
+ return ____exports
@@ -0,0 +1,4 @@
1
+ /** @noSelfInFile */
2
+ import { ItemBooleanField } from "../../object-field/item";
3
+ export declare const CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD: ItemBooleanField & symbol;
4
+ export declare const IS_ACTIVELY_USED_ITEM_FIELD: ItemBooleanField & symbol;
@@ -0,0 +1,6 @@
1
+ local ____exports = {}
2
+ local ____item = require("engine.object-field.item")
3
+ local ItemBooleanField = ____item.ItemBooleanField
4
+ ____exports.CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD = ItemBooleanField:create(fourCC("ipaw"))
5
+ ____exports.IS_ACTIVELY_USED_ITEM_FIELD = ItemBooleanField:create(fourCC("iusa"))
6
+ return ____exports
package/lualib_bundle.lua CHANGED
@@ -653,6 +653,7 @@ do
653
653
  self.state = 0
654
654
  self.fulfilledCallbacks = {}
655
655
  self.rejectedCallbacks = {}
656
+ self.finallyCallbacks = {}
656
657
  local success, ____error = ____pcall(
657
658
  executor,
658
659
  nil,
@@ -702,40 +703,14 @@ do
702
703
  return self["then"](self, nil, onRejected)
703
704
  end
704
705
  function __TS__Promise.prototype.finally(self, onFinally)
705
- if type(onFinally) ~= "function" then
706
- return self["then"](self, onFinally, onFinally)
707
- end
708
- return self["then"](
709
- self,
710
- function(____, x)
711
- local ____self_2 = __TS__New(
712
- __TS__Promise,
713
- function(____, resolve) return resolve(
714
- nil,
715
- onFinally(nil)
716
- ) end
717
- )
718
- return ____self_2["then"](
719
- ____self_2,
720
- function() return x end
721
- )
722
- end,
723
- function(____, e)
724
- local ____self_3 = __TS__New(
725
- __TS__Promise,
726
- function(____, resolve) return resolve(
727
- nil,
728
- onFinally(nil)
729
- ) end
730
- )
731
- return ____self_3["then"](
732
- ____self_3,
733
- function()
734
- error(e, 0)
735
- end
736
- )
706
+ if onFinally then
707
+ local ____self_finallyCallbacks_2 = self.finallyCallbacks
708
+ ____self_finallyCallbacks_2[#____self_finallyCallbacks_2 + 1] = onFinally
709
+ if self.state ~= 0 then
710
+ onFinally(nil)
737
711
  end
738
- )
712
+ end
713
+ return self
739
714
  end
740
715
  function __TS__Promise.prototype.resolve(self, value)
741
716
  if isPromiseLike(value) then
@@ -759,11 +734,22 @@ do
759
734
  end
760
735
  function __TS__Promise.prototype.invokeCallbacks(self, callbacks, value)
761
736
  local callbacksLength = #callbacks
737
+ local finallyCallbacks = self.finallyCallbacks
738
+ local finallyCallbacksLength = #finallyCallbacks
762
739
  if callbacksLength ~= 0 then
763
740
  for i = 1, callbacksLength - 1 do
764
741
  callbacks[i](callbacks, value)
765
742
  end
766
- return callbacks[callbacksLength](callbacks, value)
743
+ if finallyCallbacksLength == 0 then
744
+ return callbacks[callbacksLength](callbacks, value)
745
+ end
746
+ callbacks[callbacksLength](callbacks, value)
747
+ end
748
+ if finallyCallbacksLength ~= 0 then
749
+ for i = 1, finallyCallbacksLength - 1 do
750
+ finallyCallbacks[i](finallyCallbacks)
751
+ end
752
+ return finallyCallbacks[finallyCallbacksLength](finallyCallbacks)
767
753
  end
768
754
  end
769
755
  function __TS__Promise.prototype.createPromiseResolvingCallback(self, f, resolve, reject)
@@ -918,10 +904,8 @@ local function __TS__ObjectAssign(target, ...)
918
904
  local sources = {...}
919
905
  for i = 1, #sources do
920
906
  local source = sources[i]
921
- if type(source) == "table" then
922
- for key in pairs(source) do
923
- target[key] = source[key]
924
- end
907
+ for key in pairs(source) do
908
+ target[key] = source[key]
925
909
  end
926
910
  end
927
911
  return target
@@ -1027,13 +1011,6 @@ do
1027
1011
  metatable = {}
1028
1012
  setmetatable(target, metatable)
1029
1013
  end
1030
- if not isPrototype and not rawget(metatable, "_isOwnDescriptorMetatable") then
1031
- local instanceMetatable = {}
1032
- instanceMetatable._isOwnDescriptorMetatable = true
1033
- setmetatable(instanceMetatable, metatable)
1034
- setmetatable(target, instanceMetatable)
1035
- metatable = instanceMetatable
1036
- end
1037
1014
  local value = rawget(target, key)
1038
1015
  if value ~= nil then
1039
1016
  rawset(target, key, nil)
@@ -1406,70 +1383,46 @@ do
1406
1383
  return self:entries()
1407
1384
  end
1408
1385
  function Map.prototype.entries(self)
1409
- local function getFirstKey()
1410
- return self.firstKey
1411
- end
1412
1386
  local items = self.items
1413
1387
  local nextKey = self.nextKey
1414
- local key
1415
- local started = false
1388
+ local key = self.firstKey
1416
1389
  return {
1417
1390
  [Symbol.iterator] = function(self)
1418
1391
  return self
1419
1392
  end,
1420
1393
  next = function(self)
1421
- if not started then
1422
- started = true
1423
- key = getFirstKey(nil)
1424
- else
1425
- key = nextKey[key]
1426
- end
1427
- return {done = not key, value = {key, items[key]}}
1394
+ local result = {done = not key, value = {key, items[key]}}
1395
+ key = nextKey[key]
1396
+ return result
1428
1397
  end
1429
1398
  }
1430
1399
  end
1431
1400
  function Map.prototype.keys(self)
1432
- local function getFirstKey()
1433
- return self.firstKey
1434
- end
1435
1401
  local nextKey = self.nextKey
1436
- local key
1437
- local started = false
1402
+ local key = self.firstKey
1438
1403
  return {
1439
1404
  [Symbol.iterator] = function(self)
1440
1405
  return self
1441
1406
  end,
1442
1407
  next = function(self)
1443
- if not started then
1444
- started = true
1445
- key = getFirstKey(nil)
1446
- else
1447
- key = nextKey[key]
1448
- end
1449
- return {done = not key, value = key}
1408
+ local result = {done = not key, value = key}
1409
+ key = nextKey[key]
1410
+ return result
1450
1411
  end
1451
1412
  }
1452
1413
  end
1453
1414
  function Map.prototype.values(self)
1454
- local function getFirstKey()
1455
- return self.firstKey
1456
- end
1457
1415
  local items = self.items
1458
1416
  local nextKey = self.nextKey
1459
- local key
1460
- local started = false
1417
+ local key = self.firstKey
1461
1418
  return {
1462
1419
  [Symbol.iterator] = function(self)
1463
1420
  return self
1464
1421
  end,
1465
1422
  next = function(self)
1466
- if not started then
1467
- started = true
1468
- key = getFirstKey(nil)
1469
- else
1470
- key = nextKey[key]
1471
- end
1472
- return {done = not key, value = items[key]}
1423
+ local result = {done = not key, value = items[key]}
1424
+ key = nextKey[key]
1425
+ return result
1473
1426
  end
1474
1427
  }
1475
1428
  end
@@ -2046,68 +1999,44 @@ do
2046
1999
  return self:values()
2047
2000
  end
2048
2001
  function Set.prototype.entries(self)
2049
- local function getFirstKey()
2050
- return self.firstKey
2051
- end
2052
2002
  local nextKey = self.nextKey
2053
- local key
2054
- local started = false
2003
+ local key = self.firstKey
2055
2004
  return {
2056
2005
  [Symbol.iterator] = function(self)
2057
2006
  return self
2058
2007
  end,
2059
2008
  next = function(self)
2060
- if not started then
2061
- started = true
2062
- key = getFirstKey(nil)
2063
- else
2064
- key = nextKey[key]
2065
- end
2066
- return {done = not key, value = {key, key}}
2009
+ local result = {done = not key, value = {key, key}}
2010
+ key = nextKey[key]
2011
+ return result
2067
2012
  end
2068
2013
  }
2069
2014
  end
2070
2015
  function Set.prototype.keys(self)
2071
- local function getFirstKey()
2072
- return self.firstKey
2073
- end
2074
2016
  local nextKey = self.nextKey
2075
- local key
2076
- local started = false
2017
+ local key = self.firstKey
2077
2018
  return {
2078
2019
  [Symbol.iterator] = function(self)
2079
2020
  return self
2080
2021
  end,
2081
2022
  next = function(self)
2082
- if not started then
2083
- started = true
2084
- key = getFirstKey(nil)
2085
- else
2086
- key = nextKey[key]
2087
- end
2088
- return {done = not key, value = key}
2023
+ local result = {done = not key, value = key}
2024
+ key = nextKey[key]
2025
+ return result
2089
2026
  end
2090
2027
  }
2091
2028
  end
2092
2029
  function Set.prototype.values(self)
2093
- local function getFirstKey()
2094
- return self.firstKey
2095
- end
2096
2030
  local nextKey = self.nextKey
2097
- local key
2098
- local started = false
2031
+ local key = self.firstKey
2099
2032
  return {
2100
2033
  [Symbol.iterator] = function(self)
2101
2034
  return self
2102
2035
  end,
2103
2036
  next = function(self)
2104
- if not started then
2105
- started = true
2106
- key = getFirstKey(nil)
2107
- else
2108
- key = nextKey[key]
2109
- end
2110
- return {done = not key, value = key}
2037
+ local result = {done = not key, value = key}
2038
+ key = nextKey[key]
2039
+ return result
2111
2040
  end
2112
2041
  }
2113
2042
  end
package/math.d.ts CHANGED
@@ -23,6 +23,8 @@ export declare const floor: typeof math.floor;
23
23
  export declare const log: typeof math.log;
24
24
  export declare const max: typeof math.max;
25
25
  export declare const min: typeof math.min;
26
+ export declare const sum: (x: number, ...numbers: number[]) => number;
27
+ export declare const product: (x: number, ...numbers: number[]) => number;
26
28
  /** Returns the signum function of the argument;
27
29
  * zero if the argument is zero,
28
30
  * 1.0 if the argument is greater than zero,
package/math.lua CHANGED
@@ -39,6 +39,20 @@ ____exports.floor = math.floor
39
39
  ____exports.log = math.log
40
40
  ____exports.max = math.max
41
41
  ____exports.min = math.min
42
+ ____exports.sum = function(x, ...)
43
+ for i = 1, select("#", ...) do
44
+ local number = select(i, ...)
45
+ x = x + number
46
+ end
47
+ return x
48
+ end
49
+ ____exports.product = function(x, ...)
50
+ for i = 1, select("#", ...) do
51
+ local number = select(i, ...)
52
+ x = x * number
53
+ end
54
+ return x
55
+ end
42
56
  --- Returns the signum function of the argument;
43
57
  -- zero if the argument is zero,
44
58
  -- 1.0 if the argument is greater than zero,
package/operation.lua CHANGED
@@ -54,7 +54,6 @@ function Operation.prototype.execute(self)
54
54
  return __TS__AsyncAwaiter(function(____awaiter_resolve)
55
55
  local result
56
56
  local progress = self.progress
57
- local ____hasReturned, ____returnValue
58
57
  local ____try = __TS__AsyncAwaiter(function()
59
58
  local maximum = __TS__Await(self:estimate())
60
59
  self.maximum = maximum
@@ -77,8 +76,7 @@ function Operation.prototype.execute(self)
77
76
  if onComplete ~= nil then
78
77
  Event.invoke(onComplete, self, false, reason)
79
78
  end
80
- ____hasReturned = true
81
- return
79
+ return ____awaiter_resolve(nil)
82
80
  end
83
81
  result = __TS__Await(self:work())
84
82
  if self.progress ~= progress or self.maximum ~= maximum then
@@ -92,28 +90,21 @@ function Operation.prototype.execute(self)
92
90
  end
93
91
  until not (result == OperationContinue)
94
92
  end)
95
- ____try = ____try.catch(
93
+ __TS__Await(____try.catch(
96
94
  ____try,
97
95
  function(____, reason)
98
- return __TS__AsyncAwaiter(function()
99
- reject(nil, reason)
100
- local onFailure = ____rawget(self, "onFailure")
101
- if onFailure ~= nil then
102
- Event.invoke(onFailure, self, reason)
103
- end
104
- local onComplete = ____rawget(self, "onComplete")
105
- if onComplete ~= nil then
106
- Event.invoke(onComplete, self, false, reason)
107
- end
108
- ____hasReturned = true
109
- return
110
- end)
96
+ reject(nil, reason)
97
+ local onFailure = ____rawget(self, "onFailure")
98
+ if onFailure ~= nil then
99
+ Event.invoke(onFailure, self, reason)
100
+ end
101
+ local onComplete = ____rawget(self, "onComplete")
102
+ if onComplete ~= nil then
103
+ Event.invoke(onComplete, self, false, reason)
104
+ end
105
+ return ____awaiter_resolve(nil)
111
106
  end
112
- )
113
- __TS__Await(____try)
114
- if ____hasReturned then
115
- return ____awaiter_resolve(nil, ____returnValue)
116
- end
107
+ ))
117
108
  resolve(nil, result)
118
109
  local onSuccess = ____rawget(self, "onSuccess")
119
110
  if onSuccess ~= nil then
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.697548e",
4
+ "version": "0.0.1-dev.6af7b85",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@warscript/language-extensions": "^0.0.1",
25
- "@warscript/tstl-plugin": "^0.0.5",
25
+ "@warscript/tstl-plugin": "^0.0.6",
26
26
  "lua-types": "^2.13.1",
27
27
  "warpack": "0.0.1-dev.e490aaf"
28
28
  },
@@ -15,7 +15,7 @@ export interface ReadonlyLinkedMap<K extends AnyNotNil, V> extends LuaPairsItera
15
15
  readonly size: number;
16
16
  }
17
17
  export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
18
- readonly __linkedSet: unique symbol;
18
+ readonly __linkedMap: unique symbol;
19
19
  }
20
20
  export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinkedMap<K, V> {
21
21
  private k;
@@ -27,6 +27,7 @@ export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinked
27
27
  remove(key: K): boolean;
28
28
  contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
29
29
  get size(): number;
30
+ protected __len(): number;
30
31
  protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
31
32
  }
32
33
  export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
@@ -47,6 +47,9 @@ end
47
47
  function LinkedMap.prototype.contains(self, key)
48
48
  return self.keys:contains(key)
49
49
  end
50
+ function LinkedMap.prototype.__len(self)
51
+ return self.keys.size
52
+ end
50
53
  function LinkedMap.prototype.__pairs(self)
51
54
  return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
52
55
  end
@@ -88,6 +91,9 @@ function EmptyLinkedMap.prototype.remove(self)
88
91
  0
89
92
  )
90
93
  end
94
+ function EmptyLinkedMap.prototype.__len(self)
95
+ return 0
96
+ end
91
97
  function EmptyLinkedMap.prototype.__pairs(self)
92
98
  return linkedMapNext, emptyIteratorState, nil
93
99
  end
@@ -49,6 +49,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
49
49
  toArray(): T[];
50
50
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
51
51
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
52
+ protected __len(): number;
52
53
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
53
54
  }
54
55
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
@@ -188,6 +188,9 @@ function LinkedSet.prototype.sortBy(self, selector)
188
188
  self.f = array[1]
189
189
  self.l = array[s]
190
190
  end
191
+ function LinkedSet.prototype.__len(self)
192
+ return self.s
193
+ end
191
194
  function LinkedSet.prototype.__pairs(self)
192
195
  return linkedSetNext, {t = self.n, n = self.f}, nil
193
196
  end
@@ -209,6 +212,9 @@ function EmptyLinkedSet.prototype.add(self)
209
212
  0
210
213
  )
211
214
  end
215
+ function EmptyLinkedSet.prototype.__len(self)
216
+ return 0
217
+ end
212
218
  function EmptyLinkedSet.prototype.__pairs(self)
213
219
  return linkedSetNext, emptyIteratorState, nil
214
220
  end
@@ -0,0 +1,27 @@
1
+ /** @noSelfInFile */
2
+ type OneSidedTypeGuard = {
3
+ readonly __oneSidedTypeGuard: unique symbol;
4
+ };
5
+ export interface ReadonlyUnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
6
+ get(key: K): V | undefined;
7
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
8
+ readonly size: number;
9
+ }
10
+ export interface UnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
11
+ readonly __unorderedMap: unique symbol;
12
+ }
13
+ export declare class UnorderedMap<K extends AnyNotNil, V> implements ReadonlyUnorderedMap<K, V> {
14
+ private readonly v;
15
+ private s;
16
+ get(key: K): V | undefined;
17
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
18
+ put(key: K, value: V): void;
19
+ remove(key: K): boolean;
20
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
21
+ get size(): number;
22
+ protected __len(): number;
23
+ protected __pairs(this: UnorderedMap<K, V>): ReturnType<typeof pairs>;
24
+ }
25
+ export declare const emptyUnorderedMap: <K extends AnyNotNil, V>() => ReadonlyUnorderedMap<K, V>;
26
+ export declare const mutableUnorderedMap: <K extends AnyNotNil, V>() => UnorderedMap<K, V>;
27
+ export {};
@@ -0,0 +1,99 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
5
+ local __TS__New = ____lualib.__TS__New
6
+ local ____exports = {}
7
+ local ____exception = require("exception")
8
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
9
+ ____exports.UnorderedMap = __TS__Class()
10
+ local UnorderedMap = ____exports.UnorderedMap
11
+ UnorderedMap.name = "UnorderedMap"
12
+ function UnorderedMap.prototype.____constructor(self)
13
+ self.v = {}
14
+ self.s = 0
15
+ end
16
+ function UnorderedMap.prototype.get(self, key)
17
+ return self.v[key]
18
+ end
19
+ function UnorderedMap.prototype.getOrPut(self, key, defaultValue)
20
+ local value = self.v[key]
21
+ if value ~= nil then
22
+ return value
23
+ end
24
+ value = defaultValue()
25
+ if value ~= nil then
26
+ self.v[key] = value
27
+ self.s = self.s + 1
28
+ end
29
+ return value
30
+ end
31
+ function UnorderedMap.prototype.put(self, key, value)
32
+ local has = self.v[key] ~= nil
33
+ self.v[key] = value
34
+ if value ~= nil and not has then
35
+ self.s = self.s + 1
36
+ elseif value == nil and has then
37
+ self.s = self.s - 1
38
+ end
39
+ end
40
+ function UnorderedMap.prototype.remove(self, key)
41
+ if self.v[key] ~= nil then
42
+ self.v[key] = nil
43
+ self.s = self.s - 1
44
+ return true
45
+ end
46
+ return false
47
+ end
48
+ function UnorderedMap.prototype.contains(self, key)
49
+ return self.v[key] ~= nil
50
+ end
51
+ function UnorderedMap.prototype.__len(self)
52
+ return self.s
53
+ end
54
+ function UnorderedMap.prototype.__pairs(self)
55
+ return pairs(self.v)
56
+ end
57
+ __TS__SetDescriptor(
58
+ UnorderedMap.prototype,
59
+ "size",
60
+ {get = function(self)
61
+ return self.s
62
+ end},
63
+ true
64
+ )
65
+ local EmptyUnorderedMap = __TS__Class()
66
+ EmptyUnorderedMap.name = "EmptyUnorderedMap"
67
+ __TS__ClassExtends(EmptyUnorderedMap, ____exports.UnorderedMap)
68
+ function EmptyUnorderedMap.prototype.getOrPut(self)
69
+ error(
70
+ __TS__New(UnsupportedOperationException),
71
+ 0
72
+ )
73
+ end
74
+ function EmptyUnorderedMap.prototype.put(self)
75
+ error(
76
+ __TS__New(UnsupportedOperationException),
77
+ 0
78
+ )
79
+ end
80
+ function EmptyUnorderedMap.prototype.remove(self)
81
+ error(
82
+ __TS__New(UnsupportedOperationException),
83
+ 0
84
+ )
85
+ end
86
+ function EmptyUnorderedMap.prototype.__len(self)
87
+ return 0
88
+ end
89
+ function EmptyUnorderedMap.prototype.__pairs(self)
90
+ return pairs(self.v)
91
+ end
92
+ local EMPTY_UNORDERED_MAP = __TS__New(EmptyUnorderedMap)
93
+ ____exports.emptyUnorderedMap = function()
94
+ return EMPTY_UNORDERED_MAP
95
+ end
96
+ ____exports.mutableUnorderedMap = function()
97
+ return __TS__New(____exports.UnorderedMap)
98
+ end
99
+ return ____exports