warscript 0.0.1-dev.e561d29 → 0.0.1-dev.e5e97e8
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.
- package/attributes.d.ts +1 -0
- package/attributes.lua +9 -0
- package/core/types/frame.lua +24 -21
- package/core/types/player.d.ts +15 -0
- package/core/types/player.lua +56 -14
- package/core/types/playerCamera.d.ts +2 -0
- package/core/types/playerCamera.lua +123 -5
- package/core/types/tileCell.d.ts +9 -0
- package/core/types/tileCell.lua +92 -0
- package/core/types/timer.d.ts +3 -2
- package/core/types/timer.lua +22 -2
- package/decl/native.d.ts +2 -2
- package/engine/behavior.d.ts +3 -0
- package/engine/behavior.lua +53 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -0
- package/engine/behaviour/ability/restore-mana.d.ts +1 -1
- package/engine/behaviour/ability/restore-mana.lua +6 -6
- package/engine/behaviour/unit/stun-immunity.d.ts +2 -0
- package/engine/behaviour/unit/stun-immunity.lua +11 -2
- package/engine/behaviour/unit.d.ts +8 -2
- package/engine/behaviour/unit.lua +29 -2
- package/engine/buff.d.ts +0 -3
- package/engine/buff.lua +64 -85
- package/engine/internal/ability.d.ts +3 -1
- package/engine/internal/ability.lua +26 -9
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +13 -15
- package/engine/internal/item.lua +63 -49
- package/engine/internal/misc/frame-coordinates.d.ts +2 -0
- package/engine/internal/misc/frame-coordinates.lua +21 -0
- package/engine/internal/misc/get-terrain-z.d.ts +2 -0
- package/engine/internal/misc/get-terrain-z.lua +11 -0
- package/engine/internal/misc/player-local-handle.d.ts +2 -0
- package/engine/internal/misc/player-local-handle.lua +5 -0
- package/engine/internal/unit/ability.d.ts +14 -14
- package/engine/internal/unit/ability.lua +72 -45
- package/engine/internal/unit/main-selected.lua +12 -27
- package/engine/internal/unit+ability.lua +10 -1
- package/engine/internal/unit-missile-launch.lua +44 -20
- package/engine/internal/unit.d.ts +16 -9
- package/engine/internal/unit.lua +102 -54
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -0
- package/engine/object-data/entry/ability-type.lua +4 -1
- package/engine/object-field/ability.d.ts +3 -3
- package/engine/object-field/ability.lua +7 -6
- package/engine/object-field.d.ts +8 -2
- package/engine/object-field.lua +184 -93
- package/engine/random.d.ts +9 -0
- package/engine/random.lua +13 -0
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.d.ts +1 -1
- package/engine/text-tag.lua +92 -17
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +1 -1
- package/package.json +2 -2
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +1 -0
- package/utility/arrays.lua +8 -0
- package/utility/callback-array.d.ts +17 -0
- package/utility/callback-array.lua +61 -0
- package/utility/functions.d.ts +2 -0
- package/utility/functions.lua +7 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +19 -1
- package/utility/lua-maps.d.ts +11 -2
- package/utility/lua-maps.lua +33 -2
- package/utility/lua-sets.d.ts +1 -0
- package/utility/lua-sets.lua +4 -0
- package/utility/types.d.ts +3 -0
package/engine/text-tag.lua
CHANGED
|
@@ -11,6 +11,12 @@ local ____timer = require("core.types.timer")
|
|
|
11
11
|
local Timer = ____timer.Timer
|
|
12
12
|
local ____destroyable = require("destroyable")
|
|
13
13
|
local AbstractDestroyable = ____destroyable.AbstractDestroyable
|
|
14
|
+
local ____playerCamera = require("core.types.playerCamera")
|
|
15
|
+
local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
|
|
16
|
+
local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
|
|
17
|
+
local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
|
|
18
|
+
local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
|
|
19
|
+
local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
|
|
14
20
|
local createTextTag = CreateTextTag
|
|
15
21
|
local destroyTextTag = DestroyTextTag
|
|
16
22
|
local setTextTagText = SetTextTagText
|
|
@@ -24,6 +30,13 @@ local setTextTagPermanent = SetTextTagPermanent
|
|
|
24
30
|
local setTextTagAge = SetTextTagAge
|
|
25
31
|
local setTextTagLifespan = SetTextTagLifespan
|
|
26
32
|
local setTextTagFadepoint = SetTextTagFadepoint
|
|
33
|
+
local isUnitHidden = IsUnitHidden
|
|
34
|
+
local isUnitLoaded = IsUnitLoaded
|
|
35
|
+
local isUnitVisible = IsUnitVisible
|
|
36
|
+
local getUnitFlyHeight = GetUnitFlyHeight
|
|
37
|
+
local getUnitX = GetUnitX
|
|
38
|
+
local getUnitY = GetUnitY
|
|
39
|
+
local unitAlive = UnitAlive
|
|
27
40
|
local DEFAULT_FONT_SIZE = 0.024
|
|
28
41
|
local function applyConfiguration(textTag, configuration)
|
|
29
42
|
setTextTagFadepoint(textTag, configuration.fadepoint)
|
|
@@ -41,6 +54,33 @@ local function applyConfiguration(textTag, configuration)
|
|
|
41
54
|
setTextTagVisibility(textTag, true)
|
|
42
55
|
end
|
|
43
56
|
local unitTextTags = setmetatable({}, {__mode = "k"})
|
|
57
|
+
local function ensureHandle(textTag)
|
|
58
|
+
local handle = textTag[101]
|
|
59
|
+
if handle == nil then
|
|
60
|
+
handle = createTextTag()
|
|
61
|
+
applyConfiguration(handle, textTag[102])
|
|
62
|
+
setTextTagPermanent(handle, true)
|
|
63
|
+
setTextTagText(handle, textTag[103] or "", textTag[104] or DEFAULT_FONT_SIZE)
|
|
64
|
+
local color = textTag[105]
|
|
65
|
+
if color ~= nil then
|
|
66
|
+
setTextTagColor(
|
|
67
|
+
handle,
|
|
68
|
+
color.r,
|
|
69
|
+
color.g,
|
|
70
|
+
color.b,
|
|
71
|
+
color.a
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
local unit = textTag[100]
|
|
75
|
+
if unit ~= nil then
|
|
76
|
+
setTextTagPosUnit(handle, unit.handle, textTag[102].offsetZ)
|
|
77
|
+
else
|
|
78
|
+
setTextTagPos(handle, textTag[106] or 0, textTag[107] or 0, 0)
|
|
79
|
+
end
|
|
80
|
+
textTag[101] = handle
|
|
81
|
+
end
|
|
82
|
+
return handle
|
|
83
|
+
end
|
|
44
84
|
____exports.TextTag = __TS__Class()
|
|
45
85
|
local TextTag = ____exports.TextTag
|
|
46
86
|
TextTag.name = "TextTag"
|
|
@@ -50,7 +90,11 @@ function TextTag.prototype.____constructor(self, handle)
|
|
|
50
90
|
self[101] = handle
|
|
51
91
|
end
|
|
52
92
|
function TextTag.prototype.onDestroy(self)
|
|
53
|
-
|
|
93
|
+
local handle = self[101]
|
|
94
|
+
if handle ~= nil then
|
|
95
|
+
destroyTextTag(handle)
|
|
96
|
+
self[101] = nil
|
|
97
|
+
end
|
|
54
98
|
unitTextTags[self] = nil
|
|
55
99
|
return AbstractDestroyable.prototype.onDestroy(self)
|
|
56
100
|
end
|
|
@@ -61,14 +105,11 @@ function TextTag.flash(self, configuration, text, x, y, z)
|
|
|
61
105
|
applyConfiguration(textTag, configuration)
|
|
62
106
|
end
|
|
63
107
|
function TextTag.create(self, configuration, text, unit)
|
|
64
|
-
local
|
|
65
|
-
|
|
66
|
-
setTextTagPosUnit(handle, unit.handle, configuration.offsetZ)
|
|
67
|
-
applyConfiguration(handle, configuration)
|
|
68
|
-
setTextTagPermanent(handle, true)
|
|
69
|
-
local textTag = __TS__New(____exports.TextTag, handle)
|
|
108
|
+
local textTag = __TS__New(____exports.TextTag)
|
|
109
|
+
textTag[103] = text
|
|
70
110
|
textTag[100] = unit
|
|
71
111
|
textTag[102] = configuration
|
|
112
|
+
ensureHandle(textTag)
|
|
72
113
|
unitTextTags[textTag] = true
|
|
73
114
|
return textTag
|
|
74
115
|
end
|
|
@@ -80,7 +121,11 @@ __TS__SetDescriptor(
|
|
|
80
121
|
return self[103] or ""
|
|
81
122
|
end,
|
|
82
123
|
set = function(self, text)
|
|
83
|
-
setTextTagText(
|
|
124
|
+
setTextTagText(
|
|
125
|
+
ensureHandle(self),
|
|
126
|
+
text,
|
|
127
|
+
self[104] or DEFAULT_FONT_SIZE
|
|
128
|
+
)
|
|
84
129
|
self[103] = text
|
|
85
130
|
end
|
|
86
131
|
},
|
|
@@ -94,7 +139,11 @@ __TS__SetDescriptor(
|
|
|
94
139
|
return self[104] or DEFAULT_FONT_SIZE
|
|
95
140
|
end,
|
|
96
141
|
set = function(self, fontSize)
|
|
97
|
-
setTextTagText(
|
|
142
|
+
setTextTagText(
|
|
143
|
+
ensureHandle(self),
|
|
144
|
+
self[103] or "",
|
|
145
|
+
fontSize
|
|
146
|
+
)
|
|
98
147
|
self[104] = fontSize
|
|
99
148
|
end
|
|
100
149
|
},
|
|
@@ -109,7 +158,7 @@ __TS__SetDescriptor(
|
|
|
109
158
|
end,
|
|
110
159
|
set = function(self, color)
|
|
111
160
|
setTextTagColor(
|
|
112
|
-
self
|
|
161
|
+
ensureHandle(self),
|
|
113
162
|
color.r,
|
|
114
163
|
color.g,
|
|
115
164
|
color.b,
|
|
@@ -129,7 +178,11 @@ __TS__SetDescriptor(
|
|
|
129
178
|
end,
|
|
130
179
|
set = function(self, unit)
|
|
131
180
|
if unit ~= nil then
|
|
132
|
-
setTextTagPosUnit(
|
|
181
|
+
setTextTagPosUnit(
|
|
182
|
+
ensureHandle(self),
|
|
183
|
+
unit.handle,
|
|
184
|
+
0
|
|
185
|
+
)
|
|
133
186
|
self[106] = nil
|
|
134
187
|
self[107] = nil
|
|
135
188
|
unitTextTags[self] = true
|
|
@@ -137,7 +190,12 @@ __TS__SetDescriptor(
|
|
|
137
190
|
local unit = self[100]
|
|
138
191
|
local x = unit.x
|
|
139
192
|
local y = unit.y
|
|
140
|
-
setTextTagPos(
|
|
193
|
+
setTextTagPos(
|
|
194
|
+
ensureHandle(self),
|
|
195
|
+
x,
|
|
196
|
+
y,
|
|
197
|
+
0
|
|
198
|
+
)
|
|
141
199
|
self[106] = x
|
|
142
200
|
self[107] = y
|
|
143
201
|
unitTextTags[self] = nil
|
|
@@ -160,14 +218,14 @@ __TS__SetDescriptor(
|
|
|
160
218
|
return ____self__106_2 or 0
|
|
161
219
|
end,
|
|
162
220
|
set = function(self, x)
|
|
163
|
-
local
|
|
221
|
+
local ____ensureHandle_result_6 = ensureHandle(self)
|
|
164
222
|
local ____x_7 = x
|
|
165
223
|
local ____self__107_5 = self[107]
|
|
166
224
|
if ____self__107_5 == nil then
|
|
167
225
|
local ____opt_3 = self[100]
|
|
168
226
|
____self__107_5 = ____opt_3 and ____opt_3.y
|
|
169
227
|
end
|
|
170
|
-
setTextTagPos(
|
|
228
|
+
setTextTagPos(____ensureHandle_result_6, ____x_7, ____self__107_5 or 0, 0)
|
|
171
229
|
self[106] = x
|
|
172
230
|
self[100] = nil
|
|
173
231
|
unitTextTags[self] = nil
|
|
@@ -188,13 +246,13 @@ __TS__SetDescriptor(
|
|
|
188
246
|
return ____self__107_10 or 0
|
|
189
247
|
end,
|
|
190
248
|
set = function(self, y)
|
|
191
|
-
local
|
|
249
|
+
local ____ensureHandle_result_14 = ensureHandle(self)
|
|
192
250
|
local ____self__106_13 = self[106]
|
|
193
251
|
if ____self__106_13 == nil then
|
|
194
252
|
local ____opt_11 = self[100]
|
|
195
253
|
____self__106_13 = ____opt_11 and ____opt_11.x
|
|
196
254
|
end
|
|
197
|
-
setTextTagPos(
|
|
255
|
+
setTextTagPos(____ensureHandle_result_14, ____self__106_13 or 0, y, 0)
|
|
198
256
|
self[107] = y
|
|
199
257
|
self[100] = nil
|
|
200
258
|
unitTextTags[self] = nil
|
|
@@ -268,7 +326,24 @@ TextTag.SHADOW_STRIKE = __TS__ObjectAssign(
|
|
|
268
326
|
)
|
|
269
327
|
Timer.onPeriod[1 / 64]:addListener(function()
|
|
270
328
|
for textTag in pairs(unitTextTags) do
|
|
271
|
-
|
|
329
|
+
local unit = textTag[100].handle
|
|
330
|
+
local x = getUnitX(unit)
|
|
331
|
+
local y = getUnitY(unit)
|
|
332
|
+
local ____, ____, isInView = worldCoordinatesToFrame(
|
|
333
|
+
x,
|
|
334
|
+
y,
|
|
335
|
+
getUnitFlyHeight(unit) + getTerrainZ(x, y)
|
|
336
|
+
)
|
|
337
|
+
if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) and unitAlive(unit) then
|
|
338
|
+
setTextTagPosUnit(
|
|
339
|
+
ensureHandle(textTag),
|
|
340
|
+
unit,
|
|
341
|
+
textTag[102].offsetZ
|
|
342
|
+
)
|
|
343
|
+
elseif textTag[101] ~= nil then
|
|
344
|
+
destroyTextTag(textTag[101])
|
|
345
|
+
textTag[101] = nil
|
|
346
|
+
end
|
|
272
347
|
end
|
|
273
348
|
end)
|
|
274
349
|
return ____exports
|
package/net/socket.lua
CHANGED
|
@@ -28,13 +28,13 @@ function Socket.prototype.____constructor(self)
|
|
|
28
28
|
onReceive[self[0]]:addListener(function(sender, data)
|
|
29
29
|
local chunks = chunksByPlayer[sender]
|
|
30
30
|
if chunks ~= nil then
|
|
31
|
+
chunksByPlayer[sender] = nil
|
|
31
32
|
chunks[#chunks + 1] = data
|
|
32
33
|
Event.invoke(
|
|
33
34
|
self.onMessage,
|
|
34
35
|
sender,
|
|
35
36
|
tableConcat(chunks)
|
|
36
37
|
)
|
|
37
|
-
chunksByPlayer[sender] = nil
|
|
38
38
|
else
|
|
39
39
|
Event.invoke(self.onMessage, sender, data)
|
|
40
40
|
end
|
package/objutil/buff.lua
CHANGED
|
@@ -762,7 +762,7 @@ Unit.onDamaging:addListener(function(source, target, event)
|
|
|
762
762
|
end
|
|
763
763
|
end)
|
|
764
764
|
Unit.itemPickedUpEvent:addListener(function(unit, item)
|
|
765
|
-
if item.
|
|
765
|
+
if item.isPowerUp and item:hasAbility(fourCC("APdi")) then
|
|
766
766
|
end
|
|
767
767
|
end)
|
|
768
768
|
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.
|
|
4
|
+
"version": "0.0.1-dev.e5e97e8",
|
|
5
5
|
"description": "A typescript library for Warcraft III using Warpack.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"warcraft",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@warscript/language-extensions": "^0.0.1",
|
|
25
25
|
"@warscript/tstl-plugin": "^0.0.4",
|
|
26
26
|
"lua-types": "^2.13.1",
|
|
27
|
-
"warpack": "0.0.1-dev.
|
|
27
|
+
"warpack": "0.0.1-dev.251db08"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
package/patch-lualib.lua
CHANGED
|
@@ -3,7 +3,7 @@ local lualib = _G.require("lualib_bundle")
|
|
|
3
3
|
local next = _G.next
|
|
4
4
|
local ____type = _G.type
|
|
5
5
|
lualib.__TS__ArrayIsArray = function(value)
|
|
6
|
-
return ____type(value) == "table" and (value[1] ~= nil or (
|
|
6
|
+
return ____type(value) == "table" and (value[1] ~= nil or (next(value)) == nil) and value.constructor == nil
|
|
7
7
|
end
|
|
8
8
|
local __TS__SetDescriptor = lualib.__TS__SetDescriptor
|
|
9
9
|
lualib.__TS__ObjectDefineProperty = function(target, key, desc)
|
package/utility/arrays.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const joinToString: <T>(array: readonly T[], separator: string, t
|
|
|
5
5
|
export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
|
|
6
6
|
export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
|
|
7
7
|
export declare const toLuaSet: <T extends AnyNotNil>(array: readonly T[]) => LuaSet<T>;
|
|
8
|
+
export declare const contains: <T>(array: readonly T[], element: T) => boolean;
|
|
8
9
|
export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: ((value: T, ...args: Args) => void) | KeysOfType<T, (this: T, ...args: Args) => void>, ...args: Args) => void;
|
|
9
10
|
export declare const all: {
|
|
10
11
|
<T>(array: readonly T[], transform: (value: T) => boolean): boolean;
|
package/utility/arrays.lua
CHANGED
|
@@ -49,6 +49,14 @@ ____exports.toLuaSet = function(array)
|
|
|
49
49
|
end
|
|
50
50
|
return result
|
|
51
51
|
end
|
|
52
|
+
____exports.contains = function(array, element)
|
|
53
|
+
for i = 1, #array do
|
|
54
|
+
if array[i] == element then
|
|
55
|
+
return true
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
return false
|
|
59
|
+
end
|
|
52
60
|
____exports.forEach = function(array, consumerOrKey, ...)
|
|
53
61
|
if type(consumerOrKey) == "function" then
|
|
54
62
|
for i = 1, #array do
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
type Callback = {
|
|
3
|
+
readonly __callback: unique symbol;
|
|
4
|
+
};
|
|
5
|
+
export type CallbackId = number & {
|
|
6
|
+
readonly __callbackId: unique symbol;
|
|
7
|
+
};
|
|
8
|
+
export type CallbackArray = {
|
|
9
|
+
readonly __callbackArray: unique symbol;
|
|
10
|
+
} & Callback[];
|
|
11
|
+
export declare const callbackArray: () => CallbackArray;
|
|
12
|
+
export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): CallbackId;
|
|
13
|
+
export declare function clearCallbacks(this: void, array: CallbackArray): void;
|
|
14
|
+
export declare function consumeCallback(this: void, array: CallbackArray, id: CallbackId): void;
|
|
15
|
+
export declare function consumeCallbacks(this: void, array: CallbackArray): void;
|
|
16
|
+
export declare function invokeCallbacks(this: void, array: CallbackArray): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local safeCall, tableUnpack
|
|
3
|
+
function ____exports.invokeCallbacks(array)
|
|
4
|
+
local length = array[1] or 2
|
|
5
|
+
local i = 2
|
|
6
|
+
while i ~= length do
|
|
7
|
+
local callback = array[i]
|
|
8
|
+
i = i + 1
|
|
9
|
+
local argsCount = array[i]
|
|
10
|
+
i = i + 1
|
|
11
|
+
safeCall(
|
|
12
|
+
callback,
|
|
13
|
+
tableUnpack(array, i, i + argsCount - 1)
|
|
14
|
+
)
|
|
15
|
+
i = i + argsCount
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
safeCall = warpack.safeCall
|
|
19
|
+
local select = _G.select
|
|
20
|
+
local tableMove = table.move
|
|
21
|
+
tableUnpack = table.unpack
|
|
22
|
+
____exports.callbackArray = function() return {} end
|
|
23
|
+
local function doNothing()
|
|
24
|
+
end
|
|
25
|
+
function ____exports.addCallback(array, callback, ...)
|
|
26
|
+
local id = array[1] or 2
|
|
27
|
+
local i = id
|
|
28
|
+
array[i] = callback
|
|
29
|
+
local argsCount = select("#", ...)
|
|
30
|
+
i = i + 1
|
|
31
|
+
array[i] = argsCount
|
|
32
|
+
for j = 1, argsCount do
|
|
33
|
+
i = i + 1
|
|
34
|
+
array[i] = (select(j, ...))
|
|
35
|
+
end
|
|
36
|
+
array[1] = i + 1
|
|
37
|
+
return id
|
|
38
|
+
end
|
|
39
|
+
function ____exports.clearCallbacks(array)
|
|
40
|
+
local length = array[1] or 2
|
|
41
|
+
tableMove(array, length, length + length - 2, 1)
|
|
42
|
+
end
|
|
43
|
+
function ____exports.consumeCallback(array, id)
|
|
44
|
+
local callback = array[id]
|
|
45
|
+
array[id] = doNothing
|
|
46
|
+
id = id + 1
|
|
47
|
+
local argsCount = array[id]
|
|
48
|
+
id = id + 1
|
|
49
|
+
safeCall(
|
|
50
|
+
callback,
|
|
51
|
+
tableUnpack(array, id, id + argsCount - 1)
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
function ____exports.consumeCallbacks(array)
|
|
55
|
+
local length = array[1] or 2
|
|
56
|
+
____exports.invokeCallbacks(array)
|
|
57
|
+
local newLength = array[1] or 2
|
|
58
|
+
tableMove(array, length, length + newLength - 3, 2)
|
|
59
|
+
array[1] = newLength - length + 2
|
|
60
|
+
end
|
|
61
|
+
return ____exports
|
package/utility/functions.d.ts
CHANGED
|
@@ -9,3 +9,5 @@ export declare const secondArgument: <T>(_: unknown, value: T) => T;
|
|
|
9
9
|
export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
|
|
10
10
|
export declare const increment: (value: number) => number;
|
|
11
11
|
export declare const or: (lhs: boolean, rhs: boolean) => boolean;
|
|
12
|
+
export type Transform<T, R> = (<T, R>(value: T) => R) | KeysOfType<T, R>;
|
|
13
|
+
export declare const transform: <T, R>(object: T, transform: Transform<T, R>) => R;
|
package/utility/functions.lua
CHANGED
|
@@ -93,4 +93,11 @@ ____exports.secondArgument = function(_, value) return value end
|
|
|
93
93
|
____exports.thirdArgument = function(_first, _second, value) return value end
|
|
94
94
|
____exports.increment = function(value) return value + 1 end
|
|
95
95
|
____exports["or"] = function(lhs, rhs) return lhs or rhs end
|
|
96
|
+
____exports.transform = function(object, transform)
|
|
97
|
+
if type(transform) == "function" then
|
|
98
|
+
return transform(object)
|
|
99
|
+
else
|
|
100
|
+
return object[transform]
|
|
101
|
+
end
|
|
102
|
+
end
|
|
96
103
|
return ____exports
|
package/utility/linked-set.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ 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;
|
package/utility/linked-set.lua
CHANGED
|
@@ -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
|
|
@@ -107,8 +124,9 @@ function LinkedSet.prototype.forEach(self, action, ...)
|
|
|
107
124
|
local n = self.n
|
|
108
125
|
local c = self.f
|
|
109
126
|
while c ~= nil do
|
|
127
|
+
local next = n[c]
|
|
110
128
|
action(c, ...)
|
|
111
|
-
c =
|
|
129
|
+
c = next
|
|
112
130
|
end
|
|
113
131
|
end
|
|
114
132
|
function LinkedSet.prototype.toArray(self)
|
package/utility/lua-maps.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ export declare const emptyLuaMap: <K extends AnyNotNil, V>() => ReadonlyLuaMap<K
|
|
|
4
4
|
export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
|
|
5
5
|
export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
|
|
6
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>;
|
|
7
|
-
export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap:
|
|
8
|
-
export declare const
|
|
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
|
+
};
|
|
9
18
|
export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
|
package/utility/lua-maps.lua
CHANGED
|
@@ -27,10 +27,41 @@ ____exports.luaMapInvert = function(luaMap)
|
|
|
27
27
|
end
|
|
28
28
|
return invertLuaMap
|
|
29
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
|
|
30
55
|
____exports.mapValues = function(luaMap, transform)
|
|
31
56
|
local result = {}
|
|
32
|
-
|
|
33
|
-
|
|
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
|
|
34
65
|
end
|
|
35
66
|
return result
|
|
36
67
|
end
|
package/utility/lua-sets.d.ts
CHANGED
|
@@ -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>;
|
package/utility/lua-sets.lua
CHANGED
package/utility/types.d.ts
CHANGED
|
@@ -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 {};
|