Added JSDoc linting again.

This commit is contained in:
Harrison Deng 2022-04-18 01:31:27 -05:00
parent 7e401a5472
commit 11ec2d29e0
9 changed files with 177 additions and 31 deletions

View File

@ -5,7 +5,8 @@
}, },
"extends": [ "extends": [
"eslint:recommended", "eslint:recommended",
"plugin:import/recommended" "plugin:import/recommended",
"plugin:jsdoc/recommended"
], ],
"parserOptions": { "parserOptions": {
"ecmaVersion": "latest", "ecmaVersion": "latest",
@ -32,5 +33,8 @@
"error", "error",
"ignorePackages" "ignorePackages"
] ]
} },
"plugins": [
"jsdoc"
]
} }

View File

@ -19,6 +19,7 @@
"esdoc-standard-plugin": "^1.0.0", "esdoc-standard-plugin": "^1.0.0",
"eslint": "^8.13.0", "eslint": "^8.13.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsdoc": "^39.2.2",
"eslint-webpack-plugin": "^3.1.1", "eslint-webpack-plugin": "^3.1.1",
"mocha": "^9.2.2", "mocha": "^9.2.2",
"mocha-junit-reporter": "^2.0.2", "mocha-junit-reporter": "^2.0.2",
@ -1882,6 +1883,20 @@
"node": ">=10.0.0" "node": ">=10.0.0"
} }
}, },
"node_modules/@es-joy/jsdoccomment": {
"version": "0.23.6",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
"dev": true,
"dependencies": {
"comment-parser": "1.3.1",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "~2.2.5"
},
"engines": {
"node": "^12 || ^14 || ^16 || ^17"
}
},
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
@ -3070,6 +3085,15 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true "dev": true
}, },
"node_modules/comment-parser": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
"integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
"dev": true,
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/commondir": { "node_modules/commondir": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@ -4167,6 +4191,27 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true "dev": true
}, },
"node_modules/eslint-plugin-jsdoc": {
"version": "39.2.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
"dev": true,
"dependencies": {
"@es-joy/jsdoccomment": "~0.23.1",
"comment-parser": "1.3.1",
"debug": "^4.3.4",
"escape-string-regexp": "^4.0.0",
"esquery": "^1.4.0",
"semver": "^7.3.7",
"spdx-expression-parse": "^3.0.1"
},
"engines": {
"node": "^14 || ^16 || ^17"
},
"peerDependencies": {
"eslint": "^7.0.0 || ^8.0.0"
}
},
"node_modules/eslint-scope": { "node_modules/eslint-scope": {
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
@ -5414,6 +5459,15 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"node_modules/jsdoc-type-pratt-parser": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
"dev": true,
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/jsdom": { "node_modules/jsdom": {
"version": "7.2.2", "version": "7.2.2",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
@ -6856,6 +6910,28 @@
"source-map": "^0.6.0" "source-map": "^0.6.0"
} }
}, },
"node_modules/spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
"dev": true
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
"integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
"dev": true
},
"node_modules/sshpk": { "node_modules/sshpk": {
"version": "1.17.0", "version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@ -8993,6 +9069,17 @@
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
"dev": true "dev": true
}, },
"@es-joy/jsdoccomment": {
"version": "0.23.6",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
"dev": true,
"requires": {
"comment-parser": "1.3.1",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "~2.2.5"
}
},
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
@ -9962,6 +10049,12 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true "dev": true
}, },
"comment-parser": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
"integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
"dev": true
},
"commondir": { "commondir": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@ -10848,6 +10941,21 @@
} }
} }
}, },
"eslint-plugin-jsdoc": {
"version": "39.2.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
"dev": true,
"requires": {
"@es-joy/jsdoccomment": "~0.23.1",
"comment-parser": "1.3.1",
"debug": "^4.3.4",
"escape-string-regexp": "^4.0.0",
"esquery": "^1.4.0",
"semver": "^7.3.7",
"spdx-expression-parse": "^3.0.1"
}
},
"eslint-scope": { "eslint-scope": {
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
@ -11770,6 +11878,12 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"jsdoc-type-pratt-parser": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
"dev": true
},
"jsdom": { "jsdom": {
"version": "7.2.2", "version": "7.2.2",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
@ -12871,6 +12985,28 @@
"source-map": "^0.6.0" "source-map": "^0.6.0"
} }
}, },
"spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
"integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
"dev": true
},
"sshpk": { "sshpk": {
"version": "1.17.0", "version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",

View File

@ -28,6 +28,7 @@
"esdoc-standard-plugin": "^1.0.0", "esdoc-standard-plugin": "^1.0.0",
"eslint": "^8.13.0", "eslint": "^8.13.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsdoc": "^39.2.2",
"eslint-webpack-plugin": "^3.1.1", "eslint-webpack-plugin": "^3.1.1",
"mocha": "^9.2.2", "mocha": "^9.2.2",
"mocha-junit-reporter": "^2.0.2", "mocha-junit-reporter": "^2.0.2",

View File

@ -26,7 +26,7 @@ export default class PlayListSong {
} }
/** /**
* @typedef {function} AudioEventCallback * @typedef {Function} AudioEventCallback
* @param {HTMLAudioElement} audio * @param {HTMLAudioElement} audio
*/ */
@ -55,31 +55,27 @@ export default class PlayListSong {
} }
/** /**
* * @returns {string} The name of the song to be displayed.
* The name of the song to be displayed.
*/ */
get displayName() { get displayName() {
return this.#displayName; return this.#displayName;
} }
/** /**
* * @returns {string} The author of the song.
* The author of the song.
*/ */
get author() { get author() {
return this.#author; return this.#author;
} }
/** /**
* * @returns {string} The url at which the file for this song can be found.
* The url at which the file for this song can be found.
*/ */
get url() { get url() {
return this.#url; return this.#url;
} }
/** /**
*
* @returns {boolean} true if and only if there is audio data that is either already loaded or is being loaded. * @returns {boolean} true if and only if there is audio data that is either already loaded or is being loaded.
*/ */
isAudioInstantiated() { isAudioInstantiated() {
@ -109,7 +105,7 @@ export default class PlayListSong {
/** /**
* *
* The volume on a scale of 0 to 1. * @returns {number} The volume on a scale of 0 to 1.
*/ */
get volume() { get volume() {
return this.fetchAudio().volume; return this.fetchAudio().volume;
@ -124,7 +120,7 @@ export default class PlayListSong {
} }
/** /**
* *
* The number of seconds into the song. * @returns {number} The number of seconds into the song.
*/ */
get currentTime() { get currentTime() {
return this.fetchAudio().currentTime; return this.fetchAudio().currentTime;
@ -140,7 +136,7 @@ export default class PlayListSong {
/** /**
* *
* The duration of the song. * @returns {number} The duration of the song.
*/ */
get duration() { get duration() {
return this.fetchAudio().duration; return this.fetchAudio().duration;

View File

@ -1,4 +1,6 @@
import "../styles/songplayer.css"; import "../styles/songplayer.css";
import PlayListSong from "./PlaylistSong.js";
import SongPlaylist from "./SongPlaylist.js";
/** /**
* A player that keeps track of global properties for playback as well as traversing a playlist. Additionally keeps track of song audio data and attempts to reduce memory usage when possible. * A player that keeps track of global properties for playback as well as traversing a playlist. Additionally keeps track of song audio data and attempts to reduce memory usage when possible.
@ -41,8 +43,9 @@ export default class SongPlayer {
} }
/** /**
*
* The current playlist of songs that this player is in charge of. * The current playlist of songs that this player is in charge of.
*
* @returns {SongPlaylist} The song playlist this player is currently using.
*/ */
get playlist() { get playlist() {
return this.#playlist; return this.#playlist;
@ -100,7 +103,7 @@ export default class SongPlayer {
/** /**
* *
* The current song's index in the playlist. * @returns {number} The current song's index in the playlist.
*/ */
get currentSongIndex() { get currentSongIndex() {
return this.#current; return this.#current;
@ -115,6 +118,9 @@ export default class SongPlayer {
}); });
} }
/**
* Pauses the current playing song (if there is one playing).
*/
pauseCurrent() { pauseCurrent() {
console.log("Pausing."); console.log("Pausing.");
this.currentSong.fetchAudio().pause(); this.currentSong.fetchAudio().pause();
@ -143,7 +149,7 @@ export default class SongPlayer {
/** /**
* *
* The current volume of the player represented by a number between 0 and 1 inclusive. * @returns {number} The current volume of the player represented by a number between 0 and 1 inclusive.
*/ */
get volume() { get volume() {
return this.#volume; return this.#volume;
@ -165,7 +171,7 @@ export default class SongPlayer {
/** /**
* *
* How many seconds into the audio track has been played in seconds. * @returns {number} How many seconds into the audio track has been played in seconds.
*/ */
get currentPosition() { get currentPosition() {
return this.currentSong.fetchAudio().currentTime; return this.currentSong.fetchAudio().currentTime;
@ -173,7 +179,7 @@ export default class SongPlayer {
/** /**
* *
* The total length of the song, or NaN if this information has not loaded yet. * @returns {number} The total length of the song, or NaN if this information has not loaded yet.
*/ */
get currentDuration() { get currentDuration() {
return this.currentSong.fetchAudio().duration; return this.currentSong.fetchAudio().duration;
@ -227,14 +233,14 @@ export default class SongPlayer {
} }
/** /**
* The current {@link PlaylistSong}. * @returns {PlayListSong} The current playlist being used.
*/ */
get currentSong() { get currentSong() {
return this.#playlist.songAtIndex(this.#current); return this.#playlist.songAtIndex(this.#current);
} }
/** /**
* @typedef {function} changeListener * @typedef {Function} changeListener
* @param {*} old the previous value. * @param {*} old the previous value.
* @param {*} current the the current (new) value. * @param {*} current the the current (new) value.
*/ */
@ -348,7 +354,7 @@ export default class SongPlayer {
} }
/** /**
* If the player is playing any songs right now. * @returns {boolean} If the player is playing any songs right now.
*/ */
get playing() { get playing() {
return this.currentSong.isAudioInstantiated() && !this.currentSong.fetchAudio().paused; return this.currentSong.isAudioInstantiated() && !this.currentSong.fetchAudio().paused;

View File

@ -1,7 +1,7 @@
import PlaylistSong from "./PlaylistSong.js"; import PlaylistSong from "./PlaylistSong.js";
/** /**
* A playlist that holds a multitude of songs in the form of {@see PlaylistSong}. * A playlist that holds a multitude of songs in the form of {@link PlaylistSong}.
*/ */
export default class SongPlaylist { export default class SongPlaylist {
#list = []; #list = [];
@ -17,8 +17,7 @@ export default class SongPlaylist {
} }
/** /**
* * @returns {string} The name of the playlist.
* The name of the playlist.
*/ */
get name() { get name() {
return this.#name; return this.#name;

View File

@ -1,5 +1,7 @@
import Visualizer from "../visualization/Visualizer.js";
import VisualizerUpdateManager from "../visualization/VisualizerUpdateManager.js"; import VisualizerUpdateManager from "../visualization/VisualizerUpdateManager.js";
import SongPlayer from "./SongPlayer.js"; import SongPlayer from "./SongPlayer.js";
import SongPlaylist from "./SongPlaylist.js";
/** /**
* A song player that provides easier access to the current songs visualizer data. * A song player that provides easier access to the current songs visualizer data.
@ -72,14 +74,14 @@ export default class VisualizedSongPlayer extends SongPlayer {
} }
/** /**
* The current visualizer update manager. * @returns {VisualizerUpdateManager} The current visualizer update manager.
*/ */
get currentVisualizerUpdateManager() { get currentVisualizerUpdateManager() {
return this.#visualizerUpdateManager(); return this.#visualizerUpdateManager();
} }
/** /**
* The current song's visualizer. * @returns {Visualizer} The current song's visualizer.
*/ */
get currentSongVisualizer() { get currentSongVisualizer() {
return this.getCurrentSong().getVisualizer(); return this.getCurrentSong().getVisualizer();

View File

@ -101,7 +101,7 @@ export default class Visualizer {
/** /**
* The number of bins based on the size of the FFT window. * @returns {number} The number of bins based on the size of the FFT window.
*/ */
get numberOfBins() { get numberOfBins() {
return this.#buffer.length; return this.#buffer.length;
@ -109,7 +109,7 @@ export default class Visualizer {
/** /**
* *
* The fft window size. * @returns {number} The fft window size.
*/ */
get fftSize() { get fftSize() {
return this.#analyzer.fftSize; return this.#analyzer.fftSize;

View File

@ -1,3 +1,5 @@
import Visualizer from "./Visualizer.js";
/** /**
* A visualizer update manager offers an extra layer of abstraction on top of the {@link Visualizer}'s update listener. * A visualizer update manager offers an extra layer of abstraction on top of the {@link Visualizer}'s update listener.
* *
@ -49,14 +51,14 @@ export default class VisualizerUpdateManager {
} }
/** /**
* @typedef {function} visualizerBinUpdateListener * @typedef {Function} visualizerBinUpdateListener
* @param {number} timeDelta elapsed time since last update. * @param {number} timeDelta elapsed time since last update.
* @param {number} amplitude The amplitude of the associated bin. * @param {number} amplitude The amplitude of the associated bin.
* @param {number} ampDelta change in amplitude of the frequency bin. * @param {number} ampDelta change in amplitude of the frequency bin.
*/ */
/** /**
* @typedef {function} visualizerRangedUpdateListener * @typedef {Function} visualizerRangedUpdateListener
* @param {number} timeDelta elapsed time since last update. * @param {number} timeDelta elapsed time since last update.
* @param {number} bins the bins of the range. * @param {number} bins the bins of the range.
*/ */