diff --git a/css/dark-theme.scss b/css/dark-theme.scss index 6d695923..a15adcae 100644 --- a/css/dark-theme.scss +++ b/css/dark-theme.scss @@ -165,6 +165,10 @@ --blocked-seller: #d64c4c; --icon-green: #5ec93b; --icon-disabled: #666666; + /* Collection */ + --collection-row-hover: #292929; + --collection-row-hover-selected: #222932; + --collection-row-selected: #212e3d; } /* //////////////////////////////////// @@ -192,6 +196,9 @@ --modified-cart-text: #adbeff; --modified-cart-htag: #c5def7; --modified-cart-remove-icon: #c5def7; + --collection-row-hover: #25262a; + --collection-row-hover-selected: #172130; + --collection-row-selected: #1d2b40; } /* //////////////////////////////////// @@ -226,6 +233,9 @@ --link: #83a2c8; --link-visited: #a78fd6; --blocked-seller: #cd4946; + --collection-row-hover: #1c2128; + --collection-row-hover-selected: #172130; + --collection-row-selected: #1d2b40; } .de-dark-theme { @@ -6258,6 +6268,14 @@ color: var(--text-muted) !important; } + .MuiDataGrid-columnSeparator { + display: none !important; + } + + .MuiTooltip-popper > div { + background: var(--black) !important; + } + figure[class*="card_"] { border-color: var(--borders) !important; box-shadow: 0 4px 8px -2px var(--box-shadow-light); @@ -6546,8 +6564,18 @@ background: var(--row-even) !important; } - .MuiDataGrid-row:hover { - background: var(--input-bg) !important; + .MuiDataGrid-row { + &:hover { + background: var(--collection-row-hover) !important; + + &.Mui-selected { + background: var(--collection-row-hover-selected) !important; + } + } + + &.Mui-selected { + background: var(--collection-row-selected) !important; + } } .Mui-checked svg path, diff --git a/html/learn.html b/html/learn.html index b3f0d4d3..88e22aa1 100644 --- a/html/learn.html +++ b/html/learn.html @@ -215,7 +215,7 @@

Compact Artist & Label Pages

-

Compact Collection Header

+

Compact Collection Page

Reduces the overall white space in the header section of the Collection page, removes the top pagination navigation links, reduces font sizes, and moves some UI elements around in order to mimic the old Collection page layout.

@@ -1043,7 +1043,7 @@

