warscript 0.0.1-dev.5dbd5af → 0.0.1-dev.5fb7641

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 (39) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/core/types/order.d.ts +1 -0
  4. package/core/types/order.lua +11 -1
  5. package/engine/behaviour/ability/damage.d.ts +4 -2
  6. package/engine/behaviour/ability/damage.lua +24 -36
  7. package/engine/behaviour/ability/emulate-impact.lua +9 -2
  8. package/engine/behaviour/ability.lua +1 -1
  9. package/engine/behaviour/unit.d.ts +15 -0
  10. package/engine/behaviour/unit.lua +114 -4
  11. package/engine/internal/ability.d.ts +4 -0
  12. package/engine/internal/ability.lua +17 -0
  13. package/engine/internal/item/ability.lua +12 -10
  14. package/engine/internal/item.d.ts +3 -1
  15. package/engine/internal/item.lua +75 -3
  16. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  17. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  18. package/engine/internal/unit/ability.d.ts +5 -0
  19. package/engine/internal/unit/ability.lua +14 -0
  20. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  21. package/engine/internal/unit/allowed-targets.lua +9 -1
  22. package/engine/internal/unit+damage.d.ts +1 -1
  23. package/engine/internal/unit+damage.lua +6 -1
  24. package/engine/internal/unit-missile-launch.lua +1 -1
  25. package/engine/internal/unit.d.ts +12 -2
  26. package/engine/internal/unit.lua +123 -33
  27. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  28. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  29. package/engine/object-field.d.ts +6 -3
  30. package/engine/object-field.lua +85 -73
  31. package/engine/text-tag.d.ts +12 -1
  32. package/engine/text-tag.lua +44 -10
  33. package/package.json +1 -1
  34. package/utility/arrays.d.ts +1 -0
  35. package/utility/arrays.lua +3 -0
  36. package/utility/functions.d.ts +1 -0
  37. package/utility/functions.lua +1 -0
  38. package/utility/lua-maps.d.ts +1 -0
  39. package/utility/lua-maps.lua +4 -0
@@ -23,8 +23,11 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
23
23
  local ____linked_2Dset = require("utility.linked-set")
24
24
  local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
26
27
  local getOrPut = ____lua_2Dmaps.getOrPut
27
28
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
29
+ local ____arrays = require("utility.arrays")
30
+ local emptyArray = ____arrays.emptyArray
28
31
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
29
32
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
30
33
  local objectFieldById = {}
@@ -34,7 +37,11 @@ local idGenerator = __TS__New(
34
37
  )
35
38
  local ObjectFieldBase = __TS__Class()
36
39
  ObjectFieldBase.name = "ObjectFieldBase"
37
- function ObjectFieldBase.prototype.____constructor(self, id)
40
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
41
+ if isGlobal == nil then
42
+ isGlobal = true
43
+ end
44
+ self.isGlobal = isGlobal
38
45
  self.valueByInstance = setmetatable({}, {__mode = "k"})
39
46
  if objectFieldById[id] ~= nil then
