warscript 0.0.1-dev.87b6c38 → 0.0.1-dev.8895725

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 (102) hide show
  1. package/core/types/frame.lua +47 -1
  2. package/core/types/handle.lua +6 -9
  3. package/core/types/item.d.ts +1 -0
  4. package/core/types/item.lua +1 -0
  5. package/core/types/player.d.ts +1 -1
  6. package/core/types/player.lua +12 -11
  7. package/core/types/sound.lua +1 -1
  8. package/destroyable.d.ts +1 -0
  9. package/destroyable.lua +9 -0
  10. package/engine/behavior.d.ts +4 -2
  11. package/engine/behavior.lua +69 -11
  12. package/engine/behaviour/ability/damage.d.ts +3 -0
  13. package/engine/behaviour/ability/damage.lua +8 -2
  14. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  15. package/engine/behaviour/ability.d.ts +9 -5
  16. package/engine/behaviour/ability.lua +29 -0
  17. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  18. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  19. package/engine/behaviour/unit.lua +13 -3
  20. package/engine/buff.d.ts +56 -19
  21. package/engine/buff.lua +283 -142
  22. package/engine/internal/ability.lua +15 -15
  23. package/engine/internal/item/fields.d.ts +12 -0
  24. package/engine/internal/item/fields.lua +33 -0
  25. package/engine/internal/item.d.ts +4 -5
  26. package/engine/internal/item.lua +37 -40
  27. package/engine/internal/mechanics/cast-ability.lua +6 -3
  28. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  29. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  30. package/engine/internal/object-data/health-bonus.lua +16 -0
  31. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  32. package/engine/internal/object-data/mana-bonus.lua +16 -0
  33. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  34. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  35. package/engine/internal/unit/attributes.d.ts +17 -0
  36. package/engine/internal/unit/attributes.lua +46 -0
  37. package/engine/internal/unit/bonus.d.ts +6 -0
  38. package/engine/internal/unit/bonus.lua +33 -3
  39. package/engine/internal/unit/fly-height.lua +3 -3
  40. package/engine/internal/unit/interrupts.d.ts +12 -0
  41. package/engine/internal/unit/interrupts.lua +28 -0
  42. package/engine/internal/unit/range-event.d.ts +12 -0
  43. package/engine/internal/unit/range-event.lua +90 -0
  44. package/engine/internal/unit/scale.lua +3 -3
  45. package/engine/internal/unit+bonus.lua +3 -3
  46. package/engine/internal/unit-missile-launch.lua +12 -5
  47. package/engine/internal/unit.d.ts +2 -9
  48. package/engine/internal/unit.lua +79 -121
  49. package/engine/local-client.d.ts +6 -1
  50. package/engine/local-client.lua +60 -5
  51. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  52. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  53. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  54. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  55. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  56. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  57. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  58. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  59. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  60. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  61. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  62. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  63. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  64. package/engine/object-data/entry/ability-type.d.ts +2 -0
  65. package/engine/object-data/entry/ability-type.lua +84 -4
  66. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  67. package/engine/object-data/entry/destructible-type.d.ts +12 -0
  68. package/engine/object-data/entry/destructible-type.lua +78 -0
  69. package/engine/object-field/ability.lua +2 -2
  70. package/engine/object-field/item.d.ts +22 -0
  71. package/engine/object-field/item.lua +118 -0
  72. package/engine/object-field/unit.d.ts +7 -4
  73. package/engine/object-field/unit.lua +4 -0
  74. package/engine/object-field.d.ts +3 -1
  75. package/engine/object-field.lua +177 -119
  76. package/engine/random.d.ts +1 -0
  77. package/engine/random.lua +8 -0
  78. package/engine/standard/fields/item.d.ts +4 -0
  79. package/engine/standard/fields/item.lua +6 -0
  80. package/engine/standard/fields/unit.d.ts +11 -5
  81. package/engine/standard/fields/unit.lua +13 -4
  82. package/engine/unit.d.ts +3 -0
  83. package/engine/unit.lua +3 -0
  84. package/lualib_bundle.lua +1 -1
  85. package/math.d.ts +2 -0
  86. package/math.lua +14 -0
  87. package/objutil/buff.lua +9 -7
  88. package/objutil/object.lua +1 -1
  89. package/operation.lua +1 -4
  90. package/package.json +5 -5
  91. package/patch-lua.lua +15 -0
  92. package/utility/linked-map.d.ts +35 -0
  93. package/utility/linked-map.lua +107 -0
  94. package/utility/linked-set.d.ts +3 -1
  95. package/utility/linked-set.lua +27 -0
  96. package/utility/records.lua +20 -1
  97. package/utility/unordered-map.d.ts +27 -0
  98. package/utility/unordered-map.lua +99 -0
  99. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  100. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  101. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  102. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/objutil/buff.lua CHANGED