Thank You

  • Rosalyn R.
  • Ryan C.
  • Salvatore C.
  • -
  • sdsowlsa
  • +
  • sdsowlsa
  • Semen I.
  • Shaun G.
  • Simon Q.
  • diff --git a/html/popup.html b/html/popup.html index 4f6ce90d..e1e8ed5e 100644 --- a/html/popup.html +++ b/html/popup.html @@ -150,8 +150,8 @@

    👋 Heads up!

    -

    Compact Collection Header

    -
    Compact Collection Pages white space size smaller
    +

    Compact Collection Page

    +
    Compact Collection Pages header white space size smaller
    diff --git a/js/extension/dependencies/tests/unit-tests.js b/js/extension/dependencies/tests/unit-tests.js index 3bd52681..3d5548e9 100644 --- a/js/extension/dependencies/tests/unit-tests.js +++ b/js/extension/dependencies/tests/unit-tests.js @@ -219,17 +219,17 @@ resourceLibrary.ready(() => { let printSymbol = { - de: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'], + de: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'DKK', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'], - en: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'], + en: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'DKK', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'], - es: ['€', '£', 'JP¥', 'JP¥', 'AU$', 'CA$', 'CHF', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', 'US$'], + es: ['€', '£', 'JP¥', 'JP¥', 'AU$', 'CA$', 'CHF', 'DKK', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', 'US$'], - fr: ['€', '£UK', '¥JP', '¥JP', '$AU', '$CA', 'CHF', 'SEK', '$NZ', '₽', 'ZAR', 'MX$', 'R$', '$US'], + fr: ['€', '£UK', '¥JP', '¥JP', '$AU', '$CA', 'CHF', 'DKK', 'SEK', '$NZ', '₽', 'ZAR', 'MX$', 'R$', '$US'], - it: ['€', '£', 'JP¥', 'JP¥', 'A$', 'CA$', 'CHF', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', 'USD'], + it: ['€', '£', 'JP¥', 'JP¥', 'A$', 'CA$', 'CHF', 'DKK', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', 'USD'], - ja: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'] + ja: ['€', '£', '¥', '¥', 'A$', 'CA$', 'CHF', 'DKK', 'SEK', 'NZ$', '₽', 'ZAR', 'MX$', 'R$', '$'] }; console.log('/// Testing printSymbol arrays ///'); @@ -246,7 +246,7 @@ resourceLibrary.ready(() => { } }); - if (count === 14) { + if (count === 15) { console.log('%c PASSED ', 'color: limegreen', 'All printSymbols were correctly retrieved'); diff --git a/js/extension/features/compact-collection-header.js b/js/extension/features/compact-collection-header.js index 59f69597..1d06be8a 100644 --- a/js/extension/features/compact-collection-header.js +++ b/js/extension/features/compact-collection-header.js @@ -12,7 +12,7 @@ rl.ready(() => { margin-right: 2rem; } - [class*="content_"] { + #app [class*="content_"] { margin-top: 1rem; } [class*="itemTitle_"] { @@ -21,12 +21,15 @@ rl.ready(() => { [class*="itemData_"] { line-height: 16px; } - [class*="viewAndShow_"]{ + [class*="viewAndShow_"] { width: 250px !important; } [class*="horizontalLinks_"] ul { padding: 0 .5rem; } + .MuiDataGrid-cell { + padding: 5px !important; + } [class*="format_item_"], [class*="released_"], @@ -39,6 +42,7 @@ rl.ready(() => { font-size: 13px !important; } `; + rl.attachCss('collection-page', rules); let collectionItems = 'div[class*="MuiDataGrid-cell--withRenderer"]'; @@ -51,6 +55,7 @@ rl.ready(() => { // Don't run when viewing someone else's collection if (!bulkActionsRow) return; + // Relocate Layout buttons bulkActionsRow.insertAdjacentElement('beforeend', layoutBtns); document.querySelector('[class*="pagerAndViewContainer_"]').style.display = 'none'; diff --git a/js/popup/change-log.js b/js/popup/change-log.js index b8146fec..3f7f500d 100644 --- a/js/popup/change-log.js +++ b/js/popup/change-log.js @@ -2,7 +2,7 @@ module.exports = { current: [ { features: [{ - name: 'Compact Collection Header', + name: 'Compact Collection Page', description: 'Reduces the white space, font sizes, and rearranges UI elements on the Collection header in order to mimic the old Collection page.', link: '#compactCollection' }], diff --git a/manifest.json b/manifest.json index bbeac604..4dfd967a 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "Discogs Enhancer", "short_name": "Discogs Enhancer", "description": "Adds a dark theme, block sellers, price comparisons, currency converter, configurable quick search, & more to Discogs!", - "version": "3.8.0", + "version": "3.8.1", "author": "Matthew Salcido", "homepage_url": "https://www.discogs-enhancer.com", "action": { diff --git a/package-lock.json b/package-lock.json index 427c746b..4683e3fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,15 @@ { "name": "discogs-enhancer", - "version": "3.8.0", + "version": "3.8.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "discogs-enhancer", - "version": "3.1.3", + "version": "3.8.0", "license": "GPL-3.0-or-later", "dependencies": { - "clipboardy": "^3.0.0", - "mocha": "^9.2.2" + "clipboardy": "^3.0.0" }, "devDependencies": { "babel-core": "^6.26.3", @@ -779,11 +778,6 @@ "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", "dev": true }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -1089,14 +1083,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -1119,6 +1105,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1149,7 +1136,8 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-includes": { "version": "3.1.4", @@ -1911,7 +1899,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/big.js": { "version": "5.2.2", @@ -1926,6 +1915,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -1934,6 +1924,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1943,6 +1934,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1950,11 +1942,6 @@ "node": ">=8" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -2020,17 +2007,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001478", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", @@ -2071,6 +2047,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -2097,6 +2074,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2129,35 +2107,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2208,7 +2157,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -2347,17 +2297,6 @@ "ms": "2.0.0" } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2388,14 +2327,6 @@ "node": ">=0.10.0" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2426,11 +2357,6 @@ "integrity": "sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==", "dev": true }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -2526,6 +2452,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -3139,6 +3066,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3175,14 +3103,6 @@ "node": ">=4" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3220,12 +3140,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -3251,14 +3173,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -3304,6 +3218,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3390,14 +3305,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3467,14 +3374,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, "node_modules/home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -3607,6 +3506,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3615,7 +3515,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", @@ -3665,6 +3566,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -3745,6 +3647,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3761,18 +3664,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3796,6 +3692,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -3824,14 +3721,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3910,17 +3799,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -4022,6 +3900,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -4150,85 +4029,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4340,6 +4140,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4365,253 +4166,66 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">=0.10.0" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { - "ms": "2.1.2" + "path-key": "^3.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=8" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node": ">= 0.4" } }, "node_modules/object.assign": { @@ -4653,6 +4267,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -4788,6 +4403,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4831,6 +4447,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5134,6 +4751,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -5157,6 +4775,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -5249,14 +4868,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -5361,7 +4972,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/sass": { "version": "1.62.0", @@ -5501,6 +5113,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -5600,38 +5213,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -5691,6 +5272,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -5912,6 +5494,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6330,80 +5913,11 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/ws": { "version": "6.2.2", @@ -6414,59 +5928,12 @@ "async-limiter": "~1.0.0" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -6481,6 +5948,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, @@ -7068,11 +6536,6 @@ "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", "dev": true }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -7326,11 +6789,6 @@ "dev": true, "requires": {} }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -7347,6 +6805,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -7360,7 +6819,8 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-includes": { "version": "3.1.4", @@ -8080,7 +7540,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "big.js": { "version": "5.2.2", @@ -8091,12 +7552,14 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8106,15 +7569,11 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, "browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -8155,11 +7614,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, "caniuse-lite": { "version": "1.0.30001478", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", @@ -8183,6 +7637,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8198,6 +7653,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -8220,31 +7676,6 @@ "is-wsl": "^2.2.0" } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -8292,7 +7723,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -8393,11 +7825,6 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8422,11 +7849,6 @@ "repeating": "^2.0.0" } }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -8451,11 +7873,6 @@ "integrity": "sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -8526,7 +7943,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", @@ -8991,6 +8409,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -9015,11 +8434,6 @@ "locate-path": "^2.0.0" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -9050,12 +8464,14 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { @@ -9071,11 +8487,6 @@ "dev": true, "peer": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -9106,6 +8517,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9170,11 +8582,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -9220,11 +8627,6 @@ "has-symbols": "^1.0.2" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -9316,6 +8718,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -9324,7 +8727,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "internal-slot": { "version": "1.0.3", @@ -9365,6 +8769,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -9411,7 +8816,8 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.1.0", @@ -9419,15 +8825,11 @@ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -9441,7 +8843,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.6", @@ -9458,11 +8861,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9511,11 +8909,6 @@ "has-symbols": "^1.0.2" } }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9594,6 +8987,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "requires": { "argparse": "^2.0.1" } @@ -9694,60 +9088,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -9826,6 +9166,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -9845,134 +9186,12 @@ "minimist": "^1.2.5" } }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9994,7 +9213,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "npm-run-path": { "version": "4.0.1", @@ -10043,6 +9263,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -10140,7 +9361,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -10174,7 +9396,8 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -10373,6 +9596,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -10396,6 +9620,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -10475,11 +9700,6 @@ "is-finite": "^1.0.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -10547,7 +9767,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "sass": { "version": "1.62.0", @@ -10637,6 +9858,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -10715,31 +9937,6 @@ "safe-buffer": "~5.1.0" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -10783,7 +9980,8 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "style-loader": { "version": "1.3.0", @@ -10927,6 +10125,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -11208,61 +10407,11 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "ws": { "version": "6.2.2", @@ -11273,47 +10422,12 @@ "async-limiter": "~1.0.0" } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -11327,7 +10441,8 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 8c72c3a1..1ff47c99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discogs-enhancer", - "version": "3.8.0", + "version": "3.8.1", "description": "A Chrome extension that adds useful functionality to Discogs.com! https://www.discogs-enhancer.com", "main": "index.js", "scripts": { @@ -41,7 +41,6 @@ "webpack-cli": "^5.0.1" }, "dependencies": { - "clipboardy": "^3.0.0", - "mocha": "^9.2.2" + "clipboardy": "^3.0.0" } } diff --git a/readme.md b/readme.md index 9f6ffa22..c82a8855 100644 --- a/readme.md +++ b/readme.md @@ -96,22 +96,6 @@ Discogs Enhancer gets a near perfect score with [Google's Lighthouse](https://de * Watch for changes: * `npm run watch` -#### Testing - -* Run `unauthenticated` functional tests: - - * `npm test` - - -* Run `authenticated` functional tests: - > Note: If you want to run authenticated tests you'll need an account to log in with and run them with one of the commands below. When running the `authenticated` tests, the `unauthenticated` tests will also be run. - - * `env USERNAME= env PASSWORD= npm test` - * This will try to log you in automatically using Discogs authentication. - * `env USEOAUTH=true npm test` - * This will pop up the login page to allow you to manually login via supported OAuth providers; Google, Facebook, or Apple. - - #### Building * Export the extension to `dist` directory: * `npm run build:production` @@ -121,54 +105,6 @@ Discogs Enhancer gets a near perfect score with [Google's Lighthouse](https://de *** -## Functional Tests -
    - Test Checklist (33/37) -

    - - #### AUTHENTICATED - - [ ] Block Buyers _(Requires user w/ sales history)_ - - [ ] Feedback Notifications _(Requires user w/ Buyer/Seller feedback)_ - - [x] Hide Min/Med/Max columns - - [x] Larger BAOI Fields - - [x] Notes Counter - - [x] Random Item - - [x] Remove From Wantlist Shortcuts - - [x] Seller Items In Cart - - [x] Show Actual Add Date - - [x] Show Average Prices - - [x] Suggested Prices - - [x] Text Format Shortcuts - - #### UNAUTHENTICATED - - [x] Block Sellers - - [x] Favorite Sellers - - [x] Filter Sleeve Condition - - [x] Inventory Ratings - - [x] Seller Rep - - [x] Currency Converter - - [x] Dark Theme - - [x] Everlasting Marketplace - - [x] Filter Media Condition - - [x] Filter Shipping Country - - [x] Large YouTube playlists - - [x] Lists In New Tabs - - [x] Marketplace Condition Highlights - - [x] Quick Search - - [x] Rating Percentage - - [x] Relative Last Sold Dates - - [x] Release Durations - - [x] Release Ratings - - [x] Release Scanner - - [x] Sort Buttons - - [x] Tracklist Readability - - [x] Tweak Discriminators - -

    -
    - -*** - ## 🏗 Adding a Feature In order to add a togglable feature to the extension you'll need to update the files listed below. This guide assumes you've added a new `.js` file to `js/extension/features/` and that it does not require additional CSS files, configuration pages, or submenus. Features that require their own configuration pages or submenus are more complex and are out of scope for this guide. diff --git a/test/authenticated/average-price.js b/test/authenticated/average-price.js deleted file mode 100644 index 86f3d75a..00000000 --- a/test/authenticated/average-price.js +++ /dev/null @@ -1,16 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleAveragePrice'); - - await Promise.all([ - page.goto('https://www.discogs.com/Sascha-Dive-The-Basic-Collective-EP-Part-1-Of-3/release/950480', { waitUntil: 'networkidle2' }), - page.waitFor('.de-average-price') - ]); - - let hasAverage = await page.$eval('.de-average-price', elem => elem.classList.contains('de-average-price')); - assert.equal(hasAverage, true, 'Price average was not rendered'); -}; - -module.exports = { test }; diff --git a/test/authenticated/baoi-fields.js b/test/authenticated/baoi-fields.js deleted file mode 100644 index f5b09236..00000000 --- a/test/authenticated/baoi-fields.js +++ /dev/null @@ -1,16 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleBaoiFields'); - - await Promise.all([ - page.goto('https://www.discogs.com/release/edit/950480', { waitUntil: 'networkidle2' }), - page.waitFor('.clearfix_no_overflow') - ]); - - let hasLargeFields = await page.$eval('td[data-ref-overview="barcode"] input', elem => elem.offsetWidth > 232); - assert.equal(hasLargeFields, true, 'Large BAOI fields were not rendered'); -}; - -module.exports = { test }; diff --git a/test/authenticated/collection-new-tabs.js b/test/authenticated/collection-new-tabs.js deleted file mode 100644 index da62eec2..00000000 --- a/test/authenticated/collection-new-tabs.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleCollectionNewTabs'); - - await Promise.all([ - page.goto(`https://www.discogs.com/user/${process.env.USERNAME}/collection`, { waitUntil: 'networkidle2' }), - page.waitFor('.release-table-card a'), - page.waitFor('.FacetGroup a') - ]); - - let release = await page.$eval('.release-table-card a', elem => elem.target === '_blank'); - assert.equal(release, true, 'Anchors were not modified'); -}; - -module.exports = { test }; diff --git a/test/authenticated/editing-notepad.js b/test/authenticated/editing-notepad.js deleted file mode 100644 index 9b9fafd7..00000000 --- a/test/authenticated/editing-notepad.js +++ /dev/null @@ -1,98 +0,0 @@ -const assert = require( 'assert' ); -const { toggleFeature } = require( '../test' ); -const clipboardy = require( 'clipboardy' ); - -const SAMPLE_RELEASE = 'https://www.discogs.com/release/edit/7796190'; - -async function notepadIsLoaded( page ) { - await Promise.all( [ - page.goto( SAMPLE_RELEASE, { waitUntil: 'networkidle2' } ), - page.waitFor( '#de-editing-notepad' ) - ] ); -} - -let hiddenOnFirstRun = async function ( page ) { - await toggleFeature( '#toggleEditingNotepad' ); - await notepadIsLoaded( page ); - - let isHidden = await page.$eval( '#de-editing-notepad', elem => elem.classList.contains( 'de-editing-notepad-hidden' ) ); - let editButtonVisibility = await page.$eval( '#de-editing-notepad-edit-button', elem => window.getComputedStyle( elem ).visibility ); - - assert.strictEqual( isHidden, true, 'Notepad was not hidden on first run.' ); - assert.strictEqual( editButtonVisibility, 'hidden', 'Edit button was not hidden when notepad was hidden.' ); -}; - -let expandedWhenClicked = async function ( page ) { - await notepadIsLoaded( page ); - - await page.$eval( '#de-editing-notepad-toggle-button', elem => elem.click() ); - let isVisible = await page.$eval( '#de-editing-notepad', elem => !elem.classList.contains( 'de-editing-notepad-hidden' ) ); - assert.strictEqual( isVisible, true, 'Notepad was not expanded when toggle button was clicked.' ); - - await notepadIsLoaded( page ); - - isVisible = false; - isVisible = await page.$eval( '#de-editing-notepad', elem => !elem.classList.contains( 'de-editing-notepad-hidden' ) ); - assert.strictEqual( isVisible, true, 'Notepad did not stay expanded after a refresh.' ); - - let defaultNotepadContent = await page.$eval( '#de-editing-notepad-area', elem => elem.innerHTML ); - - assert.strictEqual( defaultNotepadContent, '
    ', 'Notepad did not have default content.' ); -}; - -let goesIntoEditMode = async function ( page ) { - await notepadIsLoaded( page ); - - await page.$eval( '#de-editing-notepad-edit-button', elem => elem.click() ); - - let isEditing = await page.$eval( '#de-editing-notepad', elem => elem.classList.contains( 'de-editing-notepad-isediting' ) ); - let isContentEditable = await page.$eval( '#de-editing-notepad-area', elem => elem.isContentEditable ); - - assert.strictEqual( isEditing, true, 'Notepad did not go into edit mode.' ); - assert.strictEqual( isContentEditable, true, 'Notepad text area is not editable.' ); - - await notepadIsLoaded( page ); - - isEditing = await page.$eval( '#de-editing-notepad', elem => elem.classList.contains( 'de-editing-notepad-isediting' ) ); - isContentEditable = await page.$eval( '#de-editing-notepad-area', elem => elem.isContentEditable ); - - assert.strictEqual( isEditing, false, 'Notepad stayed in edit mode after a refresh.' ); - assert.strictEqual( isContentEditable, false, 'Notepad text area is editable after a refresh.' ); -}; - -let savesEdits = async function ( page ) { - await notepadIsLoaded( page ); - - await page.$eval( '#de-editing-notepad-edit-button', elem => elem.click() ); - - await clipboardy.write( 'My notes.' ); - - await page.keyboard.down( 'Control' ); - await page.keyboard.press( 'V' ); - await page.keyboard.up( 'Control' ); - - await new Promise( resolve => setTimeout( resolve, 500 ) ); - - await clipboardy.write( 'http://localhost/' ); - - await page.keyboard.down( 'Control' ); - await page.keyboard.press( 'V' ); - await page.keyboard.up( 'Control' ); - - await new Promise( resolve => setTimeout( resolve, 500 ) ); - - const notepadHTML = await page.$eval( '#de-editing-notepad-area', elem => elem.innerHTML ); - const expectedHTML = ''; - - assert.strictEqual( notepadHTML, expectedHTML, 'Notepad text was different than expected.' ); - - // sleep 500ms - await new Promise( resolve => setTimeout( resolve, 500 ) ); - - await notepadIsLoaded( page ); - const refreshedNotepadHTML = await page.$eval( '#de-editing-notepad-area', elem => elem.innerHTML ); - assert.strictEqual( notepadHTML, refreshedNotepadHTML, 'Notepad text was different after refresh.' ); -}; - -// these should be run in order -module.exports = { hiddenOnFirstRun, expandedWhenClicked, goesIntoEditMode, savesEdits }; diff --git a/test/authenticated/login.js b/test/authenticated/login.js deleted file mode 100644 index d648171c..00000000 --- a/test/authenticated/login.js +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); - -let test = async function(page, username, password) { - - await Promise.all( [ - await page.goto( 'https://auth.discogs.com/login?service=https%3A//www.discogs.com/login%3Freturn_to%3D%252Fmy' ), - await page.waitFor( 'button.green' ), - await page.waitForSelector( '#onetrust-accept-btn-handler' ) - ]); - - await page.click( '#onetrust-accept-btn-handler' ); - - await page.type('#username', username); - await page.type('#password', password); - await page.click('button.green'); - - let pageUrl = await page.url(); - assert.equal(pageUrl, 'https://www.discogs.com/my', 'Login was unsuccessful'); -}; - -module.exports = { test }; diff --git a/test/authenticated/min-max-columns.js b/test/authenticated/min-max-columns.js deleted file mode 100644 index ea4571ba..00000000 --- a/test/authenticated/min-max-columns.js +++ /dev/null @@ -1,22 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleMinMaxColumns'); - - await Promise.all([ - page.goto(`https://www.discogs.com/user/${process.env.USERNAME}/collection`, { waitUntil: 'networkidle2' }), - page.waitFor('td[data-header="Max"') - ]); - - let maxHidden = await page.$eval('td[data-header="Max"', elem => elem.clientHeight === 0); - assert.equal(maxHidden, true, 'Max Columns were not hidden'); - - let medHidden = await page.$eval('td[data-header="Med"', elem => elem.clientHeight === 0); - assert.equal(medHidden, true, 'Med Columns were not hidden'); - - let minHidden = await page.$eval('td[data-header="Min"', elem => elem.clientHeight === 0); - assert.equal(minHidden, true, 'Min Columns were not hidden'); -}; - -module.exports = { test }; diff --git a/test/authenticated/notes-counter.js b/test/authenticated/notes-counter.js deleted file mode 100644 index 663432d5..00000000 --- a/test/authenticated/notes-counter.js +++ /dev/null @@ -1,32 +0,0 @@ -const assert = require('assert'); - -// Append Counter -let appendCounter = async function(page) { - await page.waitFor(3000); - let pageUrl = await page.url(); - - await Promise.all([ - page.goto(pageUrl, { waitUntil: 'networkidle2' }), - page.waitFor('[data-field-name="Notes"]') - ]); - - await page.$eval('[data-field-name="Notes"] .notes_show', elem => elem.click()); - - await page.waitFor('.de-notes-count'); - - let counter = await page.$eval('.de-notes-count', elem => elem.classList.contains('de-notes-count')); - assert.equal(counter, true, 'Counter was not appended to Notes'); -}; - -// Count -let count = async function(page) { - await Promise.all([ - await page.waitFor('.notes_textarea'), - await page.type('.notes_textarea', 'METALLICA!!!') - ]); - - let counter = await page.$eval('.de-notes-count', elem => elem.textContent === '12 / 255'); - assert.equal(counter, true, 'Counter did not change after typing'); -}; - -module.exports = { appendCounter, count }; diff --git a/test/authenticated/random-item.js b/test/authenticated/random-item.js deleted file mode 100644 index 10fb3ad8..00000000 --- a/test/authenticated/random-item.js +++ /dev/null @@ -1,26 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let append = async function(page) { - await toggleFeature('#toggleRandomItem'); - await Promise.all([ - page.goto('https://www.discogs.com/my', { waitUntil: 'networkidle2' }), - page.waitFor('.de-random-item') - ]); - let hasIcon = await page.$eval('.de-random-item', elem => elem.classList.contains('de-random-item')); - assert.equal(hasIcon, true, 'Random Item Button was not appended to nav'); -}; - -let random = async function(page) { - await page.click('.de-random-item'); - let randomItem = false; - await page.waitForResponse(response => { - if ( response.request().url().includes('/collection') ) { - randomItem = true; - return randomItem; - } - assert.equal(randomItem, true, 'Random item was not fetched'); - }); -}; - -module.exports = { append, random }; diff --git a/test/authenticated/remove-from-wantlist.js b/test/authenticated/remove-from-wantlist.js deleted file mode 100644 index d83cc6eb..00000000 --- a/test/authenticated/remove-from-wantlist.js +++ /dev/null @@ -1,35 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let render = async function(page) { - await toggleFeature('#toggleRemoveFromWantlist'); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/mywants', { waitUntil: 'networkidle2' }), - page.waitFor('.de-remove-wantlist') - ]); - - let hasShortcuts = await page.$eval('.de-remove-wantlist', elem => elem.classList.contains('de-remove-wantlist')); - assert.equal(hasShortcuts, true, 'Shortcuts were not rendered'); -}; - -let prompt = async function(page) { - - await Promise.all([ - page.goto('https://www.discogs.com/sell/mywants', { waitUntil: 'networkidle2' }), - page.waitFor('.de-remove-wantlist') - ]); - - await page.$eval('.de-remove-wantlist', elem => elem.click()); - - await Promise.all([ - page.waitFor(1000), - page.waitFor('.de-remove-yes'), - page.waitFor('.de-remove-no') - ]); - - let hasPrompt = await page.$eval('.de-remove-yes', elem => elem.classList.contains('de-remove-yes')); - assert.equal(hasPrompt, true, 'Prompt was not displayed'); -}; - -module.exports = { render, prompt }; diff --git a/test/authenticated/seller-items-in-cart.js b/test/authenticated/seller-items-in-cart.js deleted file mode 100644 index 7a4cb55f..00000000 --- a/test/authenticated/seller-items-in-cart.js +++ /dev/null @@ -1,24 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -// it should display an icon next to the seller's name -let test = async function(page) { - await toggleFeature('#toggleSellerItemsInCart'); - await Promise.all([ - page.goto('https://www.discogs.com/sell/mywants?sort=condition%2Cdesc&limit=50', { waitUntil: 'networkidle2' }), - page.waitFor('.button.button-green.cart_button') - ]); - - await page.$eval('.button.button-green.cart_button', btn => btn.click()); - await page.waitFor(2000); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/mywants?sort=condition%2Cdesc&limit=250', { waitUntil: 'networkidle2' }), - page.waitFor('.de-items-in-cart') - ]); - - let hasBadge = await page.$eval('.de-items-in-cart', elem => elem.classList.contains('de-items-in-cart')); - assert.equal(hasBadge, true, 'Badge was not rendered to Seller name'); -}; - -module.exports = { test }; diff --git a/test/authenticated/show-actual-dates.js b/test/authenticated/show-actual-dates.js deleted file mode 100644 index b085a983..00000000 --- a/test/authenticated/show-actual-dates.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleAbsoluteDate'); - await page.waitFor(3000); - let pageUrl = await page.url(); - await Promise.all([ - page.goto(pageUrl, { waitUntil: 'networkidle2' }), - page.waitFor('.cw_block_timestamp') - ]); - - let actualDate = await page.$eval('.cw_block_timestamp span', elem => elem.dataset.approx.includes('ago')); - assert.equal(actualDate, true, 'Actual date markup was not rendered'); -}; - -module.exports = { test }; diff --git a/test/authenticated/suggested-prices.js b/test/authenticated/suggested-prices.js deleted file mode 100644 index 86136034..00000000 --- a/test/authenticated/suggested-prices.js +++ /dev/null @@ -1,67 +0,0 @@ -const assert = require('assert'); -const { openPopup } = require('../test'); - -// Render links -let render = async function(page) { - // Setup/enable feature - let popup = await openPopup(), - featureID = '#togglePrices'; - - await Promise.all([ - popup.select('#currency', 'USD'), - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - ]); - - await popup.$(`${featureID} + label .onoffswitch-switch`); - - let checkbox = await popup.$(`${featureID}`); - - await popup.$eval(`${featureID} + label .onoffswitch-switch`, elem => elem.click()); - console.log(`Clicked ${featureID}`); - let checked = await(await checkbox.getProperty('checked')).jsonValue(); - console.log(`${featureID} is `, checked ? 'enabled' : 'disabled'); - popup.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list', { waitUntil: 'networkidle2' }), - page.waitFor('.de-price-link') - ]); - - let priceLinks = await page.$eval('.de-price-link', elem => elem.classList.contains('de-price-link')); - assert.equal(priceLinks, true, 'Price comparison links were not rendered'); -}; - -// Show price on click -let showPrice = async function(page) { - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list', { waitUntil: 'networkidle2' }), - page.waitFor('.de-price-link') - ]); - - await page.$eval('.de-price-link', elem => elem.click()); - - await Promise.all([ - page.waitFor(1000), - page.waitFor('.de-suggested-price') - ]); - - let didDisplayPrice = await page.$eval('.de-suggested-price', elem => elem.classList.contains('de-suggested-price')); - assert.equal(didDisplayPrice, true, 'Suggested price was not displayed when clicked'); -}; - -// Show prices on release page -let showReleasePrice = async function(page) { - - await Promise.all([ - page.goto('https://www.discogs.com/sell/release/2897713', { waitUntil: 'networkidle2' }), - page.waitFor('.de-suggested-price') - ]); - - let didDisplayPrice = await page.$eval('.de-suggested-price', elem => elem.classList.contains('de-suggested-price')); - assert.equal(didDisplayPrice, true, 'Suggested prices were not displayed on release page'); -}; - -module.exports = { render, showPrice, showReleasePrice }; diff --git a/test/authenticated/text-format-shortcuts.js b/test/authenticated/text-format-shortcuts.js deleted file mode 100644 index 1599b437..00000000 --- a/test/authenticated/text-format-shortcuts.js +++ /dev/null @@ -1,12 +0,0 @@ -const assert = require('assert'); - -let test = async function(page) { - await Promise.all([ - page.waitFor('.quick-button') - ]); - - let hasShortcuts = await page.$eval('.quick-button', elem => elem.classList.contains('quick-button')); - assert.equal(hasShortcuts, true, 'Text Format Shortcuts were not rendered'); -}; - -module.exports = { test }; diff --git a/test/extension/extension-tests.js b/test/extension/extension-tests.js deleted file mode 100644 index 98c8b64f..00000000 --- a/test/extension/extension-tests.js +++ /dev/null @@ -1,42 +0,0 @@ -const assert = require('assert'); -// Search -let search = async function(page) { - let searchElem = await page.$('#searchbox'); - assert.ok(searchElem, 'Search bar was not rendered'); - - await page.type('#searchbox', 'cart'); - - let showSellersInCart = await page.$eval('.show-sellers-in-cart', elem => !elem.closest('.toggle-group').classList.contains('hide')); - - let darkTheme = await page.$eval('.darkTheme', elem => elem.closest('.toggle-group').classList.contains('hide')); - - assert.equal(showSellersInCart, true, 'Error searching for Cart'); - assert.equal(darkTheme, true, 'Dark Theme option was not hidden'); - let clear = await page.$('.clear-search'); - await clear.click(); -}; - -// Dark Theme -let darkTheme = async function(page) { - await Promise.all([ - page.waitForSelector('#toggleDarkTheme', { timeout: 10000 }), - page.waitForSelector('#toggleDarkTheme + label .onoffswitch-switch'), - page.waitForSelector('#toggleDarkTheme') - ]); - - let darkTheme = await page.$('.darkTheme'); - assert.ok(darkTheme, 'Dark Theme Feature was not rendered'); - - await page.$('#toggleDarkTheme + label .onoffswitch-switch'); - let checkbox = await page.$('#toggleDarkTheme'); - let checked = await(await checkbox.getProperty('checked')).jsonValue(); - - assert.equal(checked, false, 'Checkbox was already checked'); - - await page.$eval('#toggleDarkTheme + label .onoffswitch-switch', elem => elem.click()); - - checked = await(await checkbox.getProperty('checked')).jsonValue(); - assert.equal(checked, true, 'Could not enable Dark Theme'); -}; - -module.exports = { search, darkTheme }; diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 96b4502e..00000000 --- a/test/test.js +++ /dev/null @@ -1,550 +0,0 @@ -const assert = require( 'assert' ); -const puppeteer = require( 'puppeteer' ); -const username = process.env.USERNAME || null; -const password = process.env.PASSWORD || null; -const useOAuth = process.env.USEOAUTH || null; -// Extension path -const path = require('path').join(__dirname, '../dist'); -// Browser configuration -const config = { - headless: false, - ignoreHTTPSErrors: true, - slowMo: 225, - args: [ - `--disable-extensions-except=${path}`, - `--load-extension=${path}`, - '--no-sandbox' - ] -}; - -let browser, - page, - id; - -/** - * Instantiates the extension in the browser. - */ -async function boot() { - let popup = 'html/popup.html', - extensionName = 'Discogs Enhancer'; - - browser = await puppeteer.launch(config); - let setupPage = await browser.newPage(); - await setupPage.setRequestInterception(true), - await setupPage.waitFor(100); - - setupPage.on('request', interceptedRequest => { - if (interceptedRequest.url().startsWith('https://www.google-analytics.com/')) { - interceptedRequest.abort(); - } else { - interceptedRequest.continue(); - } - }); - - let targets = await browser.targets(); - let extensionTarget = targets.find(({ _targetInfo }) => { - return _targetInfo.title === extensionName && _targetInfo.type === 'background_page'; - }); - let extensionUrl = extensionTarget._targetInfo.url || ''; - let [,, extensionID] = extensionUrl.split('/'); - id = extensionID; - setupPage.close(); - page = await browser.newPage(); - - await Promise.all([ - await page.goto(`chrome-extension://${extensionID}/${popup}`), - await page.setRequestInterception(true), - await page.evaluate(() => { localStorage.setItem('analytics', false); }) - ]); - - page.on('request', interceptedRequest => { - if (interceptedRequest.url().startsWith('https://www.google-analytics.com/')) { - interceptedRequest.abort(); - } else { - interceptedRequest.continue(); - } - }); -} - -/** - * Opens the extension's popup in a new page - * @returns {Object} - */ -async function openPopup() { - let popup = await browser.newPage(); - await Promise.all([ - await popup.goto(`chrome-extension://${id}/html/popup.html`), - await popup.setRequestInterception(true), - await popup.setViewport({ width: 1280, height: 768 }) - ]); - popup.on('request', interceptedRequest => { - if (interceptedRequest.url().startsWith('https://www.google-analytics.com/')) { - interceptedRequest.abort(); - } else { - interceptedRequest.continue(); - } - }); - return popup; -} - -/** - * Opens the specified config page - * @returns {Object} - */ -async function openConfig(file) { - let configPage = await browser.newPage(); - await Promise.all([ - await configPage.goto(`chrome-extension://${id}/html/${file}.html`), - await configPage.setRequestInterception(true), - await configPage.setViewport({ width: 1280, height: 768 }), - await configPage.evaluate(() => { localStorage.setItem('analytics', false); }) - ]); - configPage.on('request', interceptedRequest => { - if (interceptedRequest.url().startsWith('https://www.google-analytics.com/')) { - interceptedRequest.abort(); - console.log('\nBlocked Request:\n', interceptedRequest.url(), '\n'); - } else { - interceptedRequest.continue(); - } - }); - return configPage; -} - -/** - * Enables a feature in the popup menu - * @param {String} featureID - The ID of the feature to enable - * @param {String} helpBubble - The help bubble class - * @returns {undefined} - */ -async function toggleFeature(featureID) { - - let popup = await openPopup(); - - await Promise.all([ - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - ]); - - await popup.$(`${featureID} + label .onoffswitch-switch`); - - let checkbox = await popup.$(`${featureID}`); - - await popup.$eval(`${featureID} + label .onoffswitch-switch`, elem => elem.click()); - console.log(`Clicked ${featureID}`); - let checked = await(await checkbox.getProperty('checked')).jsonValue(); - console.log(`${featureID} is `, checked ? 'enabled' : 'disabled'); - popup.close(); -} - -module.exports = { toggleFeature, openConfig, openPopup }; - -// ======================================================== -// Functional Tests -// ======================================================== - -describe( 'Functional Testing', function () { - this.timeout(40000); - before(async function() { await boot(); }); - - // Search Extension Features - // ------------------------------------------------------ - describe.skip('Search Features', async function() { - it('should refine the features list', async function() { - await require('./extension/extension-tests').search(page); - }); - }); - - // Extension Dark Theme - // ------------------------------------------------------ - describe.skip('Extension Dark Theme', async function() { - it('should apply the dark theme to the extension', async function() { - await require('./extension/extension-tests').darkTheme(page); - }); - }); - - // Dark Theme - // ------------------------------------------------------ - describe.skip('Dark Theme', async function() { - it('should apply the Dark Theme to Discogs.com', async function() { - await require('./unauthenticated/dark-theme').test(page); - }); - }); - - // Marketplace Hightlights - // ------------------------------------------------------ - describe.skip('Marketplace Highlights', async function() { - it('should highlight media/sleeve conditions in the Marketplace', async function() { - await require('./unauthenticated/marketplace-highlights').test(page); - }); - }); - - // Currency Converter - // ------------------------------------------------------ - describe.skip('Currency Converter', async function() { - it('should render the currency converter in the DOM', async function() { - await require('./unauthenticated/currency-converter').render(page); - }); - - it('should request rates from discogs-enhancer.com', async function() { - await require('./unauthenticated/currency-converter').request(page); - }); - - it('should convert currencies', async function() { - await require('./unauthenticated/currency-converter').convert(page); - }); - }); - - // Sort Buttons - // ------------------------------------------------------ - describe.skip('Sort Buttons', async function() { - it('show render sort buttons into the Marketplace filters', async function() { - // TODO: test explore, list sorting - await require('./unauthenticated/sort-buttons').test(page); - }); - }); - - // Everlasting Marketplace - // ------------------------------------------------------ - describe.skip('Everlasting Marketplace', async function() { - it('renders EM headers in the DOM', async function() { - await require('./unauthenticated/everlasting-marketplace').test(page); - }); - - it('loads the next page in the Marketplace', async function() { - await require('./unauthenticated/everlasting-marketplace').scrollMarketplace(page); - }); - - it('loads the next page on a single Release', async function() { - await require('./unauthenticated/everlasting-marketplace').scrollRelease(page); - }); - }); - - // Release Durations - // ------------------------------------------------------ - describe.skip('Release Durations', async function() { - it('displays the release durations', async function() { - await require('./unauthenticated/release-durations').test(page); - }); - }); - - // Large YouTube Playlists - // ------------------------------------------------------ - describe.skip('Large YouTube Playlists', async function() { - it('should embiggen the YouTube Playlists', async function() { - await require('./unauthenticated/large-youtube-playlists').test(page); - }); - }); - - // Rating Percentage - // ------------------------------------------------------ - describe.skip('Rating Percentage', async function() { - it('should show the Rating Percent on a release', async function() { - await require('./unauthenticated/rating-percentage').test(page); - }); - }); - - // Tracklist Readability - // ------------------------------------------------------ - describe.skip('Tracklist Readability', async function() { - it('should render readability dividers in the tracklist', async function() { - await require('./unauthenticated/tracklist-readability').test(page); - }); - }); - - // Tweak Discriminators - // ------------------------------------------------------ - describe.skip('Tweak Discriminators', async function() { - it('should render spans around discriminators', async function() { - await require('./unauthenticated/tweak-discriminators').test(page); - }); - }); - - // Relative Last Sold Dates - // ------------------------------------------------------ - describe.skip('Show Relative Last Sold Dates', async function() { - it('should render the date in relative terms', async function() { - await require('./unauthenticated/relative-sold-date').test(page); - }); - }); - - // Release Scanner - // ------------------------------------------------------ - describe.skip('Release Scanner', async function() { - it('should append the Scan Releases button', async function() { - await require('./unauthenticated/release-scanner').addButton(page); - }); - - it('should scan releases when clicked', async function() { - await require('./unauthenticated/release-scanner').scan(page); - }); - }); - - // Release Ratings - // ------------------------------------------------------ - describe.skip('Release Ratings', async function() { - - it('should insert rating links into listings in the Marketplace', async function() { - await require('./unauthenticated/release-ratings').addLinks(page); - }); - - it('should fetch the release rating', async function() { - await require('./unauthenticated/release-ratings').fetchRelease(page); - }); - }); - - // Quick Search - // ------------------------------------------------------ - describe.skip('Quick Search', async function() { - it('should wrap the release title in a span', async function() { - await require('./unauthenticated/quick-search').test(page); - }); - }); - - // Filter Shipping Countries - // ------------------------------------------------------ - describe.skip('Filter Shipping Countries', async function() { - it('should filter items based on their country of origin', async function() { - await require('./unauthenticated/filter-shipping-country').filter(page); - }); - - it('should filter items based on their country of origin using native navigation', async function() { - await require('./unauthenticated/filter-shipping-country').filterNative(page); - }); - }); - - // Filter Media Condition - // ------------------------------------------------------ - describe.skip('Filter Media Condition', async function() { - it('should filter items based on media condition', async function() { - await require('./unauthenticated/filter-media-condition').filter(page); - }); - - it('should filter items based on media condition using native navigation', async function() { - await require('./unauthenticated/filter-media-condition').filterNative(page); - }); - }); - - // Tag Seller Repuation - // ------------------------------------------------------ - describe.skip('Tag Seller Repuation', async function() { - it('should tag sellers with low repuations', async function() { - await require('./unauthenticated/seller-rep').test(page); - }); - }); - - // Inventory Ratings - // ------------------------------------------------------ - describe.skip('Inventory Ratings', async function() { - it('should highlight ratings above a specified rating', async function() { - await require('./unauthenticated/inventory-ratings').test(page); - }); - }); - - // Filter Sleeve Conditions - // ------------------------------------------------------ - describe.skip('Filter Sleeve Conditions', async function() { - it('should filter items below a specified condition', async function() { - await require('./unauthenticated/filter-sleeve-condition').test(page); - }); - }); - - // Favorite Sellers - // ------------------------------------------------------ - describe.skip('Favorite Sellers', async function() { - it('should mark sellers as favorites', async function() { - await require('./unauthenticated/favorite-sellers').mark(page); - }); - - it('should mark sellers as favorites on pagination clicks', async function() { - await require('./unauthenticated/favorite-sellers').markNative(page); - }); - - it('should reset the favorite sellers list when done', async function() { - // reset favorites list so theres no conflict with blocked sellers tests - await require('./unauthenticated/favorite-sellers').reset(page); - }); - }); - - // Block Sellers - // ------------------------------------------------------ - describe.skip('Block Sellers', async function() { - it('should mark sellers as blocked', async function() { - await require('./unauthenticated/block-sellers').block(page); - }); - - it('should mark sellers as blocked on pagination clicks', async function() { - await require('./unauthenticated/block-sellers').blockNative(page); - }); - - it('should reset the blocked sellers list when done', async function() { - // reset blocked list so theres no conflict with other tests - await require('./unauthenticated/block-sellers').reset(page); - }); - }); - - // Auth Testing - // ------------------------------------------------------ - if ( ( username && password ) || useOAuth ) { - if ( useOAuth ) { - describe.skip( 'Authenticated feature testing', async function () { - it( 'should allow the test user to manually authenticate with OAuth2', async function () { - await Promise.all( [ - await page.goto( 'https://auth.discogs.com/login' ), - ] ); - - await page.waitForResponse( "https://www.discogs.com/my", { timeout: 100000 } ); - assert.strictEqual( true, true ); - } ).timeout( 100000 ); - } ); - } else { - describe.skip( 'Authenticated feature testing', async function () { - it( 'should authenticate the test user', async function () { - await require( './authenticated/login' ).test( page, username, password ); - } ); - } ); - } - // Random Item Button - // ------------------------------------------------------ - describe.skip('Random Item Button', async function() { - it('should append an icon to the nav bar', async function() { - await require('./authenticated/random-item').append(page); - }); - - it('should get a random item when clicked', async function() { - await require('./authenticated/random-item').random(page); - }); - }); - - // Notes Counter - // ------------------------------------------------------ - describe.skip('Notes Counter', async function() { - it('should append the counter to the In Collection box', async function() { - await require('./authenticated/notes-counter').appendCounter(page); - }); - - it('should count the characters in a note', async function() { - await require('./authenticated/notes-counter').count(page); - }); - }); - - // Show Actual Add Dates - // ------------------------------------------------------ - describe.skip('Show Actual Add Dates', async function() { - it('should show the date the item was added', async function() { - await require('./authenticated/show-actual-dates').test(page); - }); - }); - - // Collection Links In New Tabs - // ------------------------------------------------------ - // describe.skip('Collection Links In New Tabs', async function() { - // it('should open links from the React Collection in new tabs', async function() { - // await require('./authenticated/collection-new-tabs').test(page); - // }); - // }); - - // Hide Min Med Max Columns - // ------------------------------------------------------ - describe.skip('Hide Min Med Max Columns', async function() { - it('should hide the Min, Med, Max columns in the React Collection', async function() { - await require('./authenticated/min-max-columns').test(page); - }); - }); - - // Show Average Price - // ------------------------------------------------------ - describe.skip('Show Average Price', async function() { - it('should show the average price paid for an item', async function() { - await require('./authenticated/average-price').test(page); - }); - }); - - // Text Format Shortcuts - // ------------------------------------------------------ - describe.skip('Text Format Shortcuts', async function() { - it('should render text format shortcuts', async function() { - await require('./authenticated/text-format-shortcuts').test(page); - }); - }); - - // Large BAOI Fields - // ------------------------------------------------------ - describe.skip('Large BAOI Fields', async function() { - it('should render large BAOI fields', async function() { - await require('./authenticated/baoi-fields').test(page); - }); - }); - - // Remove From Wantlist Shortcuts - // ------------------------------------------------------ - describe.skip('Remove From Wantlist Shortcuts', async function() { - it('should render the shortcut in a listing', async function() { - await require('./authenticated/remove-from-wantlist').render(page); - }); - - it('should render a prompt when clicked', async function() { - await require('./authenticated/remove-from-wantlist').prompt(page); - }); - }); - - // Suggested Prices - // ------------------------------------------------------ - describe.skip('Suggested Prices', async function() { - it('should render links into the DOM', async function() { - await require('./authenticated/suggested-prices').render(page); - }); - - it('should display a price when clicked', async function() { - await require('./authenticated/suggested-prices').showPrice(page); - }); - - it('should display prices on a release page', async function() { - await require('./authenticated/suggested-prices').showReleasePrice(page); - }); - }); - - // Seller Items In Cart - // ------------------------------------------------------ - describe.skip('Show Sellers In Cart', async function() { - it('should display an icon next to the seller\'s name', async function() { - await require('./authenticated/seller-items-in-cart').test(page); - }); - }); - - // Feedback Notifications - // ------------------------------------------------------ - - // Block Buyers - // ------------------------------------------------------ - - // Editing Notepad - // ------------------------------------------------------ - describe.skip( 'Editing Notepad', async function () { - const testFile = './authenticated/editing-notepad'; - it( 'should be hidden on first run', async function () { - await require( testFile ).hiddenOnFirstRun( page ); - } ); - - it( 'should be expanded when clicked', async function () { - await require( testFile ).expandedWhenClicked( page ); - } ); - - it( 'should be editable when edit button is clicked', async function () { - await require( testFile ).goesIntoEditMode( page ); - } ); - - it( 'should save edits across refreshes', async function () { - await require( testFile ).savesEdits( page ); - } ); - } ); - - after(async function() { - await browser.close(); - }); - } else { - after(async function() { - await browser.close(); - }); - } -}); diff --git a/test/unauthenticated/block-sellers.js b/test/unauthenticated/block-sellers.js deleted file mode 100644 index 87cfabab..00000000 --- a/test/unauthenticated/block-sellers.js +++ /dev/null @@ -1,57 +0,0 @@ -const assert = require('assert'); -const { toggleFeature, openConfig } = require('../test'); - -let block = async function(page) { - - await page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=50&page=1'); - - await page.waitFor('.seller_info .seller_label + strong a'); - - let sellerNames = await page.$$eval('.seller_info .seller_label + strong a', elems => { - let sellerNames = []; - elems.forEach(n => sellerNames.push(n.textContent)); - let uniqueNames = new Set(sellerNames); - return [...uniqueNames]; - }); - - let configPage = await openConfig('block-sellers'); - - await configPage.$eval('.restore-input', el => { el.value = JSON.stringify(sellerNames); }); - await configPage.click('.restore .btn.btn-green'); - await configPage.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list'), - page.waitFor('.blocked-seller') - ]); - - let hasBlocked = await page.$eval('.blocked-seller', elem => elem.classList.contains('blocked-seller')); - assert.equal(hasBlocked, true, 'Sellers were not marked as blocked'); -}; - -let blockNative = async function(page) { - await toggleFeature('#toggleEverlastingMarket'); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=25&page=1'), - page.waitFor('a.pagination_next') - ]); - - await page.$eval('a.pagination_next', elem => elem.click()); - - await Promise.all([ - page.waitFor('.blocked-seller') - ]); - - let hasBlocked = await page.$eval('.blocked-seller', elem => elem.classList.contains('blocked-seller')); - assert.equal(hasBlocked, true, 'Sellers were not marked as blocked on next page click'); -}; - -let reset = async function() { - let configPage = await openConfig('block-sellers'); - await configPage.type('.restore-input', '[]'); - await configPage.click('.restore .btn.btn-green'); - await configPage.close(); -}; - -module.exports = { block, blockNative, reset }; diff --git a/test/unauthenticated/currency-converter.js b/test/unauthenticated/currency-converter.js deleted file mode 100644 index 6197bd89..00000000 --- a/test/unauthenticated/currency-converter.js +++ /dev/null @@ -1,41 +0,0 @@ -const assert = require('assert'); - -// Render -let render = async function(page) { - await page.waitForSelector('.currency-converter', { timeout: 10000 }); - let converter = await page.$eval('.currency-converter', elem => elem.classList.contains('currency-converter')); - assert.equal(converter, true, 'Currency converter was not rendered'); -}; - -// Request -let request = async function(page) { - await Promise.all([ - await page.waitFor('#ccInput'), - await page.waitFor('#baseCurrency') - ]); - - let gotRates; - await page.select('#baseCurrency', 'AUD'); - await page.waitForResponse(response => { - if ( response.request().url() === 'https://discogs-enhancer.com/rates?base=AUD' ) { - gotRates = true; - return gotRates; - } - }); - - assert.equal(gotRates, true, 'Converter rates were not fetched'); -}; - -// Convert -let convert = async function(page) { - await Promise.all([ - await page.waitFor('#ccInput'), - await page.waitFor('#ccOutput'), - await page.waitFor('#baseCurrency') - ]); - await page.type('#ccInput', '4'); - let hasOutput = await page.$eval('#ccOutput', elem => elem.textContent !== ''); - assert.equal(hasOutput, true, 'Converter did not convert'); -}; - -module.exports = { render, request, convert }; diff --git a/test/unauthenticated/dark-theme.js b/test/unauthenticated/dark-theme.js deleted file mode 100644 index ff882294..00000000 --- a/test/unauthenticated/dark-theme.js +++ /dev/null @@ -1,14 +0,0 @@ -const assert = require('assert'); - -let test = async function(page) { - await Promise.all([ - page.goto('https://www.discogs.com/sell/list'), - page.waitFor('body') - ]); - - await page.waitForSelector('.de-dark-theme', { timeout: 10000 }); - let hasDarkTheme = await page.$eval('.de-dark-theme', elem => elem.classList.contains('de-dark-theme')); - assert.equal(hasDarkTheme, true, 'Dark Theme class was not found on documentElement'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/everlasting-marketplace.js b/test/unauthenticated/everlasting-marketplace.js deleted file mode 100644 index 52c01a67..00000000 --- a/test/unauthenticated/everlasting-marketplace.js +++ /dev/null @@ -1,41 +0,0 @@ -const assert = require('assert'); - -async function autoScroll(page) { - return await page.evaluate(async () => { - return await new Promise(resolve => { - let distance = 200; - let mpTarget = 'discogs.com/sell/list?page='; - let releaseTarget = 'discogs.com/sell/release/2897713?page='; - let timer = setInterval(() => { - window.scrollBy(0, distance); - if ( document.location.href.includes(mpTarget) || - document.location.href.includes(releaseTarget) ) { - clearInterval(timer); - return resolve(true); - } - }, 100); - }); - }); -} - -let test = async function(page) { - let pageStamp = await page.waitForSelector('.de-page-stamp'); - assert.ok(pageStamp, 'Everlasting Marketplace headers were not rendered'); -}; - -let scrollMarketplace = async function(page) { - let nextPage = await autoScroll(page); - assert.equal(nextPage, true, 'Next page was not loaded'); -}; - -let scrollRelease = async function(page) { - await Promise.all([ - page.goto('https://www.discogs.com/sell/release/2897713', { waitUntil: 'networkidle2' }), - page.waitFor('.de-page-stamp') - ]); - - let nextPage = await autoScroll(page); - assert.equal(nextPage, true, 'Next page was not loaded'); -}; - -module.exports = { test, scrollMarketplace, scrollRelease }; diff --git a/test/unauthenticated/favorite-sellers.js b/test/unauthenticated/favorite-sellers.js deleted file mode 100644 index 43280a91..00000000 --- a/test/unauthenticated/favorite-sellers.js +++ /dev/null @@ -1,58 +0,0 @@ -const assert = require('assert'); -const { toggleFeature, openConfig } = require('../test'); - -// Favorite sellers -let mark = async function(page) { - await page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=50&page=1'); - - await page.waitFor('.seller_info .seller_label + strong a'); - - let sellerNames = await page.$$eval('.seller_info .seller_label + strong a', elems => { - let sellerNames = []; - elems.forEach(n => sellerNames.push(n.textContent)); - let uniqueNames = new Set(sellerNames); - return [...uniqueNames]; - }); - - let configPage = await openConfig('favorite-sellers'); - - await configPage.$eval('.restore-input', el => { el.value = JSON.stringify(sellerNames); }); - await configPage.click('.restore .btn.btn-green'); - await configPage.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list'), - page.waitFor('.de-favorite-seller') - ]); - - let hasFavorites = await page.$eval('.de-favorite-seller', elem => elem.classList.contains('de-favorite-seller')); - assert.equal(hasFavorites, true, 'Sellers were not marked as favorites'); -}; - -// Mark sellers native pagination -let markNative = async function(page) { - await toggleFeature('#toggleEverlastingMarket'); - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=25&page=1'), - page.waitFor('a.pagination_next') - ]); - - await page.$eval('a.pagination_next', elem => elem.click()); - - await Promise.all([ - page.waitFor('.de-favorite-seller') - ]); - - let hasBlocked = await page.$eval('.de-favorite-seller', elem => elem.classList.contains('de-favorite-seller')); - assert.equal(hasBlocked, true, 'Sellers were not marked as favorites on next page click'); -}; - -// Reset config -let reset = async function() { - let configPage = await openConfig('favorite-sellers'); - await configPage.type('.restore-input', '[]'); - await configPage.click('.restore .btn.btn-green'); - await configPage.close(); -}; - -module.exports = { mark, markNative, reset }; diff --git a/test/unauthenticated/filter-media-condition.js b/test/unauthenticated/filter-media-condition.js deleted file mode 100644 index 8bef037d..00000000 --- a/test/unauthenticated/filter-media-condition.js +++ /dev/null @@ -1,56 +0,0 @@ -const assert = require('assert'); -const { toggleFeature, openPopup } = require('../test'); - -// Filter Items -let filter = async function(page) { - - let popup = await openPopup(), - featureID = '#toggleFilterMediaCondition'; - - await Promise.all([ - popup.select('#conditionValue', '7'), - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - ]); - - await popup.$(`${featureID} + label .onoffswitch-switch`); - - let checkbox = await popup.$(`${featureID}`); - - await popup.$eval(`${featureID} + label .onoffswitch-switch`, elem => elem.click()); - console.log(`Clicked ${featureID}`); - let checked = await(await checkbox.getProperty('checked')).jsonValue(); - console.log(`${featureID} is `, checked ? 'enabled' : 'disabled'); - popup.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=250&page=1', { waitUntil: 'networkidle2' }), - page.waitFor('.mint.bold') - ]); - - let conditions = await page.$$eval('tr.shortcut_navigable.de-hide-media', elems => elems.filter(e => e.$eval('.mint')).length === 0); - assert.equal(conditions, true, 'Items were not hidden based on condition'); -}; - -// Filter Native Navigation -let filterNative = async function(page) { - // disable EM - await toggleFeature('#toggleEverlastingMarket'); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=250&page=1', { waitUntil: 'networkidle2' }), - page.waitFor('.mint.bold'), - page.waitFor('a.pagination_next') - ]); - - let conditions = await page.$$eval('tr.shortcut_navigable.de-hide-media', elems => elems.filter(e => e.$eval('.mint')).length === 0); - assert.equal(conditions, true, 'Items were not hidden based on condition'); - - await page.$eval('a.pagination_next', elem => elem.click()); - await page.waitFor(3000); - conditions = await page.$$eval('tr.shortcut_navigable.de-hide-media', elems => elems.filter(e => e.$eval('.mint')).length === 0); - assert.equal(conditions, true, 'Items were not hidden based on condition after using native navigation'); -}; - -module.exports = { filter, filterNative }; diff --git a/test/unauthenticated/filter-shipping-country.js b/test/unauthenticated/filter-shipping-country.js deleted file mode 100644 index 1e204d92..00000000 --- a/test/unauthenticated/filter-shipping-country.js +++ /dev/null @@ -1,47 +0,0 @@ -const assert = require('assert'); -const { toggleFeature, openConfig } = require('../test'); - -// Filter items -let filter = async function(page) { - await toggleFeature('#toggleFilterShippingCountry'); - - let configPage = await openConfig('filter-shipping-country'); - await configPage.waitFor('.country-input'); - await configPage.$eval('.restore-input', el => { el.value = '["United States", "United Kingdom", "Japan", "Germany", "Australia"]' }); - await configPage.click('.restore .btn.btn-green'); - await configPage.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=250&page=1'), - page.waitFor('.de-page-stamp'), - page.waitFor('.de-hide-country') - ]); - - let hiddenCountry = await page.$eval('.de-hide-country', elem => elem.classList.contains('de-hide-country')); - assert.equal(hiddenCountry, true, 'Country was not hidden'); -}; - -// Filter Native Navigation -let filterNative = async function(page) { - await toggleFeature('#toggleEverlastingMarket'); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=250&page=1'), - page.waitFor('.de-hide-country'), - page.waitFor('a.pagination_next'), - page.waitFor('.country-list-info') - ]); - - let hiddenCountry = await page.$eval('.de-hide-country', elem => elem.classList.contains('de-hide-country')); - assert.equal(hiddenCountry, true, 'Country was not hidden after toggling Everlasting Marketplace.'); - - await page.$eval('a.pagination_next', elem => elem.click()); - hiddenCountry = await page.$eval('.de-hide-country', elem => elem.classList.contains('de-hide-country')); - assert.equal(hiddenCountry, true, 'Country was not hidden on Next click.'); - // Re-enable for subsequent tests - await toggleFeature('#toggleEverlastingMarket'); - // Disable country filtering for subsequent tests - await toggleFeature('#toggleFilterShippingCountry'); -}; - -module.exports = { filter, filterNative }; diff --git a/test/unauthenticated/filter-sleeve-condition.js b/test/unauthenticated/filter-sleeve-condition.js deleted file mode 100644 index ba882591..00000000 --- a/test/unauthenticated/filter-sleeve-condition.js +++ /dev/null @@ -1,28 +0,0 @@ -const assert = require('assert'); -const { openPopup } = require('../test'); - -let test = async function(page) { - - let popup = await openPopup(), - featureID = '#toggleFilterSleeveCondition'; - - await Promise.all([ - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - popup.waitFor('#sleeveConditionValue') - ]); - - await popup.select('#sleeveConditionValue', '7'); - await popup.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/seller/letitberarities/profile'), - page.waitFor('.de-hide-sleeve') - ]); - - let hasHiddenSleeves = await page.$eval('.de-hide-sleeve', elem => elem.classList.contains('de-hide-sleeve')); - assert.equal(hasHiddenSleeves, true, 'Items were not hidden'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/inventory-ratings.js b/test/unauthenticated/inventory-ratings.js deleted file mode 100644 index 3afeb229..00000000 --- a/test/unauthenticated/inventory-ratings.js +++ /dev/null @@ -1,31 +0,0 @@ -const assert = require('assert'); -const { openPopup } = require('../test'); - -let test = async function(page) { - - let popup = await openPopup(), - featureID = '#toggleInventoryRatings'; - - await Promise.all([ - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - popup.waitFor('#ratingsValue') - ]); - - await popup.evaluate(() => { document.querySelector('#ratingsValue').value = 1.25; }); - await popup.$(`${featureID} + label .onoffswitch-switch`); - await popup.$eval(`${featureID} + label .onoffswitch-switch`, elem => elem.click()); - - await popup.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/seller/letitberarities/profile'), - page.waitFor('.de-inventory-rating') - ]); - - let hasRatingHighlights = await page.$eval('.de-inventory-rating', elem => elem.classList.contains('de-inventory-rating')); - assert.equal(hasRatingHighlights, true, 'Inventory ratings were not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/large-youtube-playlists.js b/test/unauthenticated/large-youtube-playlists.js deleted file mode 100644 index b3bdf443..00000000 --- a/test/unauthenticated/large-youtube-playlists.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleYtPlaylists'); - - await Promise.all([ - page.goto('https://www.discogs.com/Various-After-Hours-2/release/77602'), - page.waitFor('body') - ]); - - let isLarge = await page.$eval('#youtube_tracklist', elem => elem.offsetHeight > 166); - - assert.equal(isLarge, true, 'YouTube playlists were not hugeified'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/marketplace-highlights.js b/test/unauthenticated/marketplace-highlights.js deleted file mode 100644 index 04176f0d..00000000 --- a/test/unauthenticated/marketplace-highlights.js +++ /dev/null @@ -1,10 +0,0 @@ -const assert = require('assert'); - -let test = async function(page) { - await page.waitForSelector('.very-good-plus', { timeout: 10000 }); - let hasHighlight = await page.$eval('.very-good-plus', elem => elem.classList.contains('very-good-plus')); - - assert.equal(hasHighlight, true, 'Highlights were not found in the DOM'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/quick-search.js b/test/unauthenticated/quick-search.js deleted file mode 100644 index 4b755320..00000000 --- a/test/unauthenticated/quick-search.js +++ /dev/null @@ -1,14 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleQuickSearch'); - await Promise.all([ - page.goto('https://www.discogs.com/Lou-Karsh-Phantom-Structures/release/13705345', { waitUntil: 'networkidle2' }), - page.waitFor('.de-quick-search') - ]); - let hasQuickSearch = await page.$eval('.de-quick-search', elem => elem.classList.contains('de-quick-search')); - assert.equal(hasQuickSearch, true, 'Quick Search span was not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/rating-percentage.js b/test/unauthenticated/rating-percentage.js deleted file mode 100644 index a5619139..00000000 --- a/test/unauthenticated/rating-percentage.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleRatingPercent'); - - await Promise.all([ - page.goto('https://www.discogs.com/Various-After-Hours-2/release/77602'), - page.waitFor('body') - ]); - - let hasPercentage = await page.$eval('.de-percentage', elem => elem.classList.contains('de-percentage')); - - assert.equal(hasPercentage, true, 'Rating Percentage was not displayed'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/relative-sold-date.js b/test/unauthenticated/relative-sold-date.js deleted file mode 100644 index 604567e5..00000000 --- a/test/unauthenticated/relative-sold-date.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleRelativeSoldDate'); - - await Promise.all([ - page.goto('https://www.discogs.com/Digital-Assassins-DJEF-Skot-Vs-Mt-Vibes-Deep-Sound-Of-Underground-Los-Angeles/release/3931002'), - page.waitFor('body') - ]); - - let relativeDate = await page.$eval('.de-last-sold', elem => elem.classList.contains('de-last-sold')); - - assert.equal(relativeDate, true, 'Last Sold Date was not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/release-durations.js b/test/unauthenticated/release-durations.js deleted file mode 100644 index 2bc34909..00000000 --- a/test/unauthenticated/release-durations.js +++ /dev/null @@ -1,16 +0,0 @@ -const assert = require('assert'); - -let test = async function(page) { - await Promise.all([ - page.goto('https://www.discogs.com/Scorn-Evanescence/master/13043'), - page.waitFor('body') - ]); - - await page.waitForSelector('.tracklist_track.track_heading'); - - let duration = await page.$eval('.tracklist_track.track_heading .tracklist_track_pos span', elem => elem.textContent === 'Total Time:'); - - assert.equal(duration, true, 'Release durations were not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/release-ratings.js b/test/unauthenticated/release-ratings.js deleted file mode 100644 index 649c41d1..00000000 --- a/test/unauthenticated/release-ratings.js +++ /dev/null @@ -1,30 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -// Add links to page -let addLinks = async function(page) { - await toggleFeature('#toggleReleaseRatings'); - await Promise.all([ - page.goto('https://www.discogs.com/sell/list', { waitUntil: 'networkidle2' }), - page.waitFor('.de-rating-link') - ]); - let hasRatingLinks = await page.$eval('.de-rating-link', elem => elem.classList.contains('de-rating-link')); - assert.equal(hasRatingLinks, true, 'Rating links were not rendered'); -}; - -// Fetch release -let fetchRelease = async function(page) { - await page.$eval('.de-rating-link', elem => elem.click()); - let isFetching; - - await page.waitForResponse(response => { - if ( response.request().resourceType() !== undefined ) { - isFetching = true; - return isFetching; - } - }); - - assert.equal(isFetching, true, 'Fetch was not initiated'); -}; - -module.exports = { addLinks, fetchRelease }; diff --git a/test/unauthenticated/release-scanner.js b/test/unauthenticated/release-scanner.js deleted file mode 100644 index 0b6b0b91..00000000 --- a/test/unauthenticated/release-scanner.js +++ /dev/null @@ -1,35 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -// Add Button to page -let addButton = async function(page) { - await toggleFeature('#toggleReleaseScanner'); - await Promise.all([ - page.goto('https://www.discogs.com/artist/5269363-Trance-Wax', { waitUntil: 'networkidle2' }), - page.waitFor('.de-scan-releases') - ]); - - let hasScanButton = await page.$eval('.de-scan-releases', elem => elem.classList.contains('de-scan-releases')); - assert.equal(hasScanButton, true, 'Scan Releases button was not appended'); -}; - -// Scan releases -let scan = async function(page) { - await page.waitFor('.de-scan-releases'); - await page.$eval('.de-scan-releases', elem => elem.click()); - let scanText = await page.$eval('.de-scan-releases', elem => elem.textContent == 'Scanning...'); - assert.equal(scanText, true, 'Button text was not updated when clicked'); - - let isScanning; - - await page.waitForResponse(response => { - if ( response.request().resourceType() !== undefined ) { - isScanning = true; - return isScanning; - } - }); - - assert.equal(isScanning, true, 'Scan was unsuccessful'); -}; - -module.exports = { addButton, scan }; diff --git a/test/unauthenticated/seller-rep.js b/test/unauthenticated/seller-rep.js deleted file mode 100644 index 41084385..00000000 --- a/test/unauthenticated/seller-rep.js +++ /dev/null @@ -1,31 +0,0 @@ -const assert = require('assert'); -const { openPopup } = require('../test'); - -let test = async function(page) { - - let popup = await openPopup(), - featureID = '#toggleSellerRep'; - - await Promise.all([ - popup.waitForSelector(`${featureID}`, { timeout: 10000 }), - popup.waitForSelector(`${featureID} + label .onoffswitch-switch`), - popup.waitForSelector(`${featureID}`), - popup.waitFor('#percent') - ]); - - await popup.evaluate(() => { document.querySelector('#percent').value = 100; }); - await popup.$(`${featureID} + label .onoffswitch-switch`); - await popup.$eval(`${featureID} + label .onoffswitch-switch`, elem => elem.click()); - - await popup.close(); - - await Promise.all([ - page.goto('https://www.discogs.com/sell/list?sort=listed%2Cdesc&limit=250&page=1'), - page.waitFor('.de-seller-rep-icon') - ]); - - let hasIcons = await page.$eval('.de-seller-rep-icon', elem => elem.classList.contains('de-seller-rep-icon')); - assert.equal(hasIcons, true, 'Seller Rep Icons were not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/sort-buttons.js b/test/unauthenticated/sort-buttons.js deleted file mode 100644 index 585dfb42..00000000 --- a/test/unauthenticated/sort-buttons.js +++ /dev/null @@ -1,16 +0,0 @@ -const assert = require('assert'); - -let test = async function(page) { - await Promise.all([ - await page.waitForSelector('.filter_currency .show_more_filters'), - await page.$eval('.filter_currency .show_more_filters', elem => elem.click()) - ]); - - await page.waitForSelector('.hide_more_filters'); - - let sortBtn = await page.$eval('#sortMpLists', elem => elem.classList.contains('button-blue')); - - assert.equal(sortBtn, true, 'Sort buttons were not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/tracklist-readability.js b/test/unauthenticated/tracklist-readability.js deleted file mode 100644 index fd7171c1..00000000 --- a/test/unauthenticated/tracklist-readability.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleReadability'); - - await Promise.all([ - page.goto('https://www.discogs.com/Various-After-Hours-2/release/77602'), - page.waitFor('body') - ]); - - let hasSpacer = await page.$eval('.de-spacer', elem => elem.classList.contains('de-spacer')); - - assert.equal(hasSpacer, true, 'Readability dividers were not rendered'); -}; - -module.exports = { test }; diff --git a/test/unauthenticated/tweak-discriminators.js b/test/unauthenticated/tweak-discriminators.js deleted file mode 100644 index bf42bfe8..00000000 --- a/test/unauthenticated/tweak-discriminators.js +++ /dev/null @@ -1,17 +0,0 @@ -const assert = require('assert'); -const { toggleFeature } = require('../test'); - -let test = async function(page) { - await toggleFeature('#toggleTweakDiscrims'); - - await Promise.all([ - page.goto('https://www.discogs.com/Digital-Assassins-DJEF-Skot-Vs-Mt-Vibes-Deep-Sound-Of-Underground-Los-Angeles/release/3931002'), - page.waitFor('body') - ]); - - let hasSpans = await page.$eval('.de-discriminator', elem => elem.classList.contains('de-discriminator')); - - assert.equal(hasSpans, true, 'Discriminators spans were not rendered'); -}; - -module.exports = { test };