Updated JSDoc comments for virtual drive
This commit is contained in:
parent
088ee22cb7
commit
949f13b00a
4 changed files with 131 additions and 9 deletions
|
|
@ -1,3 +1,5 @@
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { VirtualRoot } from "./virtual-root.js";
|
||||||
|
|
||||||
export class VirtualBase {
|
export class VirtualBase {
|
||||||
/**
|
/**
|
||||||
|
|
@ -13,12 +15,17 @@ export class VirtualBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
|
* @returns {VirtualBase}
|
||||||
*/
|
*/
|
||||||
setName(name) {
|
setName(name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} alias
|
||||||
|
* @returns {ThisType}
|
||||||
|
*/
|
||||||
setAlias(alias) {
|
setAlias(alias) {
|
||||||
this.alias = alias;
|
this.alias = alias;
|
||||||
this.getRoot().addShortcut(alias, this);
|
this.getRoot().addShortcut(alias, this);
|
||||||
|
|
@ -27,6 +34,7 @@ export class VirtualBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {VirtualBase} parent
|
* @param {VirtualBase} parent
|
||||||
|
* @returns {VirtualBase}
|
||||||
*/
|
*/
|
||||||
setParent(parent) {
|
setParent(parent) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
|
|
@ -49,6 +57,9 @@ export class VirtualBase {
|
||||||
return this.parent?.path + "/" + this.id;
|
return this.parent?.path + "/" + this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {VirtualRoot}
|
||||||
|
*/
|
||||||
getRoot() {
|
getRoot() {
|
||||||
const root = this.root ?? this.parent.getRoot();
|
const root = this.root ?? this.parent.getRoot();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,45 @@
|
||||||
import { VirtualBase } from "./virtual-base.js";
|
import { VirtualBase } from "./virtual-base.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A virtual file that can be stored inside a folder
|
||||||
|
*/
|
||||||
export class VirtualFile extends VirtualBase {
|
export class VirtualFile extends VirtualBase {
|
||||||
|
/**
|
||||||
|
* @param {String} name
|
||||||
|
* @param {String=} extension
|
||||||
|
*/
|
||||||
constructor(name, extension) {
|
constructor(name, extension) {
|
||||||
super(name);
|
super(name);
|
||||||
this.extension = extension;
|
this.extension = extension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} alias
|
||||||
|
* @returns {VirtualFile}
|
||||||
|
*/
|
||||||
|
setAlias(alias) {
|
||||||
|
super.setAlias(alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the source of this file and removes the content
|
||||||
|
* @param {String} source
|
||||||
|
* @returns {VirtualFile}
|
||||||
|
*/
|
||||||
setSource(source) {
|
setSource(source) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
this.content = null;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the content of this file and removes the source
|
||||||
|
* @param {String|*} content
|
||||||
|
* @returns {VirtualFile}
|
||||||
|
*/
|
||||||
|
setContent(content) {
|
||||||
|
this.content = content;
|
||||||
|
this.source = null;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,9 @@ import { removeFromArray } from "../utils/array.js";
|
||||||
import { VirtualBase } from "./virtual-base.js";
|
import { VirtualBase } from "./virtual-base.js";
|
||||||
import { VirtualFile } from "./virtual-file.js";
|
import { VirtualFile } from "./virtual-file.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A virtual folder that can contains files and sub-folders
|
||||||
|
*/
|
||||||
export class VirtualFolder extends VirtualBase {
|
export class VirtualFolder extends VirtualBase {
|
||||||
static TYPE = {
|
static TYPE = {
|
||||||
GENERAL: 0,
|
GENERAL: 0,
|
||||||
|
|
@ -19,18 +22,39 @@ export class VirtualFolder extends VirtualBase {
|
||||||
this.type = type ?? VirtualFolder.TYPE.GENERAL;
|
this.type = type ?? VirtualFolder.TYPE.GENERAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add(element) {
|
/**
|
||||||
|
* @param {String} alias
|
||||||
// }
|
* @returns {VirtualFolder}
|
||||||
|
*/
|
||||||
|
setAlias(alias) {
|
||||||
|
super.setAlias(alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this folder contains a file matching a name and extension
|
||||||
|
* @param {String} name
|
||||||
|
* @param {String} extension
|
||||||
|
* @returns {VirtualFile}
|
||||||
|
*/
|
||||||
hasFile(name, extension) {
|
hasFile(name, extension) {
|
||||||
return this.findFile(name, extension) !== null;
|
return this.findFile(name, extension) !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this folder contains a folder matching a name
|
||||||
|
* @param {String} name
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
hasFolder(name) {
|
hasFolder(name) {
|
||||||
return this.findSubFolder(name) !== null;
|
return this.findSubFolder(name) !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds and returns a file inside this folder matching a name and extension
|
||||||
|
* @param {String} name
|
||||||
|
* @param {String} extension
|
||||||
|
* @returns {VirtualFile}
|
||||||
|
*/
|
||||||
findFile(name, extension) {
|
findFile(name, extension) {
|
||||||
let resultFile = null;
|
let resultFile = null;
|
||||||
|
|
||||||
|
|
@ -43,6 +67,11 @@ export class VirtualFolder extends VirtualBase {
|
||||||
return resultFile;
|
return resultFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds and returns a folder inside this folder matching a name
|
||||||
|
* @param {String} name
|
||||||
|
* @returns {VirtualFolder}
|
||||||
|
*/
|
||||||
findSubFolder(name) {
|
findSubFolder(name) {
|
||||||
let resultFolder = null;
|
let resultFolder = null;
|
||||||
|
|
||||||
|
|
@ -56,9 +85,15 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @callback createFileCallback
|
||||||
|
* @param {VirtualFile} newFile
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a file with a name and extension
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
* @param {String} extension
|
* @param {String} extension
|
||||||
* @param {Function} callback
|
* @param {createFileCallback} callback
|
||||||
* @returns {VirtualFolder}
|
* @returns {VirtualFolder}
|
||||||
*/
|
*/
|
||||||
createFile(name, extension, callback) {
|
createFile(name, extension, callback) {
|
||||||
|
|
@ -70,7 +105,10 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Array<Object>} files
|
* Creates files based on an array of objects with file names and extensions
|
||||||
|
* @param {Object[]} files
|
||||||
|
* @param {String} Object[].name
|
||||||
|
* @param {String} Object[].extension
|
||||||
* @returns {VirtualFolder}
|
* @returns {VirtualFolder}
|
||||||
*/
|
*/
|
||||||
createFiles(files) {
|
createFiles(files) {
|
||||||
|
|
@ -81,9 +119,15 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @callback createFolderCallback
|
||||||
|
* @param {VirtualFolder} newFolder
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a folder with a name
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
* @returns {VirtualFolder}
|
* @returns {VirtualFolder}
|
||||||
* @param {Function} callback
|
* @param {createFolderCallback} callback
|
||||||
*/
|
*/
|
||||||
createFolder(name, callback) {
|
createFolder(name, callback) {
|
||||||
const newFolder = new VirtualFolder(name);
|
const newFolder = new VirtualFolder(name);
|
||||||
|
|
@ -94,7 +138,8 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Array<String>} folders
|
* Creates folders based on an array of folder names
|
||||||
|
* @param {String[]} folders
|
||||||
* @returns {VirtualFolder}
|
* @returns {VirtualFolder}
|
||||||
*/
|
*/
|
||||||
createFolders(folders) {
|
createFolders(folders) {
|
||||||
|
|
@ -105,6 +150,8 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Adds a file at a destination
|
||||||
|
* @deprecated
|
||||||
* @param {String} destination
|
* @param {String} destination
|
||||||
*/
|
*/
|
||||||
addFile(destination) {
|
addFile(destination) {
|
||||||
|
|
@ -127,6 +174,8 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Adds a folder at a destination
|
||||||
|
* @deprecated
|
||||||
* @param {String} destination
|
* @param {String} destination
|
||||||
*/
|
*/
|
||||||
addFolder(destination) {
|
addFolder(destination) {
|
||||||
|
|
@ -143,7 +192,13 @@ export class VirtualFolder extends VirtualBase {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a file or folder from this folder
|
||||||
|
* @param {VirtualFile|VirtualFolder} child
|
||||||
|
*/
|
||||||
remove(child) {
|
remove(child) {
|
||||||
|
child.parent = null;
|
||||||
|
|
||||||
if (child instanceof VirtualFile) {
|
if (child instanceof VirtualFile) {
|
||||||
removeFromArray(child, this.files);
|
removeFromArray(child, this.files);
|
||||||
} else if (child instanceof VirtualFolder) {
|
} else if (child instanceof VirtualFolder) {
|
||||||
|
|
@ -151,6 +206,11 @@ export class VirtualFolder extends VirtualBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the file or folder at a relative path or null if it doesn't exist
|
||||||
|
* @param {String} relativePath
|
||||||
|
* @returns {VirtualFile|VirtualFolder|null}
|
||||||
|
*/
|
||||||
navigate(relativePath) {
|
navigate(relativePath) {
|
||||||
const segments = relativePath.split("/");
|
const segments = relativePath.split("/");
|
||||||
let currentDirectory = this;
|
let currentDirectory = this;
|
||||||
|
|
@ -192,4 +252,15 @@ export class VirtualFolder extends VirtualBase {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes this folder and all its files and sub-folders recursively
|
||||||
|
*/
|
||||||
|
delete() {
|
||||||
|
super.delete();
|
||||||
|
|
||||||
|
this.files.concat(this.subFolders).forEach((item) => {
|
||||||
|
item.delete();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { VirtualFile } from "./virtual-file.js";
|
||||||
import { VirtualFolder } from "./virtual-folder.js";
|
import { VirtualFolder } from "./virtual-folder.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -10,6 +12,12 @@ export class VirtualRoot extends VirtualFolder {
|
||||||
this.shortcuts = {};
|
this.shortcuts = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a shortcut to a file or folder
|
||||||
|
* @param {String} name
|
||||||
|
* @param {VirtualFile|VirtualFolder} destination
|
||||||
|
* @returns {VirtualRoot}
|
||||||
|
*/
|
||||||
addShortcut(name, destination) {
|
addShortcut(name, destination) {
|
||||||
this.shortcuts[name] = destination;
|
this.shortcuts[name] = destination;
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue