From f5412dc7b09d1ab48fdd33dca2c50394e59a4bec Mon Sep 17 00:00:00 2001 From: John Hildenbiddle Date: Tue, 28 May 2024 15:27:29 -0500 Subject: [PATCH] chore: Update lint configuration (ESLint 9, Prettier 3) (#2438) * Update linting configuration (eslint, prettier) * Fix lint issues following eslint prettier update * Change ESLint config to allow boolean coercion * Switch to default import name per docs * Fix suppression of error details * Update JSDoc comments * Update waiForFunctin to provide error details --------- Co-authored-by: Koy Zhuang --- .eslintignore | 11 - .eslintrc.cjs | 83 -- build/cover.js | 2 +- build/emoji.js | 14 +- docs/index.html | 2 +- docs/markdown.md | 2 +- docs/pwa.md | 6 +- eslint.config.js | 79 ++ middleware.js | 2 +- package-lock.json | 1077 ++++++++++---------------- package.json | 15 +- rollup.config.js | 2 +- src/core/Docsify.js | 6 +- src/core/config.js | 10 +- src/core/event/index.js | 30 +- src/core/fetch/index.js | 22 +- src/core/init/lifecycle.js | 2 + src/core/render/compiler.js | 6 +- src/core/render/compiler/code.js | 2 +- src/core/render/compiler/image.js | 4 +- src/core/render/compiler/link.js | 6 +- src/core/render/compiler/taskList.js | 2 +- src/core/render/embed.js | 9 +- src/core/render/emoji-data.js | 2 +- src/core/render/emojify.js | 6 +- src/core/render/index.js | 24 +- src/core/render/progressbar.js | 2 +- src/core/render/tpl.js | 2 +- src/core/router/history/base.js | 8 +- src/core/router/index.js | 1 - src/core/router/util.js | 4 +- src/core/util/ajax.js | 4 +- src/core/util/core.js | 8 +- src/plugins/disqus.js | 1 - src/plugins/emoji.js | 1 + src/plugins/front-matter/yaml.js | 2 +- src/plugins/ga.js | 1 + src/plugins/gtag.js | 3 +- src/plugins/search/component.js | 3 +- src/plugins/search/index.js | 1 - src/plugins/search/search.js | 11 +- src/plugins/zoom-image.js | 4 +- test/config/jest.setup-tests.js | 2 +- test/config/server.js | 2 +- test/e2e/.eslintrc.cjs | 3 - test/e2e/example.test.js | 32 +- test/e2e/index-file.test.js | 2 +- test/e2e/security.test.js | 2 +- test/e2e/virtual-routes.test.js | 8 +- test/e2e/vue.test.js | 14 +- test/helpers/docsify-init.js | 46 +- test/helpers/wait-for.js | 23 +- test/integration/.eslintrc.cjs | 1 - test/integration/emoji.test.js | 6 +- test/integration/example.test.js | 18 +- test/integration/render.test.js | 62 +- test/unit/.eslintrc.cjs | 7 - test/unit/core-util.test.js | 4 +- test/unit/render-util.test.js | 26 +- 59 files changed, 745 insertions(+), 995 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.js delete mode 100644 test/e2e/.eslintrc.cjs delete mode 100644 test/integration/.eslintrc.cjs delete mode 100644 test/unit/.eslintrc.cjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index c00fc0f..0000000 --- a/.eslintignore +++ /dev/null @@ -1,11 +0,0 @@ -# Directories -.git -build -dist -docs -lib -node_modules - -# Files -**/*.md -server.js diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index b637d47..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,83 +0,0 @@ -const prettierConfig = require('./.prettierrc.json'); - -module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:import/recommended', - 'plugin:prettier/recommended', // Must be last - ], - parser: '@babel/eslint-parser', - parserOptions: { - sourceType: 'module', - ecmaVersion: 2019, - }, - plugins: ['prettier', 'import'], - env: { - browser: true, - es6: true, - node: true, - }, - settings: { - 'import/ignore': ['node_modules', '.json$'], - }, - rules: { - camelcase: ['warn'], - curly: ['error', 'all'], - 'dot-notation': ['error'], - eqeqeq: ['error'], - 'handle-callback-err': ['error'], - 'new-cap': ['error'], - 'no-alert': ['error'], - 'no-caller': ['error'], - 'no-eval': ['error'], - 'no-labels': ['error'], - 'no-lonely-if': ['error'], - 'no-new': ['error'], - 'no-proto': ['error'], - 'no-return-assign': ['error'], - 'no-self-compare': ['error'], - 'no-shadow-restricted-names': ['error'], - 'no-shadow': [ - 'error', - { - allow: [ - 'Events', - 'Fetch', - 'Lifecycle', - 'Render', - 'Router', - 'VirtualRoutes', - ], - }, - ], - 'no-unused-vars': ['error', { args: 'none' }], - 'no-useless-call': ['error'], - 'no-useless-escape': ['warn'], - 'no-var': ['error'], - 'no-void': ['error'], - 'no-with': ['error'], - radix: ['error'], - 'spaced-comment': ['error', 'always'], - strict: ['error', 'global'], - yoda: ['error', 'never'], - - // Import rules - 'import/imports-first': ['error'], - 'import/newline-after-import': ['error'], - 'import/no-duplicates': ['error'], - 'import/no-mutable-exports': ['error'], - 'import/no-named-as-default-member': ['error'], - 'import/no-named-as-default': ['error'], - 'import/no-unresolved': 'off', - 'import/order': ['warn'], - - // Prettier (Must be last) - 'prettier/prettier': ['warn', prettierConfig], - }, - globals: { - $docsify: 'writable', - Docsify: 'writable', - dom: 'writable', - }, -}; diff --git a/build/cover.js b/build/cover.js index 64bf5a7..6282fd4 100644 --- a/build/cover.js +++ b/build/cover.js @@ -13,6 +13,6 @@ let cover = read(file, 'utf8').toString(); console.log('Replace version number in cover page...'); cover = cover.replace( /(\S+)?<\/small>/g, - /* html */ `${version}` + /* html */ `${version}`, ); write(file, cover); diff --git a/build/emoji.js b/build/emoji.js index affc5c1..cb502fe 100644 --- a/build/emoji.js +++ b/build/emoji.js @@ -9,7 +9,7 @@ const filePaths = { 'src', 'core', 'render', - 'emoji-data.js' + 'emoji-data.js', ), }; @@ -26,7 +26,7 @@ async function getEmojiData() { // Remove base URL from emoji URLs Object.entries(data).forEach( - ([key, value]) => (data[key] = value.replace(baseURL, '')) + ([key, value]) => (data[key] = value.replace(baseURL, '')), ); console.info(`- Retrieved ${Object.keys(data).length} emoji entries`); @@ -41,7 +41,7 @@ function writeEmojiPage(emojiData) { const isExistingPage = fs.existsSync(filePaths.emojiMarkdown); const emojiPage = (isExistingPage && fs.readFileSync(filePaths.emojiMarkdown, 'utf8')) || - `\n\n`; + '\n\n'; const emojiRegEx = /(\n)([\s\S]*)(\n)/; const emojiMatch = emojiPage.match(emojiRegEx); const emojiMarkdownStart = emojiMatch[1].trim(); @@ -51,20 +51,20 @@ function writeEmojiPage(emojiData) { .reduce( (preVal, curVal) => (preVal += `:${curVal}: ` + '`' + `:${curVal}:` + '`' + '\n\n'), - '' + '', ) .trim(); if (emojiMarkdown !== newEmojiMarkdown) { const newEmojiPage = emojiPage.replace( emojiMatch[0], - `${emojiMarkdownStart}\n\n${newEmojiMarkdown}\n\n${emojiMarkdownEnd}` + `${emojiMarkdownStart}\n\n${newEmojiMarkdown}\n\n${emojiMarkdownEnd}`, ); fs.writeFileSync(filePaths.emojiMarkdown, newEmojiPage); console.info( - `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiMarkdown}` + `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiMarkdown}`, ); } else { console.info(`- No changes: ${filePaths.emojiMarkdown}`); @@ -86,7 +86,7 @@ function writeEmojiJS(emojiData) { fs.writeFileSync(filePaths.emojiJS, newEmojiJS); console.info( - `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiJS}` + `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiJS}`, ); } else { console.info(`- No changes: ${filePaths.emojiJS}`); diff --git a/docs/index.html b/docs/index.html index cd5c822..5ee2b01 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,4 @@ - + diff --git a/docs/markdown.md b/docs/markdown.md index 5cca17b..6bc7da8 100644 --- a/docs/markdown.md +++ b/docs/markdown.md @@ -47,7 +47,7 @@ window.$docsify = { return /* html */ `
${mermaid.render( 'mermaid-svg-' + num++, - code + code, )}
`; } diff --git a/docs/pwa.md b/docs/pwa.md index 3e9e0c7..f0d088c 100644 --- a/docs/pwa.md +++ b/docs/pwa.md @@ -85,7 +85,7 @@ self.addEventListener('fetch', event => { .then(resp => resp || fetched) .catch(_ => { /* eat any errors */ - }) + }), ); // Update the cache with the version we fetched (only for ok status) @@ -93,11 +93,11 @@ self.addEventListener('fetch', event => { Promise.all([fetchedCopy, caches.open(RUNTIME)]) .then( ([response, cache]) => - response.ok && cache.put(event.request, response) + response.ok && cache.put(event.request, response), ) .catch(_ => { /* eat any errors */ - }) + }), ); } }); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..9a5df7e --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,79 @@ +import eslintConfigPrettier from 'eslint-config-prettier'; +import playwrightPlugin from 'eslint-plugin-playwright'; +import jestPlugin from 'eslint-plugin-jest'; +import globals from 'globals'; +import js from '@eslint/js'; + +export default [ + // Ignore (Must be first item in array) + { + ignores: [ + // Directories + '_playwright-*', + 'dist', + 'docs', + 'lib', + 'node_modules', + // Files + '**/*.md', + 'CHANGELOG.md', + 'emoji-data.*', + 'HISTORY.md', + ], + }, + // ESLint Recommended + js.configs.recommended, + // Configuration: Prettier + eslintConfigPrettier, + // All Files + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + $docsify: 'readonly', + Docsify: 'readonly', + }, + }, + rules: { + 'array-callback-return': ['error'], + 'block-scoped-var': ['error'], + curly: ['error'], + 'dot-notation': ['error'], + eqeqeq: ['error'], + 'no-implicit-coercion': ['error', { boolean: false }], + 'no-implicit-globals': ['error'], + 'no-loop-func': ['error'], + 'no-return-assign': ['error'], + 'no-template-curly-in-string': ['error'], + 'no-unneeded-ternary': ['error'], + 'no-unused-vars': ['error', { args: 'none' }], + 'no-useless-computed-key': ['error'], + 'no-useless-return': ['error'], + 'no-var': ['error'], + 'prefer-const': [ + 'error', + { + destructuring: 'all', + }, + ], + }, + }, + // Source Files + { + files: ['src/**'], + rules: { + 'no-console': ['warn'], + }, + }, + // Tests: E2E (Playwright) + { + files: ['test/e2e/**'], + ...playwrightPlugin.configs['flat/recommended'], + }, + // Tests: Integration & Unit (Jest) + { + files: ['test/{integration,unit}/**'], + ...jestPlugin.configs['flat/recommended'], + }, +]; diff --git a/middleware.js b/middleware.js index d61607f..0861d65 100644 --- a/middleware.js +++ b/middleware.js @@ -40,7 +40,7 @@ export default async function middleware(request) { const indexHTML = await fetch(indexURL).then(res => res.text()); const previewHTML = rewriteRules.reduce( (html, rule) => html.replace(rule.match, rule.replace), - indexHTML + indexHTML, ); return new Response(previewHTML, { diff --git a/package-lock.json b/package-lock.json index b1dc229..c9f4b7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.24.5", "@babel/preset-env": "^7.11.5", - "@eslint/js": "^8.43.0", + "@eslint/js": "^9.3.0", "@playwright/test": "^1.44.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.2", @@ -32,14 +32,13 @@ "conventional-changelog-cli": "^3.0.0", "cross-env": "^7.0.3", "cssnano": "^7.0.1", - "eslint": "^8.43.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", + "eslint": "^9.3.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.5.0", "eslint-plugin-playwright": "^1.6.1", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.1.3", "glob": "^10.3.15", - "globals": "^13.20.0", + "globals": "^15.3.0", "husky": "^9.0.11", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", @@ -47,7 +46,7 @@ "marked": "^12.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", - "prettier": "^2.8.8", + "prettier": "^3.2.5", "rimraf": "^5.0.7", "rollup": "^4.17.2", "stylus": "^0.63.0", @@ -1869,15 +1868,15 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1885,28 +1884,40 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.3.0.tgz", + "integrity": "sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1933,6 +1944,19 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", @@ -2854,6 +2878,18 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@playwright/test": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", @@ -2896,9 +2932,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -3051,9 +3087,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -3064,9 +3100,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -3077,9 +3113,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -3090,9 +3126,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -3103,9 +3139,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", "cpu": [ "arm" ], @@ -3116,9 +3152,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -3129,9 +3165,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -3142,9 +3178,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -3155,9 +3191,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", "cpu": [ "ppc64" ], @@ -3168,9 +3204,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -3181,9 +3217,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", "cpu": [ "s390x" ], @@ -3194,9 +3230,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -3207,9 +3243,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -3220,9 +3256,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -3233,9 +3269,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -3246,9 +3282,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -3351,9 +3387,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -3440,12 +3476,6 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -3501,13 +3531,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", + "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3518,9 +3548,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", + "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3531,13 +3561,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", + "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3567,6 +3597,26 @@ "balanced-match": "^1.0.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", @@ -3594,35 +3644,13 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", + "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.10.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3645,12 +3673,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@vue/compiler-core": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", @@ -3859,18 +3881,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3933,26 +3943,6 @@ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3962,62 +3952,6 @@ "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", @@ -4089,9 +4023,9 @@ } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -4365,12 +4299,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4728,9 +4662,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001620", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", - "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", + "version": "1.0.30001621", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", + "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", "dev": true, "funding": [ { @@ -5045,12 +4979,12 @@ } }, "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/common-tags": { @@ -6000,16 +5934,13 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, "node_modules/dom-serializer": { @@ -6205,9 +6136,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", - "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", + "version": "1.4.778", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.778.tgz", + "integrity": "sha512-C6q/xcUJf/2yODRxAVCfIk4j3y3LMsD0ehiE2RQNV2cxc8XU62gR6vvYh3+etSUzlgTfil+qDHI1vubpdf0TOA==", "dev": true }, "node_modules/emittery": { @@ -6450,15 +6381,6 @@ "node": ">= 0.4" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -6531,41 +6453,37 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.3.0.tgz", + "integrity": "sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.3.0", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6579,16 +6497,16 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -6597,104 +6515,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-jest": { "version": "28.5.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", @@ -6720,10 +6540,32 @@ } } }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz", + "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/eslint-plugin-playwright": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-1.6.1.tgz", - "integrity": "sha512-pfcaeAENH0jZEuUxynfVgMlLY9CSp68D9Ja2z32Xq5zhWCN1HoixSHOzhYVuh/N6fYwtBp4kLu/+IIUTXBTGZg==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-1.6.2.tgz", + "integrity": "sha512-mraN4Em3b5jLt01q7qWPyLg0Q5v3KAWfJSlEWwldyUXoa7DSPrBR4k6B6LROLqipsG8ndkwWMdjl1Ffdh15tag==", "dev": true, "workspaces": [ "examples" @@ -6744,22 +6586,58 @@ } } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "node_modules/eslint-plugin-playwright/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-playwright/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -6849,28 +6727,28 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6919,29 +6797,29 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7154,21 +7032,21 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -7227,52 +7105,16 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -7709,13 +7551,13 @@ } }, "node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "version": "10.3.16", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", + "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", + "jackspeak": "^3.1.2", "minimatch": "^9.0.1", "minipass": "^7.0.4", "path-scurry": "^1.11.0" @@ -7777,15 +7619,12 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz", + "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7808,20 +7647,32 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7845,12 +7696,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -8718,9 +8563,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -10589,21 +10434,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.4.tgz", + "integrity": "sha512-3F9KRQIS2fVDGtCkBp4Bx0jswjX7zUcKx6OF0ZeY1prksUyKPRIIUqZhIUYAstJfvj6i48VFs4dwVIbCYwvTYQ==", "dev": true, "dependencies": { "chalk": "5.3.0", - "commander": "11.1.0", + "commander": "12.1.0", "debug": "4.3.4", "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", + "lilconfig": "3.1.1", + "listr2": "8.2.1", + "micromatch": "4.0.6", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.4" + "yaml": "2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -10683,13 +10528,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "node_modules/lint-staged/node_modules/micromatch": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.6.tgz", + "integrity": "sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==", "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^4.0.2" + }, "engines": { - "node": ">=14" + "node": ">=8.6" } }, "node_modules/lint-staged/node_modules/mimic-fn": { @@ -10746,6 +10595,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lint-staged/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/lint-staged/node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -10759,16 +10620,16 @@ } }, "node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -11384,12 +11245,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -11790,55 +11651,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -12061,12 +11873,15 @@ } }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/picocolors": { @@ -12335,26 +12150,6 @@ "node": ">=14.14" } }, - "node_modules/postcss-cli/node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/postcss-cli/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -12367,18 +12162,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/postcss-cli/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/postcss-cli/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -12521,18 +12304,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/postcss-merge-longhand": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.0.tgz", @@ -12838,9 +12609,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -12897,15 +12668,15 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -13555,9 +13326,9 @@ } }, "node_modules/rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -13570,22 +13341,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", "fsevents": "~2.3.2" } }, @@ -14631,6 +14402,22 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -14895,38 +14682,11 @@ "typescript": ">=4.2.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -14950,9 +14710,9 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -15701,10 +15461,13 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index ef85b3d..5ac8fc5 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.24.5", "@babel/preset-env": "^7.11.5", - "@eslint/js": "^8.43.0", + "@eslint/js": "^9.3.0", "@playwright/test": "^1.44.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.2", @@ -58,14 +58,13 @@ "conventional-changelog-cli": "^3.0.0", "cross-env": "^7.0.3", "cssnano": "^7.0.1", - "eslint": "^8.43.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", + "eslint": "^9.3.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.5.0", "eslint-plugin-playwright": "^1.6.1", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.1.3", "glob": "^10.3.15", - "globals": "^13.20.0", + "globals": "^15.3.0", "husky": "^9.0.11", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", @@ -73,7 +72,7 @@ "marked": "^12.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", - "prettier": "^2.8.8", + "prettier": "^3.2.5", "rimraf": "^5.0.7", "rollup": "^4.17.2", "stylus": "^0.63.0", @@ -98,7 +97,7 @@ "docker:test:integration": "npm run docker:cli -- test:integration", "docker:test:unit": "npm run docker:cli -- test:unit", "docker:test": "npm run docker:cli -- test", - "lint:fix": "eslint . --fix", + "lint:fix": "prettier . --write && eslint . --fix", "lint": "prettier . --check && eslint .", "postinstall": "opencollective-postinstall && npx husky install", "prepare": "npm run build", diff --git a/rollup.config.js b/rollup.config.js index 72cf714..37385a2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -37,7 +37,7 @@ const pluginConfigs = pluginPaths.map(pluginPath => { // ============================================================================= const currentYear = new Date().getFullYear(); const { homepage, license, version } = JSON.parse( - await fs.readFile(path.join(import.meta.dirname, 'package.json'), 'utf8') + await fs.readFile(path.join(import.meta.dirname, 'package.json'), 'utf8'), ); const baseConfig = { output: { diff --git a/src/core/Docsify.js b/src/core/Docsify.js index ccf414c..dbf7755 100644 --- a/src/core/Docsify.js +++ b/src/core/Docsify.js @@ -10,10 +10,8 @@ import { Lifecycle } from './init/lifecycle.js'; /** @typedef {new (...args: any[]) => any} Constructor */ -// eslint-disable-next-line new-cap export class Docsify extends Fetch( - // eslint-disable-next-line new-cap - Events(Render(VirtualRoutes(Router(Lifecycle(Object))))) + Events(Render(VirtualRoutes(Router(Lifecycle(Object))))), ) { config = config(this); @@ -37,6 +35,8 @@ export class Docsify extends Fetch( } catch (err) { if (this.config.catchPluginErrors) { const errTitle = 'Docsify plugin error'; + + // eslint-disable-next-line no-console console.error(errTitle, err); } else { throw err; diff --git a/src/core/config.js b/src/core/config.js index 9d8ab83..7cfeeca 100644 --- a/src/core/config.js +++ b/src/core/config.js @@ -49,6 +49,8 @@ export default function (vm) { set themeColor(value) { if (value) { this.__themeColor = value; + + // eslint-disable-next-line no-console console.warn( stripIndent(` $docsify.themeColor is deprecated. Use a --theme-color property in your style sheet. Example: @@ -57,7 +59,7 @@ export default function (vm) { --theme-color: deeppink; } - `).trim() + `).trim(), ); } }, @@ -65,7 +67,7 @@ export default function (vm) { typeof window.$docsify === 'function' ? window.$docsify(vm) - : window.$docsify + : window.$docsify, ); // Merge default and user-specified key bindings @@ -86,14 +88,14 @@ export default function (vm) { }, }, // User-specified - config.keyBindings + config.keyBindings, ); } const script = currentScript || Array.from(document.getElementsByTagName('script')).filter(n => - /docsify\./.test(n.src) + /docsify\./.test(n.src), )[0]; if (script) { diff --git a/src/core/event/index.js b/src/core/event/index.js index a01d750..4e0dc42 100644 --- a/src/core/event/index.js +++ b/src/core/event/index.js @@ -27,7 +27,7 @@ export function Events(Base) { if (topMargin) { document.documentElement.style.setProperty( 'scroll-padding-top', - `${topMargin}px` + `${topMargin}px`, ); } @@ -93,7 +93,7 @@ export function Events(Base) { a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 - : 1 + : 1, )[0] : // Get first and only item in set. // May be undefined if no headings are in view. @@ -115,7 +115,7 @@ export function Events(Base) { }, { rootMargin: '0% 0% -50% 0%', // Top half of viewport - } + }, ); headingElms.forEach(elm => { @@ -172,7 +172,7 @@ export function Events(Base) { // Handle keyboard events dom.on('keydown', e => { const isTextEntry = document.activeElement.matches( - 'input, select, textarea' + 'input, select, textarea', ); if (isTextEntry) { @@ -192,9 +192,9 @@ export function Events(Base) { (modifierKeys.includes(k) && e[k + 'Key']) || e.key === k || // Ex: " ", "a" e.code.toLowerCase() === k || // "space" - e.code.toLowerCase() === `key${k}` // "keya" - ) - ) + e.code.toLowerCase() === `key${k}`, // "keya" + ), + ), ); matchingConfigs.forEach(({ callback }) => { @@ -262,7 +262,7 @@ export function Events(Base) { dom.on( dom.body, 'click', - () => dom.body.classList.contains('close') && toggle() + () => dom.body.classList.contains('close') && toggle(), ); } @@ -297,7 +297,7 @@ export function Events(Base) { onRender() { const currentPath = this.router.toURL(this.router.getCurrentPath()); const currentTitle = dom.find( - `.sidebar a[href='${currentPath}']` + `.sidebar a[href='${currentPath}']`, )?.innerText; // Update page title @@ -327,7 +327,7 @@ export function Events(Base) { // Anchor link if (query.id) { const headingElm = dom.find( - `.markdown-section :where(h1, h2, h3, h4, h5)[id="${query.id}"]` + `.markdown-section :where(h1, h2, h3, h4, h5)[id="${query.id}"]`, ); if (headingElm) { @@ -402,7 +402,7 @@ export function Events(Base) { .find( a => href.includes(a.getAttribute('href')) || - href.includes(decodeURI(a.getAttribute('href'))) + href.includes(decodeURI(a.getAttribute('href'))), ); const oldActive = dom.find(navElm, 'li.active'); @@ -434,7 +434,7 @@ export function Events(Base) { const newActive = dom .find( sidebar, - `a[href="${href}"], a[href="${decodeURIComponent(href)}"]` + `a[href="${href}"], a[href="${decodeURIComponent(href)}"]`, ) ?.closest('li'); @@ -467,7 +467,7 @@ export function Events(Base) { const newPage = dom .find( sidebar, - `a[href="${path}"], a[href="${decodeURIComponent(path)}"]` + `a[href="${path}"], a[href="${decodeURIComponent(path)}"]`, ) ?.closest('li'); @@ -496,7 +496,7 @@ export function Events(Base) { document.addEventListener( 'scrollend', () => (this.#isScrolling = false), - { once: true } + { once: true }, ); } // Browsers w/o native scrollend event support (Safari) @@ -515,7 +515,7 @@ export function Events(Base) { document.addEventListener('scroll', callback, false); } }, - { once: true } + { once: true }, ); } }; diff --git a/src/core/fetch/index.js b/src/core/fetch/index.js index 52c777f..8c6cc83 100644 --- a/src/core/fetch/index.js +++ b/src/core/fetch/index.js @@ -22,7 +22,7 @@ export function Fetch(Base) { get( vm.router.getFile(path + file) + qs, false, - vm.config.requestHeaders + vm.config.requestHeaders, ).then(next, _error => this.#loadNested(path, qs, file, next, vm)); } @@ -83,7 +83,7 @@ export function Fetch(Base) { _fetch(cb = noop) { const { query } = this.route; - let { path } = this.route; + const { path } = this.route; // Prevent loading remote content via URL hash // Ex: https://foo.com/#//bar.com/file.md @@ -107,7 +107,7 @@ export function Fetch(Base) { this._renderMain( text, opt, - this._loadSideAndNav(path, qs, loadSidebar, cb) + this._loadSideAndNav(path, qs, loadSidebar, cb), ); }; @@ -125,7 +125,7 @@ export function Fetch(Base) { } else { this.#request(file + qs, requestHeaders).then( contentFetched, - contentFailedToFetch + contentFailedToFetch, ); } }); @@ -133,7 +133,7 @@ export function Fetch(Base) { // if the requested url is not local, just fetch the file this.#request(file + qs, requestHeaders).then( contentFetched, - contentFailedToFetch + contentFailedToFetch, ); } @@ -145,7 +145,7 @@ export function Fetch(Base) { loadNavbar, text => this._renderNav(text), this, - true + true, ); } } @@ -174,7 +174,7 @@ export function Fetch(Base) { path = this.router.getFile(root + path); this.coverIsHTML = /\.html$/g.test(path); get(path + stringifyQuery(query, ['id']), false, requestHeaders).then( - text => this._renderCover(text, coverOnly) + text => this._renderCover(text, coverOnly), ); } else { this._renderCover(null, coverOnly); @@ -216,7 +216,7 @@ export function Fetch(Base) { } const newPath = this.router.getFile( - path.replace(new RegExp(`^/${local}`), '') + path.replace(new RegExp(`^/${local}`), ''), ); const req = this.#request(newPath + qs, requestHeaders); @@ -225,9 +225,9 @@ export function Fetch(Base) { this._renderMain( text, opt, - this._loadSideAndNav(path, qs, loadSidebar, cb) + this._loadSideAndNav(path, qs, loadSidebar, cb), ), - _error => this._fetch404(path, qs, cb) + _error => this._fetch404(path, qs, cb), ); return true; @@ -250,7 +250,7 @@ export function Fetch(Base) { this.#request(this.router.getFile(path404), requestHeaders).then( (text, opt) => this._renderMain(text, opt, fnLoadSideAndNav), - _error => this._renderMain(null, {}, fnLoadSideAndNav) + _error => this._renderMain(null, {}, fnLoadSideAndNav), ); return true; } diff --git a/src/core/init/lifecycle.js b/src/core/init/lifecycle.js index 36eb4c7..7174079 100644 --- a/src/core/init/lifecycle.js +++ b/src/core/init/lifecycle.js @@ -47,6 +47,7 @@ export function Lifecycle(Base) { }); } catch (err) { if (catchPluginErrors) { + // eslint-disable-next-line no-console console.error(errTitle, err); } else { throw err; @@ -62,6 +63,7 @@ export function Lifecycle(Base) { step(index + 1); } catch (err) { if (catchPluginErrors) { + // eslint-disable-next-line no-console console.error(errTitle, err); } else { throw err; diff --git a/src/core/render/compiler.js b/src/core/render/compiler.js index 26c66c6..99c639e 100644 --- a/src/core/render/compiler.js +++ b/src/core/render/compiler.js @@ -85,7 +85,7 @@ export class Compiler { marked.setOptions( Object.assign(mdConf, { renderer: Object.assign(renderer, mdConf.renderer), - }) + }), ); compile = marked; } @@ -152,7 +152,7 @@ export class Compiler { href = getPath( this.contentBase, getParentPath(this.router.getCurrentPath()), - href + href, ); } @@ -282,7 +282,7 @@ export class Compiler { } const tree = this.cacheTree[currentPath] || genTree(toc, level); - html = treeTpl(tree, /* html */ `
    {inner}
