Added JSDoc linting again.
This commit is contained in:
		@@ -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"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										136
									
								
								audioshowkit/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										136
									
								
								audioshowkit/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -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",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user