Fix type lost caused by incorrect inheritance of ClassArray
This commit is contained in:
@@ -1,18 +1,18 @@
|
|||||||
import {Serializable} from './Serializable';
|
import {Serializable} from './Serializable';
|
||||||
import {UhkBuffer} from './UhkBuffer';
|
import {UhkBuffer} from './UhkBuffer';
|
||||||
|
|
||||||
export abstract class ClassArray<T> extends Serializable<T> {
|
export abstract class ClassArray<T extends Serializable<T>> extends Serializable<ClassArray<T>> {
|
||||||
|
|
||||||
elements: Serializable<T>[] = [];
|
elements: T[] = [];
|
||||||
|
|
||||||
_fromJsObject(jsObjects: any): Serializable<T> {
|
_fromJsObject(jsObjects: any): ClassArray<T> {
|
||||||
for (let jsObject of jsObjects) {
|
for (let jsObject of jsObjects) {
|
||||||
this.elements.push(this.jsObjectToClass(jsObject));
|
this.elements.push(this.jsObjectToClass(jsObject));
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
_fromBinary(buffer: UhkBuffer): Serializable<T> {
|
_fromBinary(buffer: UhkBuffer): ClassArray<T> {
|
||||||
let arrayLength = buffer.readCompactLength();
|
let arrayLength = buffer.readCompactLength();
|
||||||
|
|
||||||
if (buffer.enableDump) {
|
if (buffer.enableDump) {
|
||||||
@@ -49,6 +49,6 @@ export abstract class ClassArray<T> extends Serializable<T> {
|
|||||||
return `<${this.constructor.name} length="${this.elements.length}">`;
|
return `<${this.constructor.name} length="${this.elements.length}">`;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract jsObjectToClass(jsObject: any): Serializable<T>;
|
abstract jsObjectToClass(jsObject: any): T;
|
||||||
abstract binaryToClass(buffer: UhkBuffer): Serializable<T>;
|
abstract binaryToClass(buffer: UhkBuffer): T;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export abstract class Serializable<T> {
|
|||||||
private static maxDisplayedJsonLength = 160;
|
private static maxDisplayedJsonLength = 160;
|
||||||
private static enableDump = true;
|
private static enableDump = true;
|
||||||
|
|
||||||
fromJsObject(jsObject: any): Serializable<T> {
|
fromJsObject(jsObject: any): T {
|
||||||
this.dump(`${this.getIndentation()}${this.constructor.name}.fromJsObject: ` +
|
this.dump(`${this.getIndentation()}${this.constructor.name}.fromJsObject: ` +
|
||||||
`${this.strintifyJsObject(jsObject)}\n`);
|
`${this.strintifyJsObject(jsObject)}\n`);
|
||||||
Serializable.depth++;
|
Serializable.depth++;
|
||||||
@@ -18,7 +18,7 @@ export abstract class Serializable<T> {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
fromBinary(buffer: UhkBuffer): Serializable<T> {
|
fromBinary(buffer: UhkBuffer): T {
|
||||||
this.dump(`\n${this.getIndentation()}${this.constructor.name}.fromBinary: [`);
|
this.dump(`\n${this.getIndentation()}${this.constructor.name}.fromBinary: [`);
|
||||||
Serializable.depth++;
|
Serializable.depth++;
|
||||||
buffer.enableDump = Serializable.enableDump;
|
buffer.enableDump = Serializable.enableDump;
|
||||||
@@ -38,6 +38,7 @@ export abstract class Serializable<T> {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: remove parameter and return the buffer
|
||||||
toBinary(buffer: UhkBuffer): void {
|
toBinary(buffer: UhkBuffer): void {
|
||||||
this.dump(`\n${this.getIndentation()}${this.constructor.name}.toBinary: ${this} [`);
|
this.dump(`\n${this.getIndentation()}${this.constructor.name}.toBinary: ${this} [`);
|
||||||
Serializable.depth++;
|
Serializable.depth++;
|
||||||
@@ -49,8 +50,8 @@ export abstract class Serializable<T> {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract _fromJsObject(jsObject: any): Serializable<T>;
|
abstract _fromJsObject(jsObject: any): T;
|
||||||
abstract _fromBinary(buffer: UhkBuffer): Serializable<T>;
|
abstract _fromBinary(buffer: UhkBuffer): T;
|
||||||
abstract _toJsObject(): any;
|
abstract _toJsObject(): any;
|
||||||
abstract _toBinary(buffer: UhkBuffer): void;
|
abstract _toBinary(buffer: UhkBuffer): void;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {DualRoleKeystrokeAction} from './DualRoleKeystrokeAction';
|
import {DualRoleKeystrokeAction} from './DualRoleKeystrokeAction';
|
||||||
import {NoneAction} from './NoneAction';
|
import {NoneAction} from './NoneAction';
|
||||||
import {KeystrokeAction} from './KeystrokeAction';
|
import {KeystrokeAction} from './KeystrokeAction';
|
||||||
@@ -14,7 +13,7 @@ import {PlayMacroAction} from './PlayMacroAction';
|
|||||||
|
|
||||||
export class KeyActions extends ClassArray<KeyAction> {
|
export class KeyActions extends ClassArray<KeyAction> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<KeyAction> {
|
jsObjectToClass(jsObject: any): KeyAction {
|
||||||
switch (jsObject.keyActionType) {
|
switch (jsObject.keyActionType) {
|
||||||
case keyActionType.NoneAction:
|
case keyActionType.NoneAction:
|
||||||
return new NoneAction().fromJsObject(jsObject);
|
return new NoneAction().fromJsObject(jsObject);
|
||||||
@@ -39,7 +38,7 @@ export class KeyActions extends ClassArray<KeyAction> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<KeyAction> {
|
binaryToClass(buffer: UhkBuffer): KeyAction {
|
||||||
let keyActionFirstByte = buffer.readUInt8();
|
let keyActionFirstByte = buffer.readUInt8();
|
||||||
buffer.backtrack();
|
buffer.backtrack();
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export class KeyMap extends Serializable<KeyMap> {
|
|||||||
|
|
||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
|
|
||||||
layers: Serializable<Layers>;
|
layers: Layers;
|
||||||
|
|
||||||
_fromJsObject(jsObject: any): KeyMap {
|
_fromJsObject(jsObject: any): KeyMap {
|
||||||
this.id = jsObject.id;
|
this.id = jsObject.id;
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
import {KeyMap} from './KeyMap';
|
import {KeyMap} from './KeyMap';
|
||||||
|
|
||||||
export class KeyMaps extends ClassArray<KeyMap> {
|
export class KeyMaps extends ClassArray<KeyMap> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<KeyMap> {
|
jsObjectToClass(jsObject: any): KeyMap {
|
||||||
return new KeyMap().fromJsObject(jsObject);
|
return new KeyMap().fromJsObject(jsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<KeyMap> {
|
binaryToClass(buffer: UhkBuffer): KeyMap {
|
||||||
return new KeyMap().fromBinary(buffer);
|
return new KeyMap().fromBinary(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {UhkBuffer} from '../UhkBuffer';
|
|||||||
|
|
||||||
export class Layer extends Serializable<Layer> {
|
export class Layer extends Serializable<Layer> {
|
||||||
|
|
||||||
modules: Serializable<Modules>;
|
modules: Modules;
|
||||||
|
|
||||||
_fromJsObject(jsObject: any): Layer {
|
_fromJsObject(jsObject: any): Layer {
|
||||||
this.modules = new Modules().fromJsObject(jsObject.modules);
|
this.modules = new Modules().fromJsObject(jsObject.modules);
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
import {Layer} from './Layer';
|
import {Layer} from './Layer';
|
||||||
|
|
||||||
export class Layers extends ClassArray<Layer> {
|
export class Layers extends ClassArray<Layer> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<Layer> {
|
jsObjectToClass(jsObject: any): Layer {
|
||||||
return new Layer().fromJsObject(jsObject);
|
return new Layer().fromJsObject(jsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<Layer> {
|
binaryToClass(buffer: UhkBuffer): Layer {
|
||||||
return new Layer().fromBinary(buffer);
|
return new Layer().fromBinary(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export class Macro extends Serializable<Macro> {
|
|||||||
|
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
macroActions: Serializable<MacroActions>;
|
macroActions: MacroActions;
|
||||||
|
|
||||||
_fromJsObject(jsObject: any): Macro {
|
_fromJsObject(jsObject: any): Macro {
|
||||||
this.id = jsObject.id;
|
this.id = jsObject.id;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
import {DelayMacroAction} from './DelayMacroAction';
|
import {DelayMacroAction} from './DelayMacroAction';
|
||||||
import {MacroAction, macroActionType, MacroActionId} from './MacroAction';
|
import {MacroAction, macroActionType, MacroActionId} from './MacroAction';
|
||||||
@@ -18,7 +17,7 @@ import {TextMacroAction} from './TextMacroAction';
|
|||||||
|
|
||||||
export class MacroActions extends ClassArray<MacroAction> {
|
export class MacroActions extends ClassArray<MacroAction> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<MacroAction> {
|
jsObjectToClass(jsObject: any): MacroAction {
|
||||||
switch (jsObject.macroActionType) {
|
switch (jsObject.macroActionType) {
|
||||||
case macroActionType.PressKeyMacroAction:
|
case macroActionType.PressKeyMacroAction:
|
||||||
return new PressKeyMacroAction().fromJsObject(jsObject);
|
return new PressKeyMacroAction().fromJsObject(jsObject);
|
||||||
@@ -51,7 +50,7 @@ export class MacroActions extends ClassArray<MacroAction> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<MacroAction> {
|
binaryToClass(buffer: UhkBuffer): MacroAction {
|
||||||
let macroActionFirstByte = buffer.readUInt8();
|
let macroActionFirstByte = buffer.readUInt8();
|
||||||
buffer.backtrack();
|
buffer.backtrack();
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {Macro} from './Macro';
|
import {Macro} from './Macro';
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
|
|
||||||
export class Macros extends ClassArray<Macro> {
|
export class Macros extends ClassArray<Macro> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<Macro> {
|
jsObjectToClass(jsObject: any): Macro {
|
||||||
return new Macro().fromJsObject(jsObject);
|
return new Macro().fromJsObject(jsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<Macro> {
|
binaryToClass(buffer: UhkBuffer): Macro {
|
||||||
return new Macro().fromBinary(buffer);
|
return new Macro().fromBinary(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export class Module extends Serializable<Module> {
|
|||||||
// @assertUInt8
|
// @assertUInt8
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
keyActions: Serializable<KeyActions>;
|
keyActions: KeyActions;
|
||||||
|
|
||||||
// @assertEnum(PointerRole)
|
// @assertEnum(PointerRole)
|
||||||
private pointerRole: PointerRole;
|
private pointerRole: PointerRole;
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {ModuleConfiguration} from './ModuleConfiguration';
|
import {ModuleConfiguration} from './ModuleConfiguration';
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
|
|
||||||
export class ModuleConfigurations extends ClassArray<ModuleConfiguration> {
|
export class ModuleConfigurations extends ClassArray<ModuleConfiguration> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<ModuleConfiguration> {
|
jsObjectToClass(jsObject: any): ModuleConfiguration {
|
||||||
return new ModuleConfiguration().fromJsObject(jsObject);
|
return new ModuleConfiguration().fromJsObject(jsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<ModuleConfiguration> {
|
binaryToClass(buffer: UhkBuffer): ModuleConfiguration {
|
||||||
return new ModuleConfiguration().fromBinary(buffer);
|
return new ModuleConfiguration().fromBinary(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import {ClassArray} from '../ClassArray';
|
import {ClassArray} from '../ClassArray';
|
||||||
import {Module} from './Module';
|
import {Module} from './Module';
|
||||||
import {Serializable} from '../Serializable';
|
|
||||||
import {UhkBuffer} from '../UhkBuffer';
|
import {UhkBuffer} from '../UhkBuffer';
|
||||||
|
|
||||||
export class Modules extends ClassArray<Module> {
|
export class Modules extends ClassArray<Module> {
|
||||||
|
|
||||||
jsObjectToClass(jsObject: any): Serializable<Module> {
|
jsObjectToClass(jsObject: any): Module {
|
||||||
return new Module().fromJsObject(jsObject);
|
return new Module().fromJsObject(jsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryToClass(buffer: UhkBuffer): Serializable<Module> {
|
binaryToClass(buffer: UhkBuffer): Module {
|
||||||
return new Module().fromBinary(buffer);
|
return new Module().fromBinary(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ export class UhkConfiguration extends Serializable<UhkConfiguration> {
|
|||||||
// @assertUInt8
|
// @assertUInt8
|
||||||
brandId: number;
|
brandId: number;
|
||||||
|
|
||||||
moduleConfigurations: Serializable<ModuleConfigurations>;
|
moduleConfigurations: ModuleConfigurations;
|
||||||
|
|
||||||
keyMaps: Serializable<KeyMaps>;
|
keyMaps: KeyMaps;
|
||||||
|
|
||||||
macros: Serializable<Macros>;
|
macros: Macros;
|
||||||
|
|
||||||
// @assertUInt32
|
// @assertUInt32
|
||||||
epilogue: number;
|
epilogue: number;
|
||||||
|
|||||||
Reference in New Issue
Block a user