warscript 0.0.1-dev.632c807 → 0.0.1-dev.a4deb44
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/engine/internal/ability.d.ts +1 -1
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type.d.ts +1 -0
- package/engine/object-data/entry/ability-type.lua +1 -0
- package/engine/object-field/ability.d.ts +7 -5
- package/engine/object-field/ability.lua +6 -0
- package/engine/object-field/unit.d.ts +1 -0
- package/engine/object-field/unit.lua +3 -0
- package/engine/object-field.d.ts +6 -3
- package/engine/object-field.lua +38 -12
- package/exception.d.ts +2 -0
- package/exception.lua +4 -0
- package/package.json +2 -2
- package/utility/arrays.d.ts +1 -1
- package/utility/arrays.lua +4 -1
- package/utility/linked-set.d.ts +20 -6
- package/utility/linked-set.lua +16 -0
|
@@ -12,7 +12,7 @@ interface Fields<K, V> {
|
|
|
12
12
|
interface AbilityLevel {
|
|
13
13
|
realFields: Fields<jabilityreallevelfield, number>;
|
|
14
14
|
}
|
|
15
|
-
type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
15
|
+
export type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
16
16
|
export declare class AbilitySnapshot {
|
|
17
17
|
}
|
|
18
18
|
export declare abstract class Ability extends Handle<jability> {
|
|
@@ -7,7 +7,7 @@ local ____exports = {}
|
|
|
7
7
|
local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
|
|
8
8
|
local AbilityType = ____ability_2Dtype.AbilityType
|
|
9
9
|
local ____arrays = require("utility.arrays")
|
|
10
|
-
local
|
|
10
|
+
local emptyArray = ____arrays.emptyArray
|
|
11
11
|
local map = ____arrays.map
|
|
12
12
|
local ____buff_2Dtype = require("engine.object-data.entry.buff-type")
|
|
13
13
|
local BuffType = ____buff_2Dtype.BuffType
|
|
@@ -78,7 +78,7 @@ __TS__SetDescriptor(
|
|
|
78
78
|
function(levelAbilityUpgrades)
|
|
79
79
|
return levelAbilityUpgrades[i + 1]
|
|
80
80
|
end
|
|
81
|
-
) or (abilityUpgrades[i + 1] or
|
|
81
|
+
) or (abilityUpgrades[i + 1] or emptyArray())
|
|
82
82
|
)
|
|
83
83
|
end
|
|
84
84
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="warpack-types/warpack" />
|
|
2
2
|
/** @noSelfInFile */
|
|
3
|
+
import "../../internal/unit/ability";
|
|
3
4
|
import { TupleOf } from "../../../utility/types";
|
|
4
5
|
import { AnimationName } from "../auxiliary/animation-name";
|
|
5
6
|
import { AnimationQualifier } from "../auxiliary/animation-qualifier";
|
|
@@ -6,6 +6,7 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
|
6
6
|
local ____exports = {}
|
|
7
7
|
local ____unit = require("engine.internal.unit")
|
|
8
8
|
local Unit = ____unit.Unit
|
|
9
|
+
require("engine.internal.unit.ability")
|
|
9
10
|
local ____timer = require("core.types.timer")
|
|
10
11
|
local Timer = ____timer.Timer
|
|
11
12
|
local ____effect = require("core.types.effect")
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
-
import { Ability } from "../internal/ability";
|
|
2
|
+
import { Ability, jabilityfield } from "../internal/ability";
|
|
3
3
|
import { ObjectArrayField, ObjectField, ObjectFieldValueChangeEvent, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectFieldType, ReadonlyObjectLevelFieldType } from "../object-field";
|
|
4
4
|
import { AbilityType, AbilityTypeId } from "../object-data/entry/ability-type";
|
|
5
5
|
import { ObjectDataEntryId } from "../object-data/entry";
|
|
6
6
|
import { LightningTypeId } from "../object-data/entry/lightning-type";
|
|
7
7
|
import { CombatClassifications } from "../object-data/auxiliary/combat-classification";
|
|
8
8
|
import { UnitTypeId } from "../object-data/entry/unit-type";
|
|
9
|
-
export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType =
|
|
9
|
+
export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
|
|
10
10
|
protected get instanceClass(): typeof Ability;
|
|
11
11
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
12
|
+
protected hasNativeFieldValue(instance: Ability): boolean;
|
|
12
13
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<AbilityField>>;
|
|
13
14
|
}
|
|
14
15
|
export declare class AbilityBooleanField extends AbilityField<boolean, jabilitybooleanfield> {
|
|
@@ -18,7 +19,7 @@ export declare class AbilityBooleanField extends AbilityField<boolean, jabilityb
|
|
|
18
19
|
protected setNativeFieldValue(instance: Ability, value: boolean): boolean;
|
|
19
20
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityBooleanField>;
|
|
20
21
|
}
|
|
21
|
-
export declare abstract class AbilityNumberField<NativeFieldType =
|
|
22
|
+
export declare abstract class AbilityNumberField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityField<number, NativeFieldType> {
|
|
22
23
|
protected get defaultValue(): number;
|
|
23
24
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityNumberField>;
|
|
24
25
|
}
|
|
@@ -59,10 +60,11 @@ export declare abstract class AbilityObjectDataEntryIdArrayField<T extends Objec
|
|
|
59
60
|
}
|
|
60
61
|
export declare class AbilityLightningTypeIdArrayField extends AbilityObjectDataEntryIdArrayField<LightningTypeId> {
|
|
61
62
|
}
|
|
62
|
-
export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType =
|
|
63
|
+
export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectLevelField<AbilityType, Ability, ValueType, InputValueType, NativeFieldType> {
|
|
63
64
|
protected get instanceClass(): typeof Ability;
|
|
64
65
|
protected getLevelCount(entry: AbilityType | Ability): number;
|
|
65
66
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
67
|
+
protected hasNativeFieldValue(instance: Ability): boolean;
|
|
66
68
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<AbilityLevelField>>;
|
|
67
69
|
}
|
|
68
70
|
export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean, boolean, jabilityintegerlevelfield> {
|
|
@@ -72,7 +74,7 @@ export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean,
|
|
|
72
74
|
protected setNativeFieldValue(instance: Ability, level: number, value: boolean): boolean;
|
|
73
75
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
|
|
74
76
|
}
|
|
75
|
-
export declare abstract class AbilityNumberLevelField<NativeFieldType =
|
|
77
|
+
export declare abstract class AbilityNumberLevelField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityLevelField<number, number, NativeFieldType> {
|
|
76
78
|
protected get defaultValue(): number;
|
|
77
79
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityNumberLevelField>;
|
|
78
80
|
}
|
|
@@ -27,6 +27,9 @@ __TS__ClassExtends(AbilityField, ObjectField)
|
|
|
27
27
|
function AbilityField.prototype.getObjectDataEntryId(self, instance)
|
|
28
28
|
return instance.typeId
|
|
29
29
|
end
|
|
30
|
+
function AbilityField.prototype.hasNativeFieldValue(self, instance)
|
|
31
|
+
return instance:hasField(self.nativeField)
|
|
32
|
+
end
|
|
30
33
|
__TS__SetDescriptor(
|
|
31
34
|
AbilityField.prototype,
|
|
32
35
|
"instanceClass",
|
|
@@ -261,6 +264,9 @@ end
|
|
|
261
264
|
function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
|
|
262
265
|
return instance.typeId
|
|
263
266
|
end
|
|
267
|
+
function AbilityLevelField.prototype.hasNativeFieldValue(self, instance)
|
|
268
|
+
return instance:hasField(self.nativeField)
|
|
269
|
+
end
|
|
264
270
|
__TS__SetDescriptor(
|
|
265
271
|
AbilityLevelField.prototype,
|
|
266
272
|
"instanceClass",
|
|
@@ -9,6 +9,7 @@ export declare abstract class UnitField<ValueType extends number | string | bool
|
|
|
9
9
|
export declare class UnitStringField extends UnitField<string, junitstringfield> {
|
|
10
10
|
protected get defaultValue(): string;
|
|
11
11
|
protected getNativeFieldById(id: number): junitstringfield;
|
|
12
|
+
protected hasNativeFieldValue(): boolean;
|
|
12
13
|
protected getNativeFieldValue(instance: Unit): string;
|
|
13
14
|
protected getObjectDataEntryId(instance: Unit): UnitTypeId;
|
|
14
15
|
protected setNativeFieldValue(instance: Unit, value: string): boolean;
|
|
@@ -29,6 +29,9 @@ __TS__ClassExtends(UnitStringField, ____exports.UnitField)
|
|
|
29
29
|
function UnitStringField.prototype.getNativeFieldById(self, id)
|
|
30
30
|
return ConvertUnitStringField(id)
|
|
31
31
|
end
|
|
32
|
+
function UnitStringField.prototype.hasNativeFieldValue(self)
|
|
33
|
+
return true
|
|
34
|
+
end
|
|
32
35
|
function UnitStringField.prototype.getNativeFieldValue(self, instance)
|
|
33
36
|
return instance:getField(self.nativeField)
|
|
34
37
|
end
|
package/engine/object-field.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export type ObjectFieldId = number & {
|
|
|
9
9
|
export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
|
|
10
10
|
export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
|
|
11
11
|
declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
|
|
12
|
-
protected readonly valueByInstance: LuaMap<InstanceType, ValueType>;
|
|
13
12
|
protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
|
|
14
13
|
supports(instance: AnyNotNil): instance is InstanceType & {
|
|
15
14
|
readonly __oneSidedTypeGuard: unique symbol;
|
|
@@ -33,21 +32,23 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
|
|
|
33
32
|
previousValue: ValueType,
|
|
34
33
|
newValue: ValueType
|
|
35
34
|
]> : never;
|
|
36
|
-
export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue">;
|
|
35
|
+
export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
|
|
37
36
|
type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
|
|
38
37
|
export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
|
|
39
38
|
protected abstract readonly defaultValue: ValueType;
|
|
39
|
+
protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
|
|
40
40
|
protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
|
|
41
41
|
protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
|
|
42
42
|
getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
|
|
43
43
|
setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
|
|
44
44
|
removeValue(entry: ObjectDataEntryType): boolean;
|
|
45
|
+
trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
|
|
45
46
|
private invokeValueChangeEvent;
|
|
46
47
|
private invokeValueChangeEventRecursive;
|
|
47
48
|
protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
|
|
48
49
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<ObjectField>>;
|
|
49
50
|
}
|
|
50
|
-
export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue">;
|
|
51
|
+
export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue" | "trySetValue">;
|
|
51
52
|
export type ObjectLevelFieldValueChangeEvent<T extends ObjectLevelField<any, any, any, any> | ReadonlyObjectLevelFieldType<ObjectLevelField<any, any, any, any>>> = T extends ObjectLevelField<any, infer InstanceType, infer ValueType, any, any> ? DispatchingEvent<[
|
|
52
53
|
instance: InstanceType,
|
|
53
54
|
field: T,
|
|
@@ -71,11 +72,13 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
|
|
|
71
72
|
}
|
|
72
73
|
export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
|
|
73
74
|
protected abstract readonly defaultValue: ValueType;
|
|
75
|
+
protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
|
|
74
76
|
protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
|
|
75
77
|
protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
|
|
76
78
|
protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
|
|
77
79
|
getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
|
|
78
80
|
setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
|
|
81
|
+
trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
|
|
79
82
|
private invokeValueChangeEvent;
|
|
80
83
|
private invokeValueChangeEventRecursive;
|
|
81
84
|
protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
|
package/engine/object-field.lua
CHANGED
|
@@ -4,6 +4,7 @@ local __TS__Class = ____lualib.__TS__Class
|
|
|
4
4
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
5
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
6
6
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
7
|
+
local __TS__TypeOf = ____lualib.__TS__TypeOf
|
|
7
8
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
8
9
|
local ____exports = {}
|
|
9
10
|
local ____event = require("event")
|
|
@@ -131,13 +132,15 @@ function ObjectField.prototype.setValue(self, entry, value)
|
|
|
131
132
|
return true
|
|
132
133
|
end
|
|
133
134
|
end
|
|
135
|
+
if not self:hasNativeFieldValue(entry) then
|
|
136
|
+
return false
|
|
137
|
+
end
|
|
134
138
|
local previousValue = self:getNativeFieldValue(entry)
|
|
135
139
|
if value ~= previousValue then
|
|
136
|
-
if self:setNativeFieldValue(entry, value) then
|
|
137
|
-
self:invokeValueChangeEvent(entry, self, previousValue, value)
|
|
138
|
-
else
|
|
140
|
+
if not self:setNativeFieldValue(entry, value) then
|
|
139
141
|
return false
|
|
140
142
|
end
|
|
143
|
+
self:invokeValueChangeEvent(entry, self, previousValue, value)
|
|
141
144
|
end
|
|
142
145
|
return true
|
|
143
146
|
end
|
|
@@ -155,6 +158,12 @@ function ObjectField.prototype.removeValue(self, entry)
|
|
|
155
158
|
end
|
|
156
159
|
return false
|
|
157
160
|
end
|
|
161
|
+
function ObjectField.prototype.trySetValue(self, entry, value)
|
|
162
|
+
if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
|
|
163
|
+
return false
|
|
164
|
+
end
|
|
165
|
+
return self:setValue(entry, value)
|
|
166
|
+
end
|
|
158
167
|
function ObjectField.prototype.invokeValueChangeEvent(self, ...)
|
|
159
168
|
self:invokeValueChangeEventRecursive(
|
|
160
169
|
getClass(self),
|
|
@@ -383,22 +392,39 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
|
383
392
|
return true
|
|
384
393
|
end
|
|
385
394
|
end
|
|
395
|
+
if not self:hasNativeFieldValue(entry) then
|
|
396
|
+
return false
|
|
397
|
+
end
|
|
386
398
|
local previousValue = self:getNativeFieldValue(entry, level)
|
|
387
399
|
if value ~= previousValue then
|
|
388
|
-
if self:setNativeFieldValue(entry, level, value) then
|
|
389
|
-
self:invokeValueChangeEvent(
|
|
390
|
-
entry,
|
|
391
|
-
self,
|
|
392
|
-
level,
|
|
393
|
-
previousValue,
|
|
394
|
-
value
|
|
395
|
-
)
|
|
396
|
-
else
|
|
400
|
+
if not self:setNativeFieldValue(entry, level, value) then
|
|
397
401
|
return false
|
|
398
402
|
end
|
|
403
|
+
self:invokeValueChangeEvent(
|
|
404
|
+
entry,
|
|
405
|
+
self,
|
|
406
|
+
level,
|
|
407
|
+
previousValue,
|
|
408
|
+
value
|
|
409
|
+
)
|
|
399
410
|
end
|
|
400
411
|
return true
|
|
401
412
|
end
|
|
413
|
+
function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
|
|
414
|
+
if value ~= nil then
|
|
415
|
+
if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
|
|
416
|
+
return false
|
|
417
|
+
end
|
|
418
|
+
if type(levelOrValue) ~= "number" then
|
|
419
|
+
return false
|
|
420
|
+
end
|
|
421
|
+
return self:setValue(entry, levelOrValue, value)
|
|
422
|
+
end
|
|
423
|
+
if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
|
|
424
|
+
return false
|
|
425
|
+
end
|
|
426
|
+
return self:setValue(entry, levelOrValue)
|
|
427
|
+
end
|
|
402
428
|
function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
|
|
403
429
|
self:invokeValueChangeEventRecursive(
|
|
404
430
|
getClass(self),
|
package/exception.d.ts
CHANGED
package/exception.lua
CHANGED
|
@@ -50,4 +50,8 @@ ____exports.CancellationException = __TS__Class()
|
|
|
50
50
|
local CancellationException = ____exports.CancellationException
|
|
51
51
|
CancellationException.name = "CancellationException"
|
|
52
52
|
__TS__ClassExtends(CancellationException, ____exports.Exception)
|
|
53
|
+
____exports.UnsupportedOperationException = __TS__Class()
|
|
54
|
+
local UnsupportedOperationException = ____exports.UnsupportedOperationException
|
|
55
|
+
UnsupportedOperationException.name = "UnsupportedOperationException"
|
|
56
|
+
__TS__ClassExtends(UnsupportedOperationException, ____exports.Exception)
|
|
53
57
|
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.a4deb44",
|
|
5
5
|
"description": "A typescript library for Warcraft III using Warpack.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"warcraft",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@warscript/tstl-plugin": "^0.0.1",
|
|
26
26
|
"typescript-to-lua": "^1.24.1",
|
|
27
27
|
"lua-types": "^2.13.1",
|
|
28
|
-
"warpack": "0.0.1-dev.
|
|
28
|
+
"warpack": "0.0.1-dev.5bdabe5"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@typescript-eslint/eslint-plugin": "^5.59.11",
|
package/utility/arrays.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="@typescript-to-lua/language-extensions" />
|
|
2
2
|
/** @noSelfInFile */
|
|
3
3
|
import { TupleOf } from "./types";
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const emptyArray: <T>() => readonly T[];
|
|
5
5
|
export declare const joinToString: <T>(array: readonly T[], separator: string, transform?: (element: T) => string) => string;
|
|
6
6
|
export declare const arrayOfNotNull: <T>(...elements: readonly (T | null | undefined)[]) => T[];
|
|
7
7
|
export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
|
package/utility/arrays.lua
CHANGED
|
@@ -8,7 +8,10 @@ local mathMin = math.min
|
|
|
8
8
|
local select = _G.select
|
|
9
9
|
local tableConcat = table.concat
|
|
10
10
|
local tableSort = table.sort
|
|
11
|
-
|
|
11
|
+
local EMPTY_ARRAY = {}
|
|
12
|
+
____exports.emptyArray = function()
|
|
13
|
+
return EMPTY_ARRAY
|
|
14
|
+
end
|
|
12
15
|
____exports.joinToString = function(array, separator, transform)
|
|
13
16
|
if transform == nil then
|
|
14
17
|
transform = tostring
|
package/utility/linked-set.d.ts
CHANGED
|
@@ -4,10 +4,25 @@ type IteratorState<T extends AnyNotNil> = {
|
|
|
4
4
|
t: LuaMap<T, T>;
|
|
5
5
|
n?: T;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
readonly
|
|
7
|
+
type OneSidedTypeGuard = {
|
|
8
|
+
readonly __oneSidedTypeGuard: unique symbol;
|
|
9
|
+
};
|
|
10
|
+
export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
|
|
11
|
+
copyOf(): LinkedSet<T>;
|
|
12
|
+
first(): T | undefined;
|
|
13
|
+
last(): T | undefined;
|
|
14
|
+
next(key: T): T | undefined;
|
|
15
|
+
previous(key: T): T | undefined;
|
|
16
|
+
contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
|
|
17
|
+
size: number;
|
|
18
|
+
forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
|
|
19
|
+
toArray(): T[];
|
|
20
|
+
sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
|
|
21
|
+
}
|
|
22
|
+
export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
|
|
23
|
+
readonly __linkedSet: unique symbol;
|
|
9
24
|
}
|
|
10
|
-
export declare class LinkedSet<T extends AnyNotNil> {
|
|
25
|
+
export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet<T> {
|
|
11
26
|
private n;
|
|
12
27
|
private p;
|
|
13
28
|
private f?;
|
|
@@ -20,9 +35,7 @@ export declare class LinkedSet<T extends AnyNotNil> {
|
|
|
20
35
|
previous(key: T): T | undefined;
|
|
21
36
|
add(key: T): boolean;
|
|
22
37
|
remove(key: T): boolean;
|
|
23
|
-
contains(key: AnyNotNil): key is T &
|
|
24
|
-
readonly __oneSidedTypeGuard: unique symbol;
|
|
25
|
-
};
|
|
38
|
+
contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
|
|
26
39
|
clear(): void;
|
|
27
40
|
get size(): number;
|
|
28
41
|
forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
|
|
@@ -31,6 +44,7 @@ export declare class LinkedSet<T extends AnyNotNil> {
|
|
|
31
44
|
sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
|
|
32
45
|
protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
|
|
33
46
|
}
|
|
47
|
+
export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
|
|
34
48
|
export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
|
|
35
49
|
export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
|
|
36
50
|
export {};
|
package/utility/linked-set.lua
CHANGED
|
@@ -2,9 +2,12 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__New = ____lualib.__TS__New
|
|
4
4
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
5
6
|
local ____exports = {}
|
|
6
7
|
local ____arrays = require("utility.arrays")
|
|
7
8
|
local sortBy = ____arrays.sortBy
|
|
9
|
+
local ____exception = require("exception")
|
|
10
|
+
local UnsupportedOperationException = ____exception.UnsupportedOperationException
|
|
8
11
|
local function linkedSetNext(state)
|
|
9
12
|
local n = state.n
|
|
10
13
|
state.n = state.t[n]
|
|
@@ -161,6 +164,19 @@ __TS__SetDescriptor(
|
|
|
161
164
|
end},
|
|
162
165
|
true
|
|
163
166
|
)
|
|
167
|
+
local EmptyLinkedSet = __TS__Class()
|
|
168
|
+
EmptyLinkedSet.name = "EmptyLinkedSet"
|
|
169
|
+
__TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
|
|
170
|
+
function EmptyLinkedSet.prototype.add(self)
|
|
171
|
+
error(
|
|
172
|
+
__TS__New(UnsupportedOperationException),
|
|
173
|
+
0
|
|
174
|
+
)
|
|
175
|
+
end
|
|
176
|
+
local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
|
|
177
|
+
____exports.emptyLinkedSet = function()
|
|
178
|
+
return EMPTY_LINKED_SET
|
|
179
|
+
end
|
|
164
180
|
____exports.linkedSetOf = function(...)
|
|
165
181
|
local linkedSet = __TS__New(____exports.LinkedSet)
|
|
166
182
|
for i = 1, select("#", ...) do
|