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.
@@ -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 EMPTY_ARRAY = ____arrays.EMPTY_ARRAY
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 EMPTY_ARRAY)
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 = unknown> extends ObjectField<AbilityType, Ability, ValueType, 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 = unknown> extends AbilityField<number, 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 = unknown> extends ObjectLevelField<AbilityType, Ability, ValueType, InputValueType, 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 = unknown> extends AbilityLevelField<number, number, 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
@@ -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>;
@@ -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
@@ -15,3 +15,5 @@ export declare class IllegalStateException extends Exception {
15
15
  }
16
16
  export declare class CancellationException extends Exception {
17
17
  }
18
+ export declare class UnsupportedOperationException extends Exception {
19
+ }
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.632c807",
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.559048d"
28
+ "warpack": "0.0.1-dev.5bdabe5"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@typescript-eslint/eslint-plugin": "^5.59.11",
@@ -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 EMPTY_ARRAY: readonly any[];
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>;
@@ -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
- ____exports.EMPTY_ARRAY = {}
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
@@ -4,10 +4,25 @@ type IteratorState<T extends AnyNotNil> = {
4
4
  t: LuaMap<T, T>;
5
5
  n?: T;
6
6
  };
7
- export interface LinkedSet<T> extends LuaPairsKeyIterable<T> {
8
- readonly __linkedHashSet: unique symbol;
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 {};
@@ -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