@@ -29,6 +29,8 @@ local ____timer = require("core.types.timer")
29
29
  local Timer = ____timer.Timer
30
30
  local ____exception = require("exception")
31
31
  local IllegalStateException = ____exception.IllegalStateException
32
+ local ____linked_2Dmap = require("utility.linked-map")
33
+ local LinkedMap = ____linked_2Dmap.LinkedMap
32
34
  local ____assert = _G.assert
33
35
  local ____pairs = _G.pairs
34
36
  ____exports.BuffDefinition = __TS__Class()
@@ -461,7 +463,7 @@ local buffs = setmetatable(
461
463
  {
462
464
  __mode = "k",
463
465
  __index = function(self, unit)
464
- local ____table = {}
466
+ local ____table = __TS__New(LinkedMap)
465
467
  self[unit] = ____table
466
468
  return ____table
467
469
  end
@@ -494,7 +496,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
494
496
  end
495
497
  local constructor = self.constructor
496
498
  local instances = buffs[unit]
497
- local instance = instances[constructor]
499
+ local instance = instances:get(constructor)
498
500
  if instance then
499
501
  instance:destroy()
500
502
  if not instance.destroyed then
@@ -507,7 +509,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
507
509
  )
508
510
  end
509
511
  end
510
- instances[constructor] = self
512
+ instances:put(constructor, self)
511
513
  if preset then
512
514
  local unitHandle = unit.handle
513
515
  local slowPoisonMethod = not preset.positive and not preset.magic
@@ -586,13 +588,13 @@ function Buff.apply(self, ...)
586
588
  end
587
589
  end
588
590
  function Buff.getInstance(self, unit)
589
- return buffs[unit][self]
591
+ return buffs[unit]:get(self)
590
592
  end
591
593
  function Buff.isApplied(self, unit)
592
- return buffs[unit][self] ~= nil
594
+ return buffs[unit]:get(self) ~= nil
593
595
  end
594
596
  function Buff.ifApplied(self, unit, action)
595
- local instance = buffs[unit][self]
597
+ local instance = buffs[unit]:get(self)
596
598
  if instance then
597
599
  ____assert(__TS__InstanceOf(instance, self))
598
600
  action(instance)
@@ -615,7 +617,7 @@ function Buff.prototype.destroy(self)
615
617
  if self.preset then
616
618
  self.unit:removeAbility(self.preset.buffId)
617
619
  end
618
- buffs[self.unit][self.constructor] = nil
620
+ buffs[self.unit]:remove(self.constructor)
619
621
  self.destroyed = true
620
622
  end
621
623
  function Buff.prototype.onDispel(self, source)
@@ -153,7 +153,7 @@ end
153
153
  function ObjectDefinition.getLevelArrayFieldValue(self, level, value, values)
154
154
  return type(values) == "function" and values(level, value) or (__TS__ArrayIsArray(values[1]) and values[1] or values)
155
155
  end
156
- ____exports.ObjectType = ObjectType or ({})
156
+ ____exports.ObjectType = ____exports.ObjectType or ({})
157
157
  ____exports.ObjectType.ABILITY = 0
158
158
  ____exports.ObjectType[____exports.ObjectType.ABILITY] = "ABILITY"
159
159
  ____exports.ObjectType.ITEM = 1
package/operation.lua CHANGED
@@ -22,10 +22,7 @@ OperationMonitor.name = "OperationMonitor"
22
22
  __TS__ClassExtends(OperationMonitor, __TS__Promise)
23
23
  function OperationMonitor.prototype.____constructor(self, operation, ...)
24
24
  local args = {...}
25
- __TS__Promise.prototype.____constructor(
26
- self,
27
- table.unpack(args)
28
- )
25
+ __TS__Promise.prototype.____constructor(self, ...)
29
26
  self.o = operation
30
27
  end
31
28
  function OperationMonitor.prototype.cancel(self)
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.87b6c38",
4
+ "version": "0.0.1-dev.8895725",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,13 +22,13 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@warscript/language-extensions": "^0.0.1",
25
- "@warscript/tstl-plugin": "^0.0.4",
25
+ "@warscript/tstl-plugin": "^0.0.6",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.efd0770"
27
+ "warpack": "0.0.1-dev.e490aaf"
28
28
  },