40
47
  error(
@@ -53,12 +60,13 @@ function ObjectFieldBase.prototype.supports(self, instance)
53
60
  end
54
61
  function ObjectFieldBase.prototype.hasValue(self, instance)
55
62
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
56
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
63
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
57
64
  end
58
- function ObjectFieldBase.create(self, id)
65
+ function ObjectFieldBase.create(self, id, isGlobal)
59
66
  return __TS__New(
60
67
  self,
61
- id or idGenerator:next()
68
+ id or idGenerator:next(),
69
+ isGlobal
62
70
  )
63
71
  end
64
72
  function ObjectFieldBase.of(self, id)
@@ -185,36 +193,40 @@ function ObjectField.prototype.trySetValue(self, entry, value)
185
193
  end
186
194
  function ObjectField.prototype.getActualValue(self, instance)
187
195
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
188
- if defaultValueByObjectDataEntryId ~= nil then
189
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
190
- if defaultValue ~= nil then
196
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
+ if defaultValue ~= nil or self.isGlobal then
191
199
  local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
192
200
  if ____self_valueByInstance_instance_0 == nil then
193
201
  ____self_valueByInstance_instance_0 = defaultValue
194
202
  end
195
- return ____self_valueByInstance_instance_0
203
+ local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
204
+ if ____self_valueByInstance_instance_0_1 == nil then
205
+ ____self_valueByInstance_instance_0_1 = self.defaultValue
206
+ end
207
+ return ____self_valueByInstance_instance_0_1
196
208
  end
197
209
  end
198
- local ____temp_1 = self:getNativeFieldValue(instance)
199
- if ____temp_1 == nil then
200
- ____temp_1 = self.defaultValue
210
+ local ____temp_2 = self:getNativeFieldValue(instance)
211
+ if ____temp_2 == nil then
212
+ ____temp_2 = self.defaultValue
201
213
  end
202
- return ____temp_1
214
+ return ____temp_2
203
215
  end
204
216
  function ObjectField.prototype.setActualValue(self, instance, value)
205
217
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
206
- if defaultValueByObjectDataEntryId ~= nil then
207
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
208
- if defaultValue ~= nil then
209
- local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
210
- if ____self_valueByInstance_instance_2 == nil then
211
- ____self_valueByInstance_instance_2 = defaultValue
218
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
219
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
220
+ if defaultValue ~= nil or self.isGlobal then
221
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
222
+ if ____self_valueByInstance_instance_3 == nil then
223
+ ____self_valueByInstance_instance_3 = defaultValue
212
224
  end
213
- local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
214
- if ____self_valueByInstance_instance_2_3 == nil then
215
- ____self_valueByInstance_instance_2_3 = self.defaultValue
225
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
226
+ if ____self_valueByInstance_instance_3_4 == nil then
227
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
216
228
  end
217
- local previousValue = ____self_valueByInstance_instance_2_3
229
+ local previousValue = ____self_valueByInstance_instance_3_4
218
230
  if value ~= previousValue then
219
231
  self.valueByInstance[instance] = value
220
232
  self:invokeValueChangeEvent(instance, self, previousValue, value)
@@ -235,10 +247,10 @@ function ObjectField.prototype.setActualValue(self, instance, value)
235
247
  return true
236
248
  end
237
249
  function ObjectField.prototype.calculateActualValue(self, instance)
238
- local ____opt_4 = self.originalValueByInstance
239
- local originalValue = ____opt_4 and ____opt_4[instance]
240
- local ____opt_6 = self.modifiersByInstance
241
- local modifiers = ____opt_6 and ____opt_6[instance]
250
+ local ____opt_5 = self.originalValueByInstance
251
+ local originalValue = ____opt_5 and ____opt_5[instance]
252
+ local ____opt_7 = self.modifiersByInstance
253
+ local modifiers = ____opt_7 and ____opt_7[instance]
242
254
  if originalValue ~= nil then
243
255
  local value = originalValue
244
256
  if modifiers ~= nil then
@@ -303,37 +315,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
303
315
  if defaultValueByObjectDataEntryId ~= nil then
304
316
  local value = defaultValueByObjectDataEntryId[entry.id]
305
317
  if value ~= nil then
306
- local ____temp_9
318
+ local ____temp_10
307
319
  if index == nil then
308
- ____temp_9 = value
320
+ ____temp_10 = value
309
321
  else
310
- local ____value_index_8 = value[index + 1]
311
- if ____value_index_8 == nil then
312
- ____value_index_8 = self.defaultValue
322
+ local ____value_index_9 = value[index + 1]
323
+ if ____value_index_9 == nil then
324
+ ____value_index_9 = self.defaultValue
313
325
  end
314
- ____temp_9 = ____value_index_8
326
+ ____temp_10 = ____value_index_9
315
327
  end
316
- return ____temp_9
328
+ return ____temp_10
317
329
  end
318
330
  end
319
331
  return index == nil and ({}) or self.defaultValue
320
332
  end
321
333
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
322
- if defaultValueByObjectDataEntryId ~= nil then
323
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
324
- if defaultValue ~= nil then
325
- local value = self.valueByInstance[entry] or defaultValue
326
- local ____temp_11
334
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
335
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
336
+ if defaultValue ~= nil or self.isGlobal then
337
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
338
+ local ____temp_12
327
339
  if index == nil then
328
- ____temp_11 = value
340
+ ____temp_12 = value
329
341
  else
330
- local ____value_index_10 = value[index + 1]
331
- if ____value_index_10 == nil then
332
- ____value_index_10 = self.defaultValue
342
+ local ____value_index_11 = value[index + 1]
343
+ if ____value_index_11 == nil then
344
+ ____value_index_11 = self.defaultValue
333
345
  end
334
- ____temp_11 = ____value_index_10
346
+ ____temp_12 = ____value_index_11
335
347
  end
336
- return ____temp_11
348
+ return ____temp_12
337
349
  end
338
350
  end
339
351
  if index ~= nil then
@@ -378,36 +390,36 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
378
390
  if defaultValueByObjectDataEntryId ~= nil then
379
391
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
380
392
  if valueByLevel ~= nil then
381
- local ____valueByLevel_index_12 = valueByLevel[level + 1]
382
- if ____valueByLevel_index_12 == nil then
383
- ____valueByLevel_index_12 = self.defaultValue
393
+ local ____valueByLevel_index_13 = valueByLevel[level + 1]
394
+ if ____valueByLevel_index_13 == nil then
395
+ ____valueByLevel_index_13 = self.defaultValue
384
396
  end
385
- return ____valueByLevel_index_12
397
+ return ____valueByLevel_index_13
386
398
  end
387
399
  end
388
400
  return self.defaultValue
389
401
  end
390
402
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
391
- if defaultValueByObjectDataEntryId ~= nil then
392
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
393
- if defaultValueByLevel ~= nil then
394
- local ____opt_13 = self.valueByInstance[entry]
395
- local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
396
- if ____temp_15 == nil then
397
- ____temp_15 = defaultValueByLevel[level + 1]
403
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
404
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
405
+ if defaultValueByLevel ~= nil or self.isGlobal then
406
+ local ____opt_14 = self.valueByInstance[entry]
407
+ local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
408
+ if ____temp_16 == nil then
409
+ ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
398
410
  end
399
- local ____temp_15_16 = ____temp_15
400
- if ____temp_15_16 == nil then
401
- ____temp_15_16 = self.defaultValue
411
+ local ____temp_16_17 = ____temp_16
412
+ if ____temp_16_17 == nil then
413
+ ____temp_16_17 = self.defaultValue
402
414
  end
403
- return ____temp_15_16
415
+ return ____temp_16_17
404
416
  end
405
417
  end
406
- local ____temp_17 = self:getNativeFieldValue(entry, level)
407
- if ____temp_17 == nil then
408
- ____temp_17 = self.defaultValue
418
+ local ____temp_18 = self:getNativeFieldValue(entry, level)
419
+ if ____temp_18 == nil then
420
+ ____temp_18 = self.defaultValue
409
421
  end
410
- return ____temp_17
422
+ return ____temp_18
411
423
  end
412
424
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
413
425
  if value == nil then
@@ -448,23 +460,23 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
448
460
  return true
449
461
  end
450
462
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
451
- if defaultValueByObjectDataEntryId ~= nil then
452
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
453
- if defaultValueByLevel ~= nil then
463
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
464
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
465
+ if defaultValueByLevel ~= nil or self.isGlobal then
454
466
  local valueByLevel = self.valueByInstance[entry]
455
467
  if valueByLevel == nil then
456
468
  valueByLevel = {}
457
469
  self.valueByInstance[entry] = valueByLevel
458
470
  end
459
- local ____valueByLevel_index_18 = valueByLevel[level + 1]
460
- if ____valueByLevel_index_18 == nil then
461
- ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
471
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
472
+ if ____valueByLevel_index_19 == nil then
473
+ ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
462
474
  end
463
- local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
464
- if ____valueByLevel_index_18_19 == nil then
465
- ____valueByLevel_index_18_19 = self.defaultValue
475
+ local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
476
+ if ____valueByLevel_index_19_20 == nil then
477
+ ____valueByLevel_index_19_20 = self.defaultValue
466
478
  end
467
- local previousValue = ____valueByLevel_index_18_19
479
+ local previousValue = ____valueByLevel_index_19_20
468
480
  if value ~= previousValue then
469
481
  valueByLevel[level + 1] = value
470
482
  self:invokeValueChangeEvent(
@@ -1,5 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Color } from "../core/types/color";
3
+ import { Unit } from "./internal/unit";
4
+ import { AbstractDestroyable, Destructor } from "../destroyable";
3
5
  export type TextTagPreset = {
4
6
  fadepoint: number;
5
7
  lifespan: number;
@@ -10,9 +12,16 @@ export type TextTagPreset = {
10
12
  velocityY: number;
11
13
  color: Color;
12
14
  };
13
- export declare class TextTag {
15
+ declare const enum TextTagPropertyKey {
16
+ UNIT = 100,
17
+ CONFIGURATION = 101
18
+ }
19
+ export declare class TextTag extends AbstractDestroyable {
14
20
  private readonly handle;
21
+ private [TextTagPropertyKey.UNIT]?;
22
+ private [TextTagPropertyKey.CONFIGURATION]?;
15
23
  private constructor();
24
+ protected onDestroy(): Destructor;
16
25
  static BASE: Readonly<TextTagPreset>;
17
26
  static BASH: Readonly<TextTagPreset>;
18
27
  static CRITICAL_STRIKE: Readonly<TextTagPreset>;
@@ -22,4 +31,6 @@ export declare class TextTag {
22
31
  static MISS: Readonly<TextTagPreset>;
23
32
  static SHADOW_STRIKE: Readonly<TextTagPreset>;
24
33
  static flash(configuration: Readonly<TextTagPreset>, text: string, x: number, y: number, z?: number): void;
34
+ static create(configuration: Readonly<TextTagPreset>, text: string, unit: Unit): TextTag;
25
35
  }
36
+ export {};
@@ -1,9 +1,15 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__New = ____lualib.__TS__New
3
5
  local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
4
6
  local ____exports = {}
5
7
  local ____color = require("core.types.color")
6
8
  local Color = ____color.Color
9
+ local ____timer = require("core.types.timer")
10
+ local Timer = ____timer.Timer
11
+ local ____destroyable = require("destroyable")
12
+ local AbstractDestroyable = ____destroyable.AbstractDestroyable
7
13
  local createTextTag = CreateTextTag
8
14
  local destroyTextTag = DestroyTextTag
9
15
  local setTextTagText = SetTextTagText
@@ -18,16 +24,7 @@ local setTextTagAge = SetTextTagAge
18
24
  local setTextTagLifespan = SetTextTagLifespan
19
25
  local setTextTagFadepoint = SetTextTagFadepoint
20
26
  local DEFAULT_FONT_SIZE = 0.024
21
- ____exports.TextTag = __TS__Class()
22
- local TextTag = ____exports.TextTag
23
- TextTag.name = "TextTag"
24
- function TextTag.prototype.____constructor(self, handle)
25
- self.handle = handle
26
- end
27
- function TextTag.flash(self, configuration, text, x, y, z)
28
- local textTag = createTextTag()
29
- setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
30
- setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
27
+ local function applyConfiguration(textTag, configuration)
31
28
  setTextTagFadepoint(textTag, configuration.fadepoint)
32
29
  setTextTagLifespan(textTag, configuration.lifespan)
33
30
  local color = configuration.color
@@ -42,6 +39,38 @@ function TextTag.flash(self, configuration, text, x, y, z)
42
39
  setTextTagPermanent(textTag, false)
43
40
  setTextTagVisibility(textTag, true)
44
41
  end
42
+ local unitTextTags = setmetatable({}, {__mode = "k"})
43
+ ____exports.TextTag = __TS__Class()
44
+ local TextTag = ____exports.TextTag
45
+ TextTag.name = "TextTag"
46
+ __TS__ClassExtends(TextTag, AbstractDestroyable)
47
+ function TextTag.prototype.____constructor(self, handle)
48
+ AbstractDestroyable.prototype.____constructor(self)
49
+ self.handle = handle
50
+ end
51
+ function TextTag.prototype.onDestroy(self)
52
+ destroyTextTag(self.handle)
53
+ unitTextTags[self] = nil
54
+ return AbstractDestroyable.prototype.onDestroy(self)
55
+ end
56
+ function TextTag.flash(self, configuration, text, x, y, z)
57
+ local textTag = createTextTag()
58
+ setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
59
+ setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
60
+ applyConfiguration(textTag, configuration)
61
+ end
62
+ function TextTag.create(self, configuration, text, unit)
63
+ local handle = createTextTag()
64
+ setTextTagText(handle, text, DEFAULT_FONT_SIZE)
65
+ setTextTagPosUnit(handle, unit.handle, configuration.offsetZ)
66
+ applyConfiguration(handle, configuration)
67
+ setTextTagPermanent(handle, true)
68
+ local textTag = __TS__New(____exports.TextTag, handle)
69
+ textTag[100] = unit.handle
70
+ textTag[101] = configuration
71
+ unitTextTags[textTag] = true
72
+ return textTag
73
+ end
45
74
  TextTag.BASE = {
46
75
  fadepoint = 2,
47
76
  lifespan = 3,
@@ -106,4 +135,9 @@ TextTag.SHADOW_STRIKE = __TS__ObjectAssign(
106
135
  lifespan = 5
107
136
  }
108
137
  )
138
+ Timer.onPeriod[1 / 64]:addListener(function()
139
+ for textTag in pairs(unitTextTags) do
140
+ setTextTagPosUnit(textTag.handle, textTag[100], textTag[101].offsetZ)
141
+ end
142
+ end)
109
143
  return ____exports
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.5dbd5af",
4
+ "version": "0.0.1-dev.5fb7641",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,6 +22,7 @@ export declare const mapToLuaSet: {
22
22
  <T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
23
23
  <T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
24
24
  };
25
+ export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
25
26
  export declare const flatMap: {
26
27
  <T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
27
28
  <T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
3
3
  local ____exports = {}
4
4
  local ____exception = require("exception")
5
5
  local IllegalArgumentException = ____exception.IllegalArgumentException
6
+ local ____functions = require("utility.functions")
7
+ local identity = ____functions.identity
6
8
  local mathMax = math.max
7
9
  local mathMin = math.min
8
10
  local select = _G.select
@@ -120,6 +122,7 @@ ____exports.mapToLuaSet = function(array, transform)
120
122
  end
121
123
  return result
122
124
  end
125
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
123
126
  ____exports.flatMap = function(array, transform)
124
127
  local result = {}
125
128
  local k = 1
@@ -3,3 +3,4 @@ export declare const apply: {
3
3
  <T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
+ export declare const identity: <T>(value: T) => T;
@@ -87,4 +87,5 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
90
91
  return ____exports
@@ -1,5 +1,6 @@
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>;
@@ -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