mirror of
https://github.com/barsdeveloper/ueblueprint.git
synced 2026-02-13 16:44:49 +08:00
43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
import IEntity from "./IEntity.js"
|
|
|
|
/** @template {typeof IEntity} T */
|
|
export default class MirroredEntity extends IEntity {
|
|
|
|
/** @type {typeof IEntity} */
|
|
static type
|
|
|
|
/** @param {() => InstanceType<T>} getter */
|
|
constructor(getter = null) {
|
|
super()
|
|
this.getter = getter
|
|
}
|
|
|
|
/**
|
|
* @template {typeof IEntity} T
|
|
* @param {T} type
|
|
*/
|
|
static of(type) {
|
|
const result = this.asUniqueClass()
|
|
result.type = type
|
|
result.grammar = result.getTargetType().grammar.map(v => new this())
|
|
return result
|
|
}
|
|
|
|
/** @returns {typeof IEntity} */
|
|
static getTargetType() {
|
|
const result = this.type
|
|
if (result.prototype instanceof MirroredEntity) {
|
|
return /** @type {typeof MirroredEntity} */(result).getTargetType()
|
|
}
|
|
return result
|
|
}
|
|
|
|
toString(
|
|
insideString = false,
|
|
indentation = "",
|
|
printKey = this.Self().printKey,
|
|
) {
|
|
return this.getter().toString(insideString, indentation, printKey)
|
|
}
|
|
}
|