29
29
  "devDependencies": {
30
- "@typescript-eslint/eslint-plugin": "^8.13.0",
31
- "@typescript-eslint/parser": "^8.13.0",
30
+ "@typescript-eslint/eslint-plugin": "^8.61.1",
31
+ "@typescript-eslint/parser": "^8.61.1",
32
32
  "async": "^3.2.6",
33
33
  "copyfiles": "^2.4.1",
34
34
  "eslint": "^9.14.0",
package/patch-lua.lua CHANGED
@@ -1,5 +1,9 @@
1
+ local error = _G.error
1
2
  local getmetatable = _G.getmetatable
2
3
  local ipairs = _G.ipairs
4
+ local select = _G.select
5
+ local tostring = _G.tostring
6
+ local tableconcat = table.concat
3
7
 
4
8
  _G.ipairs = function(t)
5
9
  local metatable = getmetatable(t)
@@ -8,3 +12,14 @@ _G.ipairs = function(t)
8
12
  end
9
13
  return ipairs(t)
10
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
@@ -0,0 +1,35 @@
1
+ /** @noSelfInFile */
2
+ import { ReadonlyLinkedSet } from "./linked-set";
3
+ type IteratorState<K extends AnyNotNil, V> = {
4
+ n?: K;
5
+ t: LuaMap<K, K>;
6
+ v: LuaMap<K, V>;
7
+ };
8
+ type OneSidedTypeGuard = {
9
+ readonly __oneSidedTypeGuard: unique symbol;
10
+ };
11
+ export interface ReadonlyLinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
12
+ readonly keys: ReadonlyLinkedSet<K>;
13
+ get(key: K): V | undefined;
14
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
15
+ readonly size: number;
16
+ }
17
+ export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
18
+ readonly __linkedMap: unique symbol;
19
+ }
20
+ export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinkedMap<K, V> {
21
+ private k;
22
+ private v;
23
+ get keys(): ReadonlyLinkedSet<K>;
24
+ get(key: K): V | undefined;
25
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
26
+ put(key: K, value: V): void;
27
+ remove(key: K): boolean;
28
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
29
+ get size(): number;
30
+ protected __len(): number;
31
+ protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
32
+ }
33
+ export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
34
+ export declare const mutableLinkedMap: <K extends AnyNotNil, V>() => LinkedMap<K, V>;
35
+ export {};
@@ -0,0 +1,107 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
6
+ local ____exports = {}
7
+ local ____linked_2Dset = require("utility.linked-set")
8
+ local LinkedSet = ____linked_2Dset.LinkedSet
9
+ local ____exception = require("exception")
10
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
11
+ local function linkedMapNext(state)
12
+ local n = state.n
13
+ state.n = state.t[n]
14
+ return n, state.v[n]
15
+ end
16
+ ____exports.LinkedMap = __TS__Class()
17
+ local LinkedMap = ____exports.LinkedMap
18
+ LinkedMap.name = "LinkedMap"
19
+ function LinkedMap.prototype.____constructor(self)
20
+ self.k = __TS__New(LinkedSet)
21
+ self.v = {}
22
+ end
23
+ function LinkedMap.prototype.get(self, key)
24
+ return self.v[key]
25
+ end
26
+ function LinkedMap.prototype.getOrPut(self, key, defaultValue)
27
+ local value = self.v[key]
28
+ if value ~= nil then
29
+ return value
30
+ end
31
+ value = defaultValue()
32
+ self.k:add(key)
33
+ self.v[key] = value
34
+ return value
35
+ end
36
+ function LinkedMap.prototype.put(self, key, value)
37
+ self.k:add(key)
38
+ self.v[key] = value
39
+ end
40
+ function LinkedMap.prototype.remove(self, key)
41
+ if self.k:remove(key) then
42
+ self.v[key] = nil
43
+ return true
44
+ end
45
+ return false
46
+ end
47
+ function LinkedMap.prototype.contains(self, key)
48
+ return self.keys:contains(key)
49
+ end
50
+ function LinkedMap.prototype.__len(self)
51
+ return self.keys.size
52
+ end
53
+ function LinkedMap.prototype.__pairs(self)
54
+ return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
55
+ end
56
+ __TS__SetDescriptor(
57
+ LinkedMap.prototype,
58
+ "keys",
59
+ {get = function(self)
60
+ return self.k
61
+ end},
62
+ true
63
+ )
64
+ __TS__SetDescriptor(
65
+ LinkedMap.prototype,
66
+ "size",
67
+ {get = function(self)
68
+ return self.keys.size
69
+ end},
70
+ true
71
+ )
72
+ local emptyIteratorState = {t = {}, v = {}}
73
+ local EmptyLinkedMap = __TS__Class()
74
+ EmptyLinkedMap.name = "EmptyLinkedMap"
75
+ __TS__ClassExtends(EmptyLinkedMap, ____exports.LinkedMap)
76
+ function EmptyLinkedMap.prototype.getOrPut(self)
77
+ error(
78
+ __TS__New(UnsupportedOperationException),
79
+ 0
80
+ )
81
+ end
82
+ function EmptyLinkedMap.prototype.put(self)
83
+ error(
84
+ __TS__New(UnsupportedOperationException),
85
+ 0
86
+ )
87
+ end
88
+ function EmptyLinkedMap.prototype.remove(self)
89
+ error(
90
+ __TS__New(UnsupportedOperationException),
91
+ 0
92
+ )
93
+ end
94
+ function EmptyLinkedMap.prototype.__len(self)
95
+ return 0
96
+ end
97
+ function EmptyLinkedMap.prototype.__pairs(self)
98
+ return linkedMapNext, emptyIteratorState, nil
99
+ end
100
+ local EMPTY_LINKED_MAP = __TS__New(EmptyLinkedMap)
101
+ ____exports.emptyLinkedMap = function()
102
+ return EMPTY_LINKED_MAP
103
+ end
104
+ ____exports.mutableLinkedMap = function()
105
+ return __TS__New(____exports.LinkedMap)
106
+ end
107
+ return ____exports
@@ -14,7 +14,7 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
14
14
  next(key: T): T | undefined;
