95 lines
No EOL
1.4 KiB
JavaScript
95 lines
No EOL
1.4 KiB
JavaScript
import { EventEmitter } from "../utils/events.js";
|
|
|
|
import { VirtualRoot } from "./virtual-root.js";
|
|
|
|
export class VirtualBase extends EventEmitter {
|
|
/**
|
|
* @param {string} name
|
|
*/
|
|
constructor(name) {
|
|
super();
|
|
this.name = name;
|
|
}
|
|
|
|
get id() {
|
|
return this.name;
|
|
}
|
|
|
|
/**
|
|
* @param {string} name
|
|
* @returns {VirtualBase}
|
|
*/
|
|
setName(name) {
|
|
this.name = name;
|
|
this.getRoot().saveData();
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* @param {string} alias
|
|
* @returns {ThisType}
|
|
*/
|
|
setAlias(alias) {
|
|
if (this.alias === alias)
|
|
return;
|
|
|
|
this.alias = alias;
|
|
this.getRoot().addShortcut(alias, this);
|
|
this.getRoot().saveData();
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* @param {VirtualBase} parent
|
|
* @returns {VirtualBase}
|
|
*/
|
|
setParent(parent) {
|
|
if (this.parent === parent)
|
|
return;
|
|
|
|
this.parent = parent;
|
|
this.getRoot().saveData();
|
|
return this;
|
|
}
|
|
|
|
delete() {
|
|
const parent = this.parent;
|
|
|
|
if (parent == null)
|
|
return;
|
|
|
|
parent.remove?.(this);
|
|
parent.getRoot()?.saveData();
|
|
}
|
|
|
|
open() {}
|
|
|
|
get path() {
|
|
return this.alias ?? this.absolutePath;
|
|
}
|
|
|
|
get absolutePath() {
|
|
return this.parent?.path + "/" + this.id;
|
|
}
|
|
|
|
/**
|
|
* @returns {VirtualRoot}
|
|
*/
|
|
getRoot() {
|
|
const root = this.root ?? this.parent?.getRoot();
|
|
|
|
if (root === null) {
|
|
throw new Error("Root not found");
|
|
}
|
|
|
|
return root;
|
|
}
|
|
|
|
toJSON() {
|
|
const object = {
|
|
nam: this.name
|
|
};
|
|
|
|
return object;
|
|
}
|
|
} |