`); + html = treeTpl(tree, /* html */ '
    {inner}
'); this.cacheTree[currentPath] = tree; } diff --git a/src/core/render/compiler/code.js b/src/core/render/compiler/code.js index 93e3e01..d570f62 100644 --- a/src/core/render/compiler/code.js +++ b/src/core/render/compiler/code.js @@ -8,7 +8,7 @@ export const highlightCodeCompiler = ({ renderer }) => const text = Prism.highlight( code.replace(/@DOCSIFY_QM@/g, '`'), langOrMarkup, - lang + lang, ); return /* html */ `
${text}
`; diff --git a/src/core/render/compiler/image.js b/src/core/render/compiler/image.js index 3c521e9..8900353 100644 --- a/src/core/render/compiler/image.js +++ b/src/core/render/compiler/image.js @@ -4,7 +4,7 @@ import { isAbsolutePath, getPath, getParentPath } from '../../router/util.js'; export const imageCompiler = ({ renderer, contentBase, router }) => (renderer.image = (href, title, text) => { let url = href; - let attrs = []; + const attrs = []; const { str, config } = getAndRemoveConfig(title); title = str; @@ -39,6 +39,6 @@ export const imageCompiler = ({ renderer, contentBase, router }) => } return /* html */ `${text}`; }); diff --git a/src/core/render/compiler/link.js b/src/core/render/compiler/link.js index 925e930..4c1c26e 100644 --- a/src/core/render/compiler/link.js +++ b/src/core/render/compiler/link.js @@ -9,7 +9,7 @@ export const linkCompiler = ({ compilerClass, }) => (renderer.link = (href, title = '', text) => { - let attrs = []; + const attrs = []; const { str, config } = getAndRemoveConfig(title); linkTarget = config.target || linkTarget; linkRel = @@ -42,8 +42,8 @@ export const linkCompiler = ({ href.indexOf('mailto:') === 0 ? '' : linkRel !== '' - ? ` rel="${linkRel}"` - : '' + ? ` rel="${linkRel}"` + : '', ); } diff --git a/src/core/render/compiler/taskList.js b/src/core/render/compiler/taskList.js index 1789797..acb7a53 100644 --- a/src/core/render/compiler/taskList.js +++ b/src/core/render/compiler/taskList.js @@ -1,7 +1,7 @@ export const taskListCompiler = ({ renderer }) => (renderer.list = (body, ordered, start) => { const isTaskList = /
  • /.test( - body.split('class="task-list"')[0] + body.split('class="task-list"')[0], ); const isStartReq = start && start > 1; const tag = ordered ? 'ol' : 'ul'; diff --git a/src/core/render/embed.js b/src/core/render/embed.js index 3f1b761..08d6c6b 100644 --- a/src/core/render/embed.js +++ b/src/core/render/embed.js @@ -15,6 +15,7 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) { while ((token = embedTokens[step++])) { const currentToken = token; + // eslint-disable-next-line no-loop-func const next = text => { let embedToken; if (text) { @@ -48,7 +49,7 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) { if (currentToken.embed.fragment) { const fragment = currentToken.embed.fragment; const pattern = new RegExp( - `(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]([\\s\\S]*)(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]` + `(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]([\\s\\S]*)(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]`, ); text = stripIndent((text.match(pattern) || [])[1] || '').trim(); } @@ -58,7 +59,7 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) { currentToken.embed.lang + '\n' + text.replace(/`/g, '@DOCSIFY_QM@') + - '\n```\n' + '\n```\n', ); } else if (currentToken.embed.type === 'mermaid') { embedToken = [ @@ -89,7 +90,7 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) { } export function prerenderEmbed({ compiler, raw = '', fetch }, done) { - let hit = cached[raw]; + const hit = cached[raw]; if (hit) { const copy = hit.slice(); copy.links = hit.links; @@ -117,7 +118,7 @@ export function prerenderEmbed({ compiler, raw = '', fetch }, done) { } return src; - } + }, ); } }); diff --git a/src/core/render/emoji-data.js b/src/core/render/emoji-data.js index 9a4fd9e..6f42042 100644 --- a/src/core/render/emoji-data.js +++ b/src/core/render/emoji-data.js @@ -1,4 +1,4 @@ -/* eslint-disable */ + // ============================================================================= // DO NOT EDIT: This file is auto-generated by an /build/emoji.js diff --git a/src/core/render/emojify.js b/src/core/render/emojify.js index d0c1e09..2f5af7e 100644 --- a/src/core/render/emojify.js +++ b/src/core/render/emojify.js @@ -31,17 +31,17 @@ export function emojify(text, useNativeEmoji) { // Mark colons in tags .replace( /<(code|pre|script|template)[^>]*?>[\s\S]+?<\/(code|pre|script|template)>/g, - m => m.replace(/:/g, '__colon__') + m => m.replace(/:/g, '__colon__'), ) // Mark colons in comments .replace(//g, m => m.replace(/:/g, '__colon__')) // Mark colons in URIs .replace(/([a-z]{2,}:)?\/\/[^\s'">)]+/gi, m => - m.replace(/:/g, '__colon__') + m.replace(/:/g, '__colon__'), ) // Replace emoji shorthand codes .replace(/:([a-z0-9_\-+]+?):/g, (m, $1) => - replaceEmojiShorthand(m, $1, useNativeEmoji) + replaceEmojiShorthand(m, $1, useNativeEmoji), ) // Restore colons in tags and comments .replace(/__colon__/g, ':') diff --git a/src/core/render/index.js b/src/core/render/index.js index 9d3a8c0..bf2f859 100644 --- a/src/core/render/index.js +++ b/src/core/render/index.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import tinydate from 'tinydate'; import * as dom from '../util/dom.js'; import { getPath, isAbsolutePath } from '../router/util.js'; @@ -47,8 +46,8 @@ export function Render(Base) { typeof fn === 'function' ? fn(updated) : typeof fn === 'string' - ? tinydate(fn)(new Date(updated)) - : updated; + ? tinydate(fn)(new Date(updated)) + : updated; return html.replace(/{docsify-updated}/g, updated); } @@ -101,7 +100,7 @@ export function Render(Base) { const vueGlobalOptions = docsifyConfig.vueGlobalOptions || {}; const vueMountData = []; const vueComponentNames = Object.keys( - docsifyConfig.vueComponents || {} + docsifyConfig.vueComponents || {}, ); // Register global vueComponents @@ -131,7 +130,7 @@ export function Render(Base) { dom.find(markdownElm, cssSelector), docsifyConfig.vueMounts[cssSelector], ]) - .filter(([elm, vueConfig]) => elm) + .filter(([elm, vueConfig]) => elm), ); // Template syntax, vueComponents, vueGlobalOptions ... @@ -189,7 +188,7 @@ export function Render(Base) { } return [elm, vueConfig]; - }) + }), ); // Not found mounts but import Vue resource @@ -244,7 +243,7 @@ export function Render(Base) { el.setAttribute('href', nameLink); } else if (typeof nameLink === 'object') { const match = Object.keys(nameLink).filter( - key => path.indexOf(key) > -1 + key => path.indexOf(key) > -1, )[0]; el.setAttribute('href', nameLink[match]); @@ -262,7 +261,7 @@ export function Render(Base) { if (skipLink?.constructor === Object) { const matchingPath = Object.keys(skipLink).find(path => - vm.route.path.startsWith(path.startsWith('/') ? path : `/${path}`) + vm.route.path.startsWith(path.startsWith('/') ? path : `/${path}`), ); const matchingText = matchingPath && skipLink[matchingPath]; @@ -355,7 +354,7 @@ export function Render(Base) { html = this.#formatUpdated( html, opt.updatedAt, - this.config.formatUpdated + this.config.formatUpdated, ); } @@ -377,7 +376,7 @@ export function Render(Base) { tokens => { html = this.compiler.compile(tokens); callback(); - } + }, ); } }); @@ -389,7 +388,7 @@ export function Render(Base) { dom.toggleClass( dom.getNode('main'), coverOnly ? 'add' : 'remove', - 'hidden' + 'hidden', ); if (!text) { dom.toggleClass(el, 'remove', 'show'); @@ -440,7 +439,6 @@ export function Render(Base) { // Init markdown compiler this.compiler = new Compiler(config, this.router); if (inBrowser) { - /* eslint-disable-next-line camelcase */ window.__current_docsify_compiler__ = this.compiler; } @@ -494,7 +492,7 @@ export function Render(Base) { if (config.themeColor) { dom.$.head.appendChild( - dom.create('div', tpl.theme(config.themeColor)).firstElementChild + dom.create('div', tpl.theme(config.themeColor)).firstElementChild, ); } diff --git a/src/core/render/progressbar.js b/src/core/render/progressbar.js index 29d0dfe..0664c41 100644 --- a/src/core/render/progressbar.js +++ b/src/core/render/progressbar.js @@ -41,7 +41,7 @@ export default function (info) { if (num >= 95) { clearTimeout(timeId); - // eslint-disable-next-line no-unused-vars + timeId = setTimeout(_ => { barEl.style.opacity = 0; barEl.style.width = '0%'; diff --git a/src/core/render/tpl.js b/src/core/render/tpl.js index 44810cd..e76eb05 100644 --- a/src/core/render/tpl.js +++ b/src/core/render/tpl.js @@ -95,7 +95,7 @@ export function cover() { */ export function tree( toc, - tpl = /* html */ `
      {inner}
    ` + tpl = /* html */ '
      {inner}
    ', ) { if (!toc || !toc.length) { return ''; diff --git a/src/core/router/history/base.js b/src/core/router/history/base.js index b36e48e..268cbb1 100644 --- a/src/core/router/history/base.js +++ b/src/core/router/history/base.js @@ -26,7 +26,7 @@ export class History { ? this.#getAlias( path.replace(this.#cached[match], alias[match]), alias, - path + path, ) : path; } @@ -35,8 +35,8 @@ export class History { return new RegExp(`\\.(${ext.replace(/^\./, '')}|html)$`, 'g').test(path) ? path : /\/$/g.test(path) - ? `${path}README${ext}` - : `${path}${ext}`; + ? `${path}README${ext}` + : `${path}${ext}`; } getBasePath() { @@ -88,7 +88,7 @@ export class History { if (this.config.relativePath && path.indexOf('/') !== 0) { const currentDir = currentRoute.substring( 0, - currentRoute.lastIndexOf('/') + 1 + currentRoute.lastIndexOf('/') + 1, ); return cleanPath(resolvePath(currentDir + path)); } diff --git a/src/core/router/index.js b/src/core/router/index.js index 2ab50db..cb4f867 100644 --- a/src/core/router/index.js +++ b/src/core/router/index.js @@ -43,7 +43,6 @@ export function Router(Base) { this.updateRender(); lastRoute = this.route; - // eslint-disable-next-line no-unused-vars router.onchange(params => { this.updateRender(); this._updateRender(); diff --git a/src/core/router/util.js b/src/core/router/util.js index e3f7608..b74d120 100644 --- a/src/core/router/util.js +++ b/src/core/router/util.js @@ -33,7 +33,7 @@ export function stringifyQuery(obj, ignores = []) { qs.push( obj[key] ? `${encode(key)}=${encode(obj[key])}`.toLowerCase() - : encode(key) + : encode(key), ); } @@ -63,7 +63,7 @@ export const cleanPath = cached(path => { export const resolvePath = cached(path => { const segments = path.replace(/^\//, '').split('/'); - let resolved = []; + const resolved = []; for (const segment of segments) { if (segment === '..') { resolved.pop(); diff --git a/src/core/util/ajax.js b/src/core/util/ajax.js index 3bc2fec..1a0edd1 100644 --- a/src/core/util/ajax.js +++ b/src/core/util/ajax.js @@ -1,5 +1,5 @@ // @ts-check -/* eslint-disable no-unused-vars */ + import progressbar from '../render/progressbar.js'; import { noop } from './core.js'; @@ -53,7 +53,7 @@ export function get(url, hasBar = false, headers = {}) { progressbar({ step: Math.floor(Math.random() * 5 + 1), }), - 500 + 500, ); xhr.addEventListener('progress', progressbar); diff --git a/src/core/util/core.js b/src/core/util/core.js index a091075..fc61809 100644 --- a/src/core/util/core.js +++ b/src/core/util/core.js @@ -52,8 +52,8 @@ export function isFn(obj) { * @returns {Boolean} True if the passed-in url is external */ export function isExternal(url) { - let match = url.match( - /^([^:/?#]+:)?(?:\/{2,}([^/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/ + const match = url.match( + /^([^:/?#]+:)?(?:\/{2,}([^/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/, ); if ( @@ -68,9 +68,9 @@ export function isExternal(url) { match[2].length > 0 && match[2].replace( new RegExp( - ':(' + { 'http:': 80, 'https:': 443 }[location.protocol] + ')?$' + ':(' + { 'http:': 80, 'https:': 443 }[location.protocol] + ')?$', ), - '' + '', ) !== location.host ) { return true; diff --git a/src/plugins/disqus.js b/src/plugins/disqus.js index 0658aa9..dd19d5c 100644 --- a/src/plugins/disqus.js +++ b/src/plugins/disqus.js @@ -26,7 +26,6 @@ function install(hook, vm) { div.style = `width: ${main.clientWidth}px; margin: 0 auto 20px;`; dom.appendTo(dom.find('.content'), div); - // eslint-disable-next-line window.disqus_config = function () { this.page.url = location.origin + '/-' + vm.route.path; this.page.identifier = vm.route.path; diff --git a/src/plugins/emoji.js b/src/plugins/emoji.js index cd62620..7d71a99 100644 --- a/src/plugins/emoji.js +++ b/src/plugins/emoji.js @@ -2,6 +2,7 @@ import emojiData from '../core/render/emoji-data.js'; // Deprecation notice if (window && window.console) { + // eslint-disable-next-line no-console console.info('Docsify emoji plugin has been deprecated as of v4.13'); } diff --git a/src/plugins/front-matter/yaml.js b/src/plugins/front-matter/yaml.js index 1f92a00..3ac8523 100644 --- a/src/plugins/front-matter/yaml.js +++ b/src/plugins/front-matter/yaml.js @@ -47,7 +47,7 @@ var errors = [], item: new RegExp('^-\\s+'), trim: new RegExp('^\\s+|\\s+$'), comment: new RegExp( - '([^\\\'\\"#]+([\\\'\\"][^\\\'\\"]*[\\\'\\"])*)*(#.*)?' + '([^\\\'\\"#]+([\\\'\\"][^\\\'\\"]*[\\\'\\"])*)*(#.*)?', ), }; diff --git a/src/plugins/ga.js b/src/plugins/ga.js index 9d987fb..c1c130c 100644 --- a/src/plugins/ga.js +++ b/src/plugins/ga.js @@ -29,6 +29,7 @@ function collect() { const install = function (hook) { if (!$docsify.ga) { + // eslint-disable-next-line no-console console.error('[Docsify] ga is required.'); return; } diff --git a/src/plugins/gtag.js b/src/plugins/gtag.js index 39b532c..aae78b6 100644 --- a/src/plugins/gtag.js +++ b/src/plugins/gtag.js @@ -51,16 +51,15 @@ function collect() { // usage: https://developers.google.com/analytics/devguides/collection/gtagjs/pages window.gtag('event', 'page_view', { - /* eslint-disable camelcase */ page_title: document.title, page_location: location.href, page_path: location.pathname, - /* eslint-disable camelcase */ }); } const install = function (hook) { if (!$docsify.gtag) { + // eslint-disable-next-line no-console console.error('[Docsify] gtag is required.'); return; } diff --git a/src/plugins/search/component.js b/src/plugins/search/component.js index cb222ee..fbb1f75 100644 --- a/src/plugins/search/component.js +++ b/src/plugins/search/component.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import { search } from './search.js'; let NO_DATA_TEXT = ''; @@ -216,7 +215,7 @@ function bindEvents() { 'click', e => ['A', 'H2', 'P', 'EM'].indexOf(e.target.tagName) === -1 && - e.stopPropagation() + e.stopPropagation(), ); Docsify.dom.on($input, 'input', e => { clearTimeout(timeId); diff --git a/src/plugins/search/index.js b/src/plugins/search/index.js index cff738a..d66f2f1 100644 --- a/src/plugins/search/index.js +++ b/src/plugins/search/index.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import { init as initComponent, update as updateComponent, diff --git a/src/plugins/search/search.js b/src/plugins/search/search.js index 14312d6..95aa83a 100644 --- a/src/plugins/search/search.js +++ b/src/plugins/search/search.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import { getAndRemoveConfig, getAndRemoveDocisfyIgnoreConfig, @@ -178,9 +177,9 @@ export function search(query) { const regEx = new RegExp( escapeHtml(ignoreDiacriticalMarks(keyword)).replace( /[|\\{}()[\]^$+*?.]/g, - '\\$&' + '\\$&', ), - 'gi' + 'gi', ); let indexTitle = -1; let indexContent = -1; @@ -217,7 +216,7 @@ export function search(query) { .substring(start, end) .replace( regEx, - word => /* html */ `${word}` + word => /* html */ `${word}`, ) + '...'; @@ -254,7 +253,7 @@ export function init(config, vm) { if (Array.isArray(config.pathNamespaces)) { namespaceSuffix = config.pathNamespaces.filter( - prefix => path.slice(0, prefix.length) === prefix + prefix => path.slice(0, prefix.length) === prefix, )[0] || namespaceSuffix; } else if (config.pathNamespaces instanceof RegExp) { const matches = path.match(config.pathNamespaces); @@ -297,7 +296,7 @@ export function init(config, vm) { result => { INDEXS[path] = genIndex(path, result, vm.router, config.depth); len === ++count && saveData(config.maxAge, expireKey, indexKey); - } + }, ); }); } diff --git a/src/plugins/zoom-image.js b/src/plugins/zoom-image.js index 369ca16..9b74c95 100644 --- a/src/plugins/zoom-image.js +++ b/src/plugins/zoom-image.js @@ -6,8 +6,8 @@ function install(hook) { hook.doneEach(_ => { let elms = Array.from( document.querySelectorAll( - '.markdown-section img:not(.emoji):not([data-no-zoom])' - ) + '.markdown-section img:not(.emoji):not([data-no-zoom])', + ), ); elms = elms.filter(elm => !elm.matches('a img')); diff --git a/test/config/jest.setup-tests.js b/test/config/jest.setup-tests.js index f72ed47..9bc6571 100644 --- a/test/config/jest.setup-tests.js +++ b/test/config/jest.setup-tests.js @@ -110,7 +110,7 @@ beforeEach(async () => { // Mock IntersectionObserver // ----------------------------------------------------------------------------- [global, window].forEach( - obj => (obj.IntersectionObserver = IntersectionObserver) + obj => (obj.IntersectionObserver = IntersectionObserver), ); }); diff --git a/test/config/server.js b/test/config/server.js index d896b58..5875be3 100644 --- a/test/config/server.js +++ b/test/config/server.js @@ -17,7 +17,7 @@ export async function startServer() { // problematic for testing and CI/CD. if (bsServer.getOption('port') !== settings.port) { console.log( - `\nPort ${settings.port} not available. Exiting process.\n` + `\nPort ${settings.port} not available. Exiting process.\n`, ); process.exit(0); } diff --git a/test/e2e/.eslintrc.cjs b/test/e2e/.eslintrc.cjs deleted file mode 100644 index 74a7891..0000000 --- a/test/e2e/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['plugin:playwright/playwright-test'], -}; diff --git a/test/e2e/example.test.js b/test/e2e/example.test.js index 30e9d04..18ad13a 100644 --- a/test/e2e/example.test.js +++ b/test/e2e/example.test.js @@ -21,7 +21,7 @@ test.describe('Creating a Docsify site (e2e tests in Playwright)', () => { await page.addScriptTag({ url: '/dist/docsify.js' }); // Wait for docsify to initialize - await page.waitForSelector('#main'); + await page.locator('#main').waitFor(); // Create handle for JavaScript object in browser const $docsify = await page.evaluate(() => window.$docsify); @@ -42,7 +42,7 @@ test.describe('Creating a Docsify site (e2e tests in Playwright)', () => { const mainElm = page.locator('#main'); await expect(mainElm).toHaveCount(1); await expect(mainElm).toContainText( - 'A magical documentation site generator' + 'A magical documentation site generator', ); }); @@ -128,11 +128,14 @@ test.describe('Creating a Docsify site (e2e tests in Playwright)', () => { // Verify docsifyInitConfig.script was added to the DOM expect( - await page.evaluate(scriptText => { - return [...document.querySelectorAll('script')].some( - elm => elm.textContent.replace(/\s+/g, '') === scriptText - ); - }, docsifyInitConfig.script.replace(/\s+/g, '')) + await page.evaluate( + scriptText => { + return [...document.querySelectorAll('script')].some( + elm => elm.textContent.replace(/\s+/g, '') === scriptText, + ); + }, + docsifyInitConfig.script.replace(/\s+/g, ''), + ), ).toBe(true); // Verify docsifyInitConfig.script was executed @@ -141,17 +144,20 @@ test.describe('Creating a Docsify site (e2e tests in Playwright)', () => { // Verify docsifyInitConfig.styleURLs were added to the DOM for (const styleURL of docsifyInitConfig.styleURLs) { await expect( - page.locator(`link[rel*="stylesheet"][href$="${styleURL}"]`) + page.locator(`link[rel*="stylesheet"][href$="${styleURL}"]`), ).toHaveCount(1); } // Verify docsifyInitConfig.style was added to the DOM expect( - await page.evaluate(styleText => { - return [...document.querySelectorAll('style')].some( - elm => elm.textContent.replace(/\s+/g, '') === styleText - ); - }, docsifyInitConfig.style.replace(/\s+/g, '')) + await page.evaluate( + styleText => { + return [...document.querySelectorAll('style')].some( + elm => elm.textContent.replace(/\s+/g, '') === styleText, + ); + }, + docsifyInitConfig.style.replace(/\s+/g, ''), + ), ).toBe(true); // Verify docsify navigation and docsifyInitConfig.routes diff --git a/test/e2e/index-file.test.js b/test/e2e/index-file.test.js index 1000c12..79a4f04 100644 --- a/test/e2e/index-file.test.js +++ b/test/e2e/index-file.test.js @@ -12,7 +12,7 @@ test.describe('Index file hosting', () => { test('should serve from index file', async ({ page }) => { await docsifyInit(sharedOptions); await expect(page.locator('#main')).toContainText( - 'A magical documentation site generator' + 'A magical documentation site generator', ); expect(page.url()).toMatch(/index\.html#\/$/); }); diff --git a/test/e2e/security.test.js b/test/e2e/security.test.js index c01d871..44913b3 100644 --- a/test/e2e/security.test.js +++ b/test/e2e/security.test.js @@ -12,7 +12,7 @@ test.describe('Security - Cross Site Scripting (XSS)', () => { }; const slashStrings = ['//', '///']; - for (let slashString of slashStrings) { + for (const slashString of slashStrings) { const hash = `#${slashString}domain.com/file.md`; test(`should not load remote content from hash (${hash})`, async ({ diff --git a/test/e2e/virtual-routes.test.js b/test/e2e/virtual-routes.test.js index 0b2e3f8..6c0885f 100644 --- a/test/e2e/virtual-routes.test.js +++ b/test/e2e/virtual-routes.test.js @@ -8,9 +8,7 @@ import { test, expect } from './fixtures/docsify-init-fixture.js'; */ async function navigateToRoute(page, route) { await page.evaluate(r => (window.location.hash = r), route); - // TODO: playwright eslint now recommends not using networkidle - // eslint-disable-next-line - await page.waitForLoadState('networkidle'); + await page.waitForLoadState('load'); } test.describe('Virtual Routes - Generate Dynamic Content via Config', () => { @@ -60,7 +58,7 @@ test.describe('Virtual Routes - Generate Dynamic Content via Config', () => { '/my-awesome-async-function-route': async function ( route, matched, - next + next, ) { setTimeout(() => next('# My Awesome Function Route'), 100); }, @@ -101,7 +99,7 @@ test.describe('Virtual Routes - Generate Dynamic Content via Config', () => { page, }) => { const routes = { - '/pets/(.*)': route => `# Route: /pets/dog`, + '/pets/(.*)': route => '# Route: /pets/dog', }; await docsifyInit({ diff --git a/test/e2e/vue.test.js b/test/e2e/vue.test.js index de66c7b..3347881 100644 --- a/test/e2e/vue.test.js +++ b/test/e2e/vue.test.js @@ -83,7 +83,7 @@ test.describe('Vue.js Compatibility', () => { // Tests // ---------------------------------------------------------------------------- - test(`Parse templates and render content when import Vue resources`, async ({ + test('Parse templates and render content when import Vue resources', async ({ page, }) => { const docsifyInitConfig = { @@ -116,7 +116,7 @@ test.describe('Vue.js Compatibility', () => { await expect(page.locator('#vuefor')).toHaveText('12345'); await expect(page.locator('#vuecomponent')).toHaveText('0'); await expect(page.locator('#vueglobaloptions p')).toHaveText( - 'vueglobaloptions' + 'vueglobaloptions', ); await expect(page.locator('#vueglobaloptions > span')).toHaveText('0'); await expect(page.locator('#vuemounts p')).toHaveText('vuemounts'); @@ -136,7 +136,7 @@ test.describe('Vue.js Compatibility', () => { }); } - test(`ignores content when Vue is not present`, async ({ page }) => { + test('ignores content when Vue is not present', async ({ page }) => { const docsifyInitConfig = getSharedConfig(); await docsifyInit(docsifyInitConfig); @@ -148,7 +148,7 @@ test.describe('Vue.js Compatibility', () => { await expect(page.locator('#vuescript p')).toHaveText('---'); }); - test(`ignores content when vueGlobalOptions is undefined`, async ({ + test('ignores content when vueGlobalOptions is undefined', async ({ page, }) => { const docsifyInitConfig = getSharedConfig(); @@ -166,7 +166,7 @@ test.describe('Vue.js Compatibility', () => { await expect(page.locator('#vuescript p')).toHaveText('vuescript'); }); - test(`ignores content when vueMounts is undefined`, async ({ page }) => { + test('ignores content when vueMounts is undefined', async ({ page }) => { const docsifyInitConfig = getSharedConfig(); docsifyInitConfig.config.vueMounts['#vuemounts'] = undefined; @@ -176,13 +176,13 @@ test.describe('Vue.js Compatibility', () => { await expect(page.locator('#vuefor')).toHaveText('12345'); await expect(page.locator('#vuecomponent')).toHaveText('0'); await expect(page.locator('#vueglobaloptions p')).toHaveText( - 'vueglobaloptions' + 'vueglobaloptions', ); await expect(page.locator('#vuemounts p')).toHaveText('vueglobaloptions'); await expect(page.locator('#vuescript p')).toHaveText('vuescript'); }); - test(`ignores `, + homepage: + /* html */ ' ', }, // _logHTML: true, }); @@ -150,7 +151,8 @@ describe('Emoji', function () { test('Ignores emoji shorthand codes in style url() values', async () => { await docsifyInit({ markdown: { - homepage: /* html */ ``, + homepage: + /* html */ '', }, // _logHTML: true, }); diff --git a/test/integration/example.test.js b/test/integration/example.test.js index 3c79034..baadd97 100644 --- a/test/integration/example.test.js +++ b/test/integration/example.test.js @@ -12,7 +12,7 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { // Verify options.markdown content was rendered expect(document.querySelector('#main').textContent).toContain( - 'A magical documentation site generator' + 'A magical documentation site generator', ); }); @@ -78,7 +78,7 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { expect(typeof window.$docsify).toBe('object'); expect(window.$docsify).toHaveProperty('themeColor', 'red'); expect(document.querySelector('.app-name').textContent).toContain( - 'Docsify Name' + 'Docsify Name', ); // Verify docsifyInitConfig.markdown content was rendered @@ -94,7 +94,7 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { // Verify docsifyInitConfig.scriptURLs were added to the DOM for (const scriptURL of docsifyInitConfig.scriptURLs) { const matchElm = document.querySelector( - `script[data-src$="${scriptURL}"]` + `script[data-src$="${scriptURL}"]`, ); expect(matchElm).toBeTruthy(); } @@ -108,8 +108,8 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { [...document.querySelectorAll('script')].some( elm => elm.textContent.replace(/\s+/g, '') === - docsifyInitConfig.script.replace(/\s+/g, '') - ) + docsifyInitConfig.script.replace(/\s+/g, ''), + ), ).toBe(true); // Verify docsifyInitConfig.script was executed @@ -118,7 +118,7 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { // Verify docsifyInitConfig.styleURLs were added to the DOM for (const styleURL of docsifyInitConfig.styleURLs) { const matchElm = document.querySelector( - `link[rel*="stylesheet"][href$="${styleURL}"]` + `link[rel*="stylesheet"][href$="${styleURL}"]`, ); expect(matchElm).toBeTruthy(); } @@ -128,14 +128,14 @@ describe('Creating a Docsify site (integration tests in Jest)', function () { [...document.querySelectorAll('style')].some( elm => elm.textContent.replace(/\s+/g, '') === - docsifyInitConfig.style.replace(/\s+/g, '') - ) + docsifyInitConfig.style.replace(/\s+/g, ''), + ), ).toBe(true); // Verify docsify navigation and docsifyInitConfig.routes document.querySelector('a[href="#/test"]').click(); expect( - await waitForFunction(() => /#\/test$/.test(window.location.href)) + await waitForFunction(() => /#\/test$/.test(window.location.href)), ).toBeTruthy(); expect(await waitForText('#main', 'This is a custom route')).toBeTruthy(); }); diff --git a/test/integration/render.test.js b/test/integration/render.test.js index ebf3d8f..a91f347 100644 --- a/test/integration/render.test.js +++ b/test/integration/render.test.js @@ -16,14 +16,14 @@ describe('render', function () { const output = window.marked('!> Important content'); expect(output).toMatchInlineSnapshot( - `"

    Important content

    "` + '"

    Important content

    "', ); }); test('general tip', () => { const output = window.marked('?> General tip'); - expect(output).toMatchInlineSnapshot(`"

    General tip

    "`); + expect(output).toMatchInlineSnapshot('"

    General tip

    "'); }); }); @@ -42,7 +42,7 @@ describe('render', function () { `); expect(output).toMatchInlineSnapshot( - `"
    "` + '"
    "', ); }); @@ -53,7 +53,7 @@ describe('render', function () { `); expect(output).toMatchInlineSnapshot( - `"
    "` + '"
    "', ); }); @@ -64,7 +64,7 @@ describe('render', function () { `); expect(output).toMatchInlineSnapshot( - `"
    "` + '""', ); }); @@ -79,7 +79,7 @@ describe('render', function () { `); expect(output).toMatchInlineSnapshot( - `"
    1. first
    2. second

    text

    1. third
    "` + '"
    1. first
    2. second

    text

    1. third
    "', ); }); @@ -93,7 +93,7 @@ describe('render', function () { `); expect(output).toMatchInlineSnapshot( - `"
    • 1
    • 2
      • 2 a
      • 2 b
    • 3
    "` + '"
    • 1
    • 2
      • 2 a
      • 2 b
    • 3
    "', ); }); }); @@ -109,27 +109,27 @@ describe('render', function () { const output = window.marked('![alt text](http://imageUrl)'); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); test('class', async function () { const output = window.marked( - "![alt text](http://imageUrl ':class=someCssClass')" + "![alt text](http://imageUrl ':class=someCssClass')", ); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); test('id', async function () { const output = window.marked( - "![alt text](http://imageUrl ':id=someCssID')" + "![alt text](http://imageUrl ':id=someCssID')", ); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -137,17 +137,17 @@ describe('render', function () { const output = window.marked("![alt text](http://imageUrl ':no-zoom')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); test('width and height', async function () { const output = window.marked( - "![alt text](http://imageUrl ':size=WIDTHxHEIGHT')" + "![alt text](http://imageUrl ':size=WIDTHxHEIGHT')", ); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -155,7 +155,7 @@ describe('render', function () { const output = window.marked("![alt text](http://imageUrl ':size=50')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); }); @@ -171,7 +171,7 @@ describe('render', function () { const output = window.marked('# h1 tag'); expect(output).toMatchInlineSnapshot( - `"

    h1 tag

    "` + '"

    h1 tag

    "', ); }); @@ -179,7 +179,7 @@ describe('render', function () { const output = window.marked('## h2 tag'); expect(output).toMatchInlineSnapshot( - `"

    h2 tag

    "` + '"

    h2 tag

    "', ); }); @@ -187,7 +187,7 @@ describe('render', function () { const output = window.marked('### h3 tag'); expect(output).toMatchInlineSnapshot( - `"

    h3 tag

    "` + '"

    h3 tag

    "', ); }); @@ -195,7 +195,7 @@ describe('render', function () { const output = window.marked('#### h4 tag'); expect(output).toMatchInlineSnapshot( - `"

    h4 tag

    "` + '"

    h4 tag

    "', ); }); @@ -203,7 +203,7 @@ describe('render', function () { const output = window.marked('##### h5 tag'); expect(output).toMatchInlineSnapshot( - `"
    h5 tag
    "` + '"
    h5 tag
    "', ); }); @@ -211,7 +211,7 @@ describe('render', function () { const output = window.marked('###### h6 tag'); expect(output).toMatchInlineSnapshot( - `"
    h6 tag
    "` + '"
    h6 tag
    "', ); }); }); @@ -227,7 +227,7 @@ describe('render', function () { const output = window.marked('[alt text](http://url)'); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -239,7 +239,7 @@ describe('render', function () { const output = window.marked('[alt text](http://www.example.com)'); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -247,7 +247,7 @@ describe('render', function () { const output = window.marked("[alt text](http://url ':disabled')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -255,7 +255,7 @@ describe('render', function () { const output = window.marked("[alt text](http://url ':target=_self')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -263,17 +263,17 @@ describe('render', function () { const output = window.marked("[alt text](/url ':target=_blank')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); test('class', async function () { const output = window.marked( - "[alt text](http://url ':class=someCssClass')" + "[alt text](http://url ':class=someCssClass')", ); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); @@ -281,7 +281,7 @@ describe('render', function () { const output = window.marked("[alt text](http://url ':id=someCssID')"); expect(output).toMatchInlineSnapshot( - `"

    alt text

    "` + '"

    alt text

    "', ); }); }); @@ -297,7 +297,7 @@ describe('render', function () { expect(elm.textContent).toBe(expectText); expect(elm.outerHTML).toMatchInlineSnapshot( - `""` + '""', ); }); diff --git a/test/unit/.eslintrc.cjs b/test/unit/.eslintrc.cjs deleted file mode 100644 index 00bb44e..0000000 --- a/test/unit/.eslintrc.cjs +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - env: { - 'jest/globals': true, - }, - extends: ['plugin:jest/recommended', 'plugin:jest/style'], - plugins: ['jest'], -}; diff --git a/test/unit/core-util.test.js b/test/unit/core-util.test.js index a71d842..a1b9412 100644 --- a/test/unit/core-util.test.js +++ b/test/unit/core-util.test.js @@ -27,7 +27,7 @@ describe('core/util', () => { test('non external local url with more /', () => { const result = isExternal( - `//////////////////${location.host}/docsify/demo.md` + `//////////////////${location.host}/docsify/demo.md`, ); expect(result).toBeFalsy(); @@ -54,7 +54,7 @@ describe('core/util', () => { test('external url with more /', () => { const result = isExternal( - '//////////////////example.github.io/docsify/demo.md' + '//////////////////example.github.io/docsify/demo.md', ); expect(result).toBeTruthy(); diff --git a/test/unit/render-util.test.js b/test/unit/render-util.test.js index 24c750d..499329c 100644 --- a/test/unit/render-util.test.js +++ b/test/unit/render-util.test.js @@ -25,7 +25,7 @@ describe('core/render/utils', () => { test('getAndRemoveDocisfyIgnorConfig from ', () => { const { content, ignoreAllSubs, ignoreSubHeading } = getAndRemoveDocisfyIgnoreConfig( - 'My Ignore Title' + 'My Ignore Title', ); expect(content).toBe('My Ignore Title'); expect(ignoreSubHeading).toBeTruthy(); @@ -35,7 +35,7 @@ describe('core/render/utils', () => { test('getAndRemoveDocisfyIgnorConfig from ', () => { const { content, ignoreAllSubs, ignoreSubHeading } = getAndRemoveDocisfyIgnoreConfig( - 'My Ignore Title' + 'My Ignore Title', ); expect(content).toBe('My Ignore Title'); expect(ignoreAllSubs).toBeTruthy(); @@ -64,18 +64,18 @@ describe('core/render/utils', () => { describe('getAndRemoveConfig()', () => { test('parse simple config', () => { const result = getAndRemoveConfig( - `[filename](_media/example.md ':include')` + "[filename](_media/example.md ':include')", ); expect(result).toMatchObject({ config: {}, - str: `[filename](_media/example.md ':include')`, + str: "[filename](_media/example.md ':include')", }); }); test('parse config with arguments', () => { const result = getAndRemoveConfig( - `[filename](_media/example.md ':include :foo=bar :baz test')` + "[filename](_media/example.md ':include :foo=bar :baz test')", ); expect(result).toMatchObject({ @@ -83,18 +83,18 @@ describe('core/render/utils', () => { foo: 'bar', baz: true, }, - str: `[filename](_media/example.md ':include test')`, + str: "[filename](_media/example.md ':include test')", }); }); test('parse config with double quotes', () => { const result = getAndRemoveConfig( - `[filename](_media/example.md ":include")` + '[filename](_media/example.md ":include")', ); expect(result).toMatchObject({ config: {}, - str: `[filename](_media/example.md ":include")`, + str: '[filename](_media/example.md ":include")', }); }); }); @@ -122,7 +122,7 @@ describe('core/render/tpl', () => { ]); expect(result).toBe( - /* html */ `` + /* html */ '', ); }); }); @@ -130,12 +130,12 @@ describe('core/render/tpl', () => { describe('core/render/slugify', () => { test('slugify()', () => { const result = slugify( - `Bla bla bla ` + 'Bla bla bla ', ); const result2 = slugify( - `Another broken example` + 'Another broken example', ); - expect(result).toBe(`bla-bla-bla-`); - expect(result2).toBe(`another-broken-example`); + expect(result).toBe('bla-bla-bla-'); + expect(result2).toBe('another-broken-example'); }); });