15
15
  previous(key: T): T | undefined;
16
16
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
17
- size: number;
17
+ readonly size: number;
18
18
  forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
19
19
  toArray(): T[];
20
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
@@ -40,6 +40,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
40
40
  next(key: T): T | undefined;
41
41
  previous(key: T): T | undefined;
42
42
  add(key: T): boolean;
43
+ protected addBefore(value: T, key: T): boolean;
43
44
  remove(key: T): boolean;
44
45
  contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
45
46
  clear(): void;
@@ -48,6 +49,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
48
49
  toArray(): T[];
49
50
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
50
51
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
52
+ protected __len(): number;
51
53
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
52
54
  }
53
55
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
@@ -85,6 +85,23 @@ function LinkedSet.prototype.add(self, key)
85
85
  end
86
86
  return true
87
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
88
105
  function LinkedSet.prototype.remove(self, key)
89
106
  local n = self.n
90
107
  local next = n[key]
@@ -171,6 +188,9 @@ function LinkedSet.prototype.sortBy(self, selector)
171
188
  self.f = array[1]
172
189
  self.l = array[s]
173
190
  end
191
+ function LinkedSet.prototype.__len(self)
192
+ return self.s
193
+ end
174
194
  function LinkedSet.prototype.__pairs(self)
175
195
  return linkedSetNext, {t = self.n, n = self.f}, nil
176
196
  end
@@ -182,6 +202,7 @@ __TS__SetDescriptor(
182
202
  end},
183
203
  true
184
204
  )
205
+ local emptyIteratorState = {t = {}}
185
206
  local EmptyLinkedSet = __TS__Class()
186
207
  EmptyLinkedSet.name = "EmptyLinkedSet"
187
208
  __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
@@ -191,6 +212,12 @@ function EmptyLinkedSet.prototype.add(self)
191
212
  0
192
213
  )
193
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
194
221
  local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
195
222
  ____exports.emptyLinkedSet = function()
196
223
  return EMPTY_LINKED_SET
@@ -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
@@ -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