Updated JSDoc comments for virtual drive

This commit is contained in:
Prozilla 2023-07-23 12:45:27 +02:00
parent 088ee22cb7
commit 949f13b00a
No known key found for this signature in database
GPG key ID: 5858DFE71CAF31EE
4 changed files with 131 additions and 9 deletions

View file

@ -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);
@ -26,7 +33,8 @@ 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();

View file

@ -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;
} }

View file

@ -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,8 +105,11 @@ export class VirtualFolder extends VirtualBase {
} }
/** /**
* @param {Array<Object>} files * Creates files based on an array of objects with file names and extensions
* @returns {VirtualFolder} * @param {Object[]} files
* @param {String} Object[].name
* @param {String} Object[].extension
* @returns {VirtualFolder}
*/ */
createFiles(files) { createFiles(files) {
files.forEach(({name, extension}) => { files.forEach(({name, extension}) => {
@ -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();
});
}
} }

View file

@ -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;