diff options
author | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2023-06-13 01:43:37 +0200 |
---|---|---|
committer | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2023-06-13 01:43:37 +0200 |
commit | 03322672782a6318b019eff33fe44ec800d6f12c (patch) | |
tree | 9d807e1585cf28a1ea98e87b855932dba00f1880 | |
parent | 8e18b4698edd00f83af0be05bb3374f92fecaeb9 (diff) | |
download | svg.js-03322672782a6318b019eff33fe44ec800d6f12c.tar.gz svg.js-03322672782a6318b019eff33fe44ec800d6f12c.zip |
dependency updates, easier formatting
187 files changed, 10932 insertions, 7082 deletions
diff --git a/.config/karma.conf.js b/.config/karma.conf.cjs index 67667c7..7584c92 100644 --- a/.config/karma.conf.js +++ b/.config/karma.conf.cjs @@ -1,5 +1,5 @@ // Karma configuration -const karmaCommon = require('./karma.conf.common.js') +const karmaCommon = require('./karma.conf.common.cjs') let chromeBin = 'ChromeHeadless' if (process.platform === 'linux') { @@ -75,7 +75,7 @@ module.exports = function (config) { }, instrumenterOptions: { istanbul: { - esModules: true + esModules: true } } }, diff --git a/.config/karma.conf.common.js b/.config/karma.conf.common.cjs index 4808996..4808996 100644 --- a/.config/karma.conf.common.js +++ b/.config/karma.conf.common.cjs diff --git a/.config/karma.conf.saucelabs.js b/.config/karma.conf.saucelabs.cjs index 089f25a..484ebee 100644 --- a/.config/karma.conf.saucelabs.js +++ b/.config/karma.conf.saucelabs.cjs @@ -2,9 +2,9 @@ // https://wiki.saucelabs.com/display/DOCS/Platform+Configurator // TODO: remove dotenv after local test -require('dotenv').config() +// require('dotenv').config() -const karmaCommon = require('./karma.conf.common.js') +const karmaCommon = require('./karma.conf.common.cjs') const SauceLabsLaunchers = { /** Real mobile devices are not available @@ -39,7 +39,7 @@ const SauceLabsLaunchers = { base: 'SauceLabs', browserName: 'internet explorer', version: '11.0' - }/* + } /* sl_windows_edge: { base: 'SauceLabs', browserName: 'MicrosoftEdge', @@ -54,7 +54,7 @@ const SauceLabsLaunchers = { recordVideo: true, recordScreenshots: true, screenResolution: '1024x768' - } *//*, + } */ /*, sl_macos_iphone: { base: 'SauceLabs', browserName: 'Safari', @@ -85,7 +85,9 @@ const SauceLabsLaunchers = { module.exports = function (config) { if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { - console.error('SAUCE_USERNAME and SAUCE_ACCESS_KEY must be provided as environment variables.') + console.error( + 'SAUCE_USERNAME and SAUCE_ACCESS_KEY must be provided as environment variables.' + ) console.warn('Aborting Sauce Labs test') process.exit(1) } @@ -100,10 +102,7 @@ module.exports = function (config) { // so if you are really puzzled why something isn't working, then comment // out plugins: [] - it's here to make karma load faster // get possible karma plugins by `ls node_modules | grep 'karma-*'` - plugins: [ - 'karma-jasmine', - 'karma-sauce-launcher' - ], + plugins: ['karma-jasmine', 'karma-sauce-launcher'], // logLevel: config.LOG_DEBUG, diff --git a/.config/polyfillListIE.js b/.config/polyfillListIE.js index dbffbc5..7c7fc33 100644 --- a/.config/polyfillListIE.js +++ b/.config/polyfillListIE.js @@ -14,7 +14,9 @@ CustomEventPolyfill() try { if (!SVGElement.prototype.children) { Object.defineProperty(SVGElement.prototype, 'children', { - get: function () { return children(this) } + get: function () { + return children(this) + } }) } } catch (e) {} diff --git a/.config/pretest.js b/.config/pretest.js index 23b989e..0e6ecb7 100644 --- a/.config/pretest.js +++ b/.config/pretest.js @@ -1,15 +1,17 @@ /* global XMLHttpRequest */ 'use strict' -function get (uri) { +function get(uri) { var xhr = new XMLHttpRequest() xhr.open('GET', uri, false) xhr.send() - if (xhr.status !== 200) { console.error('SVG.js fixture could not be loaded. Tests will fail.') } + if (xhr.status !== 200) { + console.error('SVG.js fixture could not be loaded. Tests will fail.') + } return xhr.responseText } -function main () { +function main() { var style = document.createElement('style') document.head.appendChild(style) style.sheet.insertRule(get('/fixtures/fixture.css'), 0) diff --git a/.config/rollup.config.js b/.config/rollup.config.js index 8391ba0..586e8ea 100644 --- a/.config/rollup.config.js +++ b/.config/rollup.config.js @@ -1,9 +1,9 @@ -import * as pkg from '../package.json' +import pkg from '../package.json' assert { type: 'json' } import babel from '@rollup/plugin-babel' import resolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' import filesize from 'rollup-plugin-filesize' -import { terser } from 'rollup-plugin-terser' +import terser from '@rollup/plugin-terser' const buildDate = Date() @@ -21,17 +21,22 @@ const headerLong = `/*! const headerShort = `/*! ${pkg.name} v${pkg.version} ${pkg.license}*/;` const getBabelConfig = (node = false) => { - let targets = pkg.browserslist const plugins = [ - ['@babel/transform-runtime', { - version: "^7.14.5", - regenerator: false, - useESModules: true - }], - ["polyfill-corejs3", { - "method": "usage-pure" - }] + [ + '@babel/transform-runtime', + { + version: '^7.14.5', + regenerator: false, + useESModules: true + } + ], + [ + 'polyfill-corejs3', + { + method: 'usage-pure' + } + ] ] if (node) { @@ -43,15 +48,20 @@ const getBabelConfig = (node = false) => { babelHelpers: 'runtime', babelrc: false, targets: targets, - presets: [['@babel/preset-env', { - modules: false, - // useBuildins and plugin-transform-runtime are mutually exclusive - // https://github.com/babel/babel/issues/10271#issuecomment-528379505 - // use babel-polyfills when released - useBuiltIns: false, - bugfixes: true, - loose: true - }]], + presets: [ + [ + '@babel/preset-env', + { + modules: false, + // useBuildins and plugin-transform-runtime are mutually exclusive + // https://github.com/babel/babel/issues/10271#issuecomment-528379505 + // use babel-polyfills when released + useBuiltIns: false, + bugfixes: true, + loose: true + } + ] + ], plugins }) } @@ -90,11 +100,14 @@ const classes = [ ] const config = (node, min, esm = false) => ({ - input: (node || esm) ? './src/main.js' : './src/svg.js', + input: node || esm ? './src/main.js' : './src/svg.js', output: { - file: esm ? './dist/svg.esm.js' - : node ? './dist/svg.node.js' - : min ? './dist/svg.min.js' + file: esm + ? './dist/svg.esm.js' + : node + ? './dist/svg.node.js' + : min + ? './dist/svg.min.js' : './dist/svg.js', format: esm ? 'esm' : node ? 'cjs' : 'iife', name: 'SVG', @@ -112,18 +125,20 @@ const config = (node, min, esm = false) => ({ commonjs(), getBabelConfig(node), filesize(), - !min ? {} : terser({ - mangle: { - reserved: classes - }, - output: { - preamble: headerShort - } - }) + !min + ? {} + : terser({ + mangle: { + reserved: classes + }, + output: { + preamble: headerShort + } + }) ] }) // [node, minified, esm] const modes = [[false], [false, true], [true], [false, false, true]] -export default modes.map(m => config(...m)) +export default modes.map((m) => config(...m)) diff --git a/.config/rollup.tests.js b/.config/rollup.tests.js index 3620149..fe093b6 100644 --- a/.config/rollup.tests.js +++ b/.config/rollup.tests.js @@ -4,40 +4,46 @@ import multiEntry from '@rollup/plugin-multi-entry' import resolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' -const getBabelConfig = (targets) => babel({ - include: ['src/**', 'spec/**/*'], - babelHelpers: 'runtime', - babelrc: false, - presets: [['@babel/preset-env', { - modules: false, - targets: targets || pkg.browserslist, - // useBuildins and plugin-transform-runtime are mutually exclusive - // https://github.com/babel/babel/issues/10271#issuecomment-528379505 - // use babel-polyfills when released - useBuiltIns: false, - // corejs: 3, - bugfixes: true - }]], - plugins: [ - ['@babel/plugin-transform-runtime', { - corejs: 3, - helpers: true, - useESModules: true, - version: "^7.9.6", - regenerator: false - }] - ] -}) +const getBabelConfig = (targets) => + babel({ + include: ['src/**', 'spec/**/*'], + babelHelpers: 'runtime', + babelrc: false, + presets: [ + [ + '@babel/preset-env', + { + modules: false, + targets: targets || pkg.browserslist, + // useBuildins and plugin-transform-runtime are mutually exclusive + // https://github.com/babel/babel/issues/10271#issuecomment-528379505 + // use babel-polyfills when released + useBuiltIns: false, + // corejs: 3, + bugfixes: true + } + ] + ], + plugins: [ + [ + '@babel/plugin-transform-runtime', + { + corejs: 3, + helpers: true, + useESModules: true, + version: '^7.9.6', + regenerator: false + } + ] + ] + }) export default { - input: [ - 'spec/setupBrowser.js', - 'spec/spec/*/*.js' - ], + input: ['spec/setupBrowser.js', 'spec/spec/*/*.js'], output: { file: 'spec/es5TestBundle.js', name: 'SVGTests', - format: 'iife', + format: 'iife' }, plugins: [ resolve({ browser: true }), diff --git a/.eslintrc.json b/.eslintrc.json index 0eb0613..210975e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,85 +1,23 @@ { - "extends": "standard", - "plugins": [ "sort-class-members" ], - "rules": { - "operator-linebreak": [ "error", "before" ], - "object-curly-spacing": [ "error", "always" ], - "array-bracket-spacing": [ "error", "always" ], - "indent": [ "error", 2, { "flatTernaryExpressions": true } ], - "padded-blocks": "off", - "sort-class-members/sort-class-members": [ 2, { - "order": [ - "[static-properties]", - "[properties]", - "[conventional-private-properties]", - "constructor", - "[static-methods]", - "[methods]", - "[conventional-private-methods]", - "[accessor-pairs]", - "[getters]", - "[setters]", - "[everything-else]" - ], - "groups": { - "constructor": [{ - "name": "constructor", - "type": "method", - "sort": "alphabetical" - }], - "properties": [{ - "type": "property", - "sort": "alphabetical" - }], - "getters": [{ - "kind": "get", - "sort": "alphabetical" - }], - "setters": [{ - "kind": "set", - "sort": "alphabetical" - }], - "accessor-pairs": [{ - "accessorPair": true, - "sort": "alphabetical" - }], - "static-properties": [{ - "type": "property", - "static": true, - "sort": "alphabetical" - }], - "conventional-private-properties": [{ - "type": "property", - "name": "/_.+/", - "sort": "alphabetical" - }], - "arrow-function-properties": [{ - "propertyType": "ArrowFunctionExpression", - "sort": "alphabetical" - }], - "methods": [{ - "type": "method", - "sort": "alphabetical" - }], - "static-methods": [{ - "type": "method", - "static": true, - "sort": "alphabetical" - }], - "async-methods": [{ - "type": "method", - "async": true, - "sort": "alphabetical" - }], - "conventional-private-methods": [{ - "type": "method", - "name": "/_.+/", - "sort": "alphabetical" - }], - "everything-else": [{ - "sort": "alphabetical" - }] + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "env": { + "browser": true, + "es6": true + }, + "extends": ["eslint:recommended", "prettier"], + "rules": { + "padded-blocks": "off", + "no-unused-vars": [ + "error", + { + "vars": "all", + "args": "after-used", + "ignoreRestSiblings": true, + "varsIgnorePattern": "^_" } - }] - } -}
\ No newline at end of file + ] + } +} diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index fe6d431..ac96ca8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,9 +1,7 @@ - # Contributing When contributing to this repository, please first discuss the change you wish to make on gitter, or with an issue to increase your chances of getting your pull request merged into the main code base. - ## Pull Request Process When you want to make contributions to the project, the process is pretty simple: @@ -12,15 +10,13 @@ When you want to make contributions to the project, the process is pretty simple 2. Fork the repository to make your own local copy 3. Make a branch in the format of <issue-number>-<friendly-name>. So for example if I made an issue to change the default color, and it was issue 385 (random) on the repo, the branch would be called `385-change-default-color` 4. Make the changes to the src and perhaps make a playground by duplicating the playgrounds we already have. - - Build the code during the development process with `npm run build:dev` so that we don't throw a huge number of pointless errors - - When you're done making changes, run `npm run build` to build the code and run the linter -5. If applicable - please write new tests, we like to keep our code well tested 🎉. Run the tests by either opening the SpecRunner.html file or just run `npm test`, either is fine. + - When you're done making changes, run `npm run build` to build the code and run the linter +5. If applicable - please write new tests, we like to keep our code well tesvted 🎉. Run the tests by running `npm test` 6. Push the code and make a pull request on the main svg.js repo 7. Enjoy our endless love and gratitude ❤️ Seriously, we love pull requests! So go wild! - ## Code of Conduct We only have a few simple rules, because we know you wouldn't want to read a whole code of conduct guide now would you? 🤡 diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 77280cb..21ab143 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,7 +1,6 @@ --- name: Bug Report about: 🐞 Report a bug that you found - --- # Bug report diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index acaaef5..9cf9d7b 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -1,15 +1,14 @@ --- name: Feature Request about: 🎂 Ask nicely for something you reaaaaaaaally want - --- - # Feature request > **For support questions, please use [stackoverflow](https://stackoverflow.com/questions/tagged/svg.js) with the tag svg.js or head to our chat over at [gitter](https://gitter.im/svgdotjs/svg.js)**. If you want to make a feature request, here are some guidelines to make a good one: + - Add example code and usage for feature requests to see how a user would use it - Tell us the benefits (everything is allowed) - Make a simple use case like the one below. Obviously your feature request shouldn't be so silly. But make it clear to the maintainers what you want added and how you plan to use it 😃 @@ -19,13 +18,14 @@ If you want to make a feature request, here are some guidelines to make a good o It would be cool if SVG.js could be used to easily draw smiley the meme, it would make my life so much easier when I want to have memes in my svg. ### Benefits + - Drawing memes would be quick and easy - Memes are funny I think the syntax to achieve this should be: ```js -let meme = draw.meme({radius: 300, cx: 50, cy: 80, lookAt: [30, 50]}) +let meme = draw.meme({ radius: 300, cx: 50, cy: 80, lookAt: [30, 50] }) ``` Then the user could easily change where the smiley is looking with: diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md index 75287e6..b3769d0 100644 --- a/.github/ISSUE_TEMPLATE/other.md +++ b/.github/ISSUE_TEMPLATE/other.md @@ -1,7 +1,6 @@ --- name: Other Issue about: 🍺 Something else... - --- > **For support questions, please use [stackoverflow](https://stackoverflow.com/questions/tagged/svg.js) with the tag svg.js or head to our chat over at [gitter](https://gitter.im/svgdotjs/svg.js), if you have a bug report or feature request, use those templates**. diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f960e69 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +.DS_Store +.idea +.importjs.js +test/ +node_modules/ +.vscode/ +coverage/ +spec/es5TestBundle.js +.env +dist +package-lock.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..c50384f --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "trailingComma": "none", + "tabWidth": 2, + "semi": false, + "singleQuote": true +} diff --git a/.travis.yml b/.travis.yml index 8ea60c8..770ac06 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,14 @@ language: node_js node_js: - - "stable" + - 'stable' services: - xvfb addons: - firefox: latest - chrome: stable + firefox: latest + chrome: stable install: - npm install - npm run build script: - npm test - - cat coverage/firefox/lcov.info | node_modules/.bin/coveralls
\ No newline at end of file + - cat coverage/firefox/lcov.info | node_modules/.bin/coveralls @@ -7,9 +7,7 @@ [![Join the chat at https://gitter.im/svgdotjs/svg.js](https://badges.gitter.im/svgdotjs/svg.js.svg)](https://gitter.im/svgdotjs/svg.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/badge/Twitter-@svg__js-green.svg)](https://twitter.com/svg_js) - - -__A lightweight library for manipulating and animating SVG, without any dependencies.__ +**A lightweight library for manipulating and animating SVG, without any dependencies.** SVG.js is licensed under the terms of the MIT License. @@ -30,6 +28,7 @@ SVG.js is licensed under the terms of the MIT License. [https://unpkg.com/@svgdotjs/svg.js](https://unpkg.com/@svgdotjs/svg.js) ## Documentation + Check [svgjs.dev](https://svgjs.dev/docs/3.0/) to learn more. [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=ulima.ums%40googlemail.com&lc=US&item_name=SVG.JS¤cy_code=EUR&bn=PP-DonationsBF%3Abtn_donate_74x21.png%3ANonHostedGuest) or [![Sponsor](https://img.shields.io/badge/Sponsor-svg.js-green.svg)](https://github.com/sponsors/Fuzzyma) diff --git a/bench/runner.html b/bench/runner.html index fbd4e24..c1587c6 100644 --- a/bench/runner.html +++ b/bench/runner.html @@ -1,55 +1,63 @@ <!DOCTYPE html> <html> -<head> - <title>SVG.js benchmarker</title> - <style> - @import url('https://fonts.googleapis.com/css?family=Inconsolata'); - body { - font-family: 'Inconsolata', 'Menlo', monospace; - font-weight: 300; - color: #999; - font-size: 14px; - } - svg { - width: 2px; - height: 2px; - overflow: hidden; - position: fixed; - right: 0; - } - span.name { - color: #B7CD3E; - } - span.ms { - color: #FF0066; - } - h1 { - font-size: 1.2em; - } - .test { - text-indent: 1em; - } - .skipped { - color: #FBCB72; - } - </style> -</head> -<body> - <div id="draw"></div> - <svg id="native" width="100" height="100" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs"></svg> - <script src="../dist/svg.js"></script> - <script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js"></script> - <script src="svg.bench.js"></script> - <!--<script src="tests/10000-each.js"></script> --> - <script src="tests/10000-rects.js"></script> - <!-- <script src="tests/10000-circles.js"></script> + <head> + <title>SVG.js benchmarker</title> + <style> + @import url('https://fonts.googleapis.com/css?family=Inconsolata'); + body { + font-family: 'Inconsolata', 'Menlo', monospace; + font-weight: 300; + color: #999; + font-size: 14px; + } + svg { + width: 2px; + height: 2px; + overflow: hidden; + position: fixed; + right: 0; + } + span.name { + color: #b7cd3e; + } + span.ms { + color: #ff0066; + } + h1 { + font-size: 1.2em; + } + .test { + text-indent: 1em; + } + .skipped { + color: #fbcb72; + } + </style> + </head> + <body> + <div id="draw"></div> + <svg + id="native" + width="100" + height="100" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:svgjs="http://svgjs.dev/svgjs" + ></svg> + <script src="../dist/svg.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js"></script> + <script src="svg.bench.js"></script> + <!--<script src="tests/10000-each.js"></script> --> + <script src="tests/10000-rects.js"></script> + <!-- <script src="tests/10000-circles.js"></script> <script src="tests/10000-paths.js"></script> <script src="tests/10000-boxes.js"></script> <script src="tests/10000-pointArray-bbox.js"></script> <script src="tests/10000-accesses.js"></script> <script src="tests/10000-transform.js"></script> --> - <script> - SVG.bench.run() - </script> -</body> + <script> + SVG.bench.run() + </script> + </body> </html> diff --git a/bench/svg.bench.js b/bench/svg.bench.js index 50ef547..bec92a5 100644 --- a/bench/svg.bench.js +++ b/bench/svg.bench.js @@ -23,9 +23,9 @@ // Add test test: function (name, run) { // run test - var start = (new Date()).getTime() + var start = new Date().getTime() run() - this.write(name, (new Date()).getTime() - start) + this.write(name, new Date().getTime() - start) // clear everything this.clear() @@ -54,7 +54,12 @@ if (typeof ms === 'number') { test.className = 'test' - test.innerHTML = '<span class="name">' + name + '</span> completed in <span class="ms">' + ms + 'ms</span>' + test.innerHTML = + '<span class="name">' + + name + + '</span> completed in <span class="ms">' + + ms + + 'ms</span>' } else { test.className = 'test skipped' test.innerHTML = name + ' (skipped)' diff --git a/bench/tests/10000-accesses.js b/bench/tests/10000-accesses.js index 867dfaa..ed149e1 100644 --- a/bench/tests/10000-accesses.js +++ b/bench/tests/10000-accesses.js @@ -1,35 +1,37 @@ +SVG.bench.describe( + 'Access a dom attributes vs dom properties vs object properties', + function (bench) { + bench.test('using an object', function () { + var sum = 0 + var obj = { x: '30' } + for (var i = 0; i < 1000000; i++) { + sum += obj.x * i + } + console.log(sum) + }) -SVG.bench.describe('Access a dom attributes vs dom properties vs object properties', function(bench) { - bench.test('using an object', function() { - var sum = 0 - var obj = {x: "30"} - for (var i = 0; i < 1000000; i++) { - sum += obj.x * i - } - console.log(sum) - }) + bench.test('figure out what the overhead is', function () { + var obj = bench.draw.rect(100, 100).move(0, 0) + }) - bench.test('figure out what the overhead is', function () { - var obj = bench.draw.rect(100, 100).move(0, 0) - }) + bench.test('using dom attributes', function () { + var sum = 0 + var obj = bench.draw.rect(100, 100).move(0, 0) + var node = obj.node + for (var i = 0; i < 1000000; i++) { + sum += node.getAttribute('x') * i + } + console.log(sum, node.getAttribute('x')) + }) - bench.test('using dom attributes', function () { - var sum = 0 - var obj = bench.draw.rect(100, 100).move(0, 0) - var node = obj.node - for (var i = 0; i < 1000000; i++) { - sum += node.getAttribute('x') * i - } - console.log(sum, node.getAttribute('x')) - }) - - bench.test('using dom properties', function () { - var sum = 0 - var obj = bench.draw.rect(100, 100).move(0, 0) - var node = obj.node - for (var i = 0; i < 1000000; i++) { - sum += node.x.baseVal * i - } - console.log(sum, node.x) - }) -}) + bench.test('using dom properties', function () { + var sum = 0 + var obj = bench.draw.rect(100, 100).move(0, 0) + var node = obj.node + for (var i = 0; i < 1000000; i++) { + sum += node.x.baseVal * i + } + console.log(sum, node.x) + }) + } +) diff --git a/bench/tests/10000-boxes.js b/bench/tests/10000-boxes.js index 0466f64..e20693b 100644 --- a/bench/tests/10000-boxes.js +++ b/bench/tests/10000-boxes.js @@ -1,9 +1,8 @@ -SVG.bench.describe('Generate 100000 bbox', function(bench) { - var rect = bench.draw.rect(100,100) - - bench.test('using SVG.js v3.0.0', function() { - for (var i = 0; i < 100000; i++) - rect.bbox() +SVG.bench.describe('Generate 100000 bbox', function (bench) { + var rect = bench.draw.rect(100, 100) + + bench.test('using SVG.js v3.0.0', function () { + for (var i = 0; i < 100000; i++) rect.bbox() }) //bench.test('using vanilla js', function() { // var node = rect.node @@ -17,12 +16,11 @@ SVG.bench.describe('Generate 100000 bbox', function(bench) { //}) }) -SVG.bench.describe('Generate 100000 rbox', function(bench) { - var rect = bench.draw.rect(100,100) - - bench.test('using SVG.js v3.0.0', function() { - for (var i = 0; i < 100000; i++) - rect.bbox() +SVG.bench.describe('Generate 100000 rbox', function (bench) { + var rect = bench.draw.rect(100, 100) + + bench.test('using SVG.js v3.0.0', function () { + for (var i = 0; i < 100000; i++) rect.bbox() }) //bench.test('using vanilla js', function() { // var node = rect.node @@ -35,12 +33,11 @@ SVG.bench.describe('Generate 100000 rbox', function(bench) { // bench.snap.rect(50, 50, 100, 100) //}) }) -SVG.bench.describe('Generate 100000 viewbox', function(bench) { +SVG.bench.describe('Generate 100000 viewbox', function (bench) { var nested = bench.draw.nested().viewbox(10, 10, 100, 100) - - bench.test('using SVG.js v3.0.0', function() { - for (var i = 0; i < 100000; i++) - nested.viewbox() + + bench.test('using SVG.js v3.0.0', function () { + for (var i = 0; i < 100000; i++) nested.viewbox() }) //bench.test('using vanilla js', function() { // var node = rect.node diff --git a/bench/tests/10000-circles.js b/bench/tests/10000-circles.js index f090281..fcfbf9a 100644 --- a/bench/tests/10000-circles.js +++ b/bench/tests/10000-circles.js @@ -1,9 +1,8 @@ -SVG.bench.describe('Generate 10000 circles', function(bench) { - bench.test('using SVG.js v2.5.3', function() { - for (var i = 0; i < 10000; i++) - bench.draw.circle(100,100) +SVG.bench.describe('Generate 10000 circles', function (bench) { + bench.test('using SVG.js v2.5.3', function () { + for (var i = 0; i < 10000; i++) bench.draw.circle(100, 100) }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var circle = document.createElementNS(SVG.ns, 'circle') circle.setAttributeNS(null, 'rx', 50) @@ -11,18 +10,16 @@ SVG.bench.describe('Generate 10000 circles', function(bench) { bench.raw.appendChild(circle) } }) - bench.test('using Snap.svg v0.5.1', function() { - for (var i = 0; i < 10000; i++) - bench.snap.circle(50, 50, 100, 100) + bench.test('using Snap.svg v0.5.1', function () { + for (var i = 0; i < 10000; i++) bench.snap.circle(50, 50, 100, 100) }) }) -SVG.bench.describe('Generate 10000 circles with fill', function(bench) { - bench.test('using SVG.js v2.5.3', function() { - for (var i = 0; i < 10000; i++) - bench.draw.circle(100,100).fill('#f06') +SVG.bench.describe('Generate 10000 circles with fill', function (bench) { + bench.test('using SVG.js v2.5.3', function () { + for (var i = 0; i < 10000; i++) bench.draw.circle(100, 100).fill('#f06') }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var circle = document.createElementNS(SVG.ns, 'circle') circle.setAttributeNS(null, 'rx', 50) @@ -31,8 +28,8 @@ SVG.bench.describe('Generate 10000 circles with fill', function(bench) { bench.raw.appendChild(circle) } }) - bench.test('using Snap.svg v0.5.1', function() { + bench.test('using Snap.svg v0.5.1', function () { for (var i = 0; i < 10000; i++) bench.snap.circle(50, 50, 100, 100).attr('fill', '#f06') }) -})
\ No newline at end of file +}) diff --git a/bench/tests/10000-each.js b/bench/tests/10000-each.js index c47eb60..e817094 100644 --- a/bench/tests/10000-each.js +++ b/bench/tests/10000-each.js @@ -1,27 +1,24 @@ -SVG.bench.describe('each() vs forEach()', function(bench) { +SVG.bench.describe('each() vs forEach()', function (bench) { // preparation var list = [] - for (var i = 99; i >= 0; i--) - list.push(bench.draw.rect(100, 50)) + for (var i = 99; i >= 0; i--) list.push(bench.draw.rect(100, 50)) var set = new SVG.Set(list) - - bench.test('10000 x each()', function() { + bench.test('10000 x each()', function () { for (var i = 0; i < 10000; i++) { - set.each(function() { + set.each(function () { this.fill('#f06') }) } }) - bench.test('10000 x forEach()', function() { + bench.test('10000 x forEach()', function () { for (var i = 0; i < 10000; i++) { - list.forEach(function(e) { + list.forEach(function (e) { e.fill('#f06') }) } }) - -})
\ No newline at end of file +}) diff --git a/bench/tests/10000-pathArray-bbox.js b/bench/tests/10000-pathArray-bbox.js index 48ca111..4264073 100644 --- a/bench/tests/10000-pathArray-bbox.js +++ b/bench/tests/10000-pathArray-bbox.js @@ -1,7 +1,9 @@ -SVG.bench.describe('Generate 10000 pathArrays bbox', function(bench) { - var data = 'M97.499,75.211l5.652,-4.874c-1.235,-3.156 -2.115,-6.44 -2.623,-9.791l-8.313,-1.582c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.313,-1.582c0.508,-3.351 1.388,-6.635 2.623,-9.791l-6.408,-5.526c1.452,-3.204 3.215,-6.258 5.263,-9.117l7.99,2.787c2.116,-2.648 4.52,-5.052 7.168,-7.168l-2.787,-7.99c2.86,-2.049 5.913,-3.812 9.117,-5.263l5.526,6.408c3.156,-1.236 6.44,-2.115 9.791,-2.624l1.582,-8.312c3.501,-0.345 7.027,-0.345 10.527,0l1.582,8.312c3.351,0.509 6.635,1.388 9.791,2.624l5.526,-6.408c3.204,1.451 6.258,3.214 9.117,5.263l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.168l7.99,-2.787c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.236,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.582c-0.509,3.351 -1.388,6.635 -2.624,9.791l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.117l-7.99,-2.787c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.99c-2.859,2.048 -5.913,3.811 -9.117,5.263l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.624l-1.444,7.589l0.16,0.015l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.624l5.526,-6.409c3.204,1.452 6.258,3.215 9.117,5.264l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.167l7.99,-2.786c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.792l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.116l-7.99,-2.786c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.989c-2.859,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.5,0.345 -7.026,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.989c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.786c-2.048,-2.859 -3.811,-5.912 -5.263,-9.116l6.408,-5.526c-1.235,-3.157 -2.115,-6.441 -2.624,-9.792l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.312,-1.582c0.509,-3.351 1.389,-6.635 2.624,-9.791l-6.408,-5.526c0.034,-0.076 0.068,-0.151 0.103,-0.226l-7.783,-2.714c-2.116,2.648 -4.52,5.052 -7.168,7.167l2.787,7.99c-2.86,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.501,0.345 -7.027,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.99c-2.648,-2.115 -5.052,-4.519 -7.168,-7.167l-7.99,2.786c-2.049,-2.859 -3.812,-5.913 -5.263,-9.116l6.408,-5.527c-1.236,-3.156 -2.115,-6.44 -2.624,-9.791l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.528l8.312,-1.581c0.509,-3.351 1.388,-6.635 2.624,-9.791l-6.408,-5.527c1.451,-3.204 3.214,-6.257 5.263,-9.116l7.99,2.786c2.116,-2.648 4.52,-5.052 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.408c3.156,-1.235 6.44,-2.115 9.791,-2.623l1.582,-8.313c3.5,-0.345 7.026,-0.345 10.527,0l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.623l5.526,-6.408c3.204,1.452 6.257,3.215 9.117,5.264l-2.787,7.99c2.648,2.115 5.052,4.519 7.168,7.167l7.99,-2.786c0.049,0.069 0.099,0.139 0.148,0.209Zm48.456,73.925c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.741,-4.812 -10.741,-10.74c0,-5.927 4.813,-10.74 10.741,-10.74Zm-5.402,-41.978l-0.16,-0.016l-1.582,-8.312c-3.351,-0.509 -6.635,-1.389 -9.791,-2.624l-5.526,6.408c-3.204,-1.452 -6.257,-3.215 -9.117,-5.263l2.787,-7.99c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.787c-0.049,-0.07 -0.099,-0.139 -0.148,-0.209l-5.652,4.874c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.581c0.345,3.501 0.345,7.027 0,10.528l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.791l6.408,5.527c-0.034,0.075 -0.068,0.15 -0.103,0.225l7.783,2.714c2.116,-2.647 4.52,-5.051 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.409c3.156,-1.236 6.44,-2.116 9.791,-2.624l1.444,-7.589Zm-86.853,-11.617c5.928,0 10.74,4.812 10.74,10.74c0,5.928 -4.812,10.74 -10.74,10.74c-5.927,0 -10.74,-4.812 -10.74,-10.74c0,-5.928 4.813,-10.74 10.74,-10.74Zm91.957,-52.581c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.74,-4.812 -10.74,-10.74c0,-5.927 4.812,-10.74 10.74,-10.74Z' +SVG.bench.describe('Generate 10000 pathArrays bbox', function (bench) { + var data = + 'M97.499,75.211l5.652,-4.874c-1.235,-3.156 -2.115,-6.44 -2.623,-9.791l-8.313,-1.582c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.313,-1.582c0.508,-3.351 1.388,-6.635 2.623,-9.791l-6.408,-5.526c1.452,-3.204 3.215,-6.258 5.263,-9.117l7.99,2.787c2.116,-2.648 4.52,-5.052 7.168,-7.168l-2.787,-7.99c2.86,-2.049 5.913,-3.812 9.117,-5.263l5.526,6.408c3.156,-1.236 6.44,-2.115 9.791,-2.624l1.582,-8.312c3.501,-0.345 7.027,-0.345 10.527,0l1.582,8.312c3.351,0.509 6.635,1.388 9.791,2.624l5.526,-6.408c3.204,1.451 6.258,3.214 9.117,5.263l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.168l7.99,-2.787c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.236,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.582c-0.509,3.351 -1.388,6.635 -2.624,9.791l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.117l-7.99,-2.787c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.99c-2.859,2.048 -5.913,3.811 -9.117,5.263l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.624l-1.444,7.589l0.16,0.015l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.624l5.526,-6.409c3.204,1.452 6.258,3.215 9.117,5.264l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.167l7.99,-2.786c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.792l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.116l-7.99,-2.786c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.989c-2.859,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.5,0.345 -7.026,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.989c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.786c-2.048,-2.859 -3.811,-5.912 -5.263,-9.116l6.408,-5.526c-1.235,-3.157 -2.115,-6.441 -2.624,-9.792l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.312,-1.582c0.509,-3.351 1.389,-6.635 2.624,-9.791l-6.408,-5.526c0.034,-0.076 0.068,-0.151 0.103,-0.226l-7.783,-2.714c-2.116,2.648 -4.52,5.052 -7.168,7.167l2.787,7.99c-2.86,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.501,0.345 -7.027,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.99c-2.648,-2.115 -5.052,-4.519 -7.168,-7.167l-7.99,2.786c-2.049,-2.859 -3.812,-5.913 -5.263,-9.116l6.408,-5.527c-1.236,-3.156 -2.115,-6.44 -2.624,-9.791l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.528l8.312,-1.581c0.509,-3.351 1.388,-6.635 2.624,-9.791l-6.408,-5.527c1.451,-3.204 3.214,-6.257 5.263,-9.116l7.99,2.786c2.116,-2.648 4.52,-5.052 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.408c3.156,-1.235 6.44,-2.115 9.791,-2.623l1.582,-8.313c3.5,-0.345 7.026,-0.345 10.527,0l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.623l5.526,-6.408c3.204,1.452 6.257,3.215 9.117,5.264l-2.787,7.99c2.648,2.115 5.052,4.519 7.168,7.167l7.99,-2.786c0.049,0.069 0.099,0.139 0.148,0.209Zm48.456,73.925c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.741,-4.812 -10.741,-10.74c0,-5.927 4.813,-10.74 10.741,-10.74Zm-5.402,-41.978l-0.16,-0.016l-1.582,-8.312c-3.351,-0.509 -6.635,-1.389 -9.791,-2.624l-5.526,6.408c-3.204,-1.452 -6.257,-3.215 -9.117,-5.263l2.787,-7.99c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.787c-0.049,-0.07 -0.099,-0.139 -0.148,-0.209l-5.652,4.874c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.581c0.345,3.501 0.345,7.027 0,10.528l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.791l6.408,5.527c-0.034,0.075 -0.068,0.15 -0.103,0.225l7.783,2.714c2.116,-2.647 4.52,-5.051 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.409c3.156,-1.236 6.44,-2.116 9.791,-2.624l1.444,-7.589Zm-86.853,-11.617c5.928,0 10.74,4.812 10.74,10.74c0,5.928 -4.812,10.74 -10.74,10.74c-5.927,0 -10.74,-4.812 -10.74,-10.74c0,-5.928 4.813,-10.74 10.74,-10.74Zm91.957,-52.581c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.74,-4.812 -10.74,-10.74c0,-5.927 4.812,-10.74 10.74,-10.74Z' - var data2 = 'M0.48858732019046247.35239897640279355L0.5168962223329727.32957811442929225C0.5107105368860513.31480120831760355.5063029229643583.2994249853547438.5037585276550173.2837350574775992L0.46212160205156927.2763278757701558C0.46039361704817827.25993562345804494.46039361704817827.2434263170734397.46212160205156927.22703874692422862L0.5037585276550173.2196315652167852C0.5063029229643582.20394163733964055.5107105368860513.1885654143767808.5168962223329727.17378850826509218L0.4848007791395535.14791487608093778C0.492073342110347.13291322615006.5009035959102843.11861390065414837.5111613155825881.1052275969236928L0.5511804465306873.11827678492536459C0.5617787545514856.10587841756676146.5738195544012016.09462249795570335.5870824653837506.0847150412597803L0.5731233517476615.047304559690581297C0.5874480969931638.037710807908943156.6027395121101284.02945615471664055.6187872337068381.022662336349067613L0.6464650456741969.052665636210823215C0.6622723519660869.046878482866701814.678720765737496.04276286167779995.6955047592052157.040379640761814675L0.7034284469598956.0014615027388882582C0.7209637382551767 -0.0001538434615339766.7386242458550512 -0.0001538434615339766.7561545284981485.0014615027388882582L0.7640782162528285.040379640761814675C0.7808622097205482.04276286167779995.7973106234919571.046878482866701814.8131179297838472.052665636210823215L0.8407957417512061.022662336349067617C0.8568434633479157.02945615471664055.872139887117064.037710807908943156.8864596237103826.04730455969058131L0.8725005100742934.0847150412597803C0.8857634210568424.09462249795570335.8978042209065583.10587841756676146.9084025289273567.11827678492536459L0.948421659875456.1052275969236928C0.9586843881999436.11861390065414837.9675146419998809.13291322615006.9747821963184906.14791487608093778L0.9426867531250714.17378850826509218C0.9488774472241766.1885654143767808.953280052493686.20394163733964055.9558294564552107.2196315652167852L0.9974613734064749.22703874692422862C0.9991893584098659.2434263170734397.9991893584098659.25993562345804494.9974613734064749.2763278757701558L0.9558294564552107.2837350574775992C0.953280052493686.2994249853547438.9488774472241766.31480120831760366.9426867531250714.32957811442929225L0.9747821963184906.3554517466134466C0.9675146419998809.37045339654432435.9586843881999436.38474803987733625.948421659875456.3981390257706916L0.9084025289273567.3850898377690198C0.8978042209065583.3974882051276229.8857634210568424.40874412473868105.8725005100742934.41865158143460407L0.8864596237103826.4560620630038031C0.8721398871170639.46565113262254143.8568434633479156.4739057858148441.8407957417512061.4807042863453168L0.8131179297838472.45070098648356116C0.7973106234919571.4564834576647828.7808622097205482.4606037610165844.7640782162528285.4629869819325697L0.756845722499505.4985199161789591L0.7576471068489037.4985901486224557L0.7655707946035836.5375129688082819C0.7823547880713033.5398915075613674.7988032018427124.5440118109131691.8146105081346023.5497989642572905L0.8422883201019612.519790982232635C0.8583360416986708.5265894827631077.8736324654678193.5348441359554104.8879522020611378.5444378877370485L0.8739930884250485.5818483693062474C0.8872559994075976.5917558260021705.8992967992573135.6030117456132287.9098951072781118.615405430808932L0.9499142382262111.6023609249701599C0.9601769665506987.6157472287006156.969007220350636.6300465541965272.9762747746692458.6450482041274048L0.9441793314758266.6709218363115593C0.9503650169227481.685698742423248.9547726308444411.7010749653861077.9573220348059658.7167648932632523L0.9989539517572301.7241720749706957C1.000681936760621.7405596451199068 1.000681936760621.757068951504512.9989539517572301.7734612038166229L0.9573220348059658.7808637033611664C0.9547726308444411.796553631238311.950365016922748.8119298542011708.9441793314758266.8267114424757592L0.9762747746692458.8525850746599137C0.969007220350636.8675867245907916.9601769665506987.8818813679238033.9499142382262111.8952676716542589L0.9098951072781118.8822231658154869C0.8992967992573135.89462153317409.8872559994075976.9058774527851481.8739930884250485.9157849094810713L0.8879522020611378.9531907088873705C0.8736324654678191.9627844606690087.8583360416986707.9710391138613113.8422883201019612.977837614391784L0.8146105081346023.9478343145300284C0.7988032018427124.9536167857112502.7823547880713033.9577370890630518.7655707946035836.9601156278161371L0.7576471068489037.9990384480019633C0.7401168242058064 1.0006537942023856.7224563166059317 1.0006537942023856.7049210253106508.9990384480019633L0.6969973375559708.9601156278161371C0.6802133440882511.9577370890630517.6637649303168421.95361678571125.647957624024952.9478343145300284L0.6202798120575933.977837614391784C0.6042320904608837.9710391138613113.5889356666917354.9627844606690087.5746159300984167.9531907088873705L0.5885750437345059.9157849094810713C0.5753121327519569.9058774527851481.563271332902241.89462153317409.5526730248814425.8822231658154869L0.5126538939333434.8952676716542589C0.5023961742610396.8818813679238033.49356592046110226.8675867245907916.4862933574903087.8525850746599138L0.518388800683728.8267114424757593C0.5122031152368065.8119298542011709.5077955013151135.7965536312383112.5052460973535888.7808637033611665L0.46361418040232455.773461203816623C0.46188619539893355.757068951504512.46188619539893355.7405596451199069.46361418040232455.7241720749706959L0.5052460973535888.7167648932632524C0.5077955013151135.7010749653861078.5122031152368065.6856987424232481.518388800683728.6709218363115594L0.4862933574903087.645048204127405C0.48646365166455596.6446923597470222.48663394583880315.644341197529539.4868092486652341.6439900353120559L0.4478269087191694.6312826452020677C0.43722860069837116.6436810125606708.4251878008486552.6549369321717289.4119248898661061.6648397067047522L0.42588400350219535.7022501882739512C0.411559258256693.7118439400555895.3962678431397284.720098593247892.3802201215430187.7268970937783648L0.35254230957565996.6968937939166092C0.3367350032837699.702676265097831.32028658951236094.7067965684496326.3035025960446412.7091751072027179L0.2955789082899612.7480979273885441C0.27804361699468016.7497132735889663.2603831093948056.7497132735889663.24285282675170825.7480979273885441L0.23492913899702825.7091751072027179C0.21814514552930853.7067965684496325.2016967317578995.7026762650978308.1858894254660095.6968937939166092L0.15821161349865073.7268970937783648C0.14216389190194106.720098593247892.12686746813279273.7118439400555895.1125477315394741.7022501882739512L0.1265068451755633.6648397067047522C0.11324393419301426.6549369321717289.10120313434329828.6436810125606708.09060482632250003.6312826452020677L0.05058569537440074.6443271510408397C0.04032296704991321.6309408473103841.03149271324997591.6166415218144725.024225158931366137.6016445540464946L0.056320602124785436.5757662396994404C0.050129908025680216.5609893335877518.04572730275617092.545613110624892.0431778987946462.5299231827477474L0.001545981843381972.5225206832032038C-0.00018200316000904808.5061284308910928 -0.00018200316000904808.48961912450648765.001545981843381972.4732268721943768L0.0431778987946462.4658243726498331C0.04572730275617092.4501344447726885.050129908025680216.4347582218098287.056320602124785436.4199813156981401L0.02422515893136614.39410300135108595C0.03149271324997591.3791013514202082.04032296704991321.3648067080871963.05058569537440075.3514204043567407L0.09060482632250003.36446491019551275C0.10120313434329828.35206654283690964.11324393419301426.34081062322585154.1265068451755633.33090784869282824L0.1125477315394741.2934973671236292C0.12686746813279273.2839036153419911.14216389190194106.2756489621496885.15821161349865073.2688504616192157L0.1858894254660095.29885376148097137C0.2016967317578995.2930712902997497.21814514552930853.2889509869479481.23492913899702825.2865724481948626L0.24285282675170825.2476496280090364C0.2603831093948056.24603428180861417.27804361699468016.24603428180861417.2955789082899612.2476496280090364L0.3035025960446412.2865724481948626C0.32028658951236094.28895098694794813.33673500328377.2930712902997497.35254230957565996.29885376148097137L0.3802201215430187.2688504616192157C0.39626784313972835.2756489621496884.411559258256693.2839036153419911.42588400350219535.2934973671236292L0.4119248898661061.33090784869282824C0.42518780084865515.3408106232258515.43722860069837116.35206654283690964.4478269087191694.36446491019551275L0.4878460396672687.3514204043567407C0.4880914636242721.3517434735968252.4883418962334592.35207122499980936.48858732019046247.3523989764027936ZM0.731286570405869.6985278687686304C0.7609728518989083.6985278687686304.7850794948592591.7210631188052454.7850794948592591.7488142983122096C0.7850794948592591.7765701599820733.7609728518989085.7991007278557888.731286570405869.7991007278557888C0.701595280260646.7991007278557888.6774886373002953.7765701599820733.6774886373002953.7488142983122096C0.6774886373002953.7210631188052455.701595280260646.6985278687686304.731286570405869.6985278687686304ZM0.7042298313092943.5019800345618924L0.7034284469598956.501905119955496L0.6955047592052157.46298698193256965C0.678720765737496.46060376101658435.6622723519660869.45648345766478277.6464650456741969.4507009864835611L0.6187872337068382.4807042863453167C0.6027395121101286.473905785814844.5874480969931639.4656511326225414.5731233517476615.45606206300380303L0.5870824653837508.418651581434604C0.5738195544012017.408744124738681.5617787545514857.3974882051276229.5511804465306874.3850898377690197L0.5111613155825881.39813902577069155C0.5109158916255848.39781127436770736.5106654590163977.3974882051276229.5104200350593944.39716045372463865L0.48211113291688407.41998131569813996C0.48829681836380556.4347582218098286.4927044322854986.4501344447726883.4952538362470233.465824372649833L0.5368857531982875.47322687219437665C0.5386137382016786.48961912450648754.5386137382016786.5061284308910927.5368857531982875.5225206832032036L0.4952538362470233.5299231827477473C0.4927044322854986.5456131106248919.48829681836380556.5609893335877517.48211113291688407.5757662396994403L0.5142065761103034.6016445540464944C0.5140362819360561.6019957162639775.5138659877618089.6023468784814607.513690684935378.6026980406989437L0.5526730248814427.615405430808932C0.563271332902241.6030117456132287.5753121327519569.5917558260021705.588575043734506.5818483693062474L0.5746159300984167.5444378877370485C0.5889356666917354.5348441359554102.6042320904608837.5265894827631077.6202798120575934.519790982232635L0.6479576240249522.5497989642572905C0.6637649303168422.544011810913169.6802133440882512.5398915075613674.6969973375559709.5375129688082819L0.7042298313092945.5019800345618926ZM0.2692133631947428.447587348155211C0.2989046533399659.447587348155211.32300628764813283.47011791602892633.32300628764813283.4978737776987901C0.32300628764813283.5256296393686539.2989046533399659.5481602072423692.2692133631947428.5481602072423692C0.23952708170170345.5481602072423692.21542043874135278.5256296393686539.21542043874135278.4978737776987901C0.21542043874135278.47011791602892633.23952708170170345.447587348155211.2692133631947428.447587348155211ZM0.7297939920551139.20139454072216306C0.7594802735481532.20139454072216306.783586916508504.2239297907587782.783586916508504.2516809702657422C0.783586916508504.279436831935606.7594802735481533.30196739980932136.7297939920551139.30196739980932136C0.7001027019098908.30196739980932136.6760010676017238.27943683193560603.6760010676017238.2516809702657422C0.6760010676017238.2239297907587782.7001027019098908.20139454072216306.7297939920551139.20139454072216306Z ' + var data2 = + 'M0.48858732019046247.35239897640279355L0.5168962223329727.32957811442929225C0.5107105368860513.31480120831760355.5063029229643583.2994249853547438.5037585276550173.2837350574775992L0.46212160205156927.2763278757701558C0.46039361704817827.25993562345804494.46039361704817827.2434263170734397.46212160205156927.22703874692422862L0.5037585276550173.2196315652167852C0.5063029229643582.20394163733964055.5107105368860513.1885654143767808.5168962223329727.17378850826509218L0.4848007791395535.14791487608093778C0.492073342110347.13291322615006.5009035959102843.11861390065414837.5111613155825881.1052275969236928L0.5511804465306873.11827678492536459C0.5617787545514856.10587841756676146.5738195544012016.09462249795570335.5870824653837506.0847150412597803L0.5731233517476615.047304559690581297C0.5874480969931638.037710807908943156.6027395121101284.02945615471664055.6187872337068381.022662336349067613L0.6464650456741969.052665636210823215C0.6622723519660869.046878482866701814.678720765737496.04276286167779995.6955047592052157.040379640761814675L0.7034284469598956.0014615027388882582C0.7209637382551767 -0.0001538434615339766.7386242458550512 -0.0001538434615339766.7561545284981485.0014615027388882582L0.7640782162528285.040379640761814675C0.7808622097205482.04276286167779995.7973106234919571.046878482866701814.8131179297838472.052665636210823215L0.8407957417512061.022662336349067617C0.8568434633479157.02945615471664055.872139887117064.037710807908943156.8864596237103826.04730455969058131L0.8725005100742934.0847150412597803C0.8857634210568424.09462249795570335.8978042209065583.10587841756676146.9084025289273567.11827678492536459L0.948421659875456.1052275969236928C0.9586843881999436.11861390065414837.9675146419998809.13291322615006.9747821963184906.14791487608093778L0.9426867531250714.17378850826509218C0.9488774472241766.1885654143767808.953280052493686.20394163733964055.9558294564552107.2196315652167852L0.9974613734064749.22703874692422862C0.9991893584098659.2434263170734397.9991893584098659.25993562345804494.9974613734064749.2763278757701558L0.9558294564552107.2837350574775992C0.953280052493686.2994249853547438.9488774472241766.31480120831760366.9426867531250714.32957811442929225L0.9747821963184906.3554517466134466C0.9675146419998809.37045339654432435.9586843881999436.38474803987733625.948421659875456.3981390257706916L0.9084025289273567.3850898377690198C0.8978042209065583.3974882051276229.8857634210568424.40874412473868105.8725005100742934.41865158143460407L0.8864596237103826.4560620630038031C0.8721398871170639.46565113262254143.8568434633479156.4739057858148441.8407957417512061.4807042863453168L0.8131179297838472.45070098648356116C0.7973106234919571.4564834576647828.7808622097205482.4606037610165844.7640782162528285.4629869819325697L0.756845722499505.4985199161789591L0.7576471068489037.4985901486224557L0.7655707946035836.5375129688082819C0.7823547880713033.5398915075613674.7988032018427124.5440118109131691.8146105081346023.5497989642572905L0.8422883201019612.519790982232635C0.8583360416986708.5265894827631077.8736324654678193.5348441359554104.8879522020611378.5444378877370485L0.8739930884250485.5818483693062474C0.8872559994075976.5917558260021705.8992967992573135.6030117456132287.9098951072781118.615405430808932L0.9499142382262111.6023609249701599C0.9601769665506987.6157472287006156.969007220350636.6300465541965272.9762747746692458.6450482041274048L0.9441793314758266.6709218363115593C0.9503650169227481.685698742423248.9547726308444411.7010749653861077.9573220348059658.7167648932632523L0.9989539517572301.7241720749706957C1.000681936760621.7405596451199068 1.000681936760621.757068951504512.9989539517572301.7734612038166229L0.9573220348059658.7808637033611664C0.9547726308444411.796553631238311.950365016922748.8119298542011708.9441793314758266.8267114424757592L0.9762747746692458.8525850746599137C0.969007220350636.8675867245907916.9601769665506987.8818813679238033.9499142382262111.8952676716542589L0.9098951072781118.8822231658154869C0.8992967992573135.89462153317409.8872559994075976.9058774527851481.8739930884250485.9157849094810713L0.8879522020611378.9531907088873705C0.8736324654678191.9627844606690087.8583360416986707.9710391138613113.8422883201019612.977837614391784L0.8146105081346023.9478343145300284C0.7988032018427124.9536167857112502.7823547880713033.9577370890630518.7655707946035836.9601156278161371L0.7576471068489037.9990384480019633C0.7401168242058064 1.0006537942023856.7224563166059317 1.0006537942023856.7049210253106508.9990384480019633L0.6969973375559708.9601156278161371C0.6802133440882511.9577370890630517.6637649303168421.95361678571125.647957624024952.9478343145300284L0.6202798120575933.977837614391784C0.6042320904608837.9710391138613113.5889356666917354.9627844606690087.5746159300984167.9531907088873705L0.5885750437345059.9157849094810713C0.5753121327519569.9058774527851481.563271332902241.89462153317409.5526730248814425.8822231658154869L0.5126538939333434.8952676716542589C0.5023961742610396.8818813679238033.49356592046110226.8675867245907916.4862933574903087.8525850746599138L0.518388800683728.8267114424757593C0.5122031152368065.8119298542011709.5077955013151135.7965536312383112.5052460973535888.7808637033611665L0.46361418040232455.773461203816623C0.46188619539893355.757068951504512.46188619539893355.7405596451199069.46361418040232455.7241720749706959L0.5052460973535888.7167648932632524C0.5077955013151135.7010749653861078.5122031152368065.6856987424232481.518388800683728.6709218363115594L0.4862933574903087.645048204127405C0.48646365166455596.6446923597470222.48663394583880315.644341197529539.4868092486652341.6439900353120559L0.4478269087191694.6312826452020677C0.43722860069837116.6436810125606708.4251878008486552.6549369321717289.4119248898661061.6648397067047522L0.42588400350219535.7022501882739512C0.411559258256693.7118439400555895.3962678431397284.720098593247892.3802201215430187.7268970937783648L0.35254230957565996.6968937939166092C0.3367350032837699.702676265097831.32028658951236094.7067965684496326.3035025960446412.7091751072027179L0.2955789082899612.7480979273885441C0.27804361699468016.7497132735889663.2603831093948056.7497132735889663.24285282675170825.7480979273885441L0.23492913899702825.7091751072027179C0.21814514552930853.7067965684496325.2016967317578995.7026762650978308.1858894254660095.6968937939166092L0.15821161349865073.7268970937783648C0.14216389190194106.720098593247892.12686746813279273.7118439400555895.1125477315394741.7022501882739512L0.1265068451755633.6648397067047522C0.11324393419301426.6549369321717289.10120313434329828.6436810125606708.09060482632250003.6312826452020677L0.05058569537440074.6443271510408397C0.04032296704991321.6309408473103841.03149271324997591.6166415218144725.024225158931366137.6016445540464946L0.056320602124785436.5757662396994404C0.050129908025680216.5609893335877518.04572730275617092.545613110624892.0431778987946462.5299231827477474L0.001545981843381972.5225206832032038C-0.00018200316000904808.5061284308910928 -0.00018200316000904808.48961912450648765.001545981843381972.4732268721943768L0.0431778987946462.4658243726498331C0.04572730275617092.4501344447726885.050129908025680216.4347582218098287.056320602124785436.4199813156981401L0.02422515893136614.39410300135108595C0.03149271324997591.3791013514202082.04032296704991321.3648067080871963.05058569537440075.3514204043567407L0.09060482632250003.36446491019551275C0.10120313434329828.35206654283690964.11324393419301426.34081062322585154.1265068451755633.33090784869282824L0.1125477315394741.2934973671236292C0.12686746813279273.2839036153419911.14216389190194106.2756489621496885.15821161349865073.2688504616192157L0.1858894254660095.29885376148097137C0.2016967317578995.2930712902997497.21814514552930853.2889509869479481.23492913899702825.2865724481948626L0.24285282675170825.2476496280090364C0.2603831093948056.24603428180861417.27804361699468016.24603428180861417.2955789082899612.2476496280090364L0.3035025960446412.2865724481948626C0.32028658951236094.28895098694794813.33673500328377.2930712902997497.35254230957565996.29885376148097137L0.3802201215430187.2688504616192157C0.39626784313972835.2756489621496884.411559258256693.2839036153419911.42588400350219535.2934973671236292L0.4119248898661061.33090784869282824C0.42518780084865515.3408106232258515.43722860069837116.35206654283690964.4478269087191694.36446491019551275L0.4878460396672687.3514204043567407C0.4880914636242721.3517434735968252.4883418962334592.35207122499980936.48858732019046247.3523989764027936ZM0.731286570405869.6985278687686304C0.7609728518989083.6985278687686304.7850794948592591.7210631188052454.7850794948592591.7488142983122096C0.7850794948592591.7765701599820733.7609728518989085.7991007278557888.731286570405869.7991007278557888C0.701595280260646.7991007278557888.6774886373002953.7765701599820733.6774886373002953.7488142983122096C0.6774886373002953.7210631188052455.701595280260646.6985278687686304.731286570405869.6985278687686304ZM0.7042298313092943.5019800345618924L0.7034284469598956.501905119955496L0.6955047592052157.46298698193256965C0.678720765737496.46060376101658435.6622723519660869.45648345766478277.6464650456741969.4507009864835611L0.6187872337068382.4807042863453167C0.6027395121101286.473905785814844.5874480969931639.4656511326225414.5731233517476615.45606206300380303L0.5870824653837508.418651581434604C0.5738195544012017.408744124738681.5617787545514857.3974882051276229.5511804465306874.3850898377690197L0.5111613155825881.39813902577069155C0.5109158916255848.39781127436770736.5106654590163977.3974882051276229.5104200350593944.39716045372463865L0.48211113291688407.41998131569813996C0.48829681836380556.4347582218098286.4927044322854986.4501344447726883.4952538362470233.465824372649833L0.5368857531982875.47322687219437665C0.5386137382016786.48961912450648754.5386137382016786.5061284308910927.5368857531982875.5225206832032036L0.4952538362470233.5299231827477473C0.4927044322854986.5456131106248919.48829681836380556.5609893335877517.48211113291688407.5757662396994403L0.5142065761103034.6016445540464944C0.5140362819360561.6019957162639775.5138659877618089.6023468784814607.513690684935378.6026980406989437L0.5526730248814427.615405430808932C0.563271332902241.6030117456132287.5753121327519569.5917558260021705.588575043734506.5818483693062474L0.5746159300984167.5444378877370485C0.5889356666917354.5348441359554102.6042320904608837.5265894827631077.6202798120575934.519790982232635L0.6479576240249522.5497989642572905C0.6637649303168422.544011810913169.6802133440882512.5398915075613674.6969973375559709.5375129688082819L0.7042298313092945.5019800345618926ZM0.2692133631947428.447587348155211C0.2989046533399659.447587348155211.32300628764813283.47011791602892633.32300628764813283.4978737776987901C0.32300628764813283.5256296393686539.2989046533399659.5481602072423692.2692133631947428.5481602072423692C0.23952708170170345.5481602072423692.21542043874135278.5256296393686539.21542043874135278.4978737776987901C0.21542043874135278.47011791602892633.23952708170170345.447587348155211.2692133631947428.447587348155211ZM0.7297939920551139.20139454072216306C0.7594802735481532.20139454072216306.783586916508504.2239297907587782.783586916508504.2516809702657422C0.783586916508504.279436831935606.7594802735481533.30196739980932136.7297939920551139.30196739980932136C0.7001027019098908.30196739980932136.6760010676017238.27943683193560603.6760010676017238.2516809702657422C0.6760010676017238.2239297907587782.7001027019098908.20139454072216306.7297939920551139.20139454072216306Z ' var data3 = 'M10 10-45-30.5.5 .89L2e-2.5.5.5-.5C.5.5.5.5.5.5L-3-4z' @@ -9,51 +11,54 @@ SVG.bench.describe('Generate 10000 pathArrays bbox', function(bench) { var path = SVG.create('path') path.style.visibility = 'hidden' - bench.test('using SVG.js v3.0.0', function() { + bench.test('using SVG.js v3.0.0', function () { for (var i = 0; i < 10000; i++) { SVG.parser.path.setAttribute('d', data) SVG.parser.path.getBBox() } }) - bench.test('using SVG.js v3.0.0 more data', function() { + bench.test('using SVG.js v3.0.0 more data', function () { for (var i = 0; i < 10000; i++) { SVG.parser.path.setAttribute('d', data2) SVG.parser.path.getBBox() } }) - bench.test('using SVG.js v3.0.0 complicated data', function() { + bench.test('using SVG.js v3.0.0 complicated data', function () { for (var i = 0; i < 10000; i++) { SVG.parser.path.setAttribute('d', data3) SVG.parser.path.getBBox() } }) - bench.test('using SVG.js v3.0.0 without parser', function() { + bench.test('using SVG.js v3.0.0 without parser', function () { for (var i = 0; i < 10000; i++) { path.setAttribute('d', data) draw.node.appendChild(path) path.getBBox() } - //new SVG.Path().attr('d', data).addTo(draw).bbox() + //new SVG.Path().attr('d', data).addTo(draw).bbox() }) - bench.test('using SVG.js v3.0.0 more data without parser', function() { + bench.test('using SVG.js v3.0.0 more data without parser', function () { for (var i = 0; i < 10000; i++) { path.setAttribute('d', data2) draw.node.appendChild(path) path.getBBox() } - //new SVG.Path().attr('d', data2).addTo(draw).bbox() + //new SVG.Path().attr('d', data2).addTo(draw).bbox() }) - bench.test('using SVG.js v3.0.0 complicated data without parser', function() { - for (var i = 0; i < 10000; i++) { - path.setAttribute('d', data3) - draw.node.appendChild(path) - path.getBBox() - } + bench.test( + 'using SVG.js v3.0.0 complicated data without parser', + function () { + for (var i = 0; i < 10000; i++) { + path.setAttribute('d', data3) + draw.node.appendChild(path) + path.getBBox() + } //new SVG.Path().attr('d', data3).addTo(draw).bbox() - }) -})
\ No newline at end of file + } + ) +}) diff --git a/bench/tests/10000-pathArrays.js b/bench/tests/10000-pathArrays.js index a4c0fdc..72bd74f 100644 --- a/bench/tests/10000-pathArrays.js +++ b/bench/tests/10000-pathArrays.js @@ -1,22 +1,21 @@ -SVG.bench.describe('Generate 10000 pathArrays', function(bench) { - var data = 'M97.499,75.211l5.652,-4.874c-1.235,-3.156 -2.115,-6.44 -2.623,-9.791l-8.313,-1.582c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.313,-1.582c0.508,-3.351 1.388,-6.635 2.623,-9.791l-6.408,-5.526c1.452,-3.204 3.215,-6.258 5.263,-9.117l7.99,2.787c2.116,-2.648 4.52,-5.052 7.168,-7.168l-2.787,-7.99c2.86,-2.049 5.913,-3.812 9.117,-5.263l5.526,6.408c3.156,-1.236 6.44,-2.115 9.791,-2.624l1.582,-8.312c3.501,-0.345 7.027,-0.345 10.527,0l1.582,8.312c3.351,0.509 6.635,1.388 9.791,2.624l5.526,-6.408c3.204,1.451 6.258,3.214 9.117,5.263l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.168l7.99,-2.787c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.236,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.582c-0.509,3.351 -1.388,6.635 -2.624,9.791l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.117l-7.99,-2.787c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.99c-2.859,2.048 -5.913,3.811 -9.117,5.263l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.624l-1.444,7.589l0.16,0.015l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.624l5.526,-6.409c3.204,1.452 6.258,3.215 9.117,5.264l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.167l7.99,-2.786c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.792l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.116l-7.99,-2.786c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.989c-2.859,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.5,0.345 -7.026,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.989c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.786c-2.048,-2.859 -3.811,-5.912 -5.263,-9.116l6.408,-5.526c-1.235,-3.157 -2.115,-6.441 -2.624,-9.792l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.312,-1.582c0.509,-3.351 1.389,-6.635 2.624,-9.791l-6.408,-5.526c0.034,-0.076 0.068,-0.151 0.103,-0.226l-7.783,-2.714c-2.116,2.648 -4.52,5.052 -7.168,7.167l2.787,7.99c-2.86,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.501,0.345 -7.027,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.99c-2.648,-2.115 -5.052,-4.519 -7.168,-7.167l-7.99,2.786c-2.049,-2.859 -3.812,-5.913 -5.263,-9.116l6.408,-5.527c-1.236,-3.156 -2.115,-6.44 -2.624,-9.791l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.528l8.312,-1.581c0.509,-3.351 1.388,-6.635 2.624,-9.791l-6.408,-5.527c1.451,-3.204 3.214,-6.257 5.263,-9.116l7.99,2.786c2.116,-2.648 4.52,-5.052 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.408c3.156,-1.235 6.44,-2.115 9.791,-2.623l1.582,-8.313c3.5,-0.345 7.026,-0.345 10.527,0l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.623l5.526,-6.408c3.204,1.452 6.257,3.215 9.117,5.264l-2.787,7.99c2.648,2.115 5.052,4.519 7.168,7.167l7.99,-2.786c0.049,0.069 0.099,0.139 0.148,0.209Zm48.456,73.925c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.741,-4.812 -10.741,-10.74c0,-5.927 4.813,-10.74 10.741,-10.74Zm-5.402,-41.978l-0.16,-0.016l-1.582,-8.312c-3.351,-0.509 -6.635,-1.389 -9.791,-2.624l-5.526,6.408c-3.204,-1.452 -6.257,-3.215 -9.117,-5.263l2.787,-7.99c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.787c-0.049,-0.07 -0.099,-0.139 -0.148,-0.209l-5.652,4.874c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.581c0.345,3.501 0.345,7.027 0,10.528l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.791l6.408,5.527c-0.034,0.075 -0.068,0.15 -0.103,0.225l7.783,2.714c2.116,-2.647 4.52,-5.051 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.409c3.156,-1.236 6.44,-2.116 9.791,-2.624l1.444,-7.589Zm-86.853,-11.617c5.928,0 10.74,4.812 10.74,10.74c0,5.928 -4.812,10.74 -10.74,10.74c-5.927,0 -10.74,-4.812 -10.74,-10.74c0,-5.928 4.813,-10.74 10.74,-10.74Zm91.957,-52.581c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.74,-4.812 -10.74,-10.74c0,-5.927 4.812,-10.74 10.74,-10.74Z' - - var data2 = 'M0.48858732019046247.35239897640279355L0.5168962223329727.32957811442929225C0.5107105368860513.31480120831760355.5063029229643583.2994249853547438.5037585276550173.2837350574775992L0.46212160205156927.2763278757701558C0.46039361704817827.25993562345804494.46039361704817827.2434263170734397.46212160205156927.22703874692422862L0.5037585276550173.2196315652167852C0.5063029229643582.20394163733964055.5107105368860513.1885654143767808.5168962223329727.17378850826509218L0.4848007791395535.14791487608093778C0.492073342110347.13291322615006.5009035959102843.11861390065414837.5111613155825881.1052275969236928L0.5511804465306873.11827678492536459C0.5617787545514856.10587841756676146.5738195544012016.09462249795570335.5870824653837506.0847150412597803L0.5731233517476615.047304559690581297C0.5874480969931638.037710807908943156.6027395121101284.02945615471664055.6187872337068381.022662336349067613L0.6464650456741969.052665636210823215C0.6622723519660869.046878482866701814.678720765737496.04276286167779995.6955047592052157.040379640761814675L0.7034284469598956.0014615027388882582C0.7209637382551767 -0.0001538434615339766.7386242458550512 -0.0001538434615339766.7561545284981485.0014615027388882582L0.7640782162528285.040379640761814675C0.7808622097205482.04276286167779995.7973106234919571.046878482866701814.8131179297838472.052665636210823215L0.8407957417512061.022662336349067617C0.8568434633479157.02945615471664055.872139887117064.037710807908943156.8864596237103826.04730455969058131L0.8725005100742934.0847150412597803C0.8857634210568424.09462249795570335.8978042209065583.10587841756676146.9084025289273567.11827678492536459L0.948421659875456.1052275969236928C0.9586843881999436.11861390065414837.9675146419998809.13291322615006.9747821963184906.14791487608093778L0.9426867531250714.17378850826509218C0.9488774472241766.1885654143767808.953280052493686.20394163733964055.9558294564552107.2196315652167852L0.9974613734064749.22703874692422862C0.9991893584098659.2434263170734397.9991893584098659.25993562345804494.9974613734064749.2763278757701558L0.9558294564552107.2837350574775992C0.953280052493686.2994249853547438.9488774472241766.31480120831760366.9426867531250714.32957811442929225L0.9747821963184906.3554517466134466C0.9675146419998809.37045339654432435.9586843881999436.38474803987733625.948421659875456.3981390257706916L0.9084025289273567.3850898377690198C0.8978042209065583.3974882051276229.8857634210568424.40874412473868105.8725005100742934.41865158143460407L0.8864596237103826.4560620630038031C0.8721398871170639.46565113262254143.8568434633479156.4739057858148441.8407957417512061.4807042863453168L0.8131179297838472.45070098648356116C0.7973106234919571.4564834576647828.7808622097205482.4606037610165844.7640782162528285.4629869819325697L0.756845722499505.4985199161789591L0.7576471068489037.4985901486224557L0.7655707946035836.5375129688082819C0.7823547880713033.5398915075613674.7988032018427124.5440118109131691.8146105081346023.5497989642572905L0.8422883201019612.519790982232635C0.8583360416986708.5265894827631077.8736324654678193.5348441359554104.8879522020611378.5444378877370485L0.8739930884250485.5818483693062474C0.8872559994075976.5917558260021705.8992967992573135.6030117456132287.9098951072781118.615405430808932L0.9499142382262111.6023609249701599C0.9601769665506987.6157472287006156.969007220350636.6300465541965272.9762747746692458.6450482041274048L0.9441793314758266.6709218363115593C0.9503650169227481.685698742423248.9547726308444411.7010749653861077.9573220348059658.7167648932632523L0.9989539517572301.7241720749706957C1.000681936760621.7405596451199068 1.000681936760621.757068951504512.9989539517572301.7734612038166229L0.9573220348059658.7808637033611664C0.9547726308444411.796553631238311.950365016922748.8119298542011708.9441793314758266.8267114424757592L0.9762747746692458.8525850746599137C0.969007220350636.8675867245907916.9601769665506987.8818813679238033.9499142382262111.8952676716542589L0.9098951072781118.8822231658154869C0.8992967992573135.89462153317409.8872559994075976.9058774527851481.8739930884250485.9157849094810713L0.8879522020611378.9531907088873705C0.8736324654678191.9627844606690087.8583360416986707.9710391138613113.8422883201019612.977837614391784L0.8146105081346023.9478343145300284C0.7988032018427124.9536167857112502.7823547880713033.9577370890630518.7655707946035836.9601156278161371L0.7576471068489037.9990384480019633C0.7401168242058064 1.0006537942023856.7224563166059317 1.0006537942023856.7049210253106508.9990384480019633L0.6969973375559708.9601156278161371C0.6802133440882511.9577370890630517.6637649303168421.95361678571125.647957624024952.9478343145300284L0.6202798120575933.977837614391784C0.6042320904608837.9710391138613113.5889356666917354.9627844606690087.5746159300984167.9531907088873705L0.5885750437345059.9157849094810713C0.5753121327519569.9058774527851481.563271332902241.89462153317409.5526730248814425.8822231658154869L0.5126538939333434.8952676716542589C0.5023961742610396.8818813679238033.49356592046110226.8675867245907916.4862933574903087.8525850746599138L0.518388800683728.8267114424757593C0.5122031152368065.8119298542011709.5077955013151135.7965536312383112.5052460973535888.7808637033611665L0.46361418040232455.773461203816623C0.46188619539893355.757068951504512.46188619539893355.7405596451199069.46361418040232455.7241720749706959L0.5052460973535888.7167648932632524C0.5077955013151135.7010749653861078.5122031152368065.6856987424232481.518388800683728.6709218363115594L0.4862933574903087.645048204127405C0.48646365166455596.6446923597470222.48663394583880315.644341197529539.4868092486652341.6439900353120559L0.4478269087191694.6312826452020677C0.43722860069837116.6436810125606708.4251878008486552.6549369321717289.4119248898661061.6648397067047522L0.42588400350219535.7022501882739512C0.411559258256693.7118439400555895.3962678431397284.720098593247892.3802201215430187.7268970937783648L0.35254230957565996.6968937939166092C0.3367350032837699.702676265097831.32028658951236094.7067965684496326.3035025960446412.7091751072027179L0.2955789082899612.7480979273885441C0.27804361699468016.7497132735889663.2603831093948056.7497132735889663.24285282675170825.7480979273885441L0.23492913899702825.7091751072027179C0.21814514552930853.7067965684496325.2016967317578995.7026762650978308.1858894254660095.6968937939166092L0.15821161349865073.7268970937783648C0.14216389190194106.720098593247892.12686746813279273.7118439400555895.1125477315394741.7022501882739512L0.1265068451755633.6648397067047522C0.11324393419301426.6549369321717289.10120313434329828.6436810125606708.09060482632250003.6312826452020677L0.05058569537440074.6443271510408397C0.04032296704991321.6309408473103841.03149271324997591.6166415218144725.024225158931366137.6016445540464946L0.056320602124785436.5757662396994404C0.050129908025680216.5609893335877518.04572730275617092.545613110624892.0431778987946462.5299231827477474L0.001545981843381972.5225206832032038C-0.00018200316000904808.5061284308910928 -0.00018200316000904808.48961912450648765.001545981843381972.4732268721943768L0.0431778987946462.4658243726498331C0.04572730275617092.4501344447726885.050129908025680216.4347582218098287.056320602124785436.4199813156981401L0.02422515893136614.39410300135108595C0.03149271324997591.3791013514202082.04032296704991321.3648067080871963.05058569537440075.3514204043567407L0.09060482632250003.36446491019551275C0.10120313434329828.35206654283690964.11324393419301426.34081062322585154.1265068451755633.33090784869282824L0.1125477315394741.2934973671236292C0.12686746813279273.2839036153419911.14216389190194106.2756489621496885.15821161349865073.2688504616192157L0.1858894254660095.29885376148097137C0.2016967317578995.2930712902997497.21814514552930853.2889509869479481.23492913899702825.2865724481948626L0.24285282675170825.2476496280090364C0.2603831093948056.24603428180861417.27804361699468016.24603428180861417.2955789082899612.2476496280090364L0.3035025960446412.2865724481948626C0.32028658951236094.28895098694794813.33673500328377.2930712902997497.35254230957565996.29885376148097137L0.3802201215430187.2688504616192157C0.39626784313972835.2756489621496884.411559258256693.2839036153419911.42588400350219535.2934973671236292L0.4119248898661061.33090784869282824C0.42518780084865515.3408106232258515.43722860069837116.35206654283690964.4478269087191694.36446491019551275L0.4878460396672687.3514204043567407C0.4880914636242721.3517434735968252.4883418962334592.35207122499980936.48858732019046247.3523989764027936ZM0.731286570405869.6985278687686304C0.7609728518989083.6985278687686304.7850794948592591.7210631188052454.7850794948592591.7488142983122096C0.7850794948592591.7765701599820733.7609728518989085.7991007278557888.731286570405869.7991007278557888C0.701595280260646.7991007278557888.6774886373002953.7765701599820733.6774886373002953.7488142983122096C0.6774886373002953.7210631188052455.701595280260646.6985278687686304.731286570405869.6985278687686304ZM0.7042298313092943.5019800345618924L0.7034284469598956.501905119955496L0.6955047592052157.46298698193256965C0.678720765737496.46060376101658435.6622723519660869.45648345766478277.6464650456741969.4507009864835611L0.6187872337068382.4807042863453167C0.6027395121101286.473905785814844.5874480969931639.4656511326225414.5731233517476615.45606206300380303L0.5870824653837508.418651581434604C0.5738195544012017.408744124738681.5617787545514857.3974882051276229.5511804465306874.3850898377690197L0.5111613155825881.39813902577069155C0.5109158916255848.39781127436770736.5106654590163977.3974882051276229.5104200350593944.39716045372463865L0.48211113291688407.41998131569813996C0.48829681836380556.4347582218098286.4927044322854986.4501344447726883.4952538362470233.465824372649833L0.5368857531982875.47322687219437665C0.5386137382016786.48961912450648754.5386137382016786.5061284308910927.5368857531982875.5225206832032036L0.4952538362470233.5299231827477473C0.4927044322854986.5456131106248919.48829681836380556.5609893335877517.48211113291688407.5757662396994403L0.5142065761103034.6016445540464944C0.5140362819360561.6019957162639775.5138659877618089.6023468784814607.513690684935378.6026980406989437L0.5526730248814427.615405430808932C0.563271332902241.6030117456132287.5753121327519569.5917558260021705.588575043734506.5818483693062474L0.5746159300984167.5444378877370485C0.5889356666917354.5348441359554102.6042320904608837.5265894827631077.6202798120575934.519790982232635L0.6479576240249522.5497989642572905C0.6637649303168422.544011810913169.6802133440882512.5398915075613674.6969973375559709.5375129688082819L0.7042298313092945.5019800345618926ZM0.2692133631947428.447587348155211C0.2989046533399659.447587348155211.32300628764813283.47011791602892633.32300628764813283.4978737776987901C0.32300628764813283.5256296393686539.2989046533399659.5481602072423692.2692133631947428.5481602072423692C0.23952708170170345.5481602072423692.21542043874135278.5256296393686539.21542043874135278.4978737776987901C0.21542043874135278.47011791602892633.23952708170170345.447587348155211.2692133631947428.447587348155211ZM0.7297939920551139.20139454072216306C0.7594802735481532.20139454072216306.783586916508504.2239297907587782.783586916508504.2516809702657422C0.783586916508504.279436831935606.7594802735481533.30196739980932136.7297939920551139.30196739980932136C0.7001027019098908.30196739980932136.6760010676017238.27943683193560603.6760010676017238.2516809702657422C0.6760010676017238.2239297907587782.7001027019098908.20139454072216306.7297939920551139.20139454072216306Z ' +SVG.bench.describe('Generate 10000 pathArrays', function (bench) { + var data = + 'M97.499,75.211l5.652,-4.874c-1.235,-3.156 -2.115,-6.44 -2.623,-9.791l-8.313,-1.582c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.313,-1.582c0.508,-3.351 1.388,-6.635 2.623,-9.791l-6.408,-5.526c1.452,-3.204 3.215,-6.258 5.263,-9.117l7.99,2.787c2.116,-2.648 4.52,-5.052 7.168,-7.168l-2.787,-7.99c2.86,-2.049 5.913,-3.812 9.117,-5.263l5.526,6.408c3.156,-1.236 6.44,-2.115 9.791,-2.624l1.582,-8.312c3.501,-0.345 7.027,-0.345 10.527,0l1.582,8.312c3.351,0.509 6.635,1.388 9.791,2.624l5.526,-6.408c3.204,1.451 6.258,3.214 9.117,5.263l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.168l7.99,-2.787c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.236,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.582c-0.509,3.351 -1.388,6.635 -2.624,9.791l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.117l-7.99,-2.787c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.99c-2.859,2.048 -5.913,3.811 -9.117,5.263l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.624l-1.444,7.589l0.16,0.015l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.624l5.526,-6.409c3.204,1.452 6.258,3.215 9.117,5.264l-2.787,7.99c2.648,2.116 5.052,4.52 7.168,7.167l7.99,-2.786c2.049,2.859 3.812,5.913 5.263,9.117l-6.408,5.526c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.582c0.345,3.5 0.345,7.026 0,10.527l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.792l6.408,5.526c-1.451,3.204 -3.214,6.257 -5.263,9.116l-7.99,-2.786c-2.116,2.648 -4.52,5.052 -7.168,7.168l2.787,7.989c-2.859,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.5,0.345 -7.026,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.989c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.786c-2.048,-2.859 -3.811,-5.912 -5.263,-9.116l6.408,-5.526c-1.235,-3.157 -2.115,-6.441 -2.624,-9.792l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.527l8.312,-1.582c0.509,-3.351 1.389,-6.635 2.624,-9.791l-6.408,-5.526c0.034,-0.076 0.068,-0.151 0.103,-0.226l-7.783,-2.714c-2.116,2.648 -4.52,5.052 -7.168,7.167l2.787,7.99c-2.86,2.049 -5.913,3.812 -9.117,5.264l-5.526,-6.408c-3.156,1.235 -6.44,2.115 -9.791,2.623l-1.582,8.313c-3.501,0.345 -7.027,0.345 -10.527,0l-1.582,-8.313c-3.351,-0.508 -6.635,-1.388 -9.791,-2.623l-5.526,6.408c-3.204,-1.452 -6.258,-3.215 -9.117,-5.264l2.787,-7.99c-2.648,-2.115 -5.052,-4.519 -7.168,-7.167l-7.99,2.786c-2.049,-2.859 -3.812,-5.913 -5.263,-9.116l6.408,-5.527c-1.236,-3.156 -2.115,-6.44 -2.624,-9.791l-8.312,-1.581c-0.345,-3.501 -0.345,-7.027 0,-10.528l8.312,-1.581c0.509,-3.351 1.388,-6.635 2.624,-9.791l-6.408,-5.527c1.451,-3.204 3.214,-6.257 5.263,-9.116l7.99,2.786c2.116,-2.648 4.52,-5.052 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.408c3.156,-1.235 6.44,-2.115 9.791,-2.623l1.582,-8.313c3.5,-0.345 7.026,-0.345 10.527,0l1.582,8.313c3.351,0.508 6.635,1.388 9.791,2.623l5.526,-6.408c3.204,1.452 6.257,3.215 9.117,5.264l-2.787,7.99c2.648,2.115 5.052,4.519 7.168,7.167l7.99,-2.786c0.049,0.069 0.099,0.139 0.148,0.209Zm48.456,73.925c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.741,-4.812 -10.741,-10.74c0,-5.927 4.813,-10.74 10.741,-10.74Zm-5.402,-41.978l-0.16,-0.016l-1.582,-8.312c-3.351,-0.509 -6.635,-1.389 -9.791,-2.624l-5.526,6.408c-3.204,-1.452 -6.257,-3.215 -9.117,-5.263l2.787,-7.99c-2.648,-2.116 -5.052,-4.52 -7.168,-7.168l-7.99,2.787c-0.049,-0.07 -0.099,-0.139 -0.148,-0.209l-5.652,4.874c1.235,3.156 2.115,6.44 2.624,9.791l8.312,1.581c0.345,3.501 0.345,7.027 0,10.528l-8.312,1.581c-0.509,3.351 -1.389,6.635 -2.624,9.791l6.408,5.527c-0.034,0.075 -0.068,0.15 -0.103,0.225l7.783,2.714c2.116,-2.647 4.52,-5.051 7.168,-7.167l-2.787,-7.99c2.859,-2.049 5.913,-3.812 9.117,-5.264l5.526,6.409c3.156,-1.236 6.44,-2.116 9.791,-2.624l1.444,-7.589Zm-86.853,-11.617c5.928,0 10.74,4.812 10.74,10.74c0,5.928 -4.812,10.74 -10.74,10.74c-5.927,0 -10.74,-4.812 -10.74,-10.74c0,-5.928 4.813,-10.74 10.74,-10.74Zm91.957,-52.581c5.927,0 10.74,4.813 10.74,10.74c0,5.928 -4.813,10.74 -10.74,10.74c-5.928,0 -10.74,-4.812 -10.74,-10.74c0,-5.927 4.812,-10.74 10.74,-10.74Z' + + var data2 = + 'M0.48858732019046247.35239897640279355L0.5168962223329727.32957811442929225C0.5107105368860513.31480120831760355.5063029229643583.2994249853547438.5037585276550173.2837350574775992L0.46212160205156927.2763278757701558C0.46039361704817827.25993562345804494.46039361704817827.2434263170734397.46212160205156927.22703874692422862L0.5037585276550173.2196315652167852C0.5063029229643582.20394163733964055.5107105368860513.1885654143767808.5168962223329727.17378850826509218L0.4848007791395535.14791487608093778C0.492073342110347.13291322615006.5009035959102843.11861390065414837.5111613155825881.1052275969236928L0.5511804465306873.11827678492536459C0.5617787545514856.10587841756676146.5738195544012016.09462249795570335.5870824653837506.0847150412597803L0.5731233517476615.047304559690581297C0.5874480969931638.037710807908943156.6027395121101284.02945615471664055.6187872337068381.022662336349067613L0.6464650456741969.052665636210823215C0.6622723519660869.046878482866701814.678720765737496.04276286167779995.6955047592052157.040379640761814675L0.7034284469598956.0014615027388882582C0.7209637382551767 -0.0001538434615339766.7386242458550512 -0.0001538434615339766.7561545284981485.0014615027388882582L0.7640782162528285.040379640761814675C0.7808622097205482.04276286167779995.7973106234919571.046878482866701814.8131179297838472.052665636210823215L0.8407957417512061.022662336349067617C0.8568434633479157.02945615471664055.872139887117064.037710807908943156.8864596237103826.04730455969058131L0.8725005100742934.0847150412597803C0.8857634210568424.09462249795570335.8978042209065583.10587841756676146.9084025289273567.11827678492536459L0.948421659875456.1052275969236928C0.9586843881999436.11861390065414837.9675146419998809.13291322615006.9747821963184906.14791487608093778L0.9426867531250714.17378850826509218C0.9488774472241766.1885654143767808.953280052493686.20394163733964055.9558294564552107.2196315652167852L0.9974613734064749.22703874692422862C0.9991893584098659.2434263170734397.9991893584098659.25993562345804494.9974613734064749.2763278757701558L0.9558294564552107.2837350574775992C0.953280052493686.2994249853547438.9488774472241766.31480120831760366.9426867531250714.32957811442929225L0.9747821963184906.3554517466134466C0.9675146419998809.37045339654432435.9586843881999436.38474803987733625.948421659875456.3981390257706916L0.9084025289273567.3850898377690198C0.8978042209065583.3974882051276229.8857634210568424.40874412473868105.8725005100742934.41865158143460407L0.8864596237103826.4560620630038031C0.8721398871170639.46565113262254143.8568434633479156.4739057858148441.8407957417512061.4807042863453168L0.8131179297838472.45070098648356116C0.7973106234919571.4564834576647828.7808622097205482.4606037610165844.7640782162528285.4629869819325697L0.756845722499505.4985199161789591L0.7576471068489037.4985901486224557L0.7655707946035836.5375129688082819C0.7823547880713033.5398915075613674.7988032018427124.5440118109131691.8146105081346023.5497989642572905L0.8422883201019612.519790982232635C0.8583360416986708.5265894827631077.8736324654678193.5348441359554104.8879522020611378.5444378877370485L0.8739930884250485.5818483693062474C0.8872559994075976.5917558260021705.8992967992573135.6030117456132287.9098951072781118.615405430808932L0.9499142382262111.6023609249701599C0.9601769665506987.6157472287006156.969007220350636.6300465541965272.9762747746692458.6450482041274048L0.9441793314758266.6709218363115593C0.9503650169227481.685698742423248.9547726308444411.7010749653861077.9573220348059658.7167648932632523L0.9989539517572301.7241720749706957C1.000681936760621.7405596451199068 1.000681936760621.757068951504512.9989539517572301.7734612038166229L0.9573220348059658.7808637033611664C0.9547726308444411.796553631238311.950365016922748.8119298542011708.9441793314758266.8267114424757592L0.9762747746692458.8525850746599137C0.969007220350636.8675867245907916.9601769665506987.8818813679238033.9499142382262111.8952676716542589L0.9098951072781118.8822231658154869C0.8992967992573135.89462153317409.8872559994075976.9058774527851481.8739930884250485.9157849094810713L0.8879522020611378.9531907088873705C0.8736324654678191.9627844606690087.8583360416986707.9710391138613113.8422883201019612.977837614391784L0.8146105081346023.9478343145300284C0.7988032018427124.9536167857112502.7823547880713033.9577370890630518.7655707946035836.9601156278161371L0.7576471068489037.9990384480019633C0.7401168242058064 1.0006537942023856.7224563166059317 1.0006537942023856.7049210253106508.9990384480019633L0.6969973375559708.9601156278161371C0.6802133440882511.9577370890630517.6637649303168421.95361678571125.647957624024952.9478343145300284L0.6202798120575933.977837614391784C0.6042320904608837.9710391138613113.5889356666917354.9627844606690087.5746159300984167.9531907088873705L0.5885750437345059.9157849094810713C0.5753121327519569.9058774527851481.563271332902241.89462153317409.5526730248814425.8822231658154869L0.5126538939333434.8952676716542589C0.5023961742610396.8818813679238033.49356592046110226.8675867245907916.4862933574903087.8525850746599138L0.518388800683728.8267114424757593C0.5122031152368065.8119298542011709.5077955013151135.7965536312383112.5052460973535888.7808637033611665L0.46361418040232455.773461203816623C0.46188619539893355.757068951504512.46188619539893355.7405596451199069.46361418040232455.7241720749706959L0.5052460973535888.7167648932632524C0.5077955013151135.7010749653861078.5122031152368065.6856987424232481.518388800683728.6709218363115594L0.4862933574903087.645048204127405C0.48646365166455596.6446923597470222.48663394583880315.644341197529539.4868092486652341.6439900353120559L0.4478269087191694.6312826452020677C0.43722860069837116.6436810125606708.4251878008486552.6549369321717289.4119248898661061.6648397067047522L0.42588400350219535.7022501882739512C0.411559258256693.7118439400555895.3962678431397284.720098593247892.3802201215430187.7268970937783648L0.35254230957565996.6968937939166092C0.3367350032837699.702676265097831.32028658951236094.7067965684496326.3035025960446412.7091751072027179L0.2955789082899612.7480979273885441C0.27804361699468016.7497132735889663.2603831093948056.7497132735889663.24285282675170825.7480979273885441L0.23492913899702825.7091751072027179C0.21814514552930853.7067965684496325.2016967317578995.7026762650978308.1858894254660095.6968937939166092L0.15821161349865073.7268970937783648C0.14216389190194106.720098593247892.12686746813279273.7118439400555895.1125477315394741.7022501882739512L0.1265068451755633.6648397067047522C0.11324393419301426.6549369321717289.10120313434329828.6436810125606708.09060482632250003.6312826452020677L0.05058569537440074.6443271510408397C0.04032296704991321.6309408473103841.03149271324997591.6166415218144725.024225158931366137.6016445540464946L0.056320602124785436.5757662396994404C0.050129908025680216.5609893335877518.04572730275617092.545613110624892.0431778987946462.5299231827477474L0.001545981843381972.5225206832032038C-0.00018200316000904808.5061284308910928 -0.00018200316000904808.48961912450648765.001545981843381972.4732268721943768L0.0431778987946462.4658243726498331C0.04572730275617092.4501344447726885.050129908025680216.4347582218098287.056320602124785436.4199813156981401L0.02422515893136614.39410300135108595C0.03149271324997591.3791013514202082.04032296704991321.3648067080871963.05058569537440075.3514204043567407L0.09060482632250003.36446491019551275C0.10120313434329828.35206654283690964.11324393419301426.34081062322585154.1265068451755633.33090784869282824L0.1125477315394741.2934973671236292C0.12686746813279273.2839036153419911.14216389190194106.2756489621496885.15821161349865073.2688504616192157L0.1858894254660095.29885376148097137C0.2016967317578995.2930712902997497.21814514552930853.2889509869479481.23492913899702825.2865724481948626L0.24285282675170825.2476496280090364C0.2603831093948056.24603428180861417.27804361699468016.24603428180861417.2955789082899612.2476496280090364L0.3035025960446412.2865724481948626C0.32028658951236094.28895098694794813.33673500328377.2930712902997497.35254230957565996.29885376148097137L0.3802201215430187.2688504616192157C0.39626784313972835.2756489621496884.411559258256693.2839036153419911.42588400350219535.2934973671236292L0.4119248898661061.33090784869282824C0.42518780084865515.3408106232258515.43722860069837116.35206654283690964.4478269087191694.36446491019551275L0.4878460396672687.3514204043567407C0.4880914636242721.3517434735968252.4883418962334592.35207122499980936.48858732019046247.3523989764027936ZM0.731286570405869.6985278687686304C0.7609728518989083.6985278687686304.7850794948592591.7210631188052454.7850794948592591.7488142983122096C0.7850794948592591.7765701599820733.7609728518989085.7991007278557888.731286570405869.7991007278557888C0.701595280260646.7991007278557888.6774886373002953.7765701599820733.6774886373002953.7488142983122096C0.6774886373002953.7210631188052455.701595280260646.6985278687686304.731286570405869.6985278687686304ZM0.7042298313092943.5019800345618924L0.7034284469598956.501905119955496L0.6955047592052157.46298698193256965C0.678720765737496.46060376101658435.6622723519660869.45648345766478277.6464650456741969.4507009864835611L0.6187872337068382.4807042863453167C0.6027395121101286.473905785814844.5874480969931639.4656511326225414.5731233517476615.45606206300380303L0.5870824653837508.418651581434604C0.5738195544012017.408744124738681.5617787545514857.3974882051276229.5511804465306874.3850898377690197L0.5111613155825881.39813902577069155C0.5109158916255848.39781127436770736.5106654590163977.3974882051276229.5104200350593944.39716045372463865L0.48211113291688407.41998131569813996C0.48829681836380556.4347582218098286.4927044322854986.4501344447726883.4952538362470233.465824372649833L0.5368857531982875.47322687219437665C0.5386137382016786.48961912450648754.5386137382016786.5061284308910927.5368857531982875.5225206832032036L0.4952538362470233.5299231827477473C0.4927044322854986.5456131106248919.48829681836380556.5609893335877517.48211113291688407.5757662396994403L0.5142065761103034.6016445540464944C0.5140362819360561.6019957162639775.5138659877618089.6023468784814607.513690684935378.6026980406989437L0.5526730248814427.615405430808932C0.563271332902241.6030117456132287.5753121327519569.5917558260021705.588575043734506.5818483693062474L0.5746159300984167.5444378877370485C0.5889356666917354.5348441359554102.6042320904608837.5265894827631077.6202798120575934.519790982232635L0.6479576240249522.5497989642572905C0.6637649303168422.544011810913169.6802133440882512.5398915075613674.6969973375559709.5375129688082819L0.7042298313092945.5019800345618926ZM0.2692133631947428.447587348155211C0.2989046533399659.447587348155211.32300628764813283.47011791602892633.32300628764813283.4978737776987901C0.32300628764813283.5256296393686539.2989046533399659.5481602072423692.2692133631947428.5481602072423692C0.23952708170170345.5481602072423692.21542043874135278.5256296393686539.21542043874135278.4978737776987901C0.21542043874135278.47011791602892633.23952708170170345.447587348155211.2692133631947428.447587348155211ZM0.7297939920551139.20139454072216306C0.7594802735481532.20139454072216306.783586916508504.2239297907587782.783586916508504.2516809702657422C0.783586916508504.279436831935606.7594802735481533.30196739980932136.7297939920551139.30196739980932136C0.7001027019098908.30196739980932136.6760010676017238.27943683193560603.6760010676017238.2516809702657422C0.6760010676017238.2239297907587782.7001027019098908.20139454072216306.7297939920551139.20139454072216306Z ' var data3 = 'M10 10-45-30.5.5 .89L2e-2.5.5.5-.5C.5.5.5.5.5.5L-3-4z' - - bench.test('using SVG.js v2.5.3', function() { - for (var i = 0; i < 10000; i++) - new SVG.PathArray(data) + + bench.test('using SVG.js v2.5.3', function () { + for (var i = 0; i < 10000; i++) new SVG.PathArray(data) }) - - bench.test('using SVG.js v2.5.3 more data', function() { - for (var i = 0; i < 10000; i++) - new SVG.PathArray(data2) + + bench.test('using SVG.js v2.5.3 more data', function () { + for (var i = 0; i < 10000; i++) new SVG.PathArray(data2) }) - - bench.test('using SVG.js v2.5.3 complicated data', function() { - for (var i = 0; i < 10000; i++) - new SVG.PathArray(data3) + + bench.test('using SVG.js v2.5.3 complicated data', function () { + for (var i = 0; i < 10000; i++) new SVG.PathArray(data3) }) -})
\ No newline at end of file +}) diff --git a/bench/tests/10000-paths.js b/bench/tests/10000-paths.js index cdf1d22..2e96c5f 100644 --- a/bench/tests/10000-paths.js +++ b/bench/tests/10000-paths.js @@ -1,19 +1,18 @@ -SVG.bench.describe('Generate 10000 paths', function(bench) { - var data = 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' +SVG.bench.describe('Generate 10000 paths', function (bench) { + var data = + 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' - bench.test('using SVG.js v2.5.3', function() { - for (var i = 0; i < 10000; i++) - bench.draw.path(data) + bench.test('using SVG.js v2.5.3', function () { + for (var i = 0; i < 10000; i++) bench.draw.path(data) }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var path = document.createElementNS(SVG.ns, 'path') path.setAttributeNS(null, 'd', data) bench.raw.appendChild(path) } }) - bench.test('using Snap.svg v0.5.1', function() { - for (var i = 0; i < 10000; i++) - bench.snap.path(data) + bench.test('using Snap.svg v0.5.1', function () { + for (var i = 0; i < 10000; i++) bench.snap.path(data) }) -})
\ No newline at end of file +}) diff --git a/bench/tests/10000-pointArray-bbox.js b/bench/tests/10000-pointArray-bbox.js index 32bc21a..8c9c42c 100644 --- a/bench/tests/10000-pointArray-bbox.js +++ b/bench/tests/10000-pointArray-bbox.js @@ -1,29 +1,52 @@ -SVG.bench.describe('Generate 10000 pathArrays bbox', function(bench) { - var data = '209,153 389,107 547,188 482,289 374,287 91,254 407,243 391,185 166,226 71,177 65,52 234,50 107,136 163,199 158,131 323,45 218,145 305,190 374,143 174,216 296,241' +SVG.bench.describe('Generate 10000 pathArrays bbox', function (bench) { + var data = + '209,153 389,107 547,188 482,289 374,287 91,254 407,243 391,185 166,226 71,177 65,52 234,50 107,136 163,199 158,131 323,45 218,145 305,190 374,143 174,216 296,241' - var dataArr = [[209,153],[389,107],[547,188],[482,289],[374,287],[91,254],[407,243],[391,185],[166,226],[71,177],[65,52],[234,50],[107,136],[163,199],[158,131],[323,45],[218,145],[305,190],[374,143],[174,216],[296,241]] + var dataArr = [ + [209, 153], + [389, 107], + [547, 188], + [482, 289], + [374, 287], + [91, 254], + [407, 243], + [391, 185], + [166, 226], + [71, 177], + [65, 52], + [234, 50], + [107, 136], + [163, 199], + [158, 131], + [323, 45], + [218, 145], + [305, 190], + [374, 143], + [174, 216], + [296, 241] + ] - - bench.test('using SVG.js v3.0.0', function() { + bench.test('using SVG.js v3.0.0', function () { for (var i = 0; i < 10000; i++) { SVG.parser.poly.setAttribute('points', data) SVG.parser.poly.getBBox() } }) - - bench.test('using SVG.js v3.0.0 without parser', function() { + bench.test('using SVG.js v3.0.0 without parser', function () { for (var i = 0; i < 10000; i++) { - var maxX = -Infinity, maxY = -Infinity, minX = Infinity, minY = Infinity - dataArr.forEach(function(el) { + var maxX = -Infinity, + maxY = -Infinity, + minX = Infinity, + minY = Infinity + dataArr.forEach(function (el) { maxX = Math.max(el[0], maxX) maxY = Math.max(el[1], maxY) minX = Math.min(el[0], minX) minY = Math.min(el[1], minY) }) - var a = {x: minX, y: minY, width: maxX-minX, height: maxY-minY} + var a = { x: minX, y: minY, width: maxX - minX, height: maxY - minY } } - //new SVG.Path().attr('d', data).addTo(draw).bbox() + //new SVG.Path().attr('d', data).addTo(draw).bbox() }) - -})
\ No newline at end of file +}) diff --git a/bench/tests/10000-rects.js b/bench/tests/10000-rects.js index e01eb95..884e3a5 100644 --- a/bench/tests/10000-rects.js +++ b/bench/tests/10000-rects.js @@ -1,80 +1,77 @@ -SVG.bench.describe('Generate 10000 rects', function(bench) { - bench.test('using SVG.js v3.0.6', function() { - for (var i = 0; i < 10000; i++) - bench.draw.rect(100,100) - }) - bench.test('using vanilla js', function() { - for (var i = 0; i < 10000; i++) { - var rect = document.createElementNS(SVG.ns, 'rect') - rect.setAttributeNS(null, 'height', 100) - rect.setAttributeNS(null, 'width', 100) - bench.raw.appendChild(rect) - } - }) - bench.test('using Snap.svg v0.5.1', function() { - for (var i = 0; i < 10000; i++) - bench.snap.rect(50, 50, 100, 100) +SVG.bench.describe('Generate 10000 rects', function (bench) { + bench.test('using SVG.js v3.0.6', function () { + for (var i = 0; i < 10000; i++) bench.draw.rect(100, 100) }) -}) - - -SVG.bench.describe('Generate 10000 rects with fill', function(bench) { - bench.test('using SVG.js v3.0.6', function() { - for (var i = 0; i < 10000; i++) - bench.draw.rect(100,100).fill('#f06') - }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var rect = document.createElementNS(SVG.ns, 'rect') rect.setAttributeNS(null, 'height', 100) rect.setAttributeNS(null, 'width', 100) - rect.setAttributeNS(null, 'fill', '#f06') bench.raw.appendChild(rect) } }) - bench.test('using Snap.svg v0.5.1', function() { - for (var i = 0; i < 10000; i++) - bench.snap.rect(50, 50, 100, 100).attr('fill', '#f06') + bench.test('using Snap.svg v0.5.1', function () { + for (var i = 0; i < 10000; i++) bench.snap.rect(50, 50, 100, 100) }) }) - -SVG.bench.describe('Generate 10000 rects with position and fill', function(bench) { - bench.test('using SVG.js v3.0.6', function() { - for (var i = 0; i < 10000; i++) - bench.draw.rect(100,100).move(50,50).fill('#f06') +SVG.bench.describe('Generate 10000 rects with fill', function (bench) { + bench.test('using SVG.js v3.0.6', function () { + for (var i = 0; i < 10000; i++) bench.draw.rect(100, 100).fill('#f06') }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var rect = document.createElementNS(SVG.ns, 'rect') rect.setAttributeNS(null, 'height', 100) rect.setAttributeNS(null, 'width', 100) rect.setAttributeNS(null, 'fill', '#f06') - rect.setAttributeNS(null, 'x', 50) - rect.setAttributeNS(null, 'y', 50) bench.raw.appendChild(rect) } }) - bench.test('using Snap.svg v0.5.1', function() { + bench.test('using Snap.svg v0.5.1', function () { for (var i = 0; i < 10000; i++) bench.snap.rect(50, 50, 100, 100).attr('fill', '#f06') }) }) +SVG.bench.describe( + 'Generate 10000 rects with position and fill', + function (bench) { + bench.test('using SVG.js v3.0.6', function () { + for (var i = 0; i < 10000; i++) + bench.draw.rect(100, 100).move(50, 50).fill('#f06') + }) + bench.test('using vanilla js', function () { + for (var i = 0; i < 10000; i++) { + var rect = document.createElementNS(SVG.ns, 'rect') + rect.setAttributeNS(null, 'height', 100) + rect.setAttributeNS(null, 'width', 100) + rect.setAttributeNS(null, 'fill', '#f06') + rect.setAttributeNS(null, 'x', 50) + rect.setAttributeNS(null, 'y', 50) + bench.raw.appendChild(rect) + } + }) + bench.test('using Snap.svg v0.5.1', function () { + for (var i = 0; i < 10000; i++) + bench.snap.rect(50, 50, 100, 100).attr('fill', '#f06') + }) + } +) -SVG.bench.describe('Generate 10000 rects with gradient fill', function(bench) { - bench.test('using SVG.js v3.0.6', function() { +SVG.bench.describe('Generate 10000 rects with gradient fill', function (bench) { + bench.test('using SVG.js v3.0.6', function () { for (var i = 0; i < 10000; i++) { - var g = bench.draw.gradient('linear', function(add) { + var g = bench.draw.gradient('linear', function (add) { add.stop(0, '#000') add.stop(0.25, '#f00') add.stop(1, '#fff') }) - bench.draw.rect(100,100).fill(g) + bench.draw.rect(100, 100).fill(g) } }) - bench.test('using vanilla js', function() { + bench.test('using vanilla js', function () { for (var i = 0; i < 10000; i++) { var g = document.createElementNS(SVG.ns, 'linearGradient') var stop = document.createElementNS(SVG.ns, 'stop') @@ -98,9 +95,9 @@ SVG.bench.describe('Generate 10000 rects with gradient fill', function(bench) { bench.raw.appendChild(rect) } }) - bench.test('using Snap.svg v0.5.1', function() { + bench.test('using Snap.svg v0.5.1', function () { for (var i = 0; i < 10000; i++) { - var g = bench.snap.gradient("L(0, 0, 100, 100)#000-#f00:25%-#fff") + var g = bench.snap.gradient('L(0, 0, 100, 100)#000-#f00:25%-#fff') bench.snap.rect(50, 50, 100, 100).attr({ fill: g diff --git a/bench/tests/10000-textContent.js b/bench/tests/10000-textContent.js index 9a02308..cb0df77 100644 --- a/bench/tests/10000-textContent.js +++ b/bench/tests/10000-textContent.js @@ -1,21 +1,21 @@ -SVG.bench.describe('Change textContent 10000 times', function(bench) { - var data = 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' +SVG.bench.describe('Change textContent 10000 times', function (bench) { + var data = + 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' var node = bench.draw.plain('').node - - bench.test('using appendChild', function() { + bench.test('using appendChild', function () { for (var i = 0; i < 1000000; i++) { while (node.hasChildNodes()) { node.removeChild(node.lastChild) } - node.appendChild(document.createTextNode('test'+i)) + node.appendChild(document.createTextNode('test' + i)) } }) - bench.test('using textContent', function() { + bench.test('using textContent', function () { for (var i = 0; i < 1000000; i++) { - node.textContent = 'test'+i + node.textContent = 'test' + i } }) }) diff --git a/bench/tests/10000-transform.js b/bench/tests/10000-transform.js index 0fcc162..9e22d09 100644 --- a/bench/tests/10000-transform.js +++ b/bench/tests/10000-transform.js @@ -1,4 +1,4 @@ -SVG.bench.describe('Transform 1000000 rects', function(bench) { +SVG.bench.describe('Transform 1000000 rects', function (bench) { let parameters = { translate: [20, 30], origin: [100, 100], @@ -6,27 +6,24 @@ SVG.bench.describe('Transform 1000000 rects', function(bench) { skew: [10, 30], scale: 0.5 } - - let matrixLike = {a:2, b:3, c:1, d:2, e:49, f:100} + + let matrixLike = { a: 2, b: 3, c: 1, d: 2, e: 49, f: 100 } let matrix = new SVG.Matrix(matrixLike) - + let worker = new SVG.Matrix() - bench.test('with parameters', function() { - for (var i = 0; i < 1000000; i++) - worker.transform(parameters) + bench.test('with parameters', function () { + for (var i = 0; i < 1000000; i++) worker.transform(parameters) }) - + worker = new SVG.Matrix() - bench.test('with matrix like', function() { + bench.test('with matrix like', function () { for (var i = 0; i < 1000000; i++) { worker.transform(matrixLike) } }) - + worker = new SVG.Matrix() - bench.test('with SVG.Matrix', function() { - for (var i = 0; i < 1000000; i++) - worker.transform(matrix) + bench.test('with SVG.Matrix', function () { + for (var i = 0; i < 1000000; i++) worker.transform(matrix) }) }) - diff --git a/package-lock.json b/package-lock.json index f60930e..62fbebb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,89 +9,98 @@ "version": "3.2.0", "license": "MIT", "devDependencies": { - "@babel/core": "^7.16.12", - "@babel/plugin-transform-runtime": "^7.16.10", - "@babel/preset-env": "^7.16.11", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-multi-entry": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.1.3", + "@babel/core": "^7.22.5", + "@babel/eslint-parser": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^25.0.1", + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-terser": "^0.4.3", "@target/custom-event-polyfill": "github:Adobe-Marketing-Cloud/custom-event-polyfill", - "babel-eslint": "^10.1.0", - "babel-plugin-polyfill-corejs3": "^0.5.1", - "core-js": "^3.20.3", + "@types/jasmine": "^4.3.2", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "core-js": "^3.31.0", "coveralls": "^3.1.1", - "eslint": "^8.7.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-sort-class-members": "^1.14.1", - "eslint-plugin-standard": "^5.0.0", - "esm": "^3.2.25", - "http-server": "^14.1.0", - "jasmine": "^4.0.2", - "jasmine-core": "^4.0.0", - "karma": "^6.3.12", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.1.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard": "^17.1.0", + "http-server": "^14.1.1", + "jasmine": "^5.0.1", + "jasmine-core": "^5.0.1", + "karma": "^6.4.2", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "^2.2.0", "karma-firefox-launcher": "^2.1.2", - "karma-jasmine": "^4.0.1", + "karma-jasmine": "^5.1.0", "karma-sauce-launcher": "^4.3.6", - "rollup": "^2.66.1", - "rollup-plugin-filesize": "^9.1.2", - "rollup-plugin-terser": "^7.0.2", - "svgdom": "^0.1.10", - "typescript": "^4.5.5", - "yargs": "^17.3.1" + "prettier": "^2.8.8", + "rollup": "^3.25.1", + "rollup-plugin-filesize": "^10.0.0", + "svgdom": "^0.1.14", + "typescript": "^5.1.3", + "yargs": "^17.7.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Fuzzyma" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.2", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -101,54 +110,82 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", + "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -158,19 +195,36 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", - "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -180,13 +234,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -196,15 +251,13 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -215,251 +268,237 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -468,9 +507,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -480,12 +519,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -495,14 +534,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -511,16 +550,11 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, "engines": { "node": ">=6.9.0" }, @@ -528,63 +562,53 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-regexp-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -593,30 +617,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -625,14 +656,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -641,82 +671,109 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -725,16 +782,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -743,53 +797,64 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -798,121 +863,162 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -921,13 +1027,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -936,13 +1043,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -951,15 +1059,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -968,13 +1074,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -983,13 +1091,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -998,20 +1107,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1020,13 +1122,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1035,13 +1138,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1050,14 +1153,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1066,13 +1169,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1081,14 +1186,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1097,13 +1204,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1112,30 +1220,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1144,13 +1251,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1159,15 +1267,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1176,16 +1283,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1194,17 +1302,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1213,14 +1318,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1229,28 +1334,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1259,14 +1366,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1275,13 +1382,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1291,12 +1401,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1306,12 +1416,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1321,12 +1432,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1336,16 +1447,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", - "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", "semver": "^6.3.0" }, "engines": { @@ -1356,12 +1467,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1371,13 +1482,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1387,12 +1498,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1402,12 +1513,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1417,12 +1528,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1432,12 +1543,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1447,13 +1574,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1462,38 +1589,43 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1503,44 +1635,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", "semver": "^6.3.0" }, "engines": { @@ -1566,6 +1715,12 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "node_modules/@babel/runtime": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", @@ -1579,33 +1734,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1614,36 +1769,85 @@ } }, "node_modules/@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -1653,9 +1857,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1667,15 +1871,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1688,32 +1883,150 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/js": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -1723,20 +2036,143 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "dependencies": { - "@gar/promisify": "^1.0.1", "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1749,37 +2185,37 @@ } }, "node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^2.0.2" + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/git/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1791,26 +2227,53 @@ "node": ">=10" } }, + "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "index.js" + "installed-package-contents": "lib/index.js" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { @@ -1818,7 +2281,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/move-file/node_modules/mkdirp": { @@ -1834,153 +2297,405 @@ } }, "node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "dependencies": { - "infer-owner": "^1.0.4" + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.1.tgz", + "integrity": "sha512-H43VosMzywHCcYcgv0GXXopvwnV21Ud9g2aXbPlQUJj1Xcz9V0wBwHeFz6saFhx/3VKisZfI1GEKEOhQCau7Vw==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.2.1", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0" }, "peerDependenciesMeta": { "@types/babel__core": { "optional": true + }, + "rollup": { + "optional": true } } }, "node_modules/@rollup/plugin-commonjs": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz", - "integrity": "sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.1.tgz", + "integrity": "sha512-2DJ4kv4b1xfTJopWhu61ANdNRHvzQZ2fpaIrlgaP2jOfUv1wDJ0Ucqy8AZlbFmn/iUjiwKoqki9j55Y6L8kyNQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", + "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.38.3" + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/@rollup/plugin-multi-entry": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-multi-entry/-/plugin-multi-entry-4.1.0.tgz", - "integrity": "sha512-nellK5pr50W0JA2+bDJbG8F79GBP802J40YRoC0wyfpTAeAn5mJ4eaFiB/MN+YoX9hgb/6RJoZl9leDjZnUFKw==", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "@rollup/plugin-virtual": "^2.0.3", - "matched": "^5.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", - "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", - "resolve": "^1.19.0" + "resolve": "^1.22.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.42.0" + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-virtual": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz", - "integrity": "sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.3.tgz", + "integrity": "sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==", "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/tuf/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf/node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -2001,32 +2716,72 @@ "license": "ISC" }, "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "dependencies": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -2034,15 +2789,18 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, "node_modules/@types/http-cache-semantics": { @@ -2051,16 +2809,23 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "node_modules/@types/jasmine": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.2.tgz", + "integrity": "sha512-lKkWBcbxEZX/7nxPqEtv/OjPLaBa2j0o+hmv5Yn83b/+11C1kfBAkgvmrb13WDkmizUJ3B+jYrWh4M0YRtrzEQ==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true }, "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "dependencies": { "@types/node": "*" @@ -2073,12 +2838,13 @@ "dev": true }, "node_modules/@types/puppeteer": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.4.tgz", - "integrity": "sha512-3Nau+qi69CN55VwZb0ATtdUAlYlqOOQ3OfQfq0Hqgc4JMFXiQT/XInlwQ9g6LbicDslE6loIFsXFklGh5XmI6Q==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-7.0.4.tgz", + "integrity": "sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==", + "deprecated": "This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { - "@types/node": "*" + "puppeteer": "*" } }, "node_modules/@types/puppeteer-core": { @@ -2091,13 +2857,10 @@ } }, "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "node_modules/@types/responselike": { "version": "1.0.0", @@ -2115,9 +2878,9 @@ "dev": true }, "node_modules/@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, "optional": true, "dependencies": { @@ -2263,13 +3026,13 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -2317,22 +3080,25 @@ } }, "node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "dependencies": { + "debug": "4" + }, "engines": { "node": ">= 6.0.0" } }, "node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "dependencies": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -2422,9 +3188,9 @@ } }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/arch": { @@ -2450,7 +3216,7 @@ "node_modules/archive-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", "dev": true, "dependencies": { "file-type": "^4.2.0" @@ -2462,20 +3228,20 @@ "node_modules/archive-type/node_modules/file-type": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "dev": true, "dependencies": { "archiver-utils": "^2.1.0", - "async": "^3.2.0", + "async": "^3.2.3", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", @@ -2508,9 +3274,9 @@ } }, "node_modules/archiver/node_modules/async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/archiver/node_modules/bl": { @@ -2525,9 +3291,9 @@ } }, "node_modules/archiver/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -2555,13 +3321,30 @@ } }, "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/argparse": { @@ -2573,6 +3356,20 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", @@ -2580,15 +3377,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -2599,14 +3397,35 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "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.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2719,9 +3538,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" @@ -2754,6 +3573,19 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2769,44 +3601,14 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", "semver": "^6.1.1" }, "peerDependencies": { @@ -2814,25 +3616,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.4.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -2868,15 +3670,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2918,6 +3711,15 @@ "node": ">= 0.8" } }, + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -3025,7 +3827,7 @@ "node_modules/bin-version/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" @@ -3043,7 +3845,7 @@ "node_modules/bin-version/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -3055,7 +3857,7 @@ "node_modules/bin-version/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3110,24 +3912,27 @@ } }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -3145,19 +3950,37 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/boolean": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz", - "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "dev": true }, "node_modules/boxen": { @@ -3337,26 +4160,35 @@ } }, "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer": { @@ -3402,7 +4234,7 @@ "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "engines": { "node": "*" @@ -3420,7 +4252,7 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, "node_modules/buffer-from": { @@ -3430,9 +4262,9 @@ "dev": true }, "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" @@ -3442,68 +4274,114 @@ } }, "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, "bin": { - "mkdirp": "bin/cmd.js" + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacheable-lookup": { @@ -3516,27 +4394,36 @@ } }, "node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "dependencies": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { @@ -3584,14 +4471,24 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", + "version": "1.0.30001502", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001502.tgz", + "integrity": "sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, "node_modules/capital-case": { "version": "1.0.4", @@ -3700,6 +4597,18 @@ "rimraf": "^3.0.2" } }, + "node_modules/chromium-bidi": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.11.tgz", + "integrity": "sha512-p03ajLhlQ5gebw3cmbDBFmBc2wnJM5dnXS8Phu6mblGn/KQd76yOVL5VwE0VAisa7oazNfKGTaXlIZ8Q5Bb9OA==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -3742,21 +4651,15 @@ } }, "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/color-convert": { @@ -3771,9 +4674,18 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -3804,13 +4716,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "node_modules/compress-commons": { @@ -3829,9 +4735,9 @@ } }, "node_modules/compress-commons/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -3906,7 +4812,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "node_modules/constant-case": { @@ -3921,21 +4827,41 @@ } }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { "node": ">= 0.6" @@ -3951,19 +4877,18 @@ } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/core-js": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", - "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", + "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -3972,28 +4897,18 @@ } }, "node_modules/core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -4022,6 +4937,42 @@ "node": ">= 0.4.0" } }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/coveralls": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", @@ -4042,14 +4993,10 @@ } }, "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, "bin": { "crc32": "bin/crc32.njs" }, @@ -4071,9 +5018,9 @@ } }, "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -4084,6 +5031,15 @@ "node": ">= 6" } }, + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.11" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4107,7 +5063,7 @@ "node_modules/css-value": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", "dev": true }, "node_modules/custom-event": { @@ -4144,20 +5100,28 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "deprecated": "3.x is no longer supported. Please upgrade to 4.x or higher.", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4172,9 +5136,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, "engines": { "node": ">=0.10" @@ -4200,15 +5164,30 @@ } }, "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decompress-tar": { @@ -4228,7 +5207,7 @@ "node_modules/decompress-tar/node_modules/file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "engines": { "node": ">=4" @@ -4276,7 +5255,7 @@ "node_modules/decompress-targz/node_modules/file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "engines": { "node": ">=4" @@ -4285,7 +5264,7 @@ "node_modules/decompress-unzip": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, "dependencies": { "file-type": "^3.8.0", @@ -4300,7 +5279,7 @@ "node_modules/decompress-unzip/node_modules/file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4309,7 +5288,7 @@ "node_modules/decompress-unzip/node_modules/get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, "dependencies": { "object-assign": "^4.0.1", @@ -4322,7 +5301,7 @@ "node_modules/decompress-unzip/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4343,7 +5322,7 @@ "node_modules/decompress/node_modules/make-dir/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" @@ -4352,7 +5331,7 @@ "node_modules/decompress/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4382,9 +5361,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4400,15 +5379,46 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/degenerator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", + "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.17" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/degenerator/node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/delayed-stream": { @@ -4423,16 +5433,26 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detect-node": { @@ -4545,6 +5565,60 @@ "node": ">=6" } }, + "node_modules/download/node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dev": true, + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/download/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download/node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/download/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/download/node_modules/got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -4573,6 +5647,36 @@ "node": ">=4" } }, + "node_modules/download/node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "node_modules/download/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/download/node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/download/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/download/node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -4585,11 +5689,55 @@ "node": ">=4" } }, + "node_modules/download/node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/download/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/download/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, "engines": { "node": ">=4" } @@ -4610,9 +5758,15 @@ } }, "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "node_modules/ecc-jsbn": { @@ -4642,9 +5796,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.53", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", - "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", + "version": "1.4.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.427.tgz", + "integrity": "sha512-HK3r9l+Jm8dYAm1ctXEWIC+hV60zfcjS9UA5BDlYvnI5S7PU/yytjpvSrTNrSSRRkuu3tDyZhdkwIczh+0DWaw==", "dev": true }, "node_modules/emoji-regex": { @@ -4695,9 +5849,9 @@ } }, "node_modules/engine.io": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.0.0.tgz", - "integrity": "sha512-Ui7yl3JajEIaACg8MOUwWvuuwU7jepZqX3BKs1ho7NQRuP4LhN4XIykXhp8bEy+x/DhA0LBZZXYSCkZDqrwMMg==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4708,21 +5862,18 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.1.tgz", - "integrity": "sha512-j4p3WwJrG2k92VISM0op7wiq60vO92MlF3CRGxhKHy9ywG1/Dkc72g0dXeDQ+//hrcDn8gqQzoEkdO9FN0d9AA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", "dev": true, - "dependencies": { - "base64-arraybuffer": "~1.0.1" - }, "engines": { "node": ">=10.0.0" } @@ -4748,32 +5899,56 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, + "peer": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -4782,11 +5957,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "peer": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "peer": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4982,46 +6183,50 @@ } }, "node_modules/eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "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.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.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", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -5033,10 +6238,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -5052,21 +6269,26 @@ "url": "https://feross.org/support" } ], + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, + "peer": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -5074,21 +6296,27 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, + "peer": true, "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -5096,48 +6324,53 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/eslint-plugin-es-x": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-6.2.1.tgz", + "integrity": "sha512-uR34zUhZ9EBoiSD2DdV5kHLpydVEvwWqjteUr9sXRgJknwbKZJZhdJ7uFnaTtd+Nr/2G3ceJHnHXrFhJ67n3Tw==", "dev": true, + "peer": true, "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.5.0" }, "engines": { - "node": ">=8.10.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "eslint": ">=4.19.1" + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, + "peer": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "engines": { "node": ">=4" @@ -5147,12 +6380,13 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -5160,6 +6394,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5167,84 +6402,65 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/eslint-plugin-n": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.0.tgz", + "integrity": "sha512-akkZTE3hsHBrq6CwmGuYCzQREbVUrA855kzcHqe6i0FLBkeY7Y/6tThCVkjUnjhvRBAlc+8lILcSe5QvvDpeZQ==", "dev": true, + "peer": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^6.1.0", "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "is-core-module": "^2.12.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5.16.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", - "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-plugin-sort-class-members": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.14.1.tgz", - "integrity": "sha512-/Q/cm3h4N9DBNYvJMQMhluucSmr3Yydr9U0BgGcXUQe/rgWdXKSymZ5Ewcf4vmAG0bbTmAYmekuMnYYrqlu9Rg==", + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, + "peer": true, "engines": { - "node": ">=4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-standard": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz", - "integrity": "sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg==", - "deprecated": "standard 16.0.0 and eslint-config-standard 16.0.0 no longer require the eslint-plugin-standard package. You can remove it from your dependencies with 'npm rm eslint-plugin-standard'. More info here: https://github.com/standard/standard/issues/1316", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": ">=5.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -5252,6 +6468,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-scope/node_modules/estraverse": { @@ -5263,30 +6482,6 @@ "node": ">=4.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5354,40 +6549,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/glob-parent": { @@ -5403,9 +6574,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5450,33 +6621,27 @@ "node": ">=8" } }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -5486,12 +6651,15 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -5508,9 +6676,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -5565,9 +6733,9 @@ "dev": true }, "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "node_modules/esutils": { @@ -5598,7 +6766,7 @@ "node_modules/execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, "dependencies": { "cross-spawn": "^5.0.1", @@ -5616,7 +6784,7 @@ "node_modules/execa/node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, "dependencies": { "lru-cache": "^4.0.1", @@ -5637,7 +6805,7 @@ "node_modules/execa/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -5649,7 +6817,7 @@ "node_modules/execa/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5670,7 +6838,7 @@ "node_modules/execa/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, "node_modules/executable": { @@ -5688,21 +6856,12 @@ "node_modules/executable/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", @@ -5811,10 +6970,19 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "dependencies": { "pend": "~1.2.0" @@ -5844,7 +7012,7 @@ "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, "engines": { "node": ">=4" @@ -5919,15 +7087,19 @@ "dev": true }, "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/find-versions": { @@ -5956,15 +7128,15 @@ } }, "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { @@ -6000,6 +7172,44 @@ "unicode-trie": "^0.3.0" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -6026,7 +7236,7 @@ "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -6054,15 +7264,15 @@ } }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "minipass": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { @@ -6091,73 +7301,51 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, + "peer": true, "dependencies": { - "number-is-nan": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/gensync": { @@ -6185,14 +7373,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6225,7 +7414,7 @@ "node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "engines": { "node": ">=4" @@ -6236,6 +7425,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6247,6 +7437,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-uri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -6307,9 +7512,9 @@ } }, "node_modules/global-agent/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -6331,9 +7536,9 @@ } }, "node_modules/globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { "define-properties": "^1.1.3" @@ -6345,10 +7550,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { - "version": "11.8.2", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", - "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.0", @@ -6356,7 +7574,7 @@ "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", + "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", @@ -6370,138 +7588,6 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/got/node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/got/node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/got/node_modules/keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/got/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -6514,6 +7600,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "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/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -6571,10 +7663,11 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6582,12 +7675,36 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -6598,9 +7715,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -6639,7 +7756,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "node_modules/hash.js": { @@ -6672,15 +7789,24 @@ } }, "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/html-encoding-sniffer": { @@ -6702,32 +7828,35 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/http-proxy": { "version": "1.18.1", @@ -6744,12 +7873,12 @@ } }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -6757,22 +7886,10 @@ "node": ">= 6" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/http-server": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.0.tgz", - "integrity": "sha512-5lYsIcZtf6pdR8tCtzAHTWrAveo4liUlJdWc7YafwK/maPgYHs+VNP6KpCClmUnSorJrARVMXqtT055zBv11Yg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, "dependencies": { "basic-auth": "^2.0.1", @@ -6782,7 +7899,7 @@ "html-encoding-sniffer": "^3.0.0", "http-proxy": "^1.18.1", "mime": "^1.6.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "opener": "^1.5.1", "portfinder": "^1.0.28", "secure-compare": "3.0.1", @@ -6895,22 +8012,22 @@ } }, "node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "agent-base": "5", + "agent-base": "6", "debug": "4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 6" } }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "dependencies": { "ms": "^2.0.0" @@ -6958,18 +8075,45 @@ } }, "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/image-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", - "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "dev": true, "dependencies": { "queue": "6.0.2" @@ -6978,7 +8122,7 @@ "image-size": "bin/image-size.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/import-fresh": { @@ -7053,12 +8197,13 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, + "peer": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -7069,7 +8214,7 @@ "node_modules/into-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "dev": true, "dependencies": { "from2": "^2.1.1", @@ -7080,9 +8225,9 @@ } }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "node_modules/is-arguments": { @@ -7101,11 +8246,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "peer": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -7130,6 +8297,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7141,11 +8309,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -7154,9 +8338,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -7228,26 +8412,27 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", "dev": true }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -7265,10 +8450,11 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7288,10 +8474,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7332,10 +8527,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7343,7 +8542,7 @@ "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7354,6 +8553,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7369,6 +8569,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "peer": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7379,6 +8580,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -7386,12 +8607,13 @@ "dev": true }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7449,14 +8671,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "engines": { @@ -7547,58 +8770,87 @@ "node": ">= 4" } }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jasmine": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.0.2.tgz", - "integrity": "sha512-YsrgxJQEggxzByYe4j68eQLOiQeSrPDYGv4sHhGBp3c6HHdq+uPXeAQ73kOAQpdLZ3/0zN7x/TZTloqeE1/qIA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.0.1.tgz", + "integrity": "sha512-cLAGOzZyTaDF/T4J8AvBg3Jthp/CAFZNuzxMNBdc0IrNXMhbxxMIY7eLn+1hFjo+QJ0Pvj3ifahBCQDE6i08Ug==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "jasmine-core": "^4.0.0" + "glob": "^10.2.2", + "jasmine-core": "~5.0.1" }, "bin": { "jasmine": "bin/jasmine.js" } }, "node_modules/jasmine-core": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.0.0.tgz", - "integrity": "sha512-tq24OCqHElgU9KDpb/8O21r1IfotgjIzalfW9eCmRR40LZpvwXT68iariIyayMwi0m98RDt16aljdbwK0sBMmQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.0.1.tgz", + "integrity": "sha512-D4bRej8CplwNtNGyTPD++cafJlZUphzZNV+MSAnbD3er4D0NjL4x9V+mu/SI+5129utnCBen23JwEuBZA9vlpQ==", "dev": true }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/jasmine/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "balanced-match": "^1.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jasmine/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jasmine/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/js-tokens": { @@ -7639,21 +8891,24 @@ } }, "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "node_modules/json-schema-traverse": { @@ -7675,13 +8930,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -7692,7 +8944,7 @@ "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -7701,37 +8953,37 @@ "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" ] }, "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, "node_modules/karma": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.12.tgz", - "integrity": "sha512-qwIG+oB2YmHx4hjvYSRMNzL3YWAJ9baHaLAxiP7biFNkfpwYTUTtPck0joFpucalNLzMr+7z/FX1uY/kl8DV9A==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "dependencies": { + "@colors/colors": "1.5.0", "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -7740,13 +8992,14 @@ "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", - "log4js": "^6.3.0", + "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^4.2.0", + "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", @@ -7760,9 +9013,9 @@ } }, "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, "dependencies": { "which": "^1.2.1" @@ -7781,13 +9034,13 @@ } }, "node_modules/karma-coverage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.1.0.tgz", - "integrity": "sha512-uIejpnArNFQIovB6EPsKO/T4XofELdJWXcA2ADXztFlKhHbr0Ws6ba7wKTMVWsIhEs4iJxdhQkCQrkkhFJSZCw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.0.5", @@ -7808,24 +9061,24 @@ } }, "node_modules/karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, "dependencies": { - "jasmine-core": "^3.6.0" + "jasmine-core": "^4.1.0" }, "engines": { - "node": ">= 10" + "node": ">=12" }, "peerDependencies": { - "karma": "*" + "karma": "^6.0.0" } }, "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "3.99.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.0.tgz", - "integrity": "sha512-+ZDaJlEfRopINQqgE+hvzRyDIQDeKfqqTvF8RzXsvU1yE3pBDRud2+Qfh9WvGgRpuzqxyQJVI6Amy5XQ11r/3w==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", "dev": true }, "node_modules/karma-sauce-launcher": { @@ -7882,12 +9135,12 @@ } }, "node_modules/keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dev": true, "dependencies": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "node_modules/lazystream": { @@ -7925,9 +9178,9 @@ } }, "node_modules/lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, "dependencies": { "debug": "^2.6.9", @@ -7946,20 +9199,28 @@ "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -7971,43 +9232,43 @@ "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, "node_modules/lodash.isobject": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true }, "node_modules/lodash.merge": { @@ -8019,13 +9280,13 @@ "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true }, "node_modules/lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", "dev": true }, "node_modules/log-driver": { @@ -8038,31 +9299,25 @@ } }, "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" }, "engines": { "node": ">=8.0" } }, - "node_modules/log4js/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true, "engines": { "node": ">= 0.6.0" @@ -8088,12 +9343,12 @@ } }, "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/lru-cache": { @@ -8109,12 +9364,15 @@ } }, "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.4" + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" } }, "node_modules/make-dir": { @@ -8133,85 +9391,237 @@ } }, "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/make-fetch-happen/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "dependencies": { - "debug": "4" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">= 6.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/make-fetch-happen/node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/marky": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", - "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", - "dev": true + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "node_modules/matched": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/matched/-/matched-5.0.1.tgz", - "integrity": "sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw==", + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "picomatch": "^2.2.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/make-fetch-happen/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -8254,12 +9664,6 @@ "source-map": "^0.5.6" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -8273,21 +9677,21 @@ } }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -8309,9 +9713,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -8321,19 +9725,19 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } @@ -8350,21 +9754,45 @@ "node": ">= 8" } }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/minipass-flush": { @@ -8379,6 +9807,18 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", @@ -8389,6 +9829,18 @@ "minipass": "^3.0.0" } }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -8401,6 +9853,18 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -8413,6 +9877,18 @@ "node": ">=8" } }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -8426,6 +9902,24 @@ "node": ">= 8" } }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -8457,14 +9951,23 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -8488,45 +9991,53 @@ } }, "node_modules/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", + "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.13 || ^14.13 || >=16" } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8539,24 +10050,54 @@ } }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/normalize-path": { @@ -8569,38 +10110,27 @@ } }, "node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-conf": { @@ -8619,28 +10149,28 @@ "node_modules/npm-conf/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8653,29 +10183,33 @@ } }, "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8688,39 +10222,36 @@ } }, "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" + "ignore-walk": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8733,26 +10264,79 @@ } }, "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "dependencies": { "path-key": "^2.0.0" @@ -8764,31 +10348,25 @@ "node_modules/npm-run-path/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/oauth-sign": { @@ -8810,9 +10388,9 @@ } }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8844,14 +10422,15 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -8862,14 +10441,15 @@ } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -8938,12 +10518,12 @@ } }, "node_modules/p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/p-event": { @@ -8961,7 +10541,7 @@ "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { "node": ">=4" @@ -8970,34 +10550,40 @@ "node_modules/p-is-promise": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^1.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^1.1.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { @@ -9028,66 +10614,134 @@ } }, "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "node_modules/pac-proxy-agent": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", + "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", "dev": true, "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "pac-resolver": "^6.0.1", + "socks-proxy-agent": "^8.0.1" }, - "bin": { - "pacote": "lib/bin.js" + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/pacote/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", + "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", "dev": true, + "dependencies": { + "degenerator": "^4.0.1", + "ip": "^1.1.5", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, "bin": { - "mkdirp": "bin/cmd.js" + "pacote": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pako": { @@ -9118,6 +10772,30 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -9148,12 +10826,12 @@ } }, "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -9180,10 +10858,44 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "node_modules/performance-now": { @@ -9199,9 +10911,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" @@ -9222,7 +10934,7 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9231,7 +10943,7 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "dependencies": { "pinkie": "^2.0.0" @@ -9240,6 +10952,70 @@ "node": ">=0.10.0" } }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -9275,22 +11051,34 @@ "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { - "printj": "bin/printj.njs" + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=0.8" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process-nextick-args": { @@ -9311,7 +11099,7 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "node_modules/promise-retry": { @@ -9330,9 +11118,89 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "node_modules/proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.1.tgz", + "integrity": "sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^6.0.3", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -9342,7 +11210,7 @@ "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true }, "node_modules/psl": { @@ -9370,6 +11238,21 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.6.0.tgz", + "integrity": "sha512-D/kkEIpDFRqpLOcCoNNdXI+IUcoD1FmdlWteT4FFPOhNLC46urmItMfQDKSwk2NJoO38ncgCQe5XEQ3QHD+piA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "1.4.1", + "cosmiconfig": "8.2.0", + "puppeteer-core": "20.6.0" + }, + "engines": { + "node": ">=16.3.0" + } + }, "node_modules/puppeteer-core": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz", @@ -9393,99 +11276,91 @@ "node": ">=10.18.1" } }, - "node_modules/puppeteer-core/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 6.0.0" } }, - "node_modules/puppeteer-core/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "agent-base": "5", + "debug": "4" }, "engines": { - "node": ">=8" + "node": ">= 6.0.0" } }, - "node_modules/puppeteer-core/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/puppeteer-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/puppeteer-core/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/puppeteer-core/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/puppeteer/node_modules/devtools-protocol": { + "version": "0.0.1135028", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1135028.tgz", + "integrity": "sha512-jEcNGrh6lOXNRJvZb9RjeevtZGrgugPKSMJZxfyxWQnhlKawMPhMtk/dfC+Z/6xNXExlzTKlY5LzIAK/fRpQIw==", + "dev": true }, - "node_modules/puppeteer-core/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/puppeteer/node_modules/puppeteer-core": { + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.6.0.tgz", + "integrity": "sha512-vUE6VnqvOHX1ABssTxtzTJUzEJrTL49DmXflSvlRIcolzOISVni1niI5/oWsDxzyRVE9sfwe8QqFbsWozs5RPA==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "@puppeteer/browsers": "1.4.1", + "chromium-bidi": "0.4.11", + "cross-fetch": "3.1.6", + "debug": "4.3.4", + "devtools-protocol": "0.0.1135028", + "ws": "8.13.0" }, "engines": { - "node": ">=8" + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "node_modules/puppeteer/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -9506,9 +11381,9 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, "engines": { "node": ">=0.6" @@ -9537,6 +11412,26 @@ "inherits": "~2.0.3" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -9582,13 +11477,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -9596,17 +11491,78 @@ "node": ">= 0.8" } }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/readable-stream": { @@ -9625,12 +11581,33 @@ } }, "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/readdirp": { @@ -9652,9 +11629,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -9670,22 +11647,23 @@ "dev": true }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -9694,45 +11672,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -9744,7 +11704,7 @@ "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -9798,13 +11758,17 @@ "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9826,18 +11790,21 @@ } }, "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/resq": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", - "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", "dev": true, "dependencies": { "fast-deep-equal": "^2.0.1" @@ -9846,7 +11813,7 @@ "node_modules/resq/node_modules/fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", "dev": true }, "node_modules/restructure": { @@ -9861,12 +11828,22 @@ "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -9918,24 +11895,25 @@ "dev": true }, "node_modules/rollup": { - "version": "2.66.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.1.tgz", - "integrity": "sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-filesize": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-9.1.2.tgz", - "integrity": "sha512-m2fE9hFaKgWKisJzyWXctOFKlgMRelo/58HgeC0lXUK/qykxiqkr6bsrotlvo2bvrwPsjgT7scNdQSr6qtl37A==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-10.0.0.tgz", + "integrity": "sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.8", @@ -9944,27 +11922,34 @@ "colors": "1.4.0", "filesize": "^6.1.0", "gzip-size": "^6.0.0", - "pacote": "^11.2.7", + "pacote": "^15.1.1", "terser": "^5.6.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=16.0.0" } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" + "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -9973,6 +11958,21 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10081,7 +12081,7 @@ "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, "node_modules/semver-regex": { @@ -10096,7 +12096,7 @@ "node_modules/semver-truncate": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==", "dev": true, "dependencies": { "semver": "^5.3.0" @@ -10153,9 +12153,9 @@ } }, "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -10164,13 +12164,13 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/shallow-copy": { @@ -10215,11 +12215,81 @@ } }, "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -10230,6 +12300,12 @@ "npm": ">= 3.0.0" } }, + "node_modules/smob": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", + "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", + "dev": true + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -10241,36 +12317,38 @@ } }, "node_modules/socket.io": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.3.1.tgz", - "integrity": "sha512-HC5w5Olv2XZ0XJ4gOLGzzHEuOCfj3G0SmoW3jLHYYh34EVsIr3EkW9h6kgfW+K3TFEcmYy8JcPWe//KUkBp5jA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", + "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.0.0", - "socket.io-adapter": "~2.3.2", - "socket.io-parser": "~4.0.4" + "engine.io": "~6.4.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", - "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } }, "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" }, "engines": { @@ -10278,13 +12356,13 @@ } }, "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -10292,35 +12370,23 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", - "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, "dependencies": { "is-plain-obj": "^1.0.0" @@ -10332,7 +12398,7 @@ "node_modules/sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "dependencies": { "sort-keys": "^1.0.0" @@ -10376,6 +12442,38 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -10408,15 +12506,15 @@ } }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "minipass": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/static-eval": { @@ -10469,34 +12567,23 @@ } }, "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "deprecated": "2.x is no longer supported. Please upgrade to 3.x or higher.", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, "dependencies": { - "date-format": "^2.1.0", - "debug": "^4.1.1", + "date-format": "^4.0.14", + "debug": "^4.3.4", "fs-extra": "^8.1.0" }, "engines": { "node": ">=8.0" } }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "deprecated": "2.x is no longer supported. Please upgrade to 4.x or higher.", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10525,27 +12612,64 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10563,11 +12687,25 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -10584,7 +12722,7 @@ "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10626,14 +12764,26 @@ "node": ">=4" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svgdom": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/svgdom/-/svgdom-0.1.10.tgz", - "integrity": "sha512-MMx2owmn+V8xYc+29MWVEsKZi7ZGxvnV4U/QNyX+miSH4F+veOL7gFO86kKawIfx1K+CogSK9ZAtod7dsf8LSA==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/svgdom/-/svgdom-0.1.14.tgz", + "integrity": "sha512-RsaFHupZ92NLkpuszq2t04XUI6biqh/Q+R7ntpC0FteTs6zK1lP7jHk++p2N9IBfpi5iU4J/tkKTjIzDmKdOZw==", "dev": true, "dependencies": { "fontkit": "^1.8.1", - "image-size": "^1.0.0", + "image-size": "^1.0.2", "sax": "^1.2.4" }, "funding": { @@ -10642,20 +12792,20 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar-fs": { @@ -10682,9 +12832,9 @@ } }, "node_modules/tar-fs/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -10738,6 +12888,30 @@ "node": ">=10" } }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -10751,13 +12925,14 @@ } }, "node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", "dev": true, "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "bin": { @@ -10767,13 +12942,16 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/terser/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, "node_modules/text-table": { @@ -10801,7 +12979,7 @@ "node_modules/timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10853,9 +13031,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { "node": ">=0.6" @@ -10877,13 +13055,13 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" @@ -10893,22 +13071,24 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, + "peer": true, "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -10917,11 +13097,77 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", "dev": true }, + "node_modules/tuf-js": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.6.tgz", + "integrity": "sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -10992,6 +13238,21 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -10999,22 +13260,22 @@ "dev": true }, "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", "dev": true, "funding": [ { @@ -11031,14 +13292,15 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -11078,9 +13340,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, "engines": { "node": ">=4" @@ -11107,9 +13369,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "engines": { "node": ">=4" @@ -11138,21 +13400,27 @@ } }, "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/universalify": { @@ -11173,6 +13441,36 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/upper-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", @@ -11209,7 +13507,7 @@ "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { "prepend-http": "^2.0.0" @@ -11221,7 +13519,7 @@ "node_modules/url-to-options": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true, "engines": { "node": ">= 4" @@ -11252,25 +13550,32 @@ "uuid": "bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "engines": { "node": ">= 0.8" @@ -11290,6 +13595,43 @@ "extsprintf": "^1.2.0" } }, + "node_modules/vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/vm2/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vm2/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -11404,7 +13746,7 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/whatwg-encoding": { @@ -11434,7 +13776,7 @@ "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", @@ -11461,6 +13803,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "peer": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -11472,6 +13815,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -11519,6 +13883,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11559,9 +13974,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -11604,18 +14019,18 @@ "dev": true }, "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -11630,10 +14045,24 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { "node": ">=12" @@ -11642,13 +14071,25 @@ "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zip-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", @@ -11664,9 +14105,9 @@ } }, "node_modules/zip-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", diff --git a/package.json b/package.json index f6945f2..53ecb64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "@svgdotjs/svg.js", "version": "3.2.0", + "type": "module", "description": "A lightweight library for manipulating and animating SVG.", "url": "https://svgjs.dev/", "homepage": "https://svgjs.dev/", @@ -61,57 +62,55 @@ }, "typings": "./svg.js.d.ts", "scripts": { - "build": "npm run fix && npm run rollup", + "build": "npm run format && npm run rollup", "build:polyfills": "npx rollup -c .config/rollup.polyfills.js", "build:tests": "npx rollup -c .config/rollup.tests.js", "fix": "npx eslint ./src --fix", "lint": "npx eslint ./src", + "prettier": "npx prettier --write .", + "format": "npm run fix && npm run prettier", "rollup": "npx rollup -c .config/rollup.config.js", "server": "npx http-server ./ -d", - "test": "npx karma start .config/karma.conf.js || true", - "test:ci": "karma start .config/karma.conf.saucelabs.js", - "test:svgdom": "node -r esm ./spec/runSVGDomTest.js || true", + "test": "npx karma start .config/karma.conf.cjs || true", + "test:ci": "karma start .config/karma.conf.saucelabs.cjs", + "test:svgdom": "node ./spec/runSVGDomTest.js || true", "zip": "zip -j dist/svg.js.zip -- LICENSE.txt README.md CHANGELOG.md dist/svg.js dist/svg.js.map dist/svg.min.js dist/svg.min.js.map dist/polyfills.js dist/polyfillsIE.js", "prepublishOnly": "rm -rf ./dist && npm run build && npm run build:polyfills && npm test", "postpublish": "npm run zip", "checkTests": "node spec/checkForAllTests.js" }, "devDependencies": { - "@babel/core": "^7.16.12", - "@babel/plugin-transform-runtime": "^7.16.10", - "@babel/preset-env": "^7.16.11", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-multi-entry": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.1.3", + "@babel/core": "^7.22.5", + "@babel/eslint-parser": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^25.0.1", + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-terser": "^0.4.3", "@target/custom-event-polyfill": "github:Adobe-Marketing-Cloud/custom-event-polyfill", - "babel-eslint": "^10.1.0", - "core-js": "^3.20.3", + "@types/jasmine": "^4.3.2", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "core-js": "^3.31.0", "coveralls": "^3.1.1", - "eslint": "^8.7.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-sort-class-members": "^1.14.1", - "eslint-plugin-standard": "^5.0.0", - "esm": "^3.2.25", - "http-server": "^14.1.0", - "jasmine": "^4.0.2", - "jasmine-core": "^4.0.0", - "karma": "^6.3.12", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.1.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard": "^17.1.0", + "http-server": "^14.1.1", + "jasmine": "^5.0.1", + "jasmine-core": "^5.0.1", + "karma": "^6.4.2", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "^2.2.0", "karma-firefox-launcher": "^2.1.2", - "karma-jasmine": "^4.0.1", + "karma-jasmine": "^5.1.0", "karma-sauce-launcher": "^4.3.6", - "rollup": "^2.66.1", - "rollup-plugin-filesize": "^9.1.2", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.5.5", - "yargs": "^17.3.1", - "svgdom": "^0.1.10", - "babel-plugin-polyfill-corejs3": "^0.5.1" + "prettier": "^2.8.8", + "rollup": "^3.25.1", + "rollup-plugin-filesize": "^10.0.0", + "svgdom": "^0.1.14", + "typescript": "^5.1.3", + "yargs": "^17.7.2" }, - "browserslist": "last 2 version and > 0.25% and not op_mini all and not ie 11" + "browserslist": ">0.3%, last 2 version, not dead, not op_mini all" } diff --git a/playgrounds/colors/index.html b/playgrounds/colors/index.html index cb0b688..017abba 100644 --- a/playgrounds/colors/index.html +++ b/playgrounds/colors/index.html @@ -1,26 +1,19 @@ - <!DOCTYPE html> <html> - <head> - <meta charset="utf-8"> + <meta charset="utf-8" /> <title>SVG Playground</title> - <link type="text/css" rel="stylesheet" href="style.css"> + <link type="text/css" rel="stylesheet" href="style.css" /> </head> <body> - <h1>Color Playground</h1> - <p> - Lets test the different types of random colors we can make - </p> + <p>Lets test the different types of random colors we can make</p> <svg viewBox="0 0 1500 1500" id="canvas"></svg> - </body> <script src="../../dist/svg.js" charset="utf-8"></script> <script src="main.js" charset="utf-8"></script> - </html> diff --git a/playgrounds/colors/main.js b/playgrounds/colors/main.js index d81bb47..01be83e 100644 --- a/playgrounds/colors/main.js +++ b/playgrounds/colors/main.js @@ -1,29 +1,26 @@ - - -let canvas = SVG('#canvas').group() - .translate( -150, 230 ) +let canvas = SVG('#canvas').group().translate(-150, 230) // Make a bunch of rectangles -function rectangles ( method='Vibrant') { - +function rectangles(method = 'Vibrant') { // Make a group let group = canvas.group() - group.text(method).attr('font-size', 50).move( -230, 20 ) + group.text(method).attr('font-size', 50).move(-230, 20) // Add the squares - for ( let i = 0; i < 20; i++ ) { - let color = SVG.Color.random( method.toLowerCase() ).toHex() - let rect = group.rect(100, 100) - .x( 20 + 100 * i ) - .fill( color ) + for (let i = 0; i < 20; i++) { + let color = SVG.Color.random(method.toLowerCase()).toHex() + let rect = group + .rect(100, 100) + .x(20 + 100 * i) + .fill(color) } return group } -rectangles( 'Vibrant' ).translate( 0, 100 ) -rectangles( 'Sine' ).translate( 0, 220 ) -rectangles( 'Pastel' ).translate( 0, 340 ) -rectangles( 'Dark' ).translate( 0, 460 ) -rectangles( 'RGB' ).translate( 0, 580 ) -rectangles( 'LAB' ).translate( 0, 700 ) -rectangles( 'Grey' ).translate( 0, 820 ) +rectangles('Vibrant').translate(0, 100) +rectangles('Sine').translate(0, 220) +rectangles('Pastel').translate(0, 340) +rectangles('Dark').translate(0, 460) +rectangles('RGB').translate(0, 580) +rectangles('LAB').translate(0, 700) +rectangles('Grey').translate(0, 820) diff --git a/playgrounds/colors/style.css b/playgrounds/colors/style.css index f327905..24a9d4e 100644 --- a/playgrounds/colors/style.css +++ b/playgrounds/colors/style.css @@ -1,10 +1,9 @@ - * { box-sizing: border-box; } html { - background-color : #fefefe; + background-color: #fefefe; } body { @@ -50,7 +49,7 @@ svg { } .pink { - fill: #FF0066; + fill: #ff0066; } .green { @@ -62,9 +61,9 @@ svg { } .light-pink { - fill: #FF99C2; + fill: #ff99c2; } .off-white { - fill: #FFCCE0; + fill: #ffcce0; } diff --git a/playgrounds/matrix/drag.js b/playgrounds/matrix/drag.js index 7609404..8f294ed 100644 --- a/playgrounds/matrix/drag.js +++ b/playgrounds/matrix/drag.js @@ -1,8 +1,6 @@ function reactToDrag(element, onDrag, beforeDrag) { - let xStart, yStart - let startDrag = event => { - + let startDrag = (event) => { // Avoid the default events event.preventDefault() @@ -21,15 +19,13 @@ function reactToDrag(element, onDrag, beforeDrag) { SVG.on(window, ['mouseup.drag', 'touchend.drag'], stopDrag) } - let reactDrag = event => { - + let reactDrag = (event) => { // Convert screen coordinates to svg coordinates and use them var { x, y } = parent.point(event.pageX, event.pageY) - if (onDrag) - onDrag(event, x, y) + if (onDrag) onDrag(event, x, y) } - let stopDrag = event => { + let stopDrag = (event) => { SVG.off(window, ['mousemove.drag', 'touchmove.drag']) SVG.off(window, ['mouseup.drag', 'touchend.drag']) } @@ -42,27 +38,27 @@ function reactToDrag(element, onDrag, beforeDrag) { SVG.extend(SVG.Element, { draggable: function (after) { - let sx, sy - reactToDrag(this, (e, x, y) => { - - this.transform({ - origin: [sx, sy], - position: [x, y], - }) - - if (after) { - after(this, x, y) + reactToDrag( + this, + (e, x, y) => { + this.transform({ + origin: [sx, sy], + position: [x, y] + }) + + if (after) { + after(this, x, y) + } + }, + (e, x, y) => { + var toAbsolute = new SVG.Matrix(this).inverse() + var p = new SVG.Point(x, y).transform(toAbsolute) + sx = p.x + sy = p.y } - - }, (e, x, y) => { - - var toAbsolute = new SVG.Matrix(this).inverse() - var p = new SVG.Point(x, y).transform(toAbsolute) - sx = p.x - sy = p.y - }) + ) return this - }, + } }) diff --git a/playgrounds/matrix/index.html b/playgrounds/matrix/index.html index e815ed5..9da4c20 100644 --- a/playgrounds/matrix/index.html +++ b/playgrounds/matrix/index.html @@ -1,15 +1,12 @@ - <!DOCTYPE html> <html> - <head> - <meta charset="utf-8"> + <meta charset="utf-8" /> <title>SVG Playground</title> - <link rel="stylesheet" href="style.css"> + <link rel="stylesheet" href="style.css" /> </head> <body> - <h1>SVG Transformations</h1> <p> @@ -18,30 +15,26 @@ </p> <svg viewBox="-200 -200 400 400"> - <g id="tester"> - <rect class="green" width=50 height=50 /> - <line x2=50 stroke=black stroke-width=1 /> + <rect class="green" width="50" height="50" /> + <line x2="50" stroke="black" stroke-width="1" /> </g> <g id="guess"> - <rect class="dark-pink" width=50 height=50 opacity=0.5 /> - <line x2=50 stroke=black stroke-width=1 /> + <rect class="dark-pink" width="50" height="50" opacity="0.5" /> + <line x2="50" stroke="black" stroke-width="1" /> </g> <g id="true"> - <rect class="pink" width=50 height=50 opacity=0.5 /> - <line x2=50 stroke=black stroke-width=1 /> + <rect class="pink" width="50" height="50" opacity="0.5" /> + <line x2="50" stroke="black" stroke-width="1" /> </g> - <ellipse id="or" class="dark-pink" rx=5 ry=5 /> - <ellipse id="b1" class="pink" cx="50" rx=5 ry=5 /> - <ellipse id="b2" class="green" cy="50" rx=5 ry=5 /> - + <ellipse id="or" class="dark-pink" rx="5" ry="5" /> + <ellipse id="b1" class="pink" cx="50" rx="5" ry="5" /> + <ellipse id="b2" class="green" cy="50" rx="5" ry="5" /> </svg> - </body> <script src="../../dist/svg.js" charset="utf-8"></script> <script src="drag.js" charset="utf-8"></script> <script src="matrix.js" charset="utf-8"></script> - </html> diff --git a/playgrounds/matrix/matrix.js b/playgrounds/matrix/matrix.js index 33e21d1..fb74717 100644 --- a/playgrounds/matrix/matrix.js +++ b/playgrounds/matrix/matrix.js @@ -1,6 +1,5 @@ - -function print (mat) { - let {a, b, c, d} = mat +function print(mat) { + let { a, b, c, d } = mat console.log(` a: ${a.toFixed(2)} b: ${b.toFixed(2)} @@ -9,14 +8,19 @@ function print (mat) { `) } -function moveit () { - - let {cx: x0, cy: y0} = or.rbox(svg) - let {cx: x1, cy: y1} = b1.rbox(svg) - let {cx: x2, cy: y2} = b2.rbox(svg) +function moveit() { + let { cx: x0, cy: y0 } = or.rbox(svg) + let { cx: x1, cy: y1 } = b1.rbox(svg) + let { cx: x2, cy: y2 } = b2.rbox(svg) let m = new SVG.Matrix( - (x1 - x0) / 50, (y1 - y0) / 50, (x2 - x0) / 50, (y2 - y0) / 50, x0, y0) + (x1 - x0) / 50, + (y1 - y0) / 50, + (x2 - x0) / 50, + (y2 - y0) / 50, + x0, + y0 + ) let com = m.decompose() let g = new SVG.Matrix().compose(com) @@ -24,18 +28,18 @@ function moveit () { target.transform(m) mover.transform(g) - console.log(com); + console.log(com) print(m) print(g) } // Declare the two points let svg = SVG('svg') -var or = SVG("#or").draggable(moveit) -var b1 = SVG("#b1").draggable(moveit) -var b2 = SVG("#b2").draggable(moveit) +var or = SVG('#or').draggable(moveit) +var b1 = SVG('#b1').draggable(moveit) +var b2 = SVG('#b2').draggable(moveit) // Declare the squares -let target = SVG("#true") -let mover = SVG("#guess") -let tester = SVG("#tester") +let target = SVG('#true') +let mover = SVG('#guess') +let tester = SVG('#tester') diff --git a/playgrounds/matrix/style.css b/playgrounds/matrix/style.css index f327905..24a9d4e 100644 --- a/playgrounds/matrix/style.css +++ b/playgrounds/matrix/style.css @@ -1,10 +1,9 @@ - * { box-sizing: border-box; } html { - background-color : #fefefe; + background-color: #fefefe; } body { @@ -50,7 +49,7 @@ svg { } .pink { - fill: #FF0066; + fill: #ff0066; } .green { @@ -62,9 +61,9 @@ svg { } .light-pink { - fill: #FF99C2; + fill: #ff99c2; } .off-white { - fill: #FFCCE0; + fill: #ffcce0; } diff --git a/playgrounds/transforms/index.html b/playgrounds/transforms/index.html index 8e1f804..77ef1bc 100644 --- a/playgrounds/transforms/index.html +++ b/playgrounds/transforms/index.html @@ -1,15 +1,12 @@ - <!DOCTYPE html> <html> - <head> - <meta charset="utf-8"> + <meta charset="utf-8" /> <title>SVG Playground</title> - <link rel="stylesheet" href="style.css"> + <link rel="stylesheet" href="style.css" /> </head> <body> - <h1>Transformations</h1> <p> @@ -18,10 +15,8 @@ </p> <svg viewBox="0 0 1500 1500" id="canvas"></svg> - </body> <script src="../../dist/svg.js" charset="utf-8"></script> <script src="transforms.js" charset="utf-8"></script> - </html> diff --git a/playgrounds/transforms/style.css b/playgrounds/transforms/style.css index f327905..24a9d4e 100644 --- a/playgrounds/transforms/style.css +++ b/playgrounds/transforms/style.css @@ -1,10 +1,9 @@ - * { box-sizing: border-box; } html { - background-color : #fefefe; + background-color: #fefefe; } body { @@ -50,7 +49,7 @@ svg { } .pink { - fill: #FF0066; + fill: #ff0066; } .green { @@ -62,9 +61,9 @@ svg { } .light-pink { - fill: #FF99C2; + fill: #ff99c2; } .off-white { - fill: #FFCCE0; + fill: #ffcce0; } diff --git a/playgrounds/transforms/transforms.js b/playgrounds/transforms/transforms.js index e9c0376..d750797 100644 --- a/playgrounds/transforms/transforms.js +++ b/playgrounds/transforms/transforms.js @@ -1,22 +1,21 @@ - - let canvas = SVG('#canvas') // Make the green rectangle -canvas.rect(200, 400).move(200, 400) - .attr('opacity', 0.3) - .addClass('green') +canvas.rect(200, 400).move(200, 400).attr('opacity', 0.3).addClass('green') // Make the pink rectangle -let a = canvas.rect(200, 400).move(200, 400) +let a = canvas + .rect(200, 400) + .move(200, 400) .attr('opacity', 0.3) .addClass('pink') .transform({ px: 100, py: 500, origin: 'top-left' }) - a.animate() - .rotate({ rotate: 500, origin: 'top-right' }) +a.animate().rotate({ rotate: 500, origin: 'top-right' }) // Put an ellipse where we expect the object to be -canvas.ellipse(30, 30).center(100, 500) +canvas + .ellipse(30, 30) + .center(100, 500) .attr('opacity', 0.3) .addClass('dark-pink') diff --git a/playgrounds/webpack.config.js b/playgrounds/webpack.config.js index 87a304a..c0e7233 100644 --- a/playgrounds/webpack.config.js +++ b/playgrounds/webpack.config.js @@ -1,33 +1,28 @@ var path = require('path') module.exports = function (env) { - let currentTest = path.resolve(__dirname, env) return { - mode: 'development', devtool: 'eval-source-map', devServer: { - contentBase: [ currentTest, __dirname ], + contentBase: [currentTest, __dirname] }, devServer: { - contentBase: [currentTest, '..'], + contentBase: [currentTest, '..'] }, entry: { - app: path.resolve(currentTest, "main.js"), + app: path.resolve(currentTest, 'main.js') }, output: { path: currentTest, - filename: 'bundle.js', + filename: 'bundle.js' }, resolve: { - modules: [ - path.resolve(__dirname, "node_modules"), - "node_modules" - ] + modules: [path.resolve(__dirname, 'node_modules'), 'node_modules'] } } } diff --git a/spec/RAFPlugin.js b/spec/RAFPlugin.js index 770212c..c6b96e2 100644 --- a/spec/RAFPlugin.js +++ b/spec/RAFPlugin.js @@ -3,19 +3,18 @@ * Jasmine RequestAnimationFrame: a set of helpers for testing functionality * that uses requestAnimationFrame under the Jasmine BDD framework for JavaScript. */ -function RAFPlugin (jasmine) { - +function RAFPlugin(jasmine) { var index = 0 var callbacks = [] - function MockRAF () { + function MockRAF() { this.nextTime = 0 var _this = this /** - * Mock for window.requestAnimationFrame - */ + * Mock for window.requestAnimationFrame + */ this.mockRAF = function (fn) { if (typeof fn !== 'function') { throw new Error('You should pass a function to requestAnimationFrame') @@ -28,8 +27,8 @@ function RAFPlugin (jasmine) { } /** - * Mock for window.cancelAnimationFrame - */ + * Mock for window.cancelAnimationFrame + */ this.mockCAF = function (requestID) { callbacks.splice(requestID, 1) } @@ -41,8 +40,8 @@ function RAFPlugin (jasmine) { } /** - * Install request animation frame mocks. - */ + * Install request animation frame mocks. + */ this.install = function (global) { _this.realRAF = global.requestAnimationFrame _this.realCAF = global.cancelAnimationFrame @@ -53,8 +52,8 @@ function RAFPlugin (jasmine) { } /** - * Uninstall request animation frame mocks. - */ + * Uninstall request animation frame mocks. + */ this.uninstall = function (global) { global.requestAnimationFrame = _this.realRAF global.cancelAnimationFrame = _this.realCAF @@ -64,12 +63,14 @@ function RAFPlugin (jasmine) { } /** - * Simulate animation frame readiness. - */ + * Simulate animation frame readiness. + */ this.tick = function (dt) { - _this.nextTime += (dt || 1) + _this.nextTime += dt || 1 - var fns = callbacks; var fn; var i + var fns = callbacks + var fn + var i callbacks = [] index = 0 diff --git a/spec/SpecRunner.html b/spec/SpecRunner.html index 56a8885..bd7b59a 100644 --- a/spec/SpecRunner.html +++ b/spec/SpecRunner.html @@ -1,27 +1,31 @@ <!DOCTYPE html> <html> -<head> - <meta charset="utf-8"> - <title>SVG.js - Jasmine Spec Runner</title> - - <link rel="shortcut icon" type="image/png" href="../node_modules/jasmine-core/images/jasmine_favicon.png"> - <link rel="stylesheet" href="../node_modules/jasmine-core/lib/jasmine-core/jasmine.css"> - - <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> - <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script> - <script src="../node_modules/jasmine-core/lib/jasmine-core/boot.js"></script> - <script src="RAFPlugin.js"></script> - - <link rel="stylesheet" href="fixtures/fixture.css"> - -</head> - -<body> - - - <!-- include spec files here... --> - - <script src="../dist/polyfillsIE.js"></script> - <script src="es5TestBundle.js"></script> -</body> + <head> + <meta charset="utf-8" /> + <title>SVG.js - Jasmine Spec Runner</title> + + <link + rel="shortcut icon" + type="image/png" + href="../node_modules/jasmine-core/images/jasmine_favicon.png" + /> + <link + rel="stylesheet" + href="../node_modules/jasmine-core/lib/jasmine-core/jasmine.css" + /> + + <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> + <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script> + <script src="../node_modules/jasmine-core/lib/jasmine-core/boot.js"></script> + <script src="RAFPlugin.js"></script> + + <link rel="stylesheet" href="fixtures/fixture.css" /> + </head> + + <body> + <!-- include spec files here... --> + + <script src="../dist/polyfillsIE.js"></script> + <script src="es5TestBundle.js"></script> + </body> </html> diff --git a/spec/SpecRunnerEs6.html b/spec/SpecRunnerEs6.html index eb6b17b..05156bd 100644 --- a/spec/SpecRunnerEs6.html +++ b/spec/SpecRunnerEs6.html @@ -1,45 +1,50 @@ <!DOCTYPE html> <html> -<head> - <meta charset="utf-8"> - <title>SVG.js - Jasmine Spec Runner</title> + <head> + <meta charset="utf-8" /> + <title>SVG.js - Jasmine Spec Runner</title> - <link rel="shortcut icon" type="image/png" href="../node_modules/jasmine-core/images/jasmine_favicon.png"> - <link rel="stylesheet" href="../node_modules/jasmine-core/lib/jasmine-core/jasmine.css"> + <link + rel="shortcut icon" + type="image/png" + href="../node_modules/jasmine-core/images/jasmine_favicon.png" + /> + <link + rel="stylesheet" + href="../node_modules/jasmine-core/lib/jasmine-core/jasmine.css" + /> - <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> - <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script> - <script src="../node_modules/jasmine-core/lib/jasmine-core/boot.js"></script> - <script src="RAFPlugin.js"></script> + <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> + <script src="../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script> + <script src="../node_modules/jasmine-core/lib/jasmine-core/boot.js"></script> + <script src="RAFPlugin.js"></script> - <link rel="stylesheet" href="fixtures/fixture.css"> + <link rel="stylesheet" href="fixtures/fixture.css" /> + </head> -</head> - -<body> - - <!-- include spec files here... --> - <script type="module" src="setupBrowser.js"></script> - <script type="module" src="spec/elements/A.js"></script> - <script type="module" src="spec/elements/Circle.js"></script> - <script type="module" src="spec/elements/ClipPath.js"></script> - <script type="module" src="spec/elements/Container.js"></script> - <script type="module" src="spec/elements/Dom.js"></script> - <script type="module" src="spec/elements/Element.js"></script> - <script type="module" src="spec/elements/ForeignObject.js"></script> - <script type="module" src="spec/elements/G.js"></script> - <script type="module" src="spec/elements/Image.js"></script> - <script type="module" src="spec/elements/Marker.js"></script> - <script type="module" src="spec/elements/Svg.js"></script> - <script type="module" src="spec/elements/Text.js"></script> - <script type="module" src="spec/elements/TextPath.js"></script> - <script type="module" src="spec/elements/Tspan.js"></script> - <script type="module" src="spec/modules/core/event.js"></script> - <script type="module" src="spec/modules/core/textable.js"></script> - <script type="module" src="spec/types/ArrayPolyfill.js"></script> - <script type="module" src="spec/types/Base.js"></script> - <script type="module" src="spec/types/Box.js"></script> - <script type="module" src="spec/utils/adopter.js"></script> - <script type="module" src="spec/utils/utils.js"></script> -</body> + <body> + <!-- include spec files here... --> + <script type="module" src="setupBrowser.js"></script> + <script type="module" src="spec/elements/A.js"></script> + <script type="module" src="spec/elements/Circle.js"></script> + <script type="module" src="spec/elements/ClipPath.js"></script> + <script type="module" src="spec/elements/Container.js"></script> + <script type="module" src="spec/elements/Dom.js"></script> + <script type="module" src="spec/elements/Element.js"></script> + <script type="module" src="spec/elements/ForeignObject.js"></script> + <script type="module" src="spec/elements/G.js"></script> + <script type="module" src="spec/elements/Image.js"></script> + <script type="module" src="spec/elements/Marker.js"></script> + <script type="module" src="spec/elements/Svg.js"></script> + <script type="module" src="spec/elements/Text.js"></script> + <script type="module" src="spec/elements/TextPath.js"></script> + <script type="module" src="spec/elements/Tspan.js"></script> + <script type="module" src="spec/modules/core/event.js"></script> + <script type="module" src="spec/modules/core/textable.js"></script> + <script type="module" src="spec/types/ArrayPolyfill.js"></script> + <script type="module" src="spec/types/Base.js"></script> + <script type="module" src="spec/types/Box.js"></script> + <script type="module" src="spec/utils/adopter.js"></script> + <script type="module" src="spec/utils/utils.js"></script> + </body> </html> diff --git a/spec/checkForAllTests.js b/spec/checkForAllTests.js index 99c648e..d25a6a4 100644 --- a/spec/checkForAllTests.js +++ b/spec/checkForAllTests.js @@ -2,7 +2,6 @@ const glob = require('glob') const path = require('path') glob('./spec/*/**/*.js', (err, tests) => { - if (err) { throw err } @@ -14,10 +13,13 @@ glob('./spec/*/**/*.js', (err, tests) => { files = files.map((e) => path.basename(e)) tests = tests.map((e) => path.basename(e)) - const difference = files.filter(x => !tests.includes(x)) + const difference = files.filter((x) => !tests.includes(x)) if (difference.length) { - console.error('The following files dont have a test file:\n\t' + difference.join('\n\t')) + console.error( + 'The following files dont have a test file:\n\t' + + difference.join('\n\t') + ) } else { console.info('All src files are covered by tests') } diff --git a/spec/fixtures/fixture.css b/spec/fixtures/fixture.css index 4fad17b..85d4345 100644 --- a/spec/fixtures/fixture.css +++ b/spec/fixtures/fixture.css @@ -1,6 +1,6 @@ #drawing { - width: 500px; - height: 500px; - position: fixed; - z-index: -1; + width: 500px; + height: 500px; + position: fixed; + z-index: -1; } diff --git a/spec/helpers.js b/spec/helpers.js index 7d63dfa..b5b29c3 100644 --- a/spec/helpers.js +++ b/spec/helpers.js @@ -1,7 +1,7 @@ import { getWindow } from '../src/utils/window.js' import { svg } from '../src/modules/core/namespaces.js' -function tag (name, attrs, children) { +function tag(name, attrs, children) { const doc = getWindow().document const el = doc.createElementNS(svg, name) let i @@ -11,7 +11,9 @@ function tag (name, attrs, children) { } for (i in children) { - if (typeof children[i] === 'string') { children[i] = doc.createTextNode(children[i]) } + if (typeof children[i] === 'string') { + children[i] = doc.createTextNode(children[i]) + } el.appendChild(children[i]) } @@ -19,104 +21,128 @@ function tag (name, attrs, children) { return el } -export function fixtures () { - return tag('svg', { - height: 0, - width: 0, - id: 'inlineSVG' - }, [ - tag('defs', {}, [ - tag('linearGradient', {}, [ - tag('stop', { offset: '5%', 'stop-color': 'green' }), - tag('stop', { offset: '95%', 'stop-color': 'gold' }) +export function fixtures() { + return tag( + 'svg', + { + height: 0, + width: 0, + id: 'inlineSVG' + }, + [ + tag('defs', {}, [ + tag('linearGradient', {}, [ + tag('stop', { offset: '5%', 'stop-color': 'green' }), + tag('stop', { offset: '95%', 'stop-color': 'gold' }) + ]), + tag('radialGradient', {}, [ + tag('stop', { offset: '5%', 'stop-color': 'green' }), + tag('stop', { offset: '95%', 'stop-color': 'gold' }) + ]) ]), - tag('radialGradient', {}, [ - tag('stop', { offset: '5%', 'stop-color': 'green' }), - tag('stop', { offset: '95%', 'stop-color': 'gold' }) - ]) - ]), - tag('desc', {}, [ 'Some description' ]), - tag('path', { - id: 'lineAB', - d: 'M 100 350 l 150 -300', - stroke: 'red', - 'stroke-width': '3', - fill: 'none' - }), - tag('path', { - id: 'lineBC', - d: 'M 250 50 l 150 300', - stroke: 'red', - 'stroke-width': '3', - fill: 'none' - }), - tag('path', { - d: 'M 175 200 l 150 0', - stroke: 'green', - 'stroke-width': '3', - fill: 'none' - }), - tag('path', { - d: 'M 100 350 q 150 -300 300 0', - stroke: 'blue', - 'stroke-width': '5', - fill: 'none' - }), - tag('g', { - stroke: 'black', - 'stroke-width': '2', - fill: 'black', - id: 'pointGroup' - }, [ - tag('circle', { - id: 'pointA', - cx: '100', - cy: '350', - r: '3' + tag('desc', {}, ['Some description']), + tag('path', { + id: 'lineAB', + d: 'M 100 350 l 150 -300', + stroke: 'red', + 'stroke-width': '3', + fill: 'none' }), - tag('circle', { - id: 'pointB', - cx: '250', - cy: '50', - r: '50' + tag('path', { + id: 'lineBC', + d: 'M 250 50 l 150 300', + stroke: 'red', + 'stroke-width': '3', + fill: 'none' }), - tag('circle', { - id: 'pointC', - cx: '400', - cy: '350', - r: '50' - }) - ]), - tag('g', { - 'font-size': '30', - font: 'sans-serif', - fill: 'black', - stroke: 'none', - 'text-anchor': 'middle', - id: 'labelGroup' - }, [ - tag('text', { - x: '100', - y: '350', - dy: '-30' - }, [ 'A' ]), - tag('text', { - x: '250', - y: '50', - dy: '-10' - }, [ 'B' ]), - tag('text', { - x: '400', - y: '350', - dx: '30' - }, [ 'C' ]) - ]), - tag('polygon', { points: '200,10 250,190 160,210' }), - tag('polyline', { points: '20,20 40,25 60,40 80,120 120,140 200,180' }) - ]) + tag('path', { + d: 'M 175 200 l 150 0', + stroke: 'green', + 'stroke-width': '3', + fill: 'none' + }), + tag('path', { + d: 'M 100 350 q 150 -300 300 0', + stroke: 'blue', + 'stroke-width': '5', + fill: 'none' + }), + tag( + 'g', + { + stroke: 'black', + 'stroke-width': '2', + fill: 'black', + id: 'pointGroup' + }, + [ + tag('circle', { + id: 'pointA', + cx: '100', + cy: '350', + r: '3' + }), + tag('circle', { + id: 'pointB', + cx: '250', + cy: '50', + r: '50' + }), + tag('circle', { + id: 'pointC', + cx: '400', + cy: '350', + r: '50' + }) + ] + ), + tag( + 'g', + { + 'font-size': '30', + font: 'sans-serif', + fill: 'black', + stroke: 'none', + 'text-anchor': 'middle', + id: 'labelGroup' + }, + [ + tag( + 'text', + { + x: '100', + y: '350', + dy: '-30' + }, + ['A'] + ), + tag( + 'text', + { + x: '250', + y: '50', + dy: '-10' + }, + ['B'] + ), + tag( + 'text', + { + x: '400', + y: '350', + dx: '30' + }, + ['C'] + ) + ] + ), + tag('polygon', { points: '200,10 250,190 160,210' }), + tag('polyline', { points: '20,20 40,25 60,40 80,120 120,140 200,180' }) + ] + ) } -export function buildFixtures () { +export function buildFixtures() { const doc = getWindow().document const body = doc.body || doc.documentElement @@ -134,7 +160,7 @@ export function buildFixtures () { body.appendChild(div) } -export function buildCanvas () { +export function buildCanvas() { const doc = getWindow().document const body = doc.body || doc.documentElement @@ -150,7 +176,7 @@ export function buildCanvas () { body.appendChild(div) } -export function clear () { +export function clear() { const doc = getWindow().document const canvas = doc.getElementById('canvas') const fixtures = doc.getElementById('fixtures') @@ -158,6 +184,7 @@ export function clear () { // remove if present fixtures && fixtures.parentNode.removeChild(fixtures) canvas.parentNode.removeChild(canvas) - - ;[ ...doc.querySelectorAll('svg') ].forEach((el) => el.parentNode.removeChild(el)) + ;[...doc.querySelectorAll('svg')].forEach((el) => + el.parentNode.removeChild(el) + ) } diff --git a/spec/runSVGDomTest.js b/spec/runSVGDomTest.js index 3ce24cf..cada481 100644 --- a/spec/runSVGDomTest.js +++ b/spec/runSVGDomTest.js @@ -10,12 +10,8 @@ const jasmine = new Jasmine() jasmine.loadConfig({ spec_dir: '/', - spec_files: [ - 'spec/spec/*/**/*.js' - ], - helpers: [ - 'spec/setupSVGDom.js' - ] + spec_files: ['spec/spec/*/**/*.js'], + helpers: ['spec/setupSVGDom.js'] }) jasmine.execute() diff --git a/spec/setupSVGDom.js b/spec/setupSVGDom.js index 22bf565..be5b803 100644 --- a/spec/setupSVGDom.js +++ b/spec/setupSVGDom.js @@ -7,7 +7,7 @@ import { registerWindow } from '../src/main.js' jasmine.DEFAULT_TIMEOUT_INTERVAL = 200 -function setup () { +function setup() { const win = createHTMLWindow() registerWindow(win, win.document) buildCanvas() @@ -15,7 +15,7 @@ function setup () { global.container = win.document.getElementById('canvas') } -function teardown () { +function teardown() { clear() global.container = null registerWindow() diff --git a/spec/spec/animation/Animator.js b/spec/spec/animation/Animator.js index 043beaa..695dca7 100644 --- a/spec/spec/animation/Animator.js +++ b/spec/spec/animation/Animator.js @@ -4,7 +4,6 @@ import { Animator, Queue } from '../../../src/main.js' import { getWindow } from '../../../src/utils/window.js' describe('Animator.js', () => { - beforeEach(() => { jasmine.RequestAnimationFrame.install(getWindow()) Animator.timeouts = new Queue() @@ -19,7 +18,6 @@ describe('Animator.js', () => { describe('timeout()', () => { it('calls a function after a specific time', () => { - var spy = jasmine.createSpy('tester') Animator.timeout(spy, 100) diff --git a/spec/spec/animation/Controller.js b/spec/spec/animation/Controller.js index 8ad074d..b81678b 100644 --- a/spec/spec/animation/Controller.js +++ b/spec/spec/animation/Controller.js @@ -1,12 +1,17 @@ /* globals describe, expect, it, jasmine */ import { easing, defaults } from '../../../src/main.js' -import { Stepper, Ease, Controller, Spring, PID } from '../../../src/animation/Controller.js' +import { + Stepper, + Ease, + Controller, + Spring, + PID +} from '../../../src/animation/Controller.js' const { any, createSpy } = jasmine describe('Controller.js', () => { - describe('easing', () => { var easedValues = { '-': 0.5, @@ -15,7 +20,7 @@ describe('Controller.js', () => { '<': 0.2929 } - ;[ '-', '<>', '<', '>' ].forEach((el) => { + ;['-', '<>', '<', '>'].forEach((el) => { describe(el, () => { it('is 0 at 0', () => { expect(easing[el](0)).toBe(0) diff --git a/spec/spec/animation/Morphable.js b/spec/spec/animation/Morphable.js index 2fa58aa..d5d313a 100644 --- a/spec/spec/animation/Morphable.js +++ b/spec/spec/animation/Morphable.js @@ -1,6 +1,18 @@ /* globals describe, expect, it, jasmine */ -import { Morphable, NonMorphable, ObjectBag, Color, Box, Matrix, PointArray, PathArray, TransformBag, Number as SVGNumber, Array as SVGArray } from '../../../src/main.js' +import { + Morphable, + NonMorphable, + ObjectBag, + Color, + Box, + Matrix, + PointArray, + PathArray, + TransformBag, + Number as SVGNumber, + Array as SVGArray +} from '../../../src/main.js' import { Stepper, easing, Ease } from '../../../src/animation/Controller.js' const { objectContaining, arrayContaining, any } = jasmine @@ -20,7 +32,6 @@ describe('Morphable.js', () => { }) describe('constructors', () => { - it('Morphable with SVGNumber', () => { const morpher = new Morphable().from(10).to(5) @@ -46,16 +57,25 @@ describe('Morphable.js', () => { expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(ObjectBag) expect(morpher.at(0.5)).toEqual(any(Object)) - expect(morpher.at(0.5).valueOf()).toEqual(objectContaining({ a: new SVGNumber(7.5), b: new SVGNumber(15) })) + expect(morpher.at(0.5).valueOf()).toEqual( + objectContaining({ a: new SVGNumber(7.5), b: new SVGNumber(15) }) + ) }) it('Morphable from object containing css values', () => { - const morpher = new Morphable().from({ opacity: '0', 'stroke-width': '10px' }).to({ opacity: 1, 'stroke-width': 20 }) + const morpher = new Morphable() + .from({ opacity: '0', 'stroke-width': '10px' }) + .to({ opacity: 1, 'stroke-width': 20 }) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(ObjectBag) expect(morpher.at(0.5)).toEqual(any(Object)) - expect(morpher.at(0.5).valueOf()).toEqual(objectContaining({ opacity: new SVGNumber(0.5), 'stroke-width': new SVGNumber('15px') })) + expect(morpher.at(0.5).valueOf()).toEqual( + objectContaining({ + opacity: new SVGNumber(0.5), + 'stroke-width': new SVGNumber('15px') + }) + ) }) it('Creates a morphable out of an SVGNumber', () => { @@ -77,48 +97,68 @@ describe('Morphable.js', () => { }) it('Creates a morphable out of an Box', () => { - const morpher = new Box(1, 2, 3, 4).to([ 5, 6, 7, 8 ]) + const morpher = new Box(1, 2, 3, 4).to([5, 6, 7, 8]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(Box) expect(morpher.at(0.5)).toEqual(any(Box)) - expect(morpher.at(0.5)).toEqual(objectContaining({ x: 3, y: 4, width: 5, height: 6 })) + expect(morpher.at(0.5)).toEqual( + objectContaining({ x: 3, y: 4, width: 5, height: 6 }) + ) }) it('Creates a morphable out of an Matrix', () => { - const morpher = new Matrix(1, 2, 3, 4, 5, 6).to([ 3, 4, 5, 6, 7, 8 ]) + const morpher = new Matrix(1, 2, 3, 4, 5, 6).to([3, 4, 5, 6, 7, 8]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(Matrix) expect(morpher.at(0.5)).toEqual(any(Matrix)) - expect(morpher.at(0.5)).toEqual(objectContaining(new Matrix(2, 3, 4, 5, 6, 7))) + expect(morpher.at(0.5)).toEqual( + objectContaining(new Matrix(2, 3, 4, 5, 6, 7)) + ) }) it('Creates a morphable out of an SVGArray', () => { - const morpher = new SVGArray([ 1, 2, 3, 4, 5, 6 ]).to([ 3, 4, 5, 6, 7, 8 ]) + const morpher = new SVGArray([1, 2, 3, 4, 5, 6]).to([3, 4, 5, 6, 7, 8]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(SVGArray) expect(morpher.at(0.5)).toEqual(any(SVGArray)) - expect(morpher.at(0.5).toArray()).toEqual(arrayContaining([ 2, 3, 4, 5, 6, 7 ])) + expect(morpher.at(0.5).toArray()).toEqual( + arrayContaining([2, 3, 4, 5, 6, 7]) + ) }) it('Creates a morphable out of an PointArray', () => { - const morpher = new PointArray([ 1, 2, 3, 4, 5, 6 ]).to([ 3, 4, 5, 6, 7, 8 ]) + const morpher = new PointArray([1, 2, 3, 4, 5, 6]).to([3, 4, 5, 6, 7, 8]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(PointArray) expect(morpher.at(0.5)).toEqual(any(PointArray)) - expect(morpher.at(0.5).toArray()).toEqual(arrayContaining([ 2, 3, 4, 5, 6, 7 ])) + expect(morpher.at(0.5).toArray()).toEqual( + arrayContaining([2, 3, 4, 5, 6, 7]) + ) }) it('Creates a morphable out of an PathArray', () => { - const morpher = new PathArray([ 'M', 1, 2, 'L', 3, 4, 'L', 5, 6 ]).to([ 'M', 3, 4, 'L', 5, 6, 'L', 7, 8 ]) + const morpher = new PathArray(['M', 1, 2, 'L', 3, 4, 'L', 5, 6]).to([ + 'M', + 3, + 4, + 'L', + 5, + 6, + 'L', + 7, + 8 + ]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(PathArray) expect(morpher.at(0.5)).toEqual(any(PathArray)) - expect(morpher.at(0.5).toArray()).toEqual(arrayContaining([ 'M', 2, 3, 'L', 4, 5, 'L', 6, 7 ])) + expect(morpher.at(0.5).toArray()).toEqual( + arrayContaining(['M', 2, 3, 'L', 4, 5, 'L', 6, 7]) + ) }) it('creates a morphable from unmorphable types', () => { @@ -132,14 +172,18 @@ describe('Morphable.js', () => { }) it('Creates a morphable out of an TransformBag', () => { - const morpher = new TransformBag({ rotate: 0, translateX: 0 }) - .to({ rotate: 50, translateX: 20 }) + const morpher = new TransformBag({ rotate: 0, translateX: 0 }).to({ + rotate: 50, + translateX: 20 + }) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(TransformBag) expect(morpher.at(0.5)).toEqual(any(TransformBag)) - expect(morpher.at(0.5)).toEqual(objectContaining({ rotate: 25, translateX: 10 })) + expect(morpher.at(0.5)).toEqual( + objectContaining({ rotate: 25, translateX: 10 }) + ) }) it('Creates a morphable out of an ObjectBag', () => { @@ -148,7 +192,9 @@ describe('Morphable.js', () => { expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(ObjectBag) expect(morpher.at(0.5)).toEqual(any(Object)) - expect(morpher.at(0.5).valueOf()).toEqual(objectContaining({ a: new SVGNumber(7.5), b: new SVGNumber(15) })) + expect(morpher.at(0.5).valueOf()).toEqual( + objectContaining({ a: new SVGNumber(7.5), b: new SVGNumber(15) }) + ) }) it('creates a morphable from a color string', () => { @@ -198,16 +244,16 @@ describe('Morphable.js', () => { expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(SVGArray) expect(morpher.at(0.5)).toEqual(any(SVGArray)) - expect(morpher.at(0.5)).toEqual([ 2, 3, 4, 5 ]) + expect(morpher.at(0.5)).toEqual([2, 3, 4, 5]) }) it('creates a morphable from an array', () => { - const morpher = new Morphable().from([ 0, 1, 2, 3 ]).to([ 4, 5, 6, 7 ]) + const morpher = new Morphable().from([0, 1, 2, 3]).to([4, 5, 6, 7]) expect(morpher).toEqual(any(Morphable)) expect(morpher.type()).toBe(SVGArray) expect(morpher.at(0.5)).toEqual(any(SVGArray)) - expect(morpher.at(0.5)).toEqual([ 2, 3, 4, 5 ]) + expect(morpher.at(0.5)).toEqual([2, 3, 4, 5]) }) it('converts the to-color to the from-type', () => { @@ -231,7 +277,7 @@ describe('Morphable.js', () => { it('sets the from attribute to an array representation of the morphable type', () => { const morpher = new Morphable().from(5) - expect(morpher.from()).toEqual(arrayContaining([ 5 ])) + expect(morpher.from()).toEqual(arrayContaining([5])) }) }) @@ -255,7 +301,7 @@ describe('Morphable.js', () => { it('sets the from attribute to an array representation of the morphable type', () => { const morpher = new Morphable().to(5) - expect(morpher.to()).toEqual(arrayContaining([ 5 ])) + expect(morpher.to()).toEqual(arrayContaining([5])) }) }) @@ -270,7 +316,7 @@ describe('Morphable.js', () => { describe('NonMorphable', () => { describe('()', () => { it('wraps any type into a NonMorphable from an array', () => { - const non = new NonMorphable([ 5 ]) + const non = new NonMorphable([5]) expect(non.valueOf()).toBe(5) }) @@ -282,8 +328,8 @@ describe('Morphable.js', () => { describe('toArray()', () => { it('returns array representation of NonMorphable', () => { - expect(new NonMorphable(5).toArray()).toEqual([ 5 ]) - expect(new NonMorphable('Hello').toArray()).toEqual([ 'Hello' ]) + expect(new NonMorphable(5).toArray()).toEqual([5]) + expect(new NonMorphable('Hello').toArray()).toEqual(['Hello']) }) }) }) @@ -291,8 +337,8 @@ describe('Morphable.js', () => { describe('TransformBag', () => { describe('()', () => { it('creates an object which holds transformations for morphing by passing array', () => { - const bag = new TransformBag([ 0, 1, 2, 3, 4, 5, 6, 7 ]) - expect(bag.toArray()).toEqual([ 0, 1, 2, 3, 4, 5, 6, 7 ]) + const bag = new TransformBag([0, 1, 2, 3, 4, 5, 6, 7]) + expect(bag.toArray()).toEqual([0, 1, 2, 3, 4, 5, 6, 7]) }) it('creates an object which holds transformations for morphing by passing object', () => { @@ -307,14 +353,14 @@ describe('Morphable.js', () => { originY: 7 }) - expect(bag.toArray()).toEqual([ 0, 1, 2, 3, 4, 5, 6, 7 ]) + expect(bag.toArray()).toEqual([0, 1, 2, 3, 4, 5, 6, 7]) }) }) describe('toArray()', () => { it('creates an array out of the transform values', () => { - const bag = new TransformBag([ 0, 1, 2, 3, 4, 5, 6, 7 ]) - expect(bag.toArray()).toEqual([ 0, 1, 2, 3, 4, 5, 6, 7 ]) + const bag = new TransformBag([0, 1, 2, 3, 4, 5, 6, 7]) + expect(bag.toArray()).toEqual([0, 1, 2, 3, 4, 5, 6, 7]) }) }) }) @@ -322,51 +368,174 @@ describe('Morphable.js', () => { describe('ObjectBag', () => { describe('()', () => { it('wraps an object into a morphable object by passing an array', () => { - const bag = new ObjectBag([ 'foo', SVGNumber, 2, 1, '', 'bar', SVGNumber, 2, 2, '', 'baz', SVGNumber, 2, 3, '' ]) - expect(bag.values).toEqual([ 'foo', SVGNumber, 2, 1, '', 'bar', SVGNumber, 2, 2, '', 'baz', SVGNumber, 2, 3, '' ]) + const bag = new ObjectBag([ + 'foo', + SVGNumber, + 2, + 1, + '', + 'bar', + SVGNumber, + 2, + 2, + '', + 'baz', + SVGNumber, + 2, + 3, + '' + ]) + expect(bag.values).toEqual([ + 'foo', + SVGNumber, + 2, + 1, + '', + 'bar', + SVGNumber, + 2, + 2, + '', + 'baz', + SVGNumber, + 2, + 3, + '' + ]) }) it('wraps an object into a morphable object by passing an object', () => { const bag = new ObjectBag({ foo: 1, bar: 2, baz: 3 }) - expect(bag.values).toEqual([ 'bar', SVGNumber, 2, 2, '', 'baz', SVGNumber, 2, 3, '', 'foo', SVGNumber, 2, 1, '' ]) + expect(bag.values).toEqual([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'baz', + SVGNumber, + 2, + 3, + '', + 'foo', + SVGNumber, + 2, + 1, + '' + ]) }) it('wraps an object with morphable values in an ObjectBag', () => { const bag = new ObjectBag({ fill: new Color(), bar: 2 }) - expect(bag.values).toEqual([ 'bar', SVGNumber, 2, 2, '', 'fill', Color, 5, 0, 0, 0, 0, 'rgb' ]) + expect(bag.values).toEqual([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'fill', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb' + ]) }) it('wraps an array with morphable representation in an ObjectBag', () => { - const bag = new ObjectBag([ 'bar', SVGNumber, 2, 2, '', 'fill', Color, 5, 0, 0, 0, 0, 'rgb' ]) - expect(bag.toArray()).toEqual([ 'bar', SVGNumber, 2, 2, '', 'fill', Color, 5, 0, 0, 0, 0, 'rgb' ]) + const bag = new ObjectBag([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'fill', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb' + ]) + expect(bag.toArray()).toEqual([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'fill', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb' + ]) }) }) describe('toArray()', () => { it('creates an array out of the object', () => { const bag = new ObjectBag({ foo: 1, bar: 2, baz: 3 }) - expect(bag.toArray()).toEqual( - [ 'bar', SVGNumber, 2, 2, '', 'baz', SVGNumber, 2, 3, '', 'foo', SVGNumber, 2, 1, '' ] - ) + expect(bag.toArray()).toEqual([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'baz', + SVGNumber, + 2, + 3, + '', + 'foo', + SVGNumber, + 2, + 1, + '' + ]) }) it('creates a flattened array out of the object with morphable values', () => { const bag = new ObjectBag({ fill: new Color(), bar: 2 }) - expect(bag.toArray()).toEqual( - [ 'bar', SVGNumber, 2, 2, '', 'fill', Color, 5, 0, 0, 0, 0, 'rgb' ] - ) + expect(bag.toArray()).toEqual([ + 'bar', + SVGNumber, + 2, + 2, + '', + 'fill', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb' + ]) }) }) describe('valueOf()', () => { it('creates morphable objects from the stored values', () => { const bag = new ObjectBag({ foo: 1, bar: 2, baz: 3 }) - expect(bag.valueOf()).toEqual({ foo: new SVGNumber(1), bar: new SVGNumber(2), baz: new SVGNumber(3) }) + expect(bag.valueOf()).toEqual({ + foo: new SVGNumber(1), + bar: new SVGNumber(2), + baz: new SVGNumber(3) + }) }) it('creates also morphable objects from the stored values', () => { const bag = new ObjectBag({ fill: new Color(), bar: 2 }) - expect(bag.valueOf()).toEqual({ fill: objectContaining(new Color()), bar: new SVGNumber(2) }) + expect(bag.valueOf()).toEqual({ + fill: objectContaining(new Color()), + bar: new SVGNumber(2) + }) }) }) @@ -375,7 +544,21 @@ describe('Morphable.js', () => { const bag1 = new ObjectBag({ x: 1, y: '#fff' }) const bag2 = new ObjectBag({ x: 2, y: new Color().hsl() }) bag1.align(bag2.toArray()) - expect(bag1.toArray()).toEqual([ 'x', SVGNumber, 2, 1, '', 'y', Color, 5, 0, 0, 100, 0, 'hsl' ]) + expect(bag1.toArray()).toEqual([ + 'x', + SVGNumber, + 2, + 1, + '', + 'y', + Color, + 5, + 0, + 0, + 100, + 0, + 'hsl' + ]) }) }) }) diff --git a/spec/spec/animation/Queue.js b/spec/spec/animation/Queue.js index 8386405..b405b62 100644 --- a/spec/spec/animation/Queue.js +++ b/spec/spec/animation/Queue.js @@ -3,9 +3,7 @@ import { Queue } from '../../../src/main.js' describe('Queue.js', function () { - describe('first ()', function () { - it('returns null if no item in the queue', function () { var queue = new Queue() expect(queue.first()).toEqual(null) @@ -21,7 +19,6 @@ describe('Queue.js', function () { }) describe('last ()', function () { - it('returns null if no item in the queue', function () { var queue = new Queue() expect(queue.last()).toEqual(null) @@ -37,7 +34,6 @@ describe('Queue.js', function () { }) describe('push ()', function () { - it('adds an element to the end of the queue', function () { var queue = new Queue() queue.push(1) diff --git a/spec/spec/animation/Runner.js b/spec/spec/animation/Runner.js index 2512dac..2325fd5 100644 --- a/spec/spec/animation/Runner.js +++ b/spec/spec/animation/Runner.js @@ -1,6 +1,22 @@ /* globals describe, expect, it, beforeEach, afterEach, spyOn, jasmine */ -import { Runner, defaults, Ease, Controller, SVG, Timeline, Rect, Morphable, Animator, Queue, Matrix, Color, Box, Polygon, PointArray } from '../../../src/main.js' +import { + Runner, + defaults, + Ease, + Controller, + SVG, + Timeline, + Rect, + Morphable, + Animator, + Queue, + Matrix, + Color, + Box, + Polygon, + PointArray +} from '../../../src/main.js' import { FakeRunner, RunnerArray } from '../../../src/animation/Runner.js' import { getWindow } from '../../../src/utils/window.js' import SVGNumber from '../../../src/types/SVGNumber.js' @@ -8,7 +24,6 @@ import SVGNumber from '../../../src/types/SVGNumber.js' const { any, createSpy, objectContaining, arrayContaining } = jasmine describe('Runner.js', () => { - describe('Runner', () => { var initFn = createSpy('initFn') var runFn = createSpy('runFn') @@ -31,59 +46,73 @@ describe('Runner.js', () => { it('can handle all form of input', () => { var fn = Runner.sanitise - expect(fn(200, 200, 'now')).toEqual(objectContaining({ - duration: 200, - delay: 200, - when: 'now', - times: 1, - wait: 0, - swing: false - })) - - expect(fn(200, 200)).toEqual(objectContaining({ - duration: 200, - delay: 200, - when: 'last', - times: 1, - wait: 0, - swing: false - })) - - expect(fn(200)).toEqual(objectContaining({ - duration: 200, - delay: defaults.timeline.delay, - when: 'last', - times: 1, - wait: 0, - swing: false - })) - - expect(fn(runFn)).toEqual(objectContaining({ - duration: runFn, - delay: defaults.timeline.delay, - when: 'last', - times: 1, - wait: 0, - swing: false - })) - - expect(fn({ delay: 200 })).toEqual(objectContaining({ - duration: defaults.timeline.duration, - delay: 200, - when: 'last', - times: 1, - wait: 0, - swing: false - })) - - expect(fn({ times: 3, delay: 200, when: 'now', swing: true, wait: 200 })).toEqual(objectContaining({ - duration: defaults.timeline.duration, - delay: 200, - when: 'now', - times: 3, - wait: 200, - swing: true - })) + expect(fn(200, 200, 'now')).toEqual( + objectContaining({ + duration: 200, + delay: 200, + when: 'now', + times: 1, + wait: 0, + swing: false + }) + ) + + expect(fn(200, 200)).toEqual( + objectContaining({ + duration: 200, + delay: 200, + when: 'last', + times: 1, + wait: 0, + swing: false + }) + ) + + expect(fn(200)).toEqual( + objectContaining({ + duration: 200, + delay: defaults.timeline.delay, + when: 'last', + times: 1, + wait: 0, + swing: false + }) + ) + + expect(fn(runFn)).toEqual( + objectContaining({ + duration: runFn, + delay: defaults.timeline.delay, + when: 'last', + times: 1, + wait: 0, + swing: false + }) + ) + + expect(fn({ delay: 200 })).toEqual( + objectContaining({ + duration: defaults.timeline.duration, + delay: 200, + when: 'last', + times: 1, + wait: 0, + swing: false + }) + ) + + expect( + fn({ times: 3, delay: 200, when: 'now', swing: true, wait: 200 }) + ).toEqual( + objectContaining({ + duration: defaults.timeline.duration, + delay: 200, + when: 'now', + times: 3, + wait: 200, + swing: true + }) + ) }) }) @@ -115,17 +144,18 @@ describe('Runner.js', () => { var runner = new Runner() runner.queue(initFn, runFn, true) - expect(runner._queue[0]).toEqual(objectContaining({ - initialiser: initFn, - initialised: false, - runner: runFn, - finished: false - })) + expect(runner._queue[0]).toEqual( + objectContaining({ + initialiser: initFn, + initialised: false, + runner: runFn, + finished: false + }) + ) }) }) describe('step()', () => { - it('returns itself', () => { var runner = new Runner() expect(runner.step()).toBe(runner) @@ -163,7 +193,7 @@ describe('Runner.js', () => { expect(runFn.calls.count()).toBe(2) }) - function getLoop (r) { + function getLoop(r) { var loopDuration = r._duration + r._wait var loopsDone = Math.floor(r._time / loopDuration) return loopsDone @@ -447,7 +477,6 @@ describe('Runner.js', () => { }) }) }) - }) describe('active()', () => { @@ -613,7 +642,6 @@ describe('Runner.js', () => { }) describe('position()', () => { - it('gets the position of a runner', () => { var spy = createSpy('stepper') var runner = new Runner(1000).queue(null, spy) @@ -718,9 +746,10 @@ describe('Runner.js', () => { it('throws if no timeline is given', () => { var runner = new Runner() - expect(() => runner.schedule(200, 'now')).toThrowError('Runner cannot be scheduled without timeline') + expect(() => runner.schedule(200, 'now')).toThrowError( + 'Runner cannot be scheduled without timeline' + ) }) - }) describe('unschedule()', () => { @@ -750,10 +779,22 @@ describe('Runner.js', () => { expect(runner2.timeline()).toBe(timeline) expect(runner2.time()).toBe(0) - expect(timeline.schedule()).toEqual(arrayContaining([ - objectContaining({ start: t, duration: 1000, end: t + 1000, runner: runner }), - objectContaining({ start: t + 2000, duration: 500, end: t + 2500, runner: runner2 }) - ])) + expect(timeline.schedule()).toEqual( + arrayContaining([ + objectContaining({ + start: t, + duration: 1000, + end: t + 1000, + runner: runner + }), + objectContaining({ + start: t + 2000, + duration: 500, + end: t + 2500, + runner: runner2 + }) + ]) + ) }) it('reuses timeline and element of current runner', () => { @@ -909,7 +950,7 @@ describe('Runner.js', () => { const runner = rect.animate().move(10, 10) jasmine.RequestAnimationFrame.tick(16) expect(runner._tryRetarget('x', 20)).toBe(true) - expect(runner._history.x.morpher.to()).toEqual([ 20, '' ]) + expect(runner._history.x.morpher.to()).toEqual([20, '']) }) it('throws away the morpher if it was not initialized yet and returns false', () => { @@ -929,10 +970,14 @@ describe('Runner.js', () => { it('does only work with controller for transformations and uses retarget function when retargeting transformations', () => { const rect = new Rect() - const runner = rect.animate(new Controller(() => 0)).transform({ translate: [ 10, 10 ] }) + const runner = rect + .animate(new Controller(() => 0)) + .transform({ translate: [10, 10] }) jasmine.RequestAnimationFrame.tick(16) // In that case tryRetarget is not successful - expect(runner._tryRetarget('transform', { translate: [ 20, 20 ] })).toBe(true) + expect( + runner._tryRetarget('transform', { translate: [20, 20] }) + ).toBe(true) }) it('starts the timeline if retarget was successful', () => { @@ -942,7 +987,7 @@ describe('Runner.js', () => { jasmine.RequestAnimationFrame.tick(16) const spy = spyOn(timeline, 'play') expect(runner._tryRetarget('x', 20)).toBe(true) - expect(runner._history.x.morpher.to()).toEqual([ 20, '' ]) + expect(runner._history.x.morpher.to()).toEqual([20, '']) expect(spy).toHaveBeenCalledTimes(1) }) }) @@ -1002,7 +1047,7 @@ describe('Runner.js', () => { describe('addTransform()', () => { it('adds a transformation by multiplying', () => { const runner = new Runner() - runner.addTransform({ translate: [ 10, 10 ] }) + runner.addTransform({ translate: [10, 10] }) expect(runner.transforms).toEqual(new Matrix(1, 0, 0, 1, 10, 10)) }) }) @@ -1010,7 +1055,7 @@ describe('Runner.js', () => { describe('clearTransform()', () => { it('resets the transformations to identity', () => { const runner = new Runner() - runner.addTransform({ translate: [ 10, 10 ] }) + runner.addTransform({ translate: [10, 10] }) runner.clearTransform() expect(runner.transforms).toEqual(new Matrix()) }) @@ -1019,7 +1064,7 @@ describe('Runner.js', () => { describe('clearTransformsFromQueue', () => { it('deletes all functions from the queue which are transformations', () => { const runner = new Runner().queue(initFn, runFn) - runner.transform({ translate: [ 10, 20 ] }) + runner.transform({ translate: [10, 20] }) runner.clearTransformsFromQueue() expect(runner._queue.length).toBe(1) }) @@ -1062,17 +1107,15 @@ describe('Runner.js', () => { it('calculates the current transformation of this element', () => { const rect = new Rect() rect._prepareRunner() - const runner1 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner1 = new Runner().addTransform({ translate: [10, 20] }) const runner2 = new Runner().addTransform({ rotate: 45 }) - const runner3 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner3 = new Runner().addTransform({ translate: [10, 20] }) rect._addRunner(runner1) rect._addRunner(runner2) rect._addRunner(runner3) expect(rect._currentTransform(runner3)).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) - .translate(10, 20) + new Matrix({ translate: [10, 20] }).rotate(45).translate(10, 20) ) }) }) @@ -1132,14 +1175,26 @@ describe('Runner.js', () => { const runner = new Runner() runner.styleAttr('attr', 'x', 5) expect(runner._history.attr.morpher).toEqual(any(Morphable)) - expect(runner._history.attr.morpher.to()).toEqual([ 'x', SVGNumber, 2, 5, '' ]) + expect(runner._history.attr.morpher.to()).toEqual([ + 'x', + SVGNumber, + 2, + 5, + '' + ]) }) it('adds a morpher for css', () => { const runner = new Runner() runner.styleAttr('css', 'x', 5) expect(runner._history.css.morpher).toEqual(any(Morphable)) - expect(runner._history.css.morpher.to()).toEqual([ 'x', SVGNumber, 2, 5, '' ]) + expect(runner._history.css.morpher.to()).toEqual([ + 'x', + SVGNumber, + 2, + 5, + '' + ]) }) it('adds init and run fn for execution when runner runs', () => { @@ -1147,8 +1202,20 @@ describe('Runner.js', () => { const runner = new Runner(100).ease('-').element(element) runner.styleAttr('attr', 'x', 5) runner.step(50) - expect(runner._history.attr.morpher.from()).toEqual([ 'x', SVGNumber, 2, 0, '' ]) - expect(runner._history.attr.morpher.to()).toEqual([ 'x', SVGNumber, 2, 5, '' ]) + expect(runner._history.attr.morpher.from()).toEqual([ + 'x', + SVGNumber, + 2, + 0, + '' + ]) + expect(runner._history.attr.morpher.to()).toEqual([ + 'x', + SVGNumber, + 2, + 5, + '' + ]) expect(element.x()).toBe(2.5) }) @@ -1157,18 +1224,54 @@ describe('Runner.js', () => { const runner = new Runner(100).ease('-').element(element) runner.styleAttr('attr', { fill: '#000', stroke: new Color('#fff') }) runner.step(50) - expect(runner._history.attr.morpher.from()).toEqual( - [ 'fill', Color, 5, 255, 255, 255, 0, 'rgb', 'stroke', Color, 5, 0, 0, 0, 0, 'rgb' ] - ) - - expect(runner._history.attr.morpher.to()).toEqual( - [ 'fill', Color, 5, 0, 0, 0, 0, 'rgb', 'stroke', Color, 5, 255, 255, 255, 0, 'rgb' ] - ) + expect(runner._history.attr.morpher.from()).toEqual([ + 'fill', + Color, + 5, + 255, + 255, + 255, + 0, + 'rgb', + 'stroke', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb' + ]) + + expect(runner._history.attr.morpher.to()).toEqual([ + 'fill', + Color, + 5, + 0, + 0, + 0, + 0, + 'rgb', + 'stroke', + Color, + 5, + 255, + 255, + 255, + 0, + 'rgb' + ]) const result = runner._history.attr.morpher.at(0.5).valueOf() expect(result.fill).toEqual(any(Color)) expect(result.stroke).toEqual(any(Color)) - expect(result.fill.toArray()).toEqual([ 127.5, 127.5, 127.5, 0, 'rgb' ]) - expect(result.stroke.toArray()).toEqual([ 127.5, 127.5, 127.5, 0, 'rgb' ]) + expect(result.fill.toArray()).toEqual([127.5, 127.5, 127.5, 0, 'rgb']) + expect(result.stroke.toArray()).toEqual([ + 127.5, + 127.5, + 127.5, + 0, + 'rgb' + ]) }) it('it changes color space', () => { @@ -1176,16 +1279,30 @@ describe('Runner.js', () => { const runner = new Runner(100).ease('-').element(element) runner.styleAttr('attr', { fill: new Color(100, 12, 12, 'hsl') }) runner.step(50) - expect(runner._history.attr.morpher.from()).toEqual( - [ 'fill', Color, 5, 0, 0, 100, 0, 'hsl' ] - ) - - expect(runner._history.attr.morpher.to()).toEqual( - [ 'fill', Color, 5, 100, 12, 12, 0, 'hsl' ] - ) + expect(runner._history.attr.morpher.from()).toEqual([ + 'fill', + Color, + 5, + 0, + 0, + 100, + 0, + 'hsl' + ]) + + expect(runner._history.attr.morpher.to()).toEqual([ + 'fill', + Color, + 5, + 100, + 12, + 12, + 0, + 'hsl' + ]) const result = runner._history.attr.morpher.at(0.5).valueOf() expect(result.fill).toEqual(any(Color)) - expect(result.fill.toArray()).toEqual([ 50, 6, 56, 0, 'hsl' ]) + expect(result.fill.toArray()).toEqual([50, 6, 56, 0, 'hsl']) expect(element.fill()).toBe('#969388') }) @@ -1195,7 +1312,10 @@ describe('Runner.js', () => { runner.styleAttr('attr', { fill: new Color(100, 12, 12, 'hsl') }) runner.step(50) expect(element.fill()).toBe('#969388') - runner.styleAttr('attr', { fill: new Color(100, 50, 50, 'hsl'), x: 50 }) + runner.styleAttr('attr', { + fill: new Color(100, 50, 50, 'hsl'), + x: 50 + }) runner.step(25) expect(element.fill()).toBe('#b1c37c') expect(element.x()).toBe(37.5) @@ -1213,14 +1333,17 @@ describe('Runner.js', () => { }) }) - function closeTo (number, precision = 2) { + function closeTo(number, precision = 2) { return { /* * The asymmetricMatch function is required, and must return a boolean. */ asymmetricMatch: function (compareTo) { const factor = 10 ** precision - return Math.round((~~(compareTo * factor)) / factor) === Math.round((~~(number * factor)) / factor) + return ( + Math.round(~~(compareTo * factor) / factor) === + Math.round(~~(number * factor) / factor) + ) }, /* @@ -1228,12 +1351,14 @@ describe('Runner.js', () => { * be seen by the user in the message when a test fails. */ jasmineToString: function () { - return '<close to: ' + number + ' with precision: ' + precision + '>' + return ( + '<close to: ' + number + ' with precision: ' + precision + '>' + ) } } } - function equal (obj) { + function equal(obj) { return { /* * The asymmetricMatch function is required, and must return a boolean. @@ -1242,7 +1367,9 @@ describe('Runner.js', () => { if (!(compareTo instanceof obj.constructor)) return false const keys = Object.keys(obj) - const difference = Object.keys(compareTo).filter((el) => !keys.includes(el)) + const difference = Object.keys(compareTo).filter( + (el) => !keys.includes(el) + ) if (difference.length) return false @@ -1269,15 +1396,16 @@ describe('Runner.js', () => { const runner = new Runner(100).ease('-').element(element) runner.zoom(2, { x: 0, y: 0 }) runner.step(50) - expect(runner._history.zoom.morpher.from()).toEqual( - [ 1, '' ] - ) - expect(runner._history.zoom.morpher.to()).toEqual( - [ 2, '' ] - ) + expect(runner._history.zoom.morpher.from()).toEqual([1, '']) + expect(runner._history.zoom.morpher.to()).toEqual([2, '']) expect(element.zoom()).toBeCloseTo(1.5, 10) - expect(element.viewbox().toArray()).toEqual([ 0, 0, closeTo(66.666, 3), closeTo(66.666, 3) ]) + expect(element.viewbox().toArray()).toEqual([ + 0, + 0, + closeTo(66.666, 3), + closeTo(66.666, 3) + ]) }) it('retargets if called twice', () => { @@ -1286,16 +1414,17 @@ describe('Runner.js', () => { runner.zoom(2, { x: 0, y: 0 }) runner.step(50) runner.zoom(4, { x: 0, y: 0 }) - expect(runner._history.zoom.morpher.from()).toEqual( - [ 1, '' ] - ) - expect(runner._history.zoom.morpher.to()).toEqual( - [ 4, '' ] - ) + expect(runner._history.zoom.morpher.from()).toEqual([1, '']) + expect(runner._history.zoom.morpher.to()).toEqual([4, '']) runner.step(25) expect(element.zoom()).toBeCloseTo(3.25, 10) - expect(element.viewbox().toArray()).toEqual([ 0, 0, closeTo(30.769, 3), closeTo(30.769, 3) ]) + expect(element.viewbox().toArray()).toEqual([ + 0, + 0, + closeTo(30.769, 3), + closeTo(30.769, 3) + ]) }) }) @@ -1303,52 +1432,59 @@ describe('Runner.js', () => { it('does not retarget for non-declarative transformations', () => { const runner = new Runner() const spy = spyOn(runner, '_tryRetarget') - runner.transform({ translate: [ 10, 20 ] }) + runner.transform({ translate: [10, 20] }) expect(spy).not.toHaveBeenCalled() }) it('does not retarget for relative transformations', () => { const runner = new Runner(new Controller(() => 0)) const spy = spyOn(runner, '_tryRetarget') - runner.transform({ translate: [ 10, 20 ] }, true) + runner.transform({ translate: [10, 20] }, true) expect(spy).not.toHaveBeenCalled() }) it('does retarget for absolute declarative transformations', () => { const runner = new Runner(new Controller(() => 0)) const spy = spyOn(runner, '_tryRetarget') - runner.transform({ translate: [ 10, 20 ] }) + runner.transform({ translate: [10, 20] }) expect(spy).toHaveBeenCalled() }) it('calls queue with isTransform=true', () => { const runner = new Runner() const spy = spyOn(runner, 'queue') - runner.transform({ translate: [ 10, 20 ] }) - expect(spy).toHaveBeenCalledWith(any(Function), any(Function), any(Function), true) + runner.transform({ translate: [10, 20] }) + expect(spy).toHaveBeenCalledWith( + any(Function), + any(Function), + any(Function), + true + ) }) it('steps an affine transformation correctly', () => { const element = new Rect() const runner = new Runner(100).ease('-').element(element) - runner.transform({ translate: [ 10, 20 ], scale: 2, rotate: 90 }) + runner.transform({ translate: [10, 20], scale: 2, rotate: 90 }) runner.step(50) // transform sets an immediate callback to apply all merged transforms // when every runner had the chance to add its bit of transforms jasmine.RequestAnimationFrame.tick(1) - expect(element.matrix().decompose()).toEqual(objectContaining({ - translateX: 5, - translateY: 10, - scaleX: closeTo(1.5, 10), - scaleY: closeTo(1.5), - rotate: closeTo(45, 10) - })) + expect(element.matrix().decompose()).toEqual( + objectContaining({ + translateX: 5, + translateY: 10, + scaleX: closeTo(1.5, 10), + scaleY: closeTo(1.5), + rotate: closeTo(45, 10) + }) + ) }) it('retargets an affine transformation correctly', () => { const element = new Rect() const runner = new Runner(() => 1).element(element) - runner.transform({ translate: [ 10, 20 ], scale: 2, rotate: 90 }) + runner.transform({ translate: [10, 20], scale: 2, rotate: 90 }) runner.step(50) runner.transform({ scale: 2 }) @@ -1357,26 +1493,26 @@ describe('Runner.js', () => { // on every frame. That is why we step here to see the effect of our retargeting runner.step(25) - expect(runner._history.transform.morpher.to()).toEqual( - [ 2, 2, 0, 0, 0, 0, 0, 0 ] - ) + expect(runner._history.transform.morpher.to()).toEqual([ + 2, 2, 0, 0, 0, 0, 0, 0 + ]) }) it('retargets an affine transformation correctly and sets new origin', () => { const element = new Rect() const runner = new Runner(() => 1).element(element) - runner.transform({ translate: [ 10, 20 ], scale: 2, rotate: 90 }) + runner.transform({ translate: [10, 20], scale: 2, rotate: 90 }) runner.step(50) - runner.transform({ scale: 2, origin: [ 10, 10 ] }) + runner.transform({ scale: 2, origin: [10, 10] }) // transform sets its to-target to the morpher in the initialisation step // because it depends on the from-target. Declaritive animation run the init-step // on every frame. That is why we step here to see the effect of our retargeting runner.step(25) - expect(runner._history.transform.morpher.to()).toEqual( - [ 2, 2, 0, 0, 0, 0, 10, 10 ] - ) + expect(runner._history.transform.morpher.to()).toEqual([ + 2, 2, 0, 0, 0, 0, 10, 10 + ]) }) it('steps multiple relative animations correctly', () => { @@ -1433,9 +1569,7 @@ describe('Runner.js', () => { expect(runner1._queue.length).toBe(0) // The origin is transformed with every - expect(element.matrix()).toEqual( - new Matrix().scale(1.5).rotate(22.5) - ) + expect(element.matrix()).toEqual(new Matrix().scale(1.5).rotate(22.5)) }) it('correctly animates matrices directly', () => { @@ -1456,16 +1590,16 @@ describe('Runner.js', () => { it('correctly animates matrices affine', () => { const element = new Rect() const runner = new Runner(100).ease('-').element(element) - runner.transform(Object.assign({ affine: true }, new Matrix({ rotate: 90 }))) + runner.transform( + Object.assign({ affine: true }, new Matrix({ rotate: 90 })) + ) runner.step(50) // transform sets an immediate callback to apply all merged transforms // when every runner had the chance to add its bit of transforms jasmine.RequestAnimationFrame.tick(1) // The origin is transformed with every - expect(element.matrix()).toEqual( - new Matrix({ rotate: 45 }) - ) + expect(element.matrix()).toEqual(new Matrix({ rotate: 45 })) }) it('correctly animates matrices affine by passing third parameter', () => { @@ -1478,9 +1612,7 @@ describe('Runner.js', () => { jasmine.RequestAnimationFrame.tick(1) // The origin is transformed with every - expect(element.matrix()).toEqual( - new Matrix({ rotate: 45 }) - ) + expect(element.matrix()).toEqual(new Matrix({ rotate: 45 })) }) it('correctly animates a declarative relative rotation', () => { @@ -1563,8 +1695,8 @@ describe('Runner.js', () => { runner._queueNumberDelta('x', 10) runner.step(50) expect(runner._history.x.morpher.type()).toEqual(SVGNumber) - expect(runner._history.x.morpher.from()).toEqual([ 10, '' ]) - expect(runner._history.x.morpher.to()).toEqual([ 20, '' ]) + expect(runner._history.x.morpher.from()).toEqual([10, '']) + expect(runner._history.x.morpher.to()).toEqual([20, '']) expect(element.x()).toBe(15) }) @@ -1576,7 +1708,7 @@ describe('Runner.js', () => { runner.step(25) runner._queueNumberDelta('x', 20) - expect(runner._history.x.morpher.to()).toEqual([ 30, '' ]) + expect(runner._history.x.morpher.to()).toEqual([30, '']) runner.step(25) expect(element.x()).toBe(20) @@ -1590,8 +1722,8 @@ describe('Runner.js', () => { runner._queueObject('x', new SVGNumber(20)) runner.step(50) expect(runner._history.x.morpher.type()).toEqual(SVGNumber) - expect(runner._history.x.morpher.from()).toEqual([ 10, '' ]) - expect(runner._history.x.morpher.to()).toEqual([ 20, '' ]) + expect(runner._history.x.morpher.from()).toEqual([10, '']) + expect(runner._history.x.morpher.to()).toEqual([20, '']) expect(element.x()).toBe(15) }) @@ -1719,25 +1851,25 @@ describe('Runner.js', () => { describe('plot()', () => { it('queues a morphable array', () => { - const element = new Polygon().plot([ 10, 10, 20, 20 ]) + const element = new Polygon().plot([10, 10, 20, 20]) const runner = new Runner(100).ease('-').element(element) runner.plot(20, 20, 30, 30) runner.step(50) - expect(runner._history.plot.morpher.from()).toEqual([ 10, 10, 20, 20 ]) - expect(runner._history.plot.morpher.to()).toEqual([ 20, 20, 30, 30 ]) - expect(element.array()).toEqual(new PointArray([ 15, 15, 25, 25 ])) + expect(runner._history.plot.morpher.from()).toEqual([10, 10, 20, 20]) + expect(runner._history.plot.morpher.to()).toEqual([20, 20, 30, 30]) + expect(element.array()).toEqual(new PointArray([15, 15, 25, 25])) }) it('retargets correctly', () => { - const element = new Polygon().plot([ 10, 10, 20, 20 ]) + const element = new Polygon().plot([10, 10, 20, 20]) const runner = new Runner(100).ease('-').element(element) runner.plot(20, 20, 30, 30) runner.step(25) runner.plot(30, 30, 40, 40) runner.step(25) - expect(runner._history.plot.morpher.from()).toEqual([ 10, 10, 20, 20 ]) - expect(runner._history.plot.morpher.to()).toEqual([ 30, 30, 40, 40 ]) - expect(element.array()).toEqual(new PointArray([ 20, 20, 30, 30 ])) + expect(runner._history.plot.morpher.from()).toEqual([10, 10, 20, 20]) + expect(runner._history.plot.morpher.to()).toEqual([30, 30, 40, 40]) + expect(element.array()).toEqual(new PointArray([20, 20, 30, 30])) }) }) @@ -1755,7 +1887,10 @@ describe('Runner.js', () => { const runner = new Runner() const spy = spyOn(runner, '_queueObject') runner.viewbox(10, 10, 100, 100) - expect(spy).toHaveBeenCalledWith('viewbox', equal(new Box(10, 10, 100, 100))) + expect(spy).toHaveBeenCalledWith( + 'viewbox', + equal(new Box(10, 10, 100, 100)) + ) }) }) @@ -1785,10 +1920,12 @@ describe('Runner.js', () => { describe('mergeWith()', () => { it('merges the transformations of a runner with another and returns a FakeRunner', () => { const fake = new FakeRunner() - const runner = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner = new Runner().addTransform({ translate: [10, 20] }) const newRunner = fake.mergeWith(runner) expect(newRunner).toEqual(any(FakeRunner)) - expect(newRunner.transforms).toEqual(new Matrix({ translate: [ 10, 20 ] })) + expect(newRunner.transforms).toEqual( + new Matrix({ translate: [10, 20] }) + ) }) }) }) @@ -1832,9 +1969,9 @@ describe('Runner.js', () => { describe('merge()', () => { it('merges all runners which are done', () => { - const runner1 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner1 = new Runner().addTransform({ translate: [10, 20] }) const runner2 = new Runner().addTransform({ rotate: 45 }) - const runner3 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner3 = new Runner().addTransform({ translate: [10, 20] }) const arr = new RunnerArray() arr.add(runner1).add(runner2).add(runner3) runner1.done = true @@ -1843,17 +1980,15 @@ describe('Runner.js', () => { arr.merge() expect(arr.runners[0]).toEqual(any(FakeRunner)) expect(arr.runners[0].transforms).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) - .translate(10, 20) + new Matrix({ translate: [10, 20] }).rotate(45).translate(10, 20) ) }) it('skips runners which are not done', () => { - const runner1 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner1 = new Runner().addTransform({ translate: [10, 20] }) const runner2 = new Runner().addTransform({ rotate: 45 }) const runner3 = new Runner().addTransform({ rotate: 45 }) - const runner4 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner4 = new Runner().addTransform({ translate: [10, 20] }) const runner5 = new Runner().addTransform({ rotate: 45 }) const arr = new RunnerArray() arr.add(runner1).add(runner2).add(runner3).add(runner4).add(runner5) @@ -1865,24 +2000,22 @@ describe('Runner.js', () => { arr.merge() expect(arr.runners[0]).toEqual(any(FakeRunner)) expect(arr.runners[0].transforms).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) + new Matrix({ translate: [10, 20] }).rotate(45) ) expect(arr.runners[2]).toEqual(any(FakeRunner)) expect(arr.runners[2].transforms).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) + new Matrix({ translate: [10, 20] }).rotate(45) ) expect(arr.runners[1]).toBe(runner3) }) it('skips runners which have a timeline and are scheduled on that timeline', () => { - const runner1 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner1 = new Runner().addTransform({ translate: [10, 20] }) const runner2 = new Runner().addTransform({ rotate: 45 }) const runner3 = new Runner().addTransform({ rotate: 45 }) - const runner4 = new Runner().addTransform({ translate: [ 10, 20 ] }) + const runner4 = new Runner().addTransform({ translate: [10, 20] }) const runner5 = new Runner().addTransform({ rotate: 45 }) const arr = new RunnerArray() arr.add(runner1).add(runner2).add(runner3).add(runner4).add(runner5) @@ -1896,14 +2029,12 @@ describe('Runner.js', () => { arr.merge() expect(arr.runners[0]).toEqual(any(FakeRunner)) expect(arr.runners[0].transforms).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) + new Matrix({ translate: [10, 20] }).rotate(45) ) expect(arr.runners[2]).toEqual(any(FakeRunner)) expect(arr.runners[2].transforms).toEqual( - new Matrix({ translate: [ 10, 20 ] }) - .rotate(45) + new Matrix({ translate: [10, 20] }).rotate(45) ) expect(arr.runners[1]).toBe(runner3) @@ -1940,7 +2071,12 @@ describe('Runner.js', () => { arr.add(runner1).add(runner2).add(runner3).add(runner4).add(runner5) arr.clearBefore(runner3.id) expect(arr.length()).toBe(4) - expect(arr.runners).toEqual([ any(FakeRunner), runner3, runner4, runner5 ]) + expect(arr.runners).toEqual([ + any(FakeRunner), + runner3, + runner4, + runner5 + ]) }) }) }) diff --git a/spec/spec/animation/Timeline.js b/spec/spec/animation/Timeline.js index 5f511ff..cbb40f8 100644 --- a/spec/spec/animation/Timeline.js +++ b/spec/spec/animation/Timeline.js @@ -1,6 +1,13 @@ /* globals describe, expect, it, beforeEach, afterEach, spyOn, container, jasmine */ -import { Timeline, SVG, Runner, Animator, Queue, Rect } from '../../../src/main.js' +import { + Timeline, + SVG, + Runner, + Animator, + Queue, + Rect +} from '../../../src/main.js' import { getWindow } from '../../../src/utils/window.js' const { createSpy, any } = jasmine @@ -127,7 +134,9 @@ describe('Timeline.js', () => { it('throws if when is not supported', () => { const timeline = new Timeline().schedule(new Runner(1000), 1000) const runner = new Runner(1000) - expect(() => timeline.schedule(runner, 0, 'not supported')).toThrowError('Invalid value for the "when" parameter') + expect(() => timeline.schedule(runner, 0, 'not supported')).toThrowError( + 'Invalid value for the "when" parameter' + ) }) it('uses persist value of the runner of present', () => { @@ -152,7 +161,9 @@ describe('Timeline.js', () => { it('gets a runner by its id from the timeline', () => { const timeline = new Timeline() const runner = new Runner(1000) - expect(timeline.schedule(runner).getRunnerInfoById(runner.id).runner).toBe(runner) + expect( + timeline.schedule(runner).getRunnerInfoById(runner.id).runner + ).toBe(runner) }) it('returns null of runner not found', () => { @@ -460,7 +471,10 @@ describe('Timeline.js', () => { it('continues if there are still runners left from us when going back in time', () => { const spy = createSpy() - const timeline = new Timeline().on('finished', spy).time(1200).reverse(true) + const timeline = new Timeline() + .on('finished', spy) + .time(1200) + .reverse(true) const runner = new Runner(1000) spy.calls.reset() timeline.schedule(runner, 0).play() // we have to play because its synchronous here diff --git a/spec/spec/elements/A.js b/spec/spec/elements/A.js index 854204e..5fcbe87 100644 --- a/spec/spec/elements/A.js +++ b/spec/spec/elements/A.js @@ -6,7 +6,6 @@ const { any } = jasmine const url = 'https://svgjs.dev' describe('A.js', () => { - describe('()', () => { it('creates a new object of type A', () => { expect(new A()).toEqual(any(A)) @@ -81,7 +80,7 @@ describe('A.js', () => { expect(link.parent()).toBe(null) }) - it('removes also the link when link wasn\'t in document', () => { + it("removes also the link when link wasn't in document", () => { const link = new A().to(url) const rect = link.rect(100, 100) @@ -116,5 +115,4 @@ describe('A.js', () => { }) }) }) - }) diff --git a/spec/spec/elements/ClipPath.js b/spec/spec/elements/ClipPath.js index 1effe6d..5061a10 100644 --- a/spec/spec/elements/ClipPath.js +++ b/spec/spec/elements/ClipPath.js @@ -37,7 +37,7 @@ describe('ClipPath.js', () => { const canvas = SVG().addTo(container) const clip = canvas.clip() const rect = canvas.rect(100, 100).clipWith(clip) - expect(clip.targets()).toEqual([ rect ]) + expect(clip.targets()).toEqual([rect]) }) }) @@ -47,7 +47,7 @@ describe('ClipPath.js', () => { const canvas = SVG() const clip = canvas.clip() expect(clip).toEqual(any(ClipPath)) - expect(canvas.defs().children()).toEqual([ clip ]) + expect(canvas.defs().children()).toEqual([clip]) }) }) }) diff --git a/spec/spec/elements/Container.js b/spec/spec/elements/Container.js index 5d53eb1..f9741ed 100644 --- a/spec/spec/elements/Container.js +++ b/spec/spec/elements/Container.js @@ -61,7 +61,16 @@ describe('Container.js', () => { it('flattens the whole document when called on the root', () => { canvas.flatten() - expect(canvas.children()).toEqual([ rect1, rect2, circle1, circle2, line1, line2, circle3, rect3 ]) + expect(canvas.children()).toEqual([ + rect1, + rect2, + circle1, + circle2, + line1, + line2, + circle3, + rect3 + ]) }) it('flattens a group and places all children into its parent when called on a group - 1', () => { @@ -81,8 +90,15 @@ describe('Container.js', () => { rect3 */ - expect(canvas.children()).toEqual([ rect1, group1, group4 ]) - expect(group1.children()).toEqual([ rect2, circle1, circle2, line1, line2, circle3 ]) + expect(canvas.children()).toEqual([rect1, group1, group4]) + expect(group1.children()).toEqual([ + rect2, + circle1, + circle2, + line1, + line2, + circle3 + ]) }) it('flattens a group and places all children into its parent when called on a group - 2', () => { @@ -103,7 +119,7 @@ describe('Container.js', () => { rect3 */ - expect(group2.children()).toEqual([ circle2, line1, line2, circle3 ]) + expect(group2.children()).toEqual([circle2, line1, line2, circle3]) }) }) @@ -111,21 +127,27 @@ describe('Container.js', () => { it('ungroups a group and inserts all children in the correct order in the parent parent of the group', () => { group1.ungroup() - expect(canvas.children()).toEqual([ rect1, rect2, circle1, group2, group4 ]) + expect(canvas.children()).toEqual([rect1, rect2, circle1, group2, group4]) group4.ungroup() - expect(canvas.children()).toEqual([ rect1, rect2, circle1, group2, rect3 ]) + expect(canvas.children()).toEqual([rect1, rect2, circle1, group2, rect3]) }) it('ungroups a group into another group and appends the elements to the other group', () => { group1.ungroup(group4) - expect(group4.children()).toEqual([ rect3, rect2, circle1, group2 ]) + expect(group4.children()).toEqual([rect3, rect2, circle1, group2]) }) it('ungroups a group into another group at the specified position', () => { group2.ungroup(group1, 1) - expect(group1.children()).toEqual([ rect2, circle2, group3, circle3, circle1 ]) + expect(group1.children()).toEqual([ + rect2, + circle2, + group3, + circle3, + circle1 + ]) }) }) }) diff --git a/spec/spec/elements/Dom.js b/spec/spec/elements/Dom.js index e33883d..3325d93 100644 --- a/spec/spec/elements/Dom.js +++ b/spec/spec/elements/Dom.js @@ -1,12 +1,22 @@ /* globals describe, expect, it, beforeEach, spyOn, jasmine, container */ -import { SVG, G, Rect, Svg, Dom, List, Fragment, Circle, Tspan, create } from '../../../src/main.js' +import { + SVG, + G, + Rect, + Svg, + Dom, + List, + Fragment, + Circle, + Tspan, + create +} from '../../../src/main.js' import { getWindow } from '../../../src/utils/window.js' import { svg, html } from '../../../src/modules/core/namespaces.js' const { any, createSpy, objectContaining } = jasmine describe('Dom.js', function () { - describe('()', () => { it('creates a new object of type Dom', () => { const rect = new Rect() @@ -119,7 +129,7 @@ describe('Dom.js', function () { const rect = g.rect(100, 100) const circle = g.circle(100, 100) const children = g.children() - expect(children).toEqual([ rect, circle ]) + expect(children).toEqual([rect, circle]) expect(children).toEqual(any(List)) }) }) @@ -197,8 +207,8 @@ describe('Dom.js', function () { group.each(spy) expect(spy.calls.all()).toEqual([ - objectContaining({ object: group2, args: [ 0, [ group2, circle ] ] }), - objectContaining({ object: circle, args: [ 1, [ group2, circle ] ] }) + objectContaining({ object: group2, args: [0, [group2, circle]] }), + objectContaining({ object: circle, args: [1, [group2, circle]] }) ]) }) @@ -211,9 +221,9 @@ describe('Dom.js', function () { group.each(spy, true) expect(spy.calls.all()).toEqual([ - objectContaining({ object: group2, args: [ 0, [ group2, circle ] ] }), - objectContaining({ object: rect, args: [ 0, [ rect ] ] }), - objectContaining({ object: circle, args: [ 1, [ group2, circle ] ] }) + objectContaining({ object: group2, args: [0, [group2, circle]] }), + objectContaining({ object: rect, args: [0, [rect]] }), + objectContaining({ object: circle, args: [1, [group2, circle]] }) ]) }) }) @@ -277,7 +287,7 @@ describe('Dom.js', function () { expect(g.has(rect)).toBe(true) }) - it('returns false if the element hasn\'t the passed element as child', () => { + it("returns false if the element hasn't the passed element as child", () => { const g = new G() const rect = new Rect() expect(g.has(rect)).toBe(false) @@ -437,7 +447,7 @@ describe('Dom.js', function () { const rect = new Rect() const ret = rect.putIn(g) expect(ret).toEqual(any(G)) - expect(ret.children()).toEqual([ rect ]) + expect(ret.children()).toEqual([rect]) }) it('works with a query selector', () => { @@ -446,7 +456,7 @@ describe('Dom.js', function () { const rect = canvas.rect(100, 100) const ret = rect.putIn('.test') expect(ret).toBe(g) - expect(g.children()).toEqual([ rect ]) + expect(g.children()).toEqual([rect]) }) }) @@ -460,7 +470,7 @@ describe('Dom.js', function () { it('removes the element from the parent', () => { const canvas = SVG().addTo(container) const rect = canvas.rect(100, 100) - expect(canvas.children()).toEqual([ rect ]) + expect(canvas.children()).toEqual([rect]) rect.remove() expect(canvas.children()).toEqual([]) }) @@ -473,7 +483,7 @@ describe('Dom.js', function () { it('also works when direct child of document-fragment', () => { const fragment = new Fragment() const rect = fragment.rect(100, 100) - expect(fragment.children()).toEqual([ rect ]) + expect(fragment.children()).toEqual([rect]) expect(rect.remove()).toBe(rect) expect(fragment.children()).toEqual([]) }) @@ -518,7 +528,7 @@ describe('Dom.js', function () { const rect3 = g.rect(100, 100) const circle = new Circle() rect2.replace(circle) - expect(g.children()).toEqual([ rect1, circle, rect3 ]) + expect(g.children()).toEqual([rect1, circle, rect3]) }) it('also works without a parent', () => { @@ -531,17 +541,32 @@ describe('Dom.js', function () { describe('round()', () => { it('rounds all attributes whose values are numbers to two decimals by default', () => { const rect = new Rect({ id: 'foo', x: 10.678, y: 3, width: 123.456 }) - expect(rect.round().attr()).toEqual({ id: 'foo', x: 10.68, y: 3, width: 123.46 }) + expect(rect.round().attr()).toEqual({ + id: 'foo', + x: 10.68, + y: 3, + width: 123.46 + }) }) it('rounds all attributes whose values are numbers to the passed precision', () => { const rect = new Rect({ id: 'foo', x: 10.678, y: 3, width: 123.456 }) - expect(rect.round(1).attr()).toEqual({ id: 'foo', x: 10.7, y: 3, width: 123.5 }) + expect(rect.round(1).attr()).toEqual({ + id: 'foo', + x: 10.7, + y: 3, + width: 123.5 + }) }) it('rounds the given attributes whose values are numbers to the passed precision', () => { const rect = new Rect({ id: 'foo', x: 10.678, y: 3, width: 123.456 }) - expect(rect.round(1, [ 'id', 'x' ]).attr()).toEqual({ id: 'foo', x: 10.7, y: 3, width: 123.456 }) + expect(rect.round(1, ['id', 'x']).attr()).toEqual({ + id: 'foo', + x: 10.7, + y: 3, + width: 123.456 + }) }) }) @@ -632,9 +657,9 @@ describe('Dom.js', function () { }) }) - describe('writeDataToDom()', () => { - // not really testable - }) + // describe('writeDataToDom()', () => { + // // not really testable + // }) describe('xml()', () => { describe('as setter', () => { @@ -645,27 +670,27 @@ describe('Dom.js', function () { it('imports a single element', () => { const g = new G().xml('<rect />', undefined, svg) - expect(g.children()).toEqual([ any(Rect) ]) + expect(g.children()).toEqual([any(Rect)]) expect(g.children()[0].node.namespaceURI).toBe(svg) }) it('imports multiple elements', () => { const g = new G().xml('<rect /><circle />', undefined, svg) - expect(g.children()).toEqual([ any(Rect), any(Circle) ]) + expect(g.children()).toEqual([any(Rect), any(Circle)]) }) it('replaces the current element with the imported elements with outerHtml = true', () => { const canvas = new Svg() const g = canvas.group() g.xml('<rect /><circle />', true, svg) - expect(canvas.children()).toEqual([ any(Rect), any(Circle) ]) + expect(canvas.children()).toEqual([any(Rect), any(Circle)]) }) it('returns the parent when outerHtml = true', () => { const canvas = new Svg() const g = canvas.group() expect(g.xml('<rect /><circle />', true, svg)).toBe(canvas) - expect(canvas.children()).toEqual([ any(Rect), any(Circle) ]) + expect(canvas.children()).toEqual([any(Rect), any(Circle)]) }) it('works without a parent', () => { @@ -684,46 +709,58 @@ describe('Dom.js', function () { }) it('returns the svg string of the element by default', () => { - expect(rect.xml(), svg).toBe('<rect width="123.456" height="234.567"></rect>') - expect(canvas.xml(), svg).toBe('<svg><g><rect width="123.456" height="234.567"></rect></g></svg>') + expect(rect.xml(), svg).toBe( + '<rect width="123.456" height="234.567"></rect>' + ) + expect(canvas.xml(), svg).toBe( + '<svg><g><rect width="123.456" height="234.567"></rect></g></svg>' + ) }) it('returns the innerHtml when outerHtml = false', () => { expect(rect.xml(false, svg)).toBe('') - expect(canvas.xml(false, svg)).toBe('<g><rect width="123.456" height="234.567"></rect></g>') + expect(canvas.xml(false, svg)).toBe( + '<g><rect width="123.456" height="234.567"></rect></g>' + ) }) it('runs a function on every exported node', () => { - expect(rect.xml((el) => el.round(1))).toBe('<rect width="123.5" height="234.6"></rect>') + expect(rect.xml((el) => el.round(1))).toBe( + '<rect width="123.5" height="234.6"></rect>' + ) }) it('runs a function on every exported node and replaces node with returned node if return value is not falsy', () => { - expect(rect.xml((el) => new Circle(), svg)).toBe('<circle></circle>') - expect(canvas.xml((el) => new G(), svg)).toBe('<g></g>') // outer <svg> was replaced by an empty g - expect(canvas.xml((el) => { - if (el instanceof Rect) return new Circle() - if (el instanceof Svg) el.removeNamespace() - }, svg)).toBe('<svg><g><circle></circle></g></svg>') + expect(rect.xml(() => new Circle(), svg)).toBe('<circle></circle>') + expect(canvas.xml(() => new G(), svg)).toBe('<g></g>') // outer <svg> was replaced by an empty g + expect( + canvas.xml((el) => { + if (el instanceof Rect) return new Circle() + if (el instanceof Svg) el.removeNamespace() + }, svg) + ).toBe('<svg><g><circle></circle></g></svg>') }) it('runs a function on every exported node and removes node if return value is false', () => { expect(group.xml(() => false, svg)).toBe('') expect(canvas.xml(() => false, svg)).toBe('') - expect(canvas.xml((el) => { - if (el instanceof Svg) { - el.removeNamespace() - } else { - return false - } - }, svg)).toBe('<svg></svg>') + expect( + canvas.xml((el) => { + if (el instanceof Svg) { + el.removeNamespace() + } else { + return false + } + }, svg) + ).toBe('<svg></svg>') }) it('runs a function on every inner node and exports it when outerHtml = false', () => { expect(canvas.xml(() => false, false, svg)).toBe('') - expect(canvas.xml(() => undefined, false, svg)).toBe('<g><rect width="123.456" height="234.567"></rect></g>') + expect(canvas.xml(() => undefined, false, svg)).toBe( + '<g><rect width="123.456" height="234.567"></rect></g>' + ) }) - }) - }) }) diff --git a/spec/spec/elements/Element.js b/spec/spec/elements/Element.js index 70c3a52..53c5028 100644 --- a/spec/spec/elements/Element.js +++ b/spec/spec/elements/Element.js @@ -171,10 +171,10 @@ describe('Element.js', function () { const group3 = group2.group() const rect = group3.rect(100, 100) - expect(rect.parents('.test')).toEqual([ group3, group2, group1 ]) - expect(rect.parents(group2)).toEqual([ group3, group2 ]) + expect(rect.parents('.test')).toEqual([group3, group2, group1]) + expect(rect.parents(group2)).toEqual([group3, group2]) expect(rect.parents(group1).length).toBe(3) - expect(rect.parents()).toEqual([ group3, group2, group1, canvas ]) + expect(rect.parents()).toEqual([group3, group2, group1, canvas]) }) it('returns array of parents until the closest matching parent', () => { @@ -185,9 +185,9 @@ describe('Element.js', function () { const group3 = group2.group().addClass('foo') const rect = group3.rect(100, 100) - expect(rect.parents('.test')).toEqual([ group3, group2 ]) - expect(rect.parents('.foo')).toEqual([ group3 ]) - expect(rect.parents('.test:not(.foo)')).toEqual([ group3, group2, group1 ]) + expect(rect.parents('.test')).toEqual([group3, group2]) + expect(rect.parents('.foo')).toEqual([group3]) + expect(rect.parents('.test:not(.foo)')).toEqual([group3, group2, group1]) }) it('returns null if the passed element is not an ancestor', () => { @@ -198,7 +198,6 @@ describe('Element.js', function () { const group3 = group2.group() const rect = group3.rect(100, 100) - expect(rect.parents('.does-not-exist')).toEqual(null) expect(rect.parents('.test')).toEqual(null) expect(rect.parents(groupA)).toEqual(null) @@ -274,7 +273,9 @@ describe('Element.js', function () { it('writes data from the dom property into the dom', () => { element.dom = { foo: 'bar' } element.writeDataToDom() - expect(element.node.getAttribute('svgjs:data')).toBe(JSON.stringify({ foo: 'bar' })) + expect(element.node.getAttribute('svgjs:data')).toBe( + JSON.stringify({ foo: 'bar' }) + ) }) it('recursively calls writeDataToDom on all children', () => { diff --git a/spec/spec/elements/ForeignObject.js b/spec/spec/elements/ForeignObject.js index 14e9e00..0040d04 100644 --- a/spec/spec/elements/ForeignObject.js +++ b/spec/spec/elements/ForeignObject.js @@ -5,7 +5,6 @@ import { makeInstance, ForeignObject } from '../../../src/main.js' const { any } = jasmine describe('ForeignObject.js', () => { - describe('()', () => { it('creates a new object of type ForeignObject', () => { expect(new ForeignObject()).toEqual(any(ForeignObject)) diff --git a/spec/spec/elements/Fragment.js b/spec/spec/elements/Fragment.js index 8e6503d..dfac3d0 100644 --- a/spec/spec/elements/Fragment.js +++ b/spec/spec/elements/Fragment.js @@ -7,7 +7,6 @@ import { svg } from '../../../src/modules/core/namespaces.js' const { any } = jasmine describe('Fragment.js', () => { - describe('()', () => { it('creates a new object of type Fragment', () => { expect(new Fragment()).toEqual(any(Fragment)) @@ -22,7 +21,7 @@ describe('Fragment.js', () => { const frag = new Fragment() const rect = frag.rect(100, 100) - expect(frag.children()).toEqual([ rect ]) + expect(frag.children()).toEqual([rect]) }) }) @@ -43,7 +42,9 @@ describe('Fragment.js', () => { group.rect(123.456, 234.567) const spy = spyOn(Dom.prototype, 'xml').and.callThrough() - expect(frag.xml(false, svg)).toBe('<g><rect width="123.456" height="234.567"></rect></g>') + expect(frag.xml(false, svg)).toBe( + '<g><rect width="123.456" height="234.567"></rect></g>' + ) expect(spy).toHaveBeenCalledWith(false, svg) }) @@ -53,10 +54,11 @@ describe('Fragment.js', () => { group.rect(123.456, 234.567) const spy = spyOn(Dom.prototype, 'xml').and.callThrough() - expect(frag.xml(true, svg)).toBe('<g><rect width="123.456" height="234.567"></rect></g>') + expect(frag.xml(true, svg)).toBe( + '<g><rect width="123.456" height="234.567"></rect></g>' + ) expect(spy).toHaveBeenCalledWith(false, svg) }) }) - }) }) diff --git a/spec/spec/elements/G.js b/spec/spec/elements/G.js index 58dc07d..b46e232 100644 --- a/spec/spec/elements/G.js +++ b/spec/spec/elements/G.js @@ -5,7 +5,6 @@ import { G, SVG } from '../../../src/main.js' const { any } = jasmine describe('G.js', () => { - describe('()', () => { it('creates a new object of type G', () => { expect(new G()).toEqual(any(G)) diff --git a/spec/spec/elements/Gradient.js b/spec/spec/elements/Gradient.js index 76c36ce..41b896e 100644 --- a/spec/spec/elements/Gradient.js +++ b/spec/spec/elements/Gradient.js @@ -46,7 +46,7 @@ describe('Gradient.js', () => { const canvas = SVG().addTo(container) const gradient = canvas.gradient('linear') const rect = canvas.rect(100, 100).fill(gradient) - expect(gradient.targets()).toEqual([ rect ]) + expect(gradient.targets()).toEqual([rect]) }) }) @@ -69,7 +69,7 @@ describe('Gradient.js', () => { const spy = createSpy('gradient') gradient.update(spy) expect(spy.calls.all()).toEqual([ - objectContaining({ object: gradient, args: [ gradient ] }) + objectContaining({ object: gradient, args: [gradient] }) ]) }) }) @@ -102,7 +102,7 @@ describe('Gradient.js', () => { const gradient = defs.gradient('linear', spy) expect(gradient).toEqual(any(Gradient)) expect(gradient.type).toBe('linearGradient') - expect(defs.children()).toEqual([ gradient ]) + expect(defs.children()).toEqual([gradient]) expect(spy).toHaveBeenCalled() }) }) diff --git a/spec/spec/elements/Image.js b/spec/spec/elements/Image.js index c7b91d2..2e92e13 100644 --- a/spec/spec/elements/Image.js +++ b/spec/spec/elements/Image.js @@ -7,7 +7,6 @@ const { any, objectContaining, createSpy } = jasmine const url = 'spec/fixtures/pixel.png' describe('Image.js', () => { - describe('()', () => { it('creates a new object of type Image', () => { expect(new Image()).toEqual(any(Image)) @@ -28,7 +27,7 @@ describe('Image.js', () => { const spy = createSpy('image', (e) => { expect(e.target.complete).toBe(true) expect(spy.calls.all()).toEqual([ - objectContaining({ object: image, args: [ any(getWindow().Event) ] }) + objectContaining({ object: image, args: [any(getWindow().Event)] }) ]) done() }).and.callThrough() @@ -53,29 +52,37 @@ describe('Image.js', () => { }) it('should not change with and height when size already set', (done) => { - const image = new Image().load(url, () => { - expect(image.attr('height')).toBe(100) - expect(image.attr('width')).toBe(100) - done() - }).size(100, 100) + const image = new Image() + .load(url, () => { + expect(image.attr('height')).toBe(100) + expect(image.attr('width')).toBe(100) + done() + }) + .size(100, 100) }) it('changes size of pattern to image size if parent is pattern and size is 0', (done) => { const pattern = new Pattern().size(0, 0) - new Image().load(url, () => { - expect(pattern.attr('height')).toBe(100) - expect(pattern.attr('width')).toBe(100) - done() - }).size(100, 100).addTo(pattern) + new Image() + .load(url, () => { + expect(pattern.attr('height')).toBe(100) + expect(pattern.attr('width')).toBe(100) + done() + }) + .size(100, 100) + .addTo(pattern) }) it('does not change size of pattern if pattern has a size set', (done) => { const pattern = new Pattern().size(50, 50) - new Image().load(url, () => { - expect(pattern.attr('height')).toBe(50) - expect(pattern.attr('width')).toBe(50) - done() - }).size(100, 100).addTo(pattern) + new Image() + .load(url, () => { + expect(pattern.attr('height')).toBe(50) + expect(pattern.attr('width')).toBe(50) + done() + }) + .size(100, 100) + .addTo(pattern) }) }) @@ -85,7 +92,7 @@ describe('Image.js', () => { const canvas = SVG() const image = canvas.image(url) expect(image).toBe(image) - expect(canvas.children()).toEqual([ image ]) + expect(canvas.children()).toEqual([image]) }) }) }) @@ -95,21 +102,21 @@ describe('Image.js', () => { const canvas = SVG() const image = new Image() canvas.rect(100, 100).attr('something', image) - expect(canvas.defs().children()).toEqual([ any(Pattern) ]) + expect(canvas.defs().children()).toEqual([any(Pattern)]) expect(canvas.defs().findOne('image')).toBe(image) }) it('creates an image from image path in defs with pattern when attr is fill', () => { const canvas = SVG() canvas.rect(100, 100).attr('fill', url) - expect(canvas.defs().children()).toEqual([ any(Pattern) ]) + expect(canvas.defs().children()).toEqual([any(Pattern)]) expect(canvas.defs().findOne('image').attr('href')).toBe(url) }) it('creates an image from image path in defs with pattern when attr is stroke', () => { const canvas = SVG() canvas.rect(100, 100).attr('stroke', url) - expect(canvas.defs().children()).toEqual([ any(Pattern) ]) + expect(canvas.defs().children()).toEqual([any(Pattern)]) expect(canvas.defs().findOne('image').attr('href')).toBe(url) }) }) diff --git a/spec/spec/elements/Line.js b/spec/spec/elements/Line.js index 9f25937..48a02bf 100644 --- a/spec/spec/elements/Line.js +++ b/spec/spec/elements/Line.js @@ -25,7 +25,10 @@ describe('Line.js', () => { it('returns a PointArray containing the points of the line', () => { const array = line.plot(1, 2, 3, 4).array() expect(array).toEqual(any(PointArray)) - expect(array).toEqual([ [ 1, 2 ], [ 3, 4 ] ]) + expect(array).toEqual([ + [1, 2], + [3, 4] + ]) }) }) @@ -38,9 +41,14 @@ describe('Line.js', () => { const canvas = SVG().addTo(container) const line = canvas.line(1, 2, 3, 4) line.move(50, 50) - expect(line.bbox()).toEqual(objectContaining({ - x: 50, y: 50, width: 2, height: 2 - })) + expect(line.bbox()).toEqual( + objectContaining({ + x: 50, + y: 50, + width: 2, + height: 2 + }) + ) }) }) @@ -65,19 +73,27 @@ describe('Line.js', () => { it('calls attr with line attributes when array given', () => { const spy = spyOn(line, 'attr') - line.plot([ 1, 2, 3, 4 ]) + line.plot([1, 2, 3, 4]) expect(spy).toHaveBeenCalledWith({ x1: 1, y1: 2, x2: 3, y2: 4 }) }) it('calls attr with line attributes when multi array given', () => { const spy = spyOn(line, 'attr') - line.plot([ [ 1, 2 ], [ 3, 4 ] ]) + line.plot([ + [1, 2], + [3, 4] + ]) expect(spy).toHaveBeenCalledWith({ x1: 1, y1: 2, x2: 3, y2: 4 }) }) it('calls attr with line attributes when PointArray given', () => { const spy = spyOn(line, 'attr') - line.plot(new PointArray([ [ 1, 2 ], [ 3, 4 ] ])) + line.plot( + new PointArray([ + [1, 2], + [3, 4] + ]) + ) expect(spy).toHaveBeenCalledWith({ x1: 1, y1: 2, x2: 3, y2: 4 }) }) }) @@ -91,27 +107,42 @@ describe('Line.js', () => { const canvas = SVG().addTo(container) const line = canvas.line(1, 2, 3, 4) line.size(50, 50) - expect(line.bbox()).toEqual(objectContaining({ - width: 50, height: 50, x: 1, y: 2 - })) + expect(line.bbox()).toEqual( + objectContaining({ + width: 50, + height: 50, + x: 1, + y: 2 + }) + ) }) it('changes height proportionally', () => { const canvas = SVG().addTo(container) const line = canvas.line(1, 2, 3, 4) line.size(50, null) - expect(line.bbox()).toEqual(objectContaining({ - width: 50, height: 50, x: 1, y: 2 - })) + expect(line.bbox()).toEqual( + objectContaining({ + width: 50, + height: 50, + x: 1, + y: 2 + }) + ) }) it('changes width proportionally', () => { const canvas = SVG().addTo(container) const line = canvas.line(1, 2, 3, 4) line.size(null, 50) - expect(line.bbox()).toEqual(objectContaining({ - width: 50, height: 50, x: 1, y: 2 - })) + expect(line.bbox()).toEqual( + objectContaining({ + width: 50, + height: 50, + x: 1, + y: 2 + }) + ) }) }) @@ -120,14 +151,20 @@ describe('Line.js', () => { it('creates a line with given points', () => { const group = new G() const line = group.line(1, 2, 3, 4) - expect(line.array()).toEqual([ [ 1, 2 ], [ 3, 4 ] ]) + expect(line.array()).toEqual([ + [1, 2], + [3, 4] + ]) expect(line).toEqual(any(Line)) }) it('defaults to zero line', () => { const group = new G() const line = group.line() - expect(line.array()).toEqual([ [ 0, 0 ], [ 0, 0 ] ]) + expect(line.array()).toEqual([ + [0, 0], + [0, 0] + ]) expect(line).toEqual(any(Line)) }) }) diff --git a/spec/spec/elements/Marker.js b/spec/spec/elements/Marker.js index 63e06fe..cddfc50 100644 --- a/spec/spec/elements/Marker.js +++ b/spec/spec/elements/Marker.js @@ -5,7 +5,6 @@ import { Marker, SVG, Defs } from '../../../src/main.js' const { any } = jasmine describe('Marker.js', function () { - describe('()', () => { it('creates a new object of type Marker', () => { expect(new Marker()).toEqual(any(Marker)) @@ -106,7 +105,7 @@ describe('Marker.js', function () { expect(marker.attr('viewBox')).toBe('0 0 10 12') expect(marker.attr('orient')).toBe('auto') expect(marker).toEqual(any(Marker)) - expect(defs.children()).toEqual([ marker ]) + expect(defs.children()).toEqual([marker]) }) }) }) @@ -117,7 +116,9 @@ describe('Marker.js', function () { beforeEach(() => { // because we use `reference` here we need to put it into the live dom canvas = new SVG().addTo(container) - path = canvas.path('M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100') + path = canvas.path( + 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' + ) }) it('creates an instance of Marker', () => { @@ -172,7 +173,5 @@ describe('Marker.js', function () { expect(path.node.getAttribute('marker-mid')).toBe(marker.toString()) }) }) - }) - }) diff --git a/spec/spec/elements/Mask.js b/spec/spec/elements/Mask.js index 32e5d15..08a1aaa 100644 --- a/spec/spec/elements/Mask.js +++ b/spec/spec/elements/Mask.js @@ -5,7 +5,6 @@ import { Mask, SVG, Container, Rect } from '../../../src/main.js' const { any } = jasmine describe('Mask.js', () => { - describe('()', () => { it('creates a new object of type Mask', () => { expect(new Mask()).toEqual(any(Mask)) @@ -38,7 +37,7 @@ describe('Mask.js', () => { const canvas = SVG().addTo(container) const mask = canvas.mask() const rect = canvas.rect(100, 100).maskWith(mask) - expect(mask.targets()).toEqual([ rect ]) + expect(mask.targets()).toEqual([rect]) }) }) @@ -48,7 +47,7 @@ describe('Mask.js', () => { const canvas = SVG() const mask = canvas.mask() expect(mask).toEqual(any(Mask)) - expect(canvas.defs().children()).toEqual([ mask ]) + expect(canvas.defs().children()).toEqual([mask]) }) }) }) diff --git a/spec/spec/elements/Path.js b/spec/spec/elements/Path.js index d43857e..08105bc 100644 --- a/spec/spec/elements/Path.js +++ b/spec/spec/elements/Path.js @@ -25,7 +25,10 @@ describe('Path.js', () => { it('returns the underlying PathArray', () => { const array = path.plot('M1 2 3 4').array() expect(array).toEqual(any(PathArray)) - expect(array).toEqual([ [ 'M', 1, 2 ], [ 'L', 3, 4 ] ]) + expect(array).toEqual([ + ['M', 1, 2], + ['L', 3, 4] + ]) }) }) @@ -61,9 +64,14 @@ describe('Path.js', () => { const canvas = SVG().addTo(container) const path = canvas.path('M0 0 50, 50') path.move(50, 50) - expect(path.bbox()).toEqual(objectContaining({ - x: 50, y: 50, width: 50, height: 50 - })) + expect(path.bbox()).toEqual( + objectContaining({ + x: 50, + y: 50, + width: 50, + height: 50 + }) + ) }) }) @@ -82,20 +90,37 @@ describe('Path.js', () => { it('works with flat array', () => { const spy = spyOn(path, 'attr') - path.plot([ 'M', 0, 0, 'L', 50, 50 ]) - expect(spy).toHaveBeenCalledWith('d', [ [ 'M', 0, 0 ], [ 'L', 50, 50 ] ]) + path.plot(['M', 0, 0, 'L', 50, 50]) + expect(spy).toHaveBeenCalledWith('d', [ + ['M', 0, 0], + ['L', 50, 50] + ]) }) it('works with multi array', () => { const spy = spyOn(path, 'attr') - path.plot([ [ 'M', 0, 0 ], [ 'L', 50, 50 ] ]) - expect(spy).toHaveBeenCalledWith('d', [ [ 'M', 0, 0 ], [ 'L', 50, 50 ] ]) + path.plot([ + ['M', 0, 0], + ['L', 50, 50] + ]) + expect(spy).toHaveBeenCalledWith('d', [ + ['M', 0, 0], + ['L', 50, 50] + ]) }) it('works with PathArray', () => { const spy = spyOn(path, 'attr') - path.plot(new PathArray([ [ 'M', 0, 0 ], [ 'L', 50, 50 ] ])) - expect(spy).toHaveBeenCalledWith('d', [ [ 'M', 0, 0 ], [ 'L', 50, 50 ] ]) + path.plot( + new PathArray([ + ['M', 0, 0], + ['L', 50, 50] + ]) + ) + expect(spy).toHaveBeenCalledWith('d', [ + ['M', 0, 0], + ['L', 50, 50] + ]) }) }) @@ -108,27 +133,42 @@ describe('Path.js', () => { const canvas = SVG().addTo(container) const path = canvas.path('M0 0 50, 50') path.size(100, 100) - expect(path.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(path.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) it('changes height proportionally', () => { const canvas = SVG().addTo(container) const path = canvas.path('M0 0 50, 50') path.size(100, null) - expect(path.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(path.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) it('changes width proportionally', () => { const canvas = SVG().addTo(container) const path = canvas.path('M0 0 50, 50') path.size(null, 100) - expect(path.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(path.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) }) diff --git a/spec/spec/elements/Pattern.js b/spec/spec/elements/Pattern.js index 670a1af..edc9841 100644 --- a/spec/spec/elements/Pattern.js +++ b/spec/spec/elements/Pattern.js @@ -39,7 +39,7 @@ describe('Pattern.js', () => { const canvas = SVG().addTo(container) const pattern = canvas.pattern() const rect = canvas.rect(100, 100).fill(pattern) - expect(pattern.targets()).toEqual([ rect ]) + expect(pattern.targets()).toEqual([rect]) }) }) @@ -62,7 +62,7 @@ describe('Pattern.js', () => { const spy = createSpy('pattern') pattern.update(spy) expect(spy.calls.all()).toEqual([ - objectContaining({ object: pattern, args: [ pattern ] }) + objectContaining({ object: pattern, args: [pattern] }) ]) }) }) @@ -94,9 +94,14 @@ describe('Pattern.js', () => { const spy = createSpy('pattern') const pattern = defs.pattern(100, 100, spy) expect(pattern).toEqual(any(Pattern)) - expect(defs.children()).toEqual([ pattern ]) + expect(defs.children()).toEqual([pattern]) expect(spy).toHaveBeenCalled() - expect(pattern.attr([ 'x', 'y', 'width', 'height' ])).toEqual({ x: 0, y: 0, width: 100, height: 100 }) + expect(pattern.attr(['x', 'y', 'width', 'height'])).toEqual({ + x: 0, + y: 0, + width: 100, + height: 100 + }) }) }) }) diff --git a/spec/spec/elements/Polygon.js b/spec/spec/elements/Polygon.js index 8a3f226..872aa32 100644 --- a/spec/spec/elements/Polygon.js +++ b/spec/spec/elements/Polygon.js @@ -19,8 +19,11 @@ describe('Polygon.js', () => { describe('polygon()', () => { it('creates a polygon with given points', () => { const group = new G() - const polygon = group.polygon([ 1, 2, 3, 4 ]) - expect(polygon.array()).toEqual([ [ 1, 2 ], [ 3, 4 ] ]) + const polygon = group.polygon([1, 2, 3, 4]) + expect(polygon.array()).toEqual([ + [1, 2], + [3, 4] + ]) expect(polygon).toEqual(any(Polygon)) }) }) @@ -28,7 +31,7 @@ describe('Polygon.js', () => { it('creates a polygon with one point by default', () => { const group = new G() const polygon = group.polygon() - expect(polygon.array()).toEqual([ [ 0, 0 ] ]) + expect(polygon.array()).toEqual([[0, 0]]) expect(polygon).toEqual(any(Polygon)) }) }) diff --git a/spec/spec/elements/Polyline.js b/spec/spec/elements/Polyline.js index 76dca30..e4a571f 100644 --- a/spec/spec/elements/Polyline.js +++ b/spec/spec/elements/Polyline.js @@ -19,15 +19,18 @@ describe('Polyline.js', () => { describe('polyline()', () => { it('creates a polyline with given points', () => { const group = new G() - const polyline = group.polyline([ 1, 2, 3, 4 ]) - expect(polyline.array()).toEqual([ [ 1, 2 ], [ 3, 4 ] ]) + const polyline = group.polyline([1, 2, 3, 4]) + expect(polyline.array()).toEqual([ + [1, 2], + [3, 4] + ]) expect(polyline).toEqual(any(Polyline)) }) it('creates a polyline with one point by default', () => { const group = new G() const polyline = group.polyline() - expect(polyline.array()).toEqual([ [ 0, 0 ] ]) + expect(polyline.array()).toEqual([[0, 0]]) expect(polyline).toEqual(any(Polyline)) }) }) diff --git a/spec/spec/elements/Rect.js b/spec/spec/elements/Rect.js index 230078f..20b5117 100644 --- a/spec/spec/elements/Rect.js +++ b/spec/spec/elements/Rect.js @@ -20,7 +20,10 @@ describe('Rect.js', () => { it('creates a rect with given size', () => { const group = new G() const rect = group.rect(100, 100) - expect(rect.attr([ 'width', 'height' ])).toEqual({ width: 100, height: 100 }) + expect(rect.attr(['width', 'height'])).toEqual({ + width: 100, + height: 100 + }) expect(rect).toEqual(any(Rect)) }) }) diff --git a/spec/spec/elements/Stop.js b/spec/spec/elements/Stop.js index e2ce2a8..e58cb24 100644 --- a/spec/spec/elements/Stop.js +++ b/spec/spec/elements/Stop.js @@ -66,7 +66,11 @@ describe('Stop.js', () => { it('creates stop in the gradient with object given', () => { const gradient = new Gradient('linear') - const stop = gradient.stop({ offset: 0.1, color: '#ffffff', opacity: 0.5 }) + const stop = gradient.stop({ + offset: 0.1, + color: '#ffffff', + opacity: 0.5 + }) expect(stop.attr('offset')).toBe(0.1) expect(stop.attr('stop-color')).toBe('#ffffff') expect(stop.attr('stop-opacity')).toBe(0.5) diff --git a/spec/spec/elements/Style.js b/spec/spec/elements/Style.js index 7b69dd3..fd587a1 100644 --- a/spec/spec/elements/Style.js +++ b/spec/spec/elements/Style.js @@ -33,13 +33,17 @@ describe('Style.js', () => { it('adds a font-face rule to load a custom font and returns itself', () => { const style = new Style() expect(style.font('fontName', 'url')).toBe(style) - expect(style.node.textContent).toBe('@font-face{font-family:fontName;src:url;}') + expect(style.node.textContent).toBe( + '@font-face{font-family:fontName;src:url;}' + ) }) it('adds extra parameters if wanted', () => { const style = new Style() style.font('fontName', 'url', { foo: 'bar' }) - expect(style.node.textContent).toBe('@font-face{font-family:fontName;src:url;foo:bar;}') + expect(style.node.textContent).toBe( + '@font-face{font-family:fontName;src:url;foo:bar;}' + ) }) }) @@ -78,7 +82,9 @@ describe('Style.js', () => { const g = new G() const style = g.fontface('fontName', 'url', { foo: 'bar' }) expect(style).toEqual(any(Style)) - expect(style.node.textContent).toBe('@font-face{font-family:fontName;src:url;foo:bar;}') + expect(style.node.textContent).toBe( + '@font-face{font-family:fontName;src:url;foo:bar;}' + ) }) }) }) diff --git a/spec/spec/elements/Svg.js b/spec/spec/elements/Svg.js index 990992a..6da7729 100644 --- a/spec/spec/elements/Svg.js +++ b/spec/spec/elements/Svg.js @@ -1,13 +1,16 @@ /* globals describe, expect, it, jasmine, container */ import { Svg, SVG, Defs } from '../../../src/main.js' -import { svg as ns, xlink, svgjs } from '../../../src/modules/core/namespaces.js' +import { + svg as ns, + xlink, + svgjs +} from '../../../src/modules/core/namespaces.js' import { getWindow } from '../../../src/utils/window.js' const { any } = jasmine describe('Svg.js', () => { - describe('()', () => { it('creates a new object of type Svg', () => { expect(new Svg()).toEqual(any(Svg)) diff --git a/spec/spec/elements/Symbol.js b/spec/spec/elements/Symbol.js index 12be314..6d9c17e 100644 --- a/spec/spec/elements/Symbol.js +++ b/spec/spec/elements/Symbol.js @@ -21,7 +21,7 @@ describe('Symbol.js', () => { const g = new G() const symbol = g.symbol() expect(symbol).toEqual(any(Symbol)) - expect(g.children()).toEqual([ symbol ]) + expect(g.children()).toEqual([symbol]) }) }) }) diff --git a/spec/spec/elements/Text.js b/spec/spec/elements/Text.js index e1a74d2..b0c5a9a 100644 --- a/spec/spec/elements/Text.js +++ b/spec/spec/elements/Text.js @@ -1,6 +1,13 @@ /* globals describe, expect, it, spyOn jasmine, container */ -import { Text, Number as SVGNumber, SVG, G, Path, TextPath } from '../../../src/main.js' +import { + Text, + Number as SVGNumber, + SVG, + G, + Path, + TextPath +} from '../../../src/main.js' const { any } = jasmine diff --git a/spec/spec/elements/TextPath.js b/spec/spec/elements/TextPath.js index 91c78c8..5e85bdb 100644 --- a/spec/spec/elements/TextPath.js +++ b/spec/spec/elements/TextPath.js @@ -7,7 +7,8 @@ const { any } = jasmine describe('TextPath.js', () => { var canvas, text, path var txt = 'We go up, then we go down, then up again' - var data = 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' + var data = + 'M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100' beforeEach(() => { canvas = new SVG().addTo(container) @@ -144,9 +145,8 @@ describe('TextPath.js', () => { describe('targets', () => { it('returns all elements referencing this path with href', () => { const textPath = text.path(path) - expect(path.targets()).toEqual([ textPath ]) + expect(path.targets()).toEqual([textPath]) }) }) }) - }) diff --git a/spec/spec/elements/Tspan.js b/spec/spec/elements/Tspan.js index d6f42b2..879267c 100644 --- a/spec/spec/elements/Tspan.js +++ b/spec/spec/elements/Tspan.js @@ -98,11 +98,12 @@ describe('Tspan.js', () => { text.tspan('Second Line').newLine() const third = text.tspan('Third Line').newLine() - const fontSize = getWindow().getComputedStyle(third.node).getPropertyValue('font-size') + const fontSize = getWindow() + .getComputedStyle(third.node) + .getPropertyValue('font-size') const dy = 2 * new SVGNumber(fontSize) expect(third.dy()).toBe(dy) }) - }) describe('Tspan', () => { diff --git a/spec/spec/modules/core/attr.js b/spec/spec/modules/core/attr.js index e73fb53..b47794a 100644 --- a/spec/spec/modules/core/attr.js +++ b/spec/spec/modules/core/attr.js @@ -6,7 +6,6 @@ import { registerAttrHook } from '../../../../src/modules/core/attr.js' const { objectContaining } = jasmine describe('attr.js', () => { - describe('attr()', () => { let element @@ -83,13 +82,13 @@ describe('attr.js', () => { 'fill-opacity': 0.5 }) - const ret = element.attr([ 'x', 'fill-opacity' ]) + const ret = element.attr(['x', 'fill-opacity']) expect(ret).toEqual({ x: 1, 'fill-opacity': 0.5 }) }) it('correctly creates SVG.Array if array given', () => { - element.attr('something', [ 2, 3, 4 ]) + element.attr('something', [2, 3, 4]) expect(element.attr('something')).toBe('2 3 4') }) @@ -120,8 +119,9 @@ describe('attr.js', () => { element.attr('name', 'Bob') } - expect(throwingFn).toThrowError('This hook should only be executed in one test') + expect(throwingFn).toThrowError( + 'This hook should only be executed in one test' + ) }) }) - }) diff --git a/spec/spec/modules/core/circled.js b/spec/spec/modules/core/circled.js index a6324d8..95217c0 100644 --- a/spec/spec/modules/core/circled.js +++ b/spec/spec/modules/core/circled.js @@ -94,5 +94,4 @@ describe('circled.js', () => { expect(element.height()).toBe(100) }) }) - }) diff --git a/spec/spec/modules/core/containerGeometry.js b/spec/spec/modules/core/containerGeometry.js index 740f99f..011d9a8 100644 --- a/spec/spec/modules/core/containerGeometry.js +++ b/spec/spec/modules/core/containerGeometry.js @@ -5,7 +5,6 @@ import { Box, create, Element, G, Rect, SVG } from '../../../../src/main.js' const { any, objectContaining } = jasmine describe('containerGeometry.js', () => { - describe('dmove()', () => { it('moves the bbox of the group by a certain amount (1)', () => { const canvas = SVG().addTo(container) @@ -17,9 +16,14 @@ describe('containerGeometry.js', () => { g.dmove(10, 10) const box = g.bbox() - expect(box).toEqual(objectContaining({ - x: 20, y: 30, width: box.width, height: box.height - })) + expect(box).toEqual( + objectContaining({ + x: 20, + y: 30, + width: box.width, + height: box.height + }) + ) }) it('moves the bbox of the group by a certain amount (2)', () => { @@ -55,9 +59,14 @@ describe('containerGeometry.js', () => { expect(fn).not.toThrowError() const box = g.bbox() - expect(box).toEqual(objectContaining({ - x: 20, y: 30, width: box.width, height: box.height - })) + expect(box).toEqual( + objectContaining({ + x: 20, + y: 30, + width: box.width, + height: box.height + }) + ) }) }) @@ -211,7 +220,6 @@ describe('containerGeometry.js', () => { expect(newBox.w).toBeCloseTo(100, 4) expect(newBox.h).toBeCloseTo(100, 4) }) - }) describe('width()', () => { diff --git a/spec/spec/modules/core/event.js b/spec/spec/modules/core/event.js index a395a4b..e259593 100644 --- a/spec/spec/modules/core/event.js +++ b/spec/spec/modules/core/event.js @@ -1,5 +1,13 @@ /* globals describe, expect, it, spyOn, jasmine */ -import { windowEvents, getEvents, getEventTarget, clearEvents, dispatch, on, off } from '../../../../src/modules/core/event.js' +import { + windowEvents, + getEvents, + getEventTarget, + clearEvents, + dispatch, + on, + off +} from '../../../../src/modules/core/event.js' import { getWindow } from '../../../../src/utils/window.js' import { EventTarget, SVG } from '../../../../src/main.js' @@ -68,7 +76,7 @@ describe('event.js', () => { it('binds to multiple events passed as array', () => { const eventTarget = new EventTarget() const spy = createSpy('spy') - on(eventTarget, [ 'event1', 'event2', 'event3' ], spy) + on(eventTarget, ['event1', 'event2', 'event3'], spy) dispatch(eventTarget, 'event1') dispatch(eventTarget, 'event2') dispatch(eventTarget, 'event3') @@ -112,11 +120,11 @@ describe('event.js', () => { it('unbinds multiple events with space or comma separated string', () => { const eventTarget = new EventTarget() const spy = createSpy('spy') - on(eventTarget, [ 'event1', 'event2', 'event3' ], spy) + on(eventTarget, ['event1', 'event2', 'event3'], spy) dispatch(eventTarget, 'event1') dispatch(eventTarget, 'event2') dispatch(eventTarget, 'event3') - off(eventTarget, [ 'event1', 'event2', 'event3' ], spy) + off(eventTarget, ['event1', 'event2', 'event3'], spy) dispatch(eventTarget, 'event1') dispatch(eventTarget, 'event2') dispatch(eventTarget, 'event3') @@ -136,11 +144,11 @@ describe('event.js', () => { it('unbinds all events including namespaced ones when only event is passed', () => { const eventTarget = new EventTarget() const spy = createSpy('spy') - on(eventTarget, [ 'event1.ns1', 'event2.ns2', 'event3' ], spy) + on(eventTarget, ['event1.ns1', 'event2.ns2', 'event3'], spy) dispatch(eventTarget, 'event1') dispatch(eventTarget, 'event2') dispatch(eventTarget, 'event3') - off(eventTarget, [ 'event1', 'event2', 'event3' ]) + off(eventTarget, ['event1', 'event2', 'event3']) dispatch(eventTarget, 'event1') dispatch(eventTarget, 'event2') dispatch(eventTarget, 'event3') @@ -192,7 +200,12 @@ describe('event.js', () => { it('dispatches a custom event on the EventTarget by calling dispatchEvent()', () => { const eventTarget = new EventTarget() const spy = spyOn(eventTarget, 'dispatchEvent') - const event = dispatch(eventTarget, 'event', { some: 'data' }, { cancelable: false }) + const event = dispatch( + eventTarget, + 'event', + { some: 'data' }, + { cancelable: false } + ) expect(event).toEqual(any(getWindow().CustomEvent)) expect(spy).toHaveBeenCalledWith(event) expect(event.detail).toEqual({ some: 'data' }) diff --git a/spec/spec/modules/core/gradiented.js b/spec/spec/modules/core/gradiented.js index ba159f5..7b2c227 100644 --- a/spec/spec/modules/core/gradiented.js +++ b/spec/spec/modules/core/gradiented.js @@ -3,7 +3,6 @@ import { Gradient } from '../../../../src/main.js' describe('gradiented.js', () => { - describe('from()', () => { it('sets fx and fy for radial gradients and returns itself', () => { const gradient = new Gradient('radial') @@ -35,5 +34,4 @@ describe('gradiented.js', () => { expect(gradient.attr('y2')).toBe(20) }) }) - }) diff --git a/spec/spec/modules/core/pointed.js b/spec/spec/modules/core/pointed.js index bbe2475..77bf2d3 100644 --- a/spec/spec/modules/core/pointed.js +++ b/spec/spec/modules/core/pointed.js @@ -8,12 +8,11 @@ describe('pointed.js', () => { beforeEach(() => { canvas = SVG().addTo(container) const line = canvas.line(1, 2, 3, 4) - const polygon = canvas.polygon([ 1, 2, 3, 4 ]) - const polyline = canvas.polyline([ 1, 2, 3, 4 ]) + const polygon = canvas.polygon([1, 2, 3, 4]) + const polyline = canvas.polyline([1, 2, 3, 4]) lines = { line, polygon, polyline } }) - - ;[ 'line', 'polygon', 'polyline' ].forEach((l) => { + ;['line', 'polygon', 'polyline'].forEach((l) => { describe('for ' + l, () => { describe('x()', () => { it('sets the x value of the ' + l + 'and returns itself', () => { diff --git a/spec/spec/modules/core/poly.js b/spec/spec/modules/core/poly.js index c44bebc..e4c3bed 100644 --- a/spec/spec/modules/core/poly.js +++ b/spec/spec/modules/core/poly.js @@ -15,7 +15,10 @@ describe('Polygon.js', () => { it('returns the underlying PointArray', () => { const array = poly.plot('1 2 3 4').array() expect(array).toEqual(any(PointArray)) - expect(array).toEqual([ [ 1, 2 ], [ 3, 4 ] ]) + expect(array).toEqual([ + [1, 2], + [3, 4] + ]) }) }) @@ -36,9 +39,14 @@ describe('Polygon.js', () => { const canvas = SVG().addTo(container) const poly = canvas.polygon('0 0 50 50') poly.move(50, 50) - expect(poly.bbox()).toEqual(objectContaining({ - x: 50, y: 50, width: 50, height: 50 - })) + expect(poly.bbox()).toEqual( + objectContaining({ + x: 50, + y: 50, + width: 50, + height: 50 + }) + ) }) }) @@ -57,20 +65,37 @@ describe('Polygon.js', () => { it('works with flat array', () => { const spy = spyOn(poly, 'attr') - poly.plot([ 1, 2, 3, 4 ]) - expect(spy).toHaveBeenCalledWith('points', [ [ 1, 2 ], [ 3, 4 ] ]) + poly.plot([1, 2, 3, 4]) + expect(spy).toHaveBeenCalledWith('points', [ + [1, 2], + [3, 4] + ]) }) it('works with multi array', () => { const spy = spyOn(poly, 'attr') - poly.plot([ [ 1, 2 ], [ 3, 4 ] ]) - expect(spy).toHaveBeenCalledWith('points', [ [ 1, 2 ], [ 3, 4 ] ]) + poly.plot([ + [1, 2], + [3, 4] + ]) + expect(spy).toHaveBeenCalledWith('points', [ + [1, 2], + [3, 4] + ]) }) it('works with PointArray', () => { const spy = spyOn(poly, 'attr') - poly.plot(new PointArray([ [ 1, 2 ], [ 3, 4 ] ])) - expect(spy).toHaveBeenCalledWith('points', [ [ 1, 2 ], [ 3, 4 ] ]) + poly.plot( + new PointArray([ + [1, 2], + [3, 4] + ]) + ) + expect(spy).toHaveBeenCalledWith('points', [ + [1, 2], + [3, 4] + ]) }) }) @@ -83,27 +108,42 @@ describe('Polygon.js', () => { const canvas = SVG().addTo(container) const poly = canvas.polygon('0 0 50 50') poly.size(100, 100) - expect(poly.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(poly.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) it('changes height proportionally', () => { const canvas = SVG().addTo(container) const poly = canvas.polygon('0 0 50 50') poly.size(100, null) - expect(poly.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(poly.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) it('changes width proportionally', () => { const canvas = SVG().addTo(container) const poly = canvas.polygon('0 0 50 50') poly.size(null, 100) - expect(poly.bbox()).toEqual(objectContaining({ - width: 100, height: 100, x: 0, y: 0 - })) + expect(poly.bbox()).toEqual( + objectContaining({ + width: 100, + height: 100, + x: 0, + y: 0 + }) + ) }) }) }) diff --git a/spec/spec/modules/core/regex.js b/spec/spec/modules/core/regex.js index 5040fbd..37f774c 100644 --- a/spec/spec/modules/core/regex.js +++ b/spec/spec/modules/core/regex.js @@ -96,14 +96,26 @@ describe('regex.js', () => { describe('transforms', () => { it('splits a transform chain', () => { - const split = 'rotate(34) translate(1,2), translate(1 , 3),rotate(12) , something(1,2,3)'.split(regex.transforms) - expect(split).toEqual([ 'rotate(34', 'translate(1,2', 'translate(1 , 3', 'rotate(12', 'something(1,2,3', '' ]) + const split = + 'rotate(34) translate(1,2), translate(1 , 3),rotate(12) , something(1,2,3)'.split( + regex.transforms + ) + expect(split).toEqual([ + 'rotate(34', + 'translate(1,2', + 'translate(1 , 3', + 'rotate(12', + 'something(1,2,3', + '' + ]) }) }) describe('whitespace', () => { it('replaces all whitespaces', () => { - expect(' \n \r \t '.replace(regex.whitespace, ' ')).toBe(' ') + expect(' \n \r \t '.replace(regex.whitespace, ' ')).toBe( + ' ' + ) }) }) @@ -196,7 +208,7 @@ describe('regex.js', () => { describe('delimiter', () => { it('splits at whitespace and comma', () => { const split = '1,2 3 , 4 5,, 6'.split(regex.delimiter) - expect(split).toEqual([ '1', '2', '3', '4', '5', '6' ]) + expect(split).toEqual(['1', '2', '3', '4', '5', '6']) }) }) diff --git a/spec/spec/modules/core/selector.js b/spec/spec/modules/core/selector.js index 1336059..8729b61 100644 --- a/spec/spec/modules/core/selector.js +++ b/spec/spec/modules/core/selector.js @@ -10,17 +10,17 @@ describe('selector.js', () => { const span = SVG('<span />', true).addClass('bar').addTo(div) const span2 = SVG('<span />', true).addTo(div) - expect(find('#canvas').map(el => el.node)).toEqual([ container ]) - expect(find('span')).toEqual([ span, span2 ]) - expect(find('#foo')).toEqual([ div ]) - expect(find('.bar')).toEqual([ span ]) + expect(find('#canvas').map((el) => el.node)).toEqual([container]) + expect(find('span')).toEqual([span, span2]) + expect(find('#foo')).toEqual([div]) + expect(find('.bar')).toEqual([span]) }) it('finds all elements of a selector scoped to an element', () => { const div = SVG('<div />', true).id('foo').addTo(container) expect(find('#canvas', getWindow().document)[0].node).toBe(container) - expect(find('#foo', container)).toEqual([ div ]) + expect(find('#foo', container)).toEqual([div]) expect(find('#canvas', div.node)).toEqual([]) }) }) @@ -34,11 +34,11 @@ describe('selector.js', () => { const g4 = new G().addTo(g2) const g5 = new G().addTo(g3) - expect(g1.find('g')).toEqual([ g2, g4, g3, g5 ]) - expect(g2.find('g')).toEqual([ g4 ]) - expect(g1.find('#foo')).toEqual([ g2 ]) + expect(g1.find('g')).toEqual([g2, g4, g3, g5]) + expect(g2.find('g')).toEqual([g4]) + expect(g1.find('#foo')).toEqual([g2]) expect(g2.find('#foo')).toEqual([]) - expect(g1.find('.bar')).toEqual([ g3 ]) + expect(g1.find('.bar')).toEqual([g3]) }) }) diff --git a/spec/spec/modules/core/textable.js b/spec/spec/modules/core/textable.js index c0a2100..8135c6a 100644 --- a/spec/spec/modules/core/textable.js +++ b/spec/spec/modules/core/textable.js @@ -257,7 +257,10 @@ describe('textable.js', () => { add.tspan('The second.') add.tspan('The third.') }) - expect(text.length()).toBeCloseTo(text.get(0).length() + text.get(1).length() + text.get(2).length(), 3) + expect(text.length()).toBeCloseTo( + text.get(0).length() + text.get(1).length() + text.get(2).length(), + 3 + ) }) it('gets total length of tspan', () => { @@ -266,7 +269,10 @@ describe('textable.js', () => { add.tspan('The second.') add.tspan('The third.') }) - expect(tspan.length()).toBeCloseTo(tspan.get(0).length() + tspan.get(1).length() + tspan.get(2).length(), 3) + expect(tspan.length()).toBeCloseTo( + tspan.get(0).length() + tspan.get(1).length() + tspan.get(2).length(), + 3 + ) }) }) @@ -284,7 +290,9 @@ describe('textable.js', () => { text.tspan('A great piece!') text.tspan('Another great piece!') expect(text.node.childNodes[0].childNodes[0].data).toBe('A great piece!') - expect(text.node.childNodes[1].childNodes[0].data).toBe('Another great piece!') + expect(text.node.childNodes[1].childNodes[0].data).toBe( + 'Another great piece!' + ) }) it('disables adding multiple plain text nodes when given false for Text', () => { @@ -299,7 +307,9 @@ describe('textable.js', () => { text.clear().build(true) text.tspan('A great piece!') text.build(false).tspan('Another great piece!') - expect(text.node.childNodes[0].childNodes[0].data).toBe('Another great piece!') + expect(text.node.childNodes[0].childNodes[0].data).toBe( + 'Another great piece!' + ) expect(text.node.childNodes[1]).toBe(undefined) }) @@ -316,7 +326,9 @@ describe('textable.js', () => { tspan.tspan('A great piece!') tspan.tspan('Another great piece!') expect(tspan.node.childNodes[0].childNodes[0].data).toBe('A great piece!') - expect(tspan.node.childNodes[1].childNodes[0].data).toBe('Another great piece!') + expect(tspan.node.childNodes[1].childNodes[0].data).toBe( + 'Another great piece!' + ) }) it('disables adding multiple plain text nodes when given false for Tspan', () => { @@ -331,9 +343,10 @@ describe('textable.js', () => { tspan.clear().build(true) tspan.tspan('A great piece!') tspan.build(false).tspan('Another great piece!') - expect(tspan.node.childNodes[0].childNodes[0].data).toBe('Another great piece!') + expect(tspan.node.childNodes[0].childNodes[0].data).toBe( + 'Another great piece!' + ) expect(tspan.node.childNodes[1]).toBe(undefined) }) }) - }) diff --git a/spec/spec/modules/optional/arrange.js b/spec/spec/modules/optional/arrange.js index de1a4a0..c665aa5 100644 --- a/spec/spec/modules/optional/arrange.js +++ b/spec/spec/modules/optional/arrange.js @@ -11,7 +11,7 @@ describe('arrange.js', () => { const circle = g.circle(100) const line = g.line(1, 2, 3, 4) - expect(circle.siblings()).toEqual([ rect, circle, line ]) + expect(circle.siblings()).toEqual([rect, circle, line]) }) }) @@ -77,7 +77,7 @@ describe('arrange.js', () => { rect.forward() - expect(g.children()).toEqual([ circle, rect, line ]) + expect(g.children()).toEqual([circle, rect, line]) }) it('does nothing when the element is already the last one', () => { @@ -88,7 +88,7 @@ describe('arrange.js', () => { line.forward() - expect(g.children()).toEqual([ rect, circle, line ]) + expect(g.children()).toEqual([rect, circle, line]) }) }) @@ -107,7 +107,7 @@ describe('arrange.js', () => { line.backward() - expect(g.children()).toEqual([ rect, line, circle ]) + expect(g.children()).toEqual([rect, line, circle]) }) it('does nothing when the element is already the first one', () => { @@ -118,7 +118,7 @@ describe('arrange.js', () => { rect.backward() - expect(g.children()).toEqual([ rect, circle, line ]) + expect(g.children()).toEqual([rect, circle, line]) }) }) @@ -137,7 +137,7 @@ describe('arrange.js', () => { rect.front() - expect(g.children()).toEqual([ circle, line, rect ]) + expect(g.children()).toEqual([circle, line, rect]) }) it('does nothing when the element is already the last one', () => { @@ -148,7 +148,7 @@ describe('arrange.js', () => { line.front() - expect(g.children()).toEqual([ rect, circle, line ]) + expect(g.children()).toEqual([rect, circle, line]) }) }) @@ -167,7 +167,7 @@ describe('arrange.js', () => { line.back() - expect(g.children()).toEqual([ line, rect, circle ]) + expect(g.children()).toEqual([line, rect, circle]) }) it('does nothing when the element is already the first one', () => { @@ -178,7 +178,7 @@ describe('arrange.js', () => { rect.back() - expect(g.children()).toEqual([ rect, circle, line ]) + expect(g.children()).toEqual([rect, circle, line]) }) }) @@ -191,7 +191,7 @@ describe('arrange.js', () => { const line = new Line() circle.before(line) - expect(g.children()).toEqual([ rect, line, circle ]) + expect(g.children()).toEqual([rect, line, circle]) }) }) @@ -204,7 +204,7 @@ describe('arrange.js', () => { const line = new Line() rect.after(line) - expect(g.children()).toEqual([ rect, line, circle ]) + expect(g.children()).toEqual([rect, line, circle]) }) }) @@ -216,7 +216,7 @@ describe('arrange.js', () => { const line = new Line().insertBefore(circle) - expect(g.children()).toEqual([ rect, line, circle ]) + expect(g.children()).toEqual([rect, line, circle]) }) }) @@ -228,7 +228,7 @@ describe('arrange.js', () => { const line = new Line().insertAfter(rect) - expect(g.children()).toEqual([ rect, line, circle ]) + expect(g.children()).toEqual([rect, line, circle]) }) }) }) diff --git a/spec/spec/modules/optional/class.js b/spec/spec/modules/optional/class.js index b6bb42b..461c14f 100644 --- a/spec/spec/modules/optional/class.js +++ b/spec/spec/modules/optional/class.js @@ -7,7 +7,7 @@ describe('class.js', () => { describe('classes()', () => { it('returns all classes on an element', () => { const rect = new Rect({ class: 'myClass myClass2' }) - expect(rect.classes()).toEqual([ 'myClass', 'myClass2' ]) + expect(rect.classes()).toEqual(['myClass', 'myClass2']) }) it('returns an empty array if no class on the element', () => { @@ -35,13 +35,15 @@ describe('class.js', () => { }) it('adds a class to the element', () => { - const rect = new Rect({ class: 'myClass myClass2' }).addClass('myClass3') - expect(rect.classes()).toEqual([ 'myClass', 'myClass2', 'myClass3' ]) + const rect = new Rect({ class: 'myClass myClass2' }).addClass( + 'myClass3' + ) + expect(rect.classes()).toEqual(['myClass', 'myClass2', 'myClass3']) }) it('does nothing if class already present on the element', () => { const rect = new Rect({ class: 'myClass myClass2' }).addClass('myClass') - expect(rect.classes()).toEqual([ 'myClass', 'myClass2' ]) + expect(rect.classes()).toEqual(['myClass', 'myClass2']) }) }) @@ -52,13 +54,17 @@ describe('class.js', () => { }) it('removes a class from the element', () => { - const rect = new Rect({ class: 'myClass myClass2' }).removeClass('myClass2') - expect(rect.classes()).toEqual([ 'myClass' ]) + const rect = new Rect({ class: 'myClass myClass2' }).removeClass( + 'myClass2' + ) + expect(rect.classes()).toEqual(['myClass']) }) it('does nothing if class is not present on the element', () => { - const rect = new Rect({ class: 'myClass myClass2' }).removeClass('myClass3') - expect(rect.classes()).toEqual([ 'myClass', 'myClass2' ]) + const rect = new Rect({ class: 'myClass myClass2' }).removeClass( + 'myClass3' + ) + expect(rect.classes()).toEqual(['myClass', 'myClass2']) }) }) @@ -69,13 +75,17 @@ describe('class.js', () => { }) it('removes a class from the element when its present', () => { - const rect = new Rect({ class: 'myClass myClass2' }).toggleClass('myClass2') - expect(rect.classes()).toEqual([ 'myClass' ]) + const rect = new Rect({ class: 'myClass myClass2' }).toggleClass( + 'myClass2' + ) + expect(rect.classes()).toEqual(['myClass']) }) it('adds a class to the element if its not present', () => { - const rect = new Rect({ class: 'myClass myClass2' }).toggleClass('myClass3') - expect(rect.classes()).toEqual([ 'myClass', 'myClass2', 'myClass3' ]) + const rect = new Rect({ class: 'myClass myClass2' }).toggleClass( + 'myClass3' + ) + expect(rect.classes()).toEqual(['myClass', 'myClass2', 'myClass3']) }) }) }) diff --git a/spec/spec/modules/optional/css.js b/spec/spec/modules/optional/css.js index b6c04bc..8a42acf 100644 --- a/spec/spec/modules/optional/css.js +++ b/spec/spec/modules/optional/css.js @@ -7,7 +7,9 @@ describe('css.js', () => { describe('css()', () => { describe('as getter', () => { it('returns all css as object', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css()).toEqual({ fill: 'none', 'outline-width': '1px', @@ -16,57 +18,80 @@ describe('css.js', () => { }) it('returns an object with selected css properties', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) - expect(rect.css([ 'fill', 'stroke' ])).toEqual({ + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) + expect(rect.css(['fill', 'stroke'])).toEqual({ fill: 'none', stroke: 'none' }) }) it('returns a single property with property name given', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('fill')).toBe('none') }) it('returns undefined if css property is not set', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('outline-color')).toBe('') }) }) describe('as setter', () => { it('returns itself', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('fill', 'black')).toBe(rect) }) it('adds a css property', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) - expect(rect.css('stroke-width', '2px').css('stroke-width')).toBe('2px') + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) + expect(rect.css('stroke-width', '2px').css('stroke-width')).toBe( + '2px' + ) }) it('changes a css property', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('fill', 'black').css('fill')).toBe('black') }) it('sets an object of properties', () => { const rect = new Rect() - expect(rect.css({ fill: 'none', stroke: 'none' }).css()).toEqual({ fill: 'none', stroke: 'none' }) + expect(rect.css({ fill: 'none', stroke: 'none' }).css()).toEqual({ + fill: 'none', + stroke: 'none' + }) }) it('removes property if empty string is passed as value', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('fill', '').css('fill')).toBe('') }) it('removes property if null is passed as value', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css('fill', null).css('fill')).toBe('') }) it('removes property if null is passed as part of object', () => { - const rect = new Rect({ style: 'fill: none; outline-width: 1px; stroke: none' }) + const rect = new Rect({ + style: 'fill: none; outline-width: 1px; stroke: none' + }) expect(rect.css({ fill: null, stroke: 'black' }).css('fill')).toBe('') }) }) diff --git a/spec/spec/modules/optional/data.js b/spec/spec/modules/optional/data.js index 211fef3..5265dd1 100644 --- a/spec/spec/modules/optional/data.js +++ b/spec/spec/modules/optional/data.js @@ -7,7 +7,11 @@ describe('data.js', () => { describe('data()', () => { describe('as getter', () => { it('returns all data as object', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data()).toEqual({ fill: 'none', 'outline-width': '1px', @@ -16,65 +20,108 @@ describe('data.js', () => { }) it('returns an object with selected data properties', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) - expect(rect.data([ 'fill', 'stroke' ])).toEqual({ + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) + expect(rect.data(['fill', 'stroke'])).toEqual({ fill: 'none', stroke: 'none' }) }) it('returns a single property with property name given', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data('fill')).toBe('none') }) it('returns undefined if data property is not set', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data('outline-color')).toBe(undefined) }) }) describe('as setter', () => { it('returns itself', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data('fill', 'black')).toBe(rect) }) it('adds a data property', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) - expect(rect.data('stroke-width', '2px').data('stroke-width')).toBe('2px') + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) + expect(rect.data('stroke-width', '2px').data('stroke-width')).toBe( + '2px' + ) }) it('changes a data property', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data('fill', 'black').data('fill')).toBe('black') }) it('sets an object of properties', () => { const rect = new Rect() - expect(rect.data({ fill: 'none', stroke: 'none' }).data()).toEqual({ fill: 'none', stroke: 'none' }) + expect(rect.data({ fill: 'none', stroke: 'none' }).data()).toEqual({ + fill: 'none', + stroke: 'none' + }) }) it('removes property if null is passed as value', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) expect(rect.data('fill', null).data('fill')).toBe(undefined) }) it('removes property if null is passed as part of object', () => { - const rect = new Rect({ 'data-fill': 'none', 'data-outline-width': '1px', 'data-stroke': 'none' }) - expect(rect.data({ fill: null, stroke: 'black' }).data('fill')).toBe(undefined) + const rect = new Rect({ + 'data-fill': 'none', + 'data-outline-width': '1px', + 'data-stroke': 'none' + }) + expect(rect.data({ fill: null, stroke: 'black' }).data('fill')).toBe( + undefined + ) }) it('converts everything except number and strings to JSON', () => { const rect = new Rect() - expect(rect.data('fill', { some: 'object' }).attr('data-fill')).toBe(JSON.stringify({ some: 'object' })) + expect(rect.data('fill', { some: 'object' }).attr('data-fill')).toBe( + JSON.stringify({ some: 'object' }) + ) expect(rect.data('fill', 5).attr('data-fill')).toBe(5) expect(rect.data('fill', 'string').attr('data-fill')).toBe('string') }) it('does not convert to json with third parameter true', () => { const rect = new Rect() - expect(rect.data('fill', { some: 'object' }, true).attr('data-fill')).toBe({}.toString()) + expect( + rect.data('fill', { some: 'object' }, true).attr('data-fill') + ).toBe({}.toString()) }) }) }) diff --git a/spec/spec/modules/optional/memory.js b/spec/spec/modules/optional/memory.js index 3199456..7472078 100644 --- a/spec/spec/modules/optional/memory.js +++ b/spec/spec/modules/optional/memory.js @@ -6,7 +6,11 @@ describe('memory.js', () => { describe('Dom', () => { describe('memory()', () => { it('returns all memory as object', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.memory()).toEqual({ fill: 'none', 'outline-width': '1px', @@ -18,52 +22,90 @@ describe('memory.js', () => { describe('remember()', () => { describe('as getter', () => { it('returns a single property with property name given', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.remember('fill')).toBe('none') }) it('returns undefined if memory property is not set', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.remember('outline-color')).toBe(undefined) }) }) describe('as setter', () => { it('returns itself', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.remember('fill', 'black')).toBe(rect) }) it('adds a memory property', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) - expect(rect.remember('stroke-width', '2px').remember('stroke-width')).toBe('2px') + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) + expect( + rect.remember('stroke-width', '2px').remember('stroke-width') + ).toBe('2px') }) it('changes a memory property', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.remember('fill', 'black').remember('fill')).toBe('black') }) it('sets an object of properties', () => { const rect = new Rect() - expect(rect.remember({ fill: 'none', stroke: 'none' }).memory()).toEqual({ fill: 'none', stroke: 'none' }) + expect( + rect.remember({ fill: 'none', stroke: 'none' }).memory() + ).toEqual({ fill: 'none', stroke: 'none' }) }) }) }) describe('forget()', () => { it('removes property', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.forget('fill').remember('fill')).toBe(undefined) }) it('removes multiple properties', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) - expect(rect.forget('fill', 'stroke').memory()).toEqual({ 'outline-width': '1px' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) + expect(rect.forget('fill', 'stroke').memory()).toEqual({ + 'outline-width': '1px' + }) }) it('erases the whole object with nothing passed', () => { - const rect = new Rect().remember({ fill: 'none', 'outline-width': '1px', stroke: 'none' }) + const rect = new Rect().remember({ + fill: 'none', + 'outline-width': '1px', + stroke: 'none' + }) expect(rect.forget().memory()).toEqual({}) }) }) diff --git a/spec/spec/modules/optional/sugar.js b/spec/spec/modules/optional/sugar.js index 84c95b0..74cef62 100644 --- a/spec/spec/modules/optional/sugar.js +++ b/spec/spec/modules/optional/sugar.js @@ -32,15 +32,18 @@ describe('sugar.js', () => { it('sets an object of fill properties', () => { const rect = new Rect() - expect(rect.fill({ - color: 'black', - opacity: 0.5, - rule: 'even-odd' - }).attr()).toEqual({ + expect( + rect + .fill({ + color: 'black', + opacity: 0.5, + rule: 'even-odd' + }) + .attr() + ).toEqual({ fill: 'black', 'fill-opacity': 0.5, - 'fill-rule': - 'even-odd' + 'fill-rule': 'even-odd' }) }) }) @@ -86,16 +89,20 @@ describe('sugar.js', () => { it('sets an object of stroke properties', () => { const rect = new Rect() - expect(rect.stroke({ - color: 'black', - width: 2, - opacity: 0.5, - linecap: 'butt', - linejoin: 'miter', - miterlimit: 10, - dasharray: '2 2', - dashoffset: 15 - }).attr()).toEqual({ + expect( + rect + .stroke({ + color: 'black', + width: 2, + opacity: 0.5, + linecap: 'butt', + linejoin: 'miter', + miterlimit: 10, + dasharray: '2 2', + dashoffset: 15 + }) + .attr() + ).toEqual({ stroke: 'black', 'stroke-width': 2, 'stroke-opacity': 0.5, @@ -108,7 +115,7 @@ describe('sugar.js', () => { }) it('sets stroke dasharray with array passed', () => { - const rect = new Rect().stroke({ dasharray: [ 2, 2 ] }) + const rect = new Rect().stroke({ dasharray: [2, 2] }) expect(rect.attr()).toEqual({ 'stroke-dasharray': '2 2' }) }) }) @@ -157,21 +164,30 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.skew() - expect(spy).toHaveBeenCalledWith({ skew: [ undefined, undefined ], ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { skew: [undefined, undefined], ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with one argument', function () { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.skew(5) - expect(spy).toHaveBeenCalledWith({ skew: 5, ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { skew: 5, ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with two argument', function () { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.skew(5, 6) - expect(spy).toHaveBeenCalledWith({ skew: [ 5, 6 ], ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { skew: [5, 6], ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with three arguments', function () { @@ -185,7 +201,7 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.skew(5, 6, 7, 8) - expect(spy).toHaveBeenCalledWith({ skew: [ 5, 6 ], ox: 7, oy: 8 }, true) + expect(spy).toHaveBeenCalledWith({ skew: [5, 6], ox: 7, oy: 8 }, true) }) }) @@ -203,21 +219,30 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.scale() - expect(spy).toHaveBeenCalledWith({ scale: [ undefined, undefined ], ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { scale: [undefined, undefined], ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with one argument', function () { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.scale(5) - expect(spy).toHaveBeenCalledWith({ scale: 5, ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { scale: 5, ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with two argument', function () { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.scale(5, 6) - expect(spy).toHaveBeenCalledWith({ scale: [ 5, 6 ], ox: undefined, oy: undefined }, true) + expect(spy).toHaveBeenCalledWith( + { scale: [5, 6], ox: undefined, oy: undefined }, + true + ) }) it('redirects to transform() with three arguments', function () { @@ -231,7 +256,7 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.scale(5, 6, 7, 8) - expect(spy).toHaveBeenCalledWith({ scale: [ 5, 6 ], ox: 7, oy: 8 }, true) + expect(spy).toHaveBeenCalledWith({ scale: [5, 6], ox: 7, oy: 8 }, true) }) }) @@ -240,7 +265,7 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.translate(1, 2) - expect(spy).toHaveBeenCalledWith({ translate: [ 1, 2 ] }, true) + expect(spy).toHaveBeenCalledWith({ translate: [1, 2] }, true) }) }) @@ -249,7 +274,7 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.relative(1, 2) - expect(spy).toHaveBeenCalledWith({ relative: [ 1, 2 ] }, true) + expect(spy).toHaveBeenCalledWith({ relative: [1, 2] }, true) }) }) @@ -265,7 +290,10 @@ describe('sugar.js', () => { const rect = new Rect() const spy = spyOn(rect, 'transform') rect.flip() - expect(spy).toHaveBeenCalledWith({ flip: 'both', origin: 'center' }, true) + expect(spy).toHaveBeenCalledWith( + { flip: 'both', origin: 'center' }, + true + ) }) // this works because only x and y are valid flip values. Everything else flips on both axis @@ -347,7 +375,6 @@ describe('sugar.js', () => { expect(spy).toHaveBeenCalledWith('font-size', undefined) }) }) - }) describe('radius()', () => { @@ -395,7 +422,8 @@ describe('sugar.js', () => { }) describe('events', () => { - [ 'click', + ;[ + 'click', 'dblclick', 'mousedown', 'mouseup', @@ -408,7 +436,8 @@ describe('sugar.js', () => { 'touchmove', 'touchleave', 'touchend', - 'touchcancel' ].forEach(ev => { + 'touchcancel' + ].forEach((ev) => { describe(ev, () => { it('calls on() with the eventname set to ' + ev, () => { const rect = new Rect() @@ -418,12 +447,17 @@ describe('sugar.js', () => { expect(spy).toHaveBeenCalledWith(ev, fn) }) - it('calls off() with the eventname set to ' + ev + ' when null is passed as second argument', () => { - const rect = new Rect() - const spy = spyOn(rect, 'off') - rect[ev](null) - expect(spy).toHaveBeenCalledWith(ev) - }) + it( + 'calls off() with the eventname set to ' + + ev + + ' when null is passed as second argument', + () => { + const rect = new Rect() + const spy = spyOn(rect, 'off') + rect[ev](null) + expect(spy).toHaveBeenCalledWith(ev) + } + ) }) }) }) diff --git a/spec/spec/modules/optional/transform.js b/spec/spec/modules/optional/transform.js index db59784..41d403c 100644 --- a/spec/spec/modules/optional/transform.js +++ b/spec/spec/modules/optional/transform.js @@ -23,12 +23,19 @@ describe('transform.js', () => { it('reduces all transformations of the transform list into one matrix - 2', () => { const rect = new Rect().attr('transform', 'translate(10, 20) rotate(45)') - expect(rect.matrixify()).toEqual(new Matrix().rotate(45).translate(10, 20)) + expect(rect.matrixify()).toEqual( + new Matrix().rotate(45).translate(10, 20) + ) }) it('reduces all transformations of the transform list into one matrix - 3', () => { - const rect = new Rect().attr('transform', 'translate(10, 20) rotate(45) skew(1,2) skewX(10) skewY(20)') - expect(rect.matrixify()).toEqual(new Matrix().skewY(20).skewX(10).skew(1, 2).rotate(45).translate(10, 20)) + const rect = new Rect().attr( + 'transform', + 'translate(10, 20) rotate(45) skew(1,2) skewX(10) skewY(20)' + ) + expect(rect.matrixify()).toEqual( + new Matrix().skewY(20).skewX(10).skew(1, 2).rotate(45).translate(10, 20) + ) }) }) @@ -69,7 +76,9 @@ describe('transform.js', () => { const expected = new Matrix().translate(10, 20).rotate(-10) // funny enough the dom seems to shorten the floats and precision gets lost - ;[ ...'abcdef' ].forEach(prop => expect(actual[prop]).toBeCloseTo(expected[prop], 5)) + ;[...'abcdef'].forEach((prop) => + expect(actual[prop]).toBeCloseTo(expected[prop], 5) + ) }) it('inserts the element at the specified position', () => { @@ -110,21 +119,25 @@ describe('transform.js', () => { }) it('sets the transformation with an object', () => { - const rect = new Rect().transform({ rotate: 45, translate: [ 10, 20 ] }) + const rect = new Rect().transform({ rotate: 45, translate: [10, 20] }) expect(rect.transform('rotate')).toBe(45) expect(rect.transform('translateX')).toBe(10) expect(rect.transform('translateY')).toBe(20) }) it('performs a relative transformation with flag=true', () => { - const rect = new Rect().transform({ rotate: 45, translate: [ 10, 20 ] }).transform({ rotate: 10 }, true) + const rect = new Rect() + .transform({ rotate: 45, translate: [10, 20] }) + .transform({ rotate: 10 }, true) expect(rect.transform('rotate')).toBeCloseTo(55, 5) // rounding errors expect(rect.transform('translateX')).toBe(10) expect(rect.transform('translateY')).toBe(20) }) it('performs a relative transformation with flag=other matrix', () => { - const rect = new Rect().transform({ rotate: 45, translate: [ 10, 20 ] }).transform({ rotate: 10 }, new Matrix().rotate(30)) + const rect = new Rect() + .transform({ rotate: 45, translate: [10, 20] }) + .transform({ rotate: 10 }, new Matrix().rotate(30)) expect(rect.transform('rotate')).toBeCloseTo(40, 5) // rounding errors expect(rect.transform('translateX')).toBe(0) expect(rect.transform('translateY')).toBe(0) @@ -132,7 +145,9 @@ describe('transform.js', () => { it('performs a relative transformation with flag=other element', () => { const referenceElement = new Rect().transform({ rotate: 30 }) - const rect = new Rect().transform({ rotate: 45, translate: [ 10, 20 ] }).transform({ rotate: 10 }, referenceElement) + const rect = new Rect() + .transform({ rotate: 45, translate: [10, 20] }) + .transform({ rotate: 10 }, referenceElement) expect(rect.transform('rotate')).toBeCloseTo(40, 5) // rounding errors expect(rect.transform('translateX')).toBe(0) expect(rect.transform('translateY')).toBe(0) diff --git a/spec/spec/types/Box.js b/spec/spec/types/Box.js index e220cea..e0f13e1 100644 --- a/spec/spec/types/Box.js +++ b/spec/spec/types/Box.js @@ -1,12 +1,6 @@ /* globals describe, expect, it, beforeEach, afterEach, spyOn, jasmine, container */ -import { - Box, - Matrix, - Rect, - G, - makeInstance as SVG -} from '../../../src/main.js' +import { Box, Matrix, Rect, G, makeInstance as SVG } from '../../../src/main.js' import { withWindow, getWindow } from '../../../src/utils/window.js' import { isNulledBox, domContains } from '../../../src/types/Box.js' @@ -70,48 +64,69 @@ describe('Box.js', () => { it('creates a new Box with default attributes', () => { const box = new Box() expect(box).toEqual(any(Box)) - expect(box).toEqual(objectContaining({ - width: 0, height: 0, x: 0, y: 0, w: 0, h: 0, cx: 0, cy: 0, x2: 0, y2: 0 - })) + expect(box).toEqual( + objectContaining({ + width: 0, + height: 0, + x: 0, + y: 0, + w: 0, + h: 0, + cx: 0, + cy: 0, + x2: 0, + y2: 0 + }) + ) }) }) describe('init()', () => { it('inits or reinits the box according to input', () => { - expect(new Box().init(1, 2, 3, 4).toArray()).toEqual([ 1, 2, 3, 4 ]) + expect(new Box().init(1, 2, 3, 4).toArray()).toEqual([1, 2, 3, 4]) }) it('works with array input', () => { - expect(new Box().init([ 1, 2, 3, 4 ]).toArray()).toEqual([ 1, 2, 3, 4 ]) + expect(new Box().init([1, 2, 3, 4]).toArray()).toEqual([1, 2, 3, 4]) }) it('works with 3 arguments as input', () => { - expect(new Box().init(1, 2, 3, 4).toArray()).toEqual([ 1, 2, 3, 4 ]) + expect(new Box().init(1, 2, 3, 4).toArray()).toEqual([1, 2, 3, 4]) }) it('works with string input', () => { - expect(new Box().init('1,2,3,4').toArray()).toEqual([ 1, 2, 3, 4 ]) + expect(new Box().init('1,2,3,4').toArray()).toEqual([1, 2, 3, 4]) }) it('creates a new box from parsed string with exponential values', function () { - expect(new Box().init('-1.12e1 1e-2 +2e2 +.3e+4').toArray()) - .toEqual([ -11.2, 0.01, 200, 3000 ]) + expect(new Box().init('-1.12e1 1e-2 +2e2 +.3e+4').toArray()).toEqual([ + -11.2, 0.01, 200, 3000 + ]) }) it('works with object input', () => { - expect(new Box().init({ x: 1, y: 2, width: 3, height: 4 }).toArray()) - .toEqual([ 1, 2, 3, 4 ]) + expect( + new Box().init({ x: 1, y: 2, width: 3, height: 4 }).toArray() + ).toEqual([1, 2, 3, 4]) }) it('calculates all derived values correctly', () => { - expect(new Box().init(2, 4, 6, 8)).toEqual(objectContaining({ - cx: 5, cy: 8, x2: 8, y2: 12, w: 6, h: 8 - })) + expect(new Box().init(2, 4, 6, 8)).toEqual( + objectContaining({ + cx: 5, + cy: 8, + x2: 8, + y2: 12, + w: 6, + h: 8 + }) + ) }) it('can handle input with left instead of x and top instead of y', () => { - expect(new Box().init({ left: 1, top: 2, width: 3, height: 4 }).toArray()) - .toEqual([ 1, 2, 3, 4 ]) + expect( + new Box().init({ left: 1, top: 2, width: 3, height: 4 }).toArray() + ).toEqual([1, 2, 3, 4]) }) }) @@ -122,7 +137,7 @@ describe('Box.js', () => { var box3 = new Box(500, 100, 100, 100) var merged = box1.merge(box2).merge(box3) - expect(merged.toArray()).toEqual([ 50, 50, 550, 450 ]) + expect(merged.toArray()).toEqual([50, 50, 550, 450]) }) it('returns a new instance', () => { @@ -136,23 +151,35 @@ describe('Box.js', () => { describe('transform()', () => { it('transforms the box with given matrix', () => { - var box1 = new Box(50, 50, 100, 100).transform(new Matrix(1, 0, 0, 1, 20, 20)) - var box2 = new Box(50, 50, 100, 100).transform(new Matrix(2, 0, 0, 2, 0, 0)) - var box3 = new Box(-200, -200, 100, 100).transform(new Matrix(1, 0, 0, 1, -20, -20)) + var box1 = new Box(50, 50, 100, 100).transform( + new Matrix(1, 0, 0, 1, 20, 20) + ) + var box2 = new Box(50, 50, 100, 100).transform( + new Matrix(2, 0, 0, 2, 0, 0) + ) + var box3 = new Box(-200, -200, 100, 100).transform( + new Matrix(1, 0, 0, 1, -20, -20) + ) - expect(box1.toArray()).toEqual([ 70, 70, 100, 100 ]) - expect(box2.toArray()).toEqual([ 100, 100, 200, 200 ]) - expect(box3.toArray()).toEqual([ -220, -220, 100, 100 ]) + expect(box1.toArray()).toEqual([70, 70, 100, 100]) + expect(box2.toArray()).toEqual([100, 100, 200, 200]) + expect(box3.toArray()).toEqual([-220, -220, 100, 100]) }) it('also works with matrix like input', () => { - var box1 = new Box(50, 50, 100, 100).transform(new Matrix(1, 0, 0, 1, 20, 20).toArray()) - var box2 = new Box(50, 50, 100, 100).transform(new Matrix(2, 0, 0, 2, 0, 0).toArray()) - var box3 = new Box(-200, -200, 100, 100).transform(new Matrix(1, 0, 0, 1, -20, -20).toArray()) - - expect(box1.toArray()).toEqual([ 70, 70, 100, 100 ]) - expect(box2.toArray()).toEqual([ 100, 100, 200, 200 ]) - expect(box3.toArray()).toEqual([ -220, -220, 100, 100 ]) + var box1 = new Box(50, 50, 100, 100).transform( + new Matrix(1, 0, 0, 1, 20, 20).toArray() + ) + var box2 = new Box(50, 50, 100, 100).transform( + new Matrix(2, 0, 0, 2, 0, 0).toArray() + ) + var box3 = new Box(-200, -200, 100, 100).transform( + new Matrix(1, 0, 0, 1, -20, -20).toArray() + ) + + expect(box1.toArray()).toEqual([70, 70, 100, 100]) + expect(box2.toArray()).toEqual([100, 100, 200, 200]) + expect(box3.toArray()).toEqual([-220, -220, 100, 100]) }) }) @@ -171,7 +198,7 @@ describe('Box.js', () => { withWindow({ pageXOffset: 50, pageYOffset: 25 }, () => { const box = new Box(100, 100, 100, 100).addOffset() - expect(box.toArray()).toEqual([ 150, 125, 100, 100 ]) + expect(box.toArray()).toEqual([150, 125, 100, 100]) }) }) }) @@ -184,7 +211,7 @@ describe('Box.js', () => { describe('toArray()', () => { it('returns an array representation of the box', () => { - expect(new Box(1, 2, 3, 4).toArray()).toEqual([ 1, 2, 3, 4 ]) + expect(new Box(1, 2, 3, 4).toArray()).toEqual([1, 2, 3, 4]) }) }) @@ -203,17 +230,21 @@ describe('Box.js', () => { const rect = new Rect().size(100, 200).move(20, 30).addTo(canvas) expect(rect.bbox()).toEqual(any(Box)) - expect(rect.bbox().toArray()).toEqual([ 20, 30, 100, 200 ]) + expect(rect.bbox().toArray()).toEqual([20, 30, 100, 200]) }) it('returns the bounding box of the element even if the node is not in the dom', () => { const rect = new Rect().size(100, 200).move(20, 30) - expect(rect.bbox().toArray()).toEqual([ 20, 30, 100, 200 ]) + expect(rect.bbox().toArray()).toEqual([20, 30, 100, 200]) }) it('throws when it is not possible to get a bbox', () => { - const spy = spyOn(getWindow().SVGGraphicsElement.prototype, 'getBBox') - .and.callFake(() => { throw new Error('No BBox for you') }) + const spy = spyOn( + getWindow().SVGGraphicsElement.prototype, + 'getBBox' + ).and.callFake(() => { + throw new Error('No BBox for you') + }) const rect = new Rect() expect(() => rect.bbox()).toThrow() expect(spy).toHaveBeenCalled() @@ -223,21 +254,27 @@ describe('Box.js', () => { describe('rbox()', () => { it('returns the BoundingClientRect of the element', () => { const canvas = SVG().addTo(container) - const rect = new Rect().size(100, 200).move(20, 30).addTo(canvas) - .attr('transform', new Matrix({ scale: 2, translate: [ 40, 50 ] })) + const rect = new Rect() + .size(100, 200) + .move(20, 30) + .addTo(canvas) + .attr('transform', new Matrix({ scale: 2, translate: [40, 50] })) expect(rect.rbox()).toEqual(any(Box)) - expect(rect.rbox().toArray()).toEqual([ 80, 110, 200, 400 ]) + expect(rect.rbox().toArray()).toEqual([80, 110, 200, 400]) }) it('returns the rbox box of the element in the coordinate system of the passed element', () => { const canvas = SVG().addTo(container) const group = canvas.group().translate(1, 1) - const rect = new Rect().size(100, 200).move(20, 30).addTo(canvas) - .attr('transform', new Matrix({ scale: 2, translate: [ 40, 50 ] })) + const rect = new Rect() + .size(100, 200) + .move(20, 30) + .addTo(canvas) + .attr('transform', new Matrix({ scale: 2, translate: [40, 50] })) expect(rect.rbox(group)).toEqual(any(Box)) - expect(rect.rbox(group).toArray()).toEqual([ 79, 109, 200, 400 ]) + expect(rect.rbox(group).toArray()).toEqual([79, 109, 200, 400]) }) // svgdom actually only throws here because a new Rect without dimensions has no bounding box @@ -267,30 +304,47 @@ describe('Box.js', () => { it('gets the viewbox of the element', () => { const canvas = SVG().addTo(container).viewbox(10, 10, 200, 200) expect(canvas.viewbox()).toEqual(any(Box)) - expect(canvas.viewbox().toArray()).toEqual([ 10, 10, 200, 200 ]) + expect(canvas.viewbox().toArray()).toEqual([10, 10, 200, 200]) }) }) describe('zoom()', () => { it('zooms around the center by default', () => { - const canvas = SVG().size(100, 50).viewbox(0, 0, 100, 50).addTo(container).zoom(2) + const canvas = SVG() + .size(100, 50) + .viewbox(0, 0, 100, 50) + .addTo(container) + .zoom(2) expect(canvas.attr('viewBox')).toEqual('25 12.5 50 25') }) it('zooms around a point', () => { - const canvas = SVG().size(100, 50).viewbox(0, 0, 100, 50).addTo(container).zoom(2, [ 0, 0 ]) + const canvas = SVG() + .size(100, 50) + .viewbox(0, 0, 100, 50) + .addTo(container) + .zoom(2, [0, 0]) expect(canvas.attr('viewBox')).toEqual('0 0 50 25') }) it('gets the zoom', () => { // We use a nested here because its actually harder to get a width and height for a nested svg because clientHeight // is not available - const svg = SVG().size(100, 50).addTo(container).nested().size(100, 50).viewbox(0, 0, 100, 50).zoom(2) + const svg = SVG() + .size(100, 50) + .addTo(container) + .nested() + .size(100, 50) + .viewbox(0, 0, 100, 50) + .zoom(2) expect(svg.zoom()).toEqual(2) }) it('gets the zoom with clientHeight', () => { - const svg = SVG().css({ width: '100px', height: '50px' }).addTo(container).viewbox(25, 12.5, 50, 25) + const svg = SVG() + .css({ width: '100px', height: '50px' }) + .addTo(container) + .viewbox(25, 12.5, 50, 25) const node = svg.node @@ -305,17 +359,32 @@ describe('Box.js', () => { }) it('throws an error if it is impossible to get an absolute value', () => { - const svg = SVG().size(100, 50).addTo(container).nested().viewbox(0, 0, 100, 50) - expect(() => svg.zoom()).toThrowError('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element') + const svg = SVG() + .size(100, 50) + .addTo(container) + .nested() + .viewbox(0, 0, 100, 50) + expect(() => svg.zoom()).toThrowError( + 'Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element' + ) }) it('handles zoom level 0 which is - which basically sets the viewbox to a very high value', () => { - const svg = SVG().size(100, 50).viewbox(0, 0, 100, 50).addTo(container).zoom(0) + const svg = SVG() + .size(100, 50) + .viewbox(0, 0, 100, 50) + .addTo(container) + .zoom(0) expect(svg.zoom()).toBeCloseTo(0, 10) }) it('handles zoom level 0 and can recover from it', () => { - const svg = SVG().size(100, 50).viewbox(0, 0, 100, 50).addTo(container).zoom(0).zoom(1) + const svg = SVG() + .size(100, 50) + .viewbox(0, 0, 100, 50) + .addTo(container) + .zoom(0) + .zoom(1) expect(svg.zoom()).toBe(1) }) }) diff --git a/spec/spec/types/Color.js b/spec/spec/types/Color.js index 64161eb..4bbd626 100644 --- a/spec/spec/types/Color.js +++ b/spec/spec/types/Color.js @@ -12,7 +12,6 @@ describe('Color.js', () => { }) describe('()', () => { - describe('constructs a color from an object in the correct color space', () => { it('rgb', () => { const color = new Color({ r: 255, g: 0, b: 128 }) @@ -73,7 +72,7 @@ describe('Color.js', () => { }) it('constructs a color from an array', () => { - const color = new Color([ 30, 24, 50 ]) + const color = new Color([30, 24, 50]) expect(color.r).toBe(30) expect(color.g).toBe(24) expect(color.b).toBe(50) @@ -81,7 +80,7 @@ describe('Color.js', () => { }) it('constructs a color from an array with space in array', () => { - const color = new Color([ 50, 50, 5, 'lab' ]) + const color = new Color([50, 50, 5, 'lab']) expect(color.l).toBe(50) expect(color.a).toBe(50) expect(color.b).toBe(5) @@ -89,7 +88,7 @@ describe('Color.js', () => { }) it('constructs a color from an array with space given', () => { - const color = new Color([ 50, 50, 5 ], 'lab') + const color = new Color([50, 50, 5], 'lab') expect(color.l).toBe(50) expect(color.a).toBe(50) expect(color.b).toBe(5) @@ -118,7 +117,9 @@ describe('Color.js', () => { }) it('throws an error if unsupported string format was given', () => { - expect(() => new Color('#0066')).toThrowError('Unsupported string format, can\'t construct Color') + expect(() => new Color('#0066')).toThrowError( + "Unsupported string format, can't construct Color" + ) }) }) @@ -137,7 +138,6 @@ describe('Color.js', () => { }) describe('color spaces: The color spaces supported by our library', () => { - describe('lab()', () => { it('can convert rgb to lab', () => { const color = new Color(255, 0, 128) @@ -225,7 +225,6 @@ describe('Color.js', () => { }) describe('hsl()', () => { - it('can convert from rgb to hsl', () => { const color = new Color(255, 0, 128) const hsl = color.hsl() @@ -315,7 +314,6 @@ describe('Color.js', () => { // }) describe('cmyk()', () => { - it('can convert from rgb to cmyk', () => { const color = new Color(255, 0, 128) const cmyk = color.cmyk() @@ -357,9 +355,7 @@ describe('Color.js', () => { expect(color.b).toBeCloseTo(255, 0) expect(color.toHex()).toBe('#ffffff') }) - }) - }) describe('static methods', () => { @@ -397,7 +393,9 @@ describe('Color.js', () => { }) it('throws an error if mode is unknown', () => { - expect(() => Color.random('foo')).toThrowError('Unsupported random color mode') + expect(() => Color.random('foo')).toThrowError( + 'Unsupported random color mode' + ) }) }) @@ -446,5 +444,4 @@ describe('Color.js', () => { }) }) }) - }) diff --git a/spec/spec/types/EventTarget.js b/spec/spec/types/EventTarget.js index 82e5a94..f19fe11 100644 --- a/spec/spec/types/EventTarget.js +++ b/spec/spec/types/EventTarget.js @@ -32,7 +32,9 @@ describe('EventTarget.js', () => { const options = { cancelable: false } const event = target.dispatch('bla', 'foo', options) expect(spy).toHaveBeenCalledWith(event) - expect(event).toEqual(objectContaining({ type: 'bla', detail: 'foo', cancelable: false })) + expect(event).toEqual( + objectContaining({ type: 'bla', detail: 'foo', cancelable: false }) + ) }) }) diff --git a/spec/spec/types/List.js b/spec/spec/types/List.js index eb0b40b..a6cab09 100644 --- a/spec/spec/types/List.js +++ b/spec/spec/types/List.js @@ -7,7 +7,7 @@ const { any, createSpy, objectContaining } = jasmine describe('List.js', () => { describe('()', () => { it('creates a new List from Array', () => { - const list = new List([ 1, 2, 3 ]) + const list = new List([1, 2, 3]) expect(list).toEqual(any(List)) }) @@ -17,55 +17,57 @@ describe('List.js', () => { }) it('is instance of Array', () => { - const list = new List([ 1, 2, 3 ]) + const list = new List([1, 2, 3]) expect(list).toEqual(any(Array)) }) it('allows index access', () => { - const list = new List([ 1, 2, 3 ]) + const list = new List([1, 2, 3]) expect(list[1]).toBe(2) }) }) describe('each()', () => { it('works like map but with context set to the element when a function is passed', () => { - const list = new List([ 1, 2, 3 ]).each((el) => el * 2) + const list = new List([1, 2, 3]).each((el) => el * 2) expect(list).toEqual(any(List)) - expect(list).toEqual([ 2, 4, 6 ]) + expect(list).toEqual([2, 4, 6]) const spy = createSpy() const obj = {} - const list2 = new List([ obj ]) + const list2 = new List([obj]) list2.each(spy) - expect(spy.calls.first()).toEqual(objectContaining({ - object: obj, - args: [ obj, 0, list2 ] - })) + expect(spy.calls.first()).toEqual( + objectContaining({ + object: obj, + args: [obj, 0, list2] + }) + ) }) it('calls a method on every element in the list and passes arguments when a string is passed', () => { - const list = new List([ 10, 11, 12 ]) - expect(list.each('toString', 16)).toEqual([ 'a', 'b', 'c' ]) + const list = new List([10, 11, 12]) + expect(list.each('toString', 16)).toEqual(['a', 'b', 'c']) }) }) describe('toArray()', () => { it('returns a plain array from the contents of the list', () => { - const list = new List([ 1, 2, 3 ]) + const list = new List([1, 2, 3]) const arr = list.toArray() expect(arr).toEqual(any(Array)) expect(arr).not.toEqual(any(List)) - expect(arr).toEqual([ 1, 2, 3 ]) + expect(arr).toEqual([1, 2, 3]) }) }) describe('static extend()', () => { it('adds new method names to the List', () => { - List.extend([ 'fooBar' ]) + List.extend(['fooBar']) expect(new List().fooBar).toEqual(any(Function)) const obj = { fooBar: createSpy() } - new List([ obj ]).fooBar() + new List([obj]).fooBar() expect(obj.fooBar).toHaveBeenCalled() delete List.prototype.fooBar @@ -73,12 +75,14 @@ describe('List.js', () => { it('skips reserved names', () => { const { constructor, each, toArray } = List.prototype - List.extend([ 'constructor', 'each', 'toArray' ]) - expect(List.prototype).toEqual(objectContaining({ constructor, each, toArray })) + List.extend(['constructor', 'each', 'toArray']) + expect(List.prototype).toEqual( + objectContaining({ constructor, each, toArray }) + ) }) it('skips private methods starting with an underscore', () => { - List.extend([ '_private' ]) + List.extend(['_private']) expect(new List()._private).toBe(undefined) }) }) diff --git a/spec/spec/types/Matrix.js b/spec/spec/types/Matrix.js index bddf6fd..f395c43 100644 --- a/spec/spec/types/Matrix.js +++ b/spec/spec/types/Matrix.js @@ -9,12 +9,11 @@ describe('Matrix.js', () => { const comp = { a: 2, b: 0, c: 0, d: 2, e: 100, f: 50 } describe('initialization', () => { - it('creates a new matrix with default values', () => { const matrix = new Matrix() - expect(matrix).toEqual(objectContaining( - { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 } - )) + expect(matrix).toEqual( + objectContaining({ a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }) + ) }) it('parses the current transform matrix from an element', () => { @@ -29,7 +28,7 @@ describe('Matrix.js', () => { }) it('parses an array correctly', () => { - const matrix = new Matrix([ 2, 0, 0, 2, 100, 50 ]) + const matrix = new Matrix([2, 0, 0, 2, 100, 50]) expect(matrix).toEqual(objectContaining(comp)) }) @@ -39,7 +38,7 @@ describe('Matrix.js', () => { }) it('parses a transform object correctly', () => { - const matrix = new Matrix({ scale: 2, translate: [ 100, 50 ] }) + const matrix = new Matrix({ scale: 2, translate: [100, 50] }) expect(matrix).toEqual(objectContaining(comp)) }) @@ -79,7 +78,11 @@ describe('Matrix.js', () => { describe('decompose()', () => { it('decomposes a matrix properly', () => { - var matrix = new Matrix().scale(3, 2.5).shear(4).rotate(30).translate(20, 30) + var matrix = new Matrix() + .scale(3, 2.5) + .shear(4) + .rotate(30) + .translate(20, 30) var decomposed = matrix.decompose() expect(decomposed.scaleX).toBeCloseTo(3) expect(decomposed.scaleY).toBeCloseTo(2.5) @@ -90,7 +93,11 @@ describe('Matrix.js', () => { }) it('can be recomposed to the same matrix', () => { - var matrix = new Matrix().scale(3, 2.5).shear(4).rotate(30).translate(20, 30) + var matrix = new Matrix() + .scale(3, 2.5) + .shear(4) + .rotate(30) + .translate(20, 30) var decomposed = matrix.decompose() // Get rid of the matrix values before recomposing with the matrix constructor @@ -141,7 +148,7 @@ describe('Matrix.js', () => { it('inverses matrix', () => { var matrix1 = new Matrix(2, 0, 0, 5, 4, 3) var matrix2 = matrix1.inverse() - var abcdef = [ 0.5, 0, 0, 0.2, -2, -0.6 ] + var abcdef = [0.5, 0, 0, 0.2, -2, -0.6] for (var i in 'abcdef') { expect(matrix2['abcdef'[i]]).toBeCloseTo(abcdef[i]) @@ -150,7 +157,9 @@ describe('Matrix.js', () => { it('throws if matrix is not invertible', () => { const matrix = new Matrix(0, 0, 0, 0, 0, 0) - expect(() => matrix.inverse()).toThrowError('Cannot invert matrix(0,0,0,0,0,0)') + expect(() => matrix.inverse()).toThrowError( + 'Cannot invert matrix(0,0,0,0,0,0)' + ) }) }) @@ -411,13 +420,21 @@ describe('Matrix.js', () => { describe('around()', () => { it('performs a matrix operation around an origin by shifting the origin to 0,0', () => { - const matrix = new Matrix(1, 0, 0, 1, 0, 0).around(10, 10, new Matrix().scale(2)) + const matrix = new Matrix(1, 0, 0, 1, 0, 0).around( + 10, + 10, + new Matrix().scale(2) + ) expect(matrix).toEqual(new Matrix(2, 0, 0, 2, -10, -10)) }) it('defaults to around center of 0,0', () => { - const matrix = new Matrix(1, 0, 0, 1, 0, 0).around(0, 0, new Matrix().scale(2)) + const matrix = new Matrix(1, 0, 0, 1, 0, 0).around( + 0, + 0, + new Matrix().scale(2) + ) expect(matrix).toEqual(new Matrix(2, 0, 0, 2, 0, 0)) }) @@ -451,14 +468,14 @@ describe('Matrix.js', () => { describe('toArray', () => { it('converts matrix to array', () => { const arr = new Matrix().toArray() - expect(arr).toEqual([ 1, 0, 0, 1, 0, 0 ]) + expect(arr).toEqual([1, 0, 0, 1, 0, 0]) }) }) describe('static', () => { describe('fromArray()', () => { it('creates a matrix like object from an array', () => { - const matrix = Matrix.fromArray([ 1, 2, 3, 4, 5, 6 ]) + const matrix = Matrix.fromArray([1, 2, 3, 4, 5, 6]) expect(matrix).not.toEqual(any(Matrix)) expect(matrix).toEqual(new Matrix(1, 2, 3, 4, 5, 6).valueOf()) }) @@ -478,47 +495,74 @@ describe('Matrix.js', () => { describe('formatTransforms()', () => { it('formats all transform input varieties to a canonical form', () => { - expect(Matrix.formatTransforms({ - flip: true, - skew: 5, - scale: 5, - originX: 5, - originY: 5, - positionX: 5, - positionY: 5, - translateX: 5, - translateY: 5, - relativeX: 5, - relativeY: 5 - })).toEqual({ scaleX: -5, scaleY: -5, skewX: 5, skewY: 5, shear: 0, theta: 0, rx: 5, ry: 5, tx: 5, ty: 5, ox: 5, oy: 5, px: 5, py: 5 }) + expect( + Matrix.formatTransforms({ + flip: true, + skew: 5, + scale: 5, + originX: 5, + originY: 5, + positionX: 5, + positionY: 5, + translateX: 5, + translateY: 5, + relativeX: 5, + relativeY: 5 + }) + ).toEqual({ + scaleX: -5, + scaleY: -5, + skewX: 5, + skewY: 5, + shear: 0, + theta: 0, + rx: 5, + ry: 5, + tx: 5, + ty: 5, + ox: 5, + oy: 5, + px: 5, + py: 5 + }) }) it('respects flip=x', () => { - expect(Matrix.formatTransforms({ - flip: 'x', - scale: [ 1, 2 ], - skew: [ 1, 2 ] - })).toEqual(objectContaining({ scaleX: -1, scaleY: 2, skewX: 1, skewY: 2 })) + expect( + Matrix.formatTransforms({ + flip: 'x', + scale: [1, 2], + skew: [1, 2] + }) + ).toEqual( + objectContaining({ scaleX: -1, scaleY: 2, skewX: 1, skewY: 2 }) + ) }) it('respects flip=y', () => { - expect(Matrix.formatTransforms({ - flip: 'y', - scaleX: 1, - scaleY: 2, - skewX: 1, - skewY: 2 - })).toEqual(objectContaining({ scaleX: 1, scaleY: -2, skewX: 1, skewY: 2 })) + expect( + Matrix.formatTransforms({ + flip: 'y', + scaleX: 1, + scaleY: 2, + skewX: 1, + skewY: 2 + }) + ).toEqual( + objectContaining({ scaleX: 1, scaleY: -2, skewX: 1, skewY: 2 }) + ) }) it('makes position NaN if not passed', () => { - expect(Matrix.formatTransforms({ - flip: 'y', - scaleX: 1, - scaleY: 2, - skewX: 1, - skewY: 2 - })).toEqual(objectContaining({ px: NaN, py: NaN })) + expect( + Matrix.formatTransforms({ + flip: 'y', + scaleX: 1, + scaleY: 2, + skewX: 1, + skewY: 2 + }) + ).toEqual(objectContaining({ px: NaN, py: NaN })) }) }) }) @@ -542,7 +586,10 @@ describe('Matrix.js', () => { }) it('does extra work for nested svgs because firefox needs it', () => { - const spy = spyOn(getWindow().SVGGraphicsElement.prototype, 'getScreenCTM') + const spy = spyOn( + getWindow().SVGGraphicsElement.prototype, + 'getScreenCTM' + ) const svg = SVG().nested() svg.screenCTM() expect(spy).toHaveBeenCalled() diff --git a/spec/spec/types/PathArray.js b/spec/spec/types/PathArray.js index 454252a..5c3991c 100644 --- a/spec/spec/types/PathArray.js +++ b/spec/spec/types/PathArray.js @@ -7,17 +7,19 @@ describe('PathArray.js', () => { beforeEach(() => { p1 = new PathArray('m10 10 h 80 v 80 h -80 l 300 400 z') - p2 = new PathArray('m10 80 c 40 10 65 10 95 80 s 150 150 180 80 t 300 300 q 52 10 95 80 z') + p2 = new PathArray( + 'm10 80 c 40 10 65 10 95 80 s 150 150 180 80 t 300 300 q 52 10 95 80 z' + ) p3 = new PathArray('m80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 z') }) it('parses flat arrays correctly', () => { - const arr = new PathArray([ 'M', 0, 0, 'L', 100, 100, 'z' ]) + const arr = new PathArray(['M', 0, 0, 'L', 100, 100, 'z']) expect(arr.toString()).toBe('M0 0L100 100Z ') }) it('parses nested arrays correctly', () => { - const arr = new PathArray([ [ 'M', 0, 0 ], [ 'L', 100, 100 ], [ 'z' ] ]) + const arr = new PathArray([['M', 0, 0], ['L', 100, 100], ['z']]) expect(arr.toString()).toBe('M0 0L100 100Z ') }) @@ -25,20 +27,26 @@ describe('PathArray.js', () => { it('returns the valueOf when PathArray is given', () => { const p = new PathArray('m10 10 h 80 v 80 h -80 l 300 400 z') - expect((new PathArray(p))).toEqual(p) + expect(new PathArray(p)).toEqual(p) }) describe('move()', () => { it('moves all points in a straight path', () => { - expect(p1.move(100, 200).toString()).toBe('M100 200H180V280H100L400 680Z ') + expect(p1.move(100, 200).toString()).toBe( + 'M100 200H180V280H100L400 680Z ' + ) }) it('moves all points in a curved path', () => { - expect(p2.move(100, 200).toString()).toBe('M100 200C140 210 165 210 195 280S345 430 375 360T675 660Q727 670 770 740Z ') + expect(p2.move(100, 200).toString()).toBe( + 'M100 200C140 210 165 210 195 280S345 430 375 360T675 660Q727 670 770 740Z ' + ) }) it('moves all points in a arc path', () => { - expect(p3.move(100, 200).toString()).toBe('M100 200A45 45 0 0 0 145 245L145 200Z ') + expect(p3.move(100, 200).toString()).toBe( + 'M100 200A45 45 0 0 0 145 245L145 200Z ' + ) }) it('does nothing if passed number is not a number', () => { @@ -48,26 +56,32 @@ describe('PathArray.js', () => { describe('size()', () => { it('resizes all points in a straight path', () => { - expect(p1.size(600, 200).toString()).toBe('M10 10H170V43.333333333333336H10L610 210Z ') + expect(p1.size(600, 200).toString()).toBe( + 'M10 10H170V43.333333333333336H10L610 210Z ' + ) }) it('resizes all points in a curved path', () => { - expect(p2.size(600, 200).toString()).toBe('M10 80C45.82089552238806 83.70370370370371 68.2089552238806 83.70370370370371 95.07462686567165 109.62962962962963S229.40298507462686 165.1851851851852 256.2686567164179 139.25925925925927T524.9253731343283 250.37037037037038Q571.4925373134329 254.07407407407408 610 280Z ') + expect(p2.size(600, 200).toString()).toBe( + 'M10 80C45.82089552238806 83.70370370370371 68.2089552238806 83.70370370370371 95.07462686567165 109.62962962962963S229.40298507462686 165.1851851851852 256.2686567164179 139.25925925925927T524.9253731343283 250.37037037037038Q571.4925373134329 254.07407407407408 610 280Z ' + ) }) it('resizes all points in a arc path', () => { const expected = [ - [ 'M', 80, 80 ], - [ 'A', 600, 200, 0, 0, 0, 680, 280 ], - [ 'L', 680, 80 ], - [ 'Z' ] + ['M', 80, 80], + ['A', 600, 200, 0, 0, 0, 680, 280], + ['L', 680, 80], + ['Z'] ] const toBeTested = p3.size(600, 200) - for (let i = toBeTested.length; i--;) { - expect(toBeTested[i].shift().toUpperCase()).toBe(expected[i].shift().toUpperCase()) - for (let j = toBeTested[i].length; j--;) { + for (let i = toBeTested.length; i--; ) { + expect(toBeTested[i].shift().toUpperCase()).toBe( + expected[i].shift().toUpperCase() + ) + for (let j = toBeTested[i].length; j--; ) { expect(toBeTested[i][j]).toBeCloseTo(expected[i][j]) } } diff --git a/spec/spec/types/Point.js b/spec/spec/types/Point.js index ef0b6f6..ff167b3 100644 --- a/spec/spec/types/Point.js +++ b/spec/spec/types/Point.js @@ -6,9 +6,7 @@ describe('Point.js', () => { var point describe('initialization', () => { - describe('without a source', () => { - beforeEach(() => { point = new Point() }) @@ -17,7 +15,6 @@ describe('Point.js', () => { expect(point.x).toBe(0) expect(point.y).toBe(0) }) - }) describe('with x and y given', () => { @@ -40,7 +37,7 @@ describe('Point.js', () => { describe('with array given', () => { it('creates a point from array', () => { - var point = new Point([ 2, 4 ]) + var point = new Point([2, 4]) expect(point.x).toBe(2) expect(point.y).toBe(4) @@ -68,11 +65,15 @@ describe('Point.js', () => { describe('transform()', () => { it('transforms a point with a matrix', () => { - expect(new Point().transform(new Matrix({ translate: [ 10, 10 ] }))).toEqual(new Point(10, 10)) + expect( + new Point().transform(new Matrix({ translate: [10, 10] })) + ).toEqual(new Point(10, 10)) }) it('transforms a point with a transformation object', () => { - expect(new Point().transform({ translate: [ 10, 10 ] })).toEqual(new Point(10, 10)) + expect(new Point().transform({ translate: [10, 10] })).toEqual( + new Point(10, 10) + ) }) }) @@ -89,7 +90,7 @@ describe('Point.js', () => { describe('toArray()', () => { it('creates an array representation of Point', () => { const p = new Point(1, 2) - expect(p.toArray()).toEqual([ 1, 2 ]) + expect(p.toArray()).toEqual([1, 2]) }) }) @@ -97,7 +98,9 @@ describe('Point.js', () => { describe('point()', () => { it('transforms a screen point into the coordinate system of the element', () => { const rect = new Rect() - spyOn(rect, 'screenCTM').and.callFake(() => new Matrix(1, 0, 0, 1, 20, 20)) + spyOn(rect, 'screenCTM').and.callFake( + () => new Matrix(1, 0, 0, 1, 20, 20) + ) expect(rect.point({ x: 10, y: 10 })).toEqual(new Point(-10, -10)) }) }) diff --git a/spec/spec/types/PointArray.js b/spec/spec/types/PointArray.js index cbcc3c1..74cc21f 100644 --- a/spec/spec/types/PointArray.js +++ b/spec/spec/types/PointArray.js @@ -6,45 +6,76 @@ describe('PointArray.js', () => { const squareString = '0,0 1,0 1,1 0,1' describe('()', () => { - it('parses a string to a point array', () => { var array = new PointArray('0,1 -.05,7.95 1000.0001,-200.222') - expect(array.valueOf()).toEqual([ [ 0, 1 ], [ -0.05, 7.95 ], [ 1000.0001, -200.222 ] ]) + expect(array.valueOf()).toEqual([ + [0, 1], + [-0.05, 7.95], + [1000.0001, -200.222] + ]) }) it('parses a points array correctly to string', () => { - var array = new PointArray([ [ 0, 0.15 ], [ -100, -3.141592654 ], [ 50, 100 ] ]) + var array = new PointArray([ + [0, 0.15], + [-100, -3.141592654], + [50, 100] + ]) expect(array + '').toBe('0,0.15 -100,-3.141592654 50,100') }) it('parses a flat array of x/y coordinates to a point array', () => { - var array = new PointArray([ 1, 4, 5, 68, 12, 24 ]) - expect(array.valueOf()).toEqual([ [ 1, 4 ], [ 5, 68 ], [ 12, 24 ] ]) + var array = new PointArray([1, 4, 5, 68, 12, 24]) + expect(array.valueOf()).toEqual([ + [1, 4], + [5, 68], + [12, 24] + ]) }) it('parses points with space delimitered x/y coordinates', () => { - var array = new PointArray('221.08 191.79 0.46 191.79 0.46 63.92 63.8 0.46 284.46 0.46 284.46 128.37 221.08 191.79') - expect(array + '').toBe('221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79') + var array = new PointArray( + '221.08 191.79 0.46 191.79 0.46 63.92 63.8 0.46 284.46 0.46 284.46 128.37 221.08 191.79' + ) + expect(array + '').toBe( + '221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79' + ) }) it('parses points with comma delimitered x/y coordinates', () => { - var array = new PointArray('221.08,191.79,0.46,191.79,0.46,63.92,63.8,0.46,284.46,0.46,284.46,128.37,221.08,191.79') - expect(array + '').toBe('221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79') + var array = new PointArray( + '221.08,191.79,0.46,191.79,0.46,63.92,63.8,0.46,284.46,0.46,284.46,128.37,221.08,191.79' + ) + expect(array + '').toBe( + '221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79' + ) }) it('parses points with comma and space delimitered x/y coordinates', () => { - var array = new PointArray('221.08, 191.79, 0.46, 191.79, 0.46, 63.92, 63.8, 0.46, 284.46, 0.46, 284.46, 128.37, 221.08, 191.79') - expect(array + '').toBe('221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79') + var array = new PointArray( + '221.08, 191.79, 0.46, 191.79, 0.46, 63.92, 63.8, 0.46, 284.46, 0.46, 284.46, 128.37, 221.08, 191.79' + ) + expect(array + '').toBe( + '221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79' + ) }) it('parses points with space and comma delimitered x/y coordinates', () => { - var array = new PointArray('221.08 ,191.79 ,0.46 ,191.79 ,0.46 ,63.92 ,63.8 ,0.46 ,284.46 ,0.46 ,284.46 ,128.37 ,221.08 ,191.79') - expect(array + '').toBe('221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79') + var array = new PointArray( + '221.08 ,191.79 ,0.46 ,191.79 ,0.46 ,63.92 ,63.8 ,0.46 ,284.46 ,0.46 ,284.46 ,128.37 ,221.08 ,191.79' + ) + expect(array + '').toBe( + '221.08,191.79 0.46,191.79 0.46,63.92 63.8,0.46 284.46,0.46 284.46,128.37 221.08,191.79' + ) }) it('parses points with redundant spaces at the end', () => { - var array = new PointArray('2176.6,1708.8 2176.4,1755.8 2245.8,1801.5 2297,1787.8 ') - expect(array + '').toBe('2176.6,1708.8 2176.4,1755.8 2245.8,1801.5 2297,1787.8') + var array = new PointArray( + '2176.6,1708.8 2176.4,1755.8 2245.8,1801.5 2297,1787.8 ' + ) + expect(array + '').toBe( + '2176.6,1708.8 2176.4,1755.8 2245.8,1801.5 2297,1787.8' + ) }) it('parses points with space delimitered x/y coordinates - even with leading or trailing space', () => { @@ -60,38 +91,48 @@ describe('PointArray.js', () => { it('parses odd number of points in a flat array of x/y coordinates and silently remove the odd point', () => { // this is according to spec: https://svgwg.org/svg2-draft/shapes.html#DataTypePoints - var array = new PointArray([ 1, 2, 3 ]) - expect(array.valueOf()).toEqual([ [ 1, 2 ] ]) + var array = new PointArray([1, 2, 3]) + expect(array.valueOf()).toEqual([[1, 2]]) }) - }) describe('move()', () => { it('moves the whole array by the passed value', () => { - const arr = new PointArray([ 1, 2, 3, 4 ]).move(10, 10) - expect(arr.toArray()).toEqual([ 10, 10, 12, 12 ]) + const arr = new PointArray([1, 2, 3, 4]).move(10, 10) + expect(arr.toArray()).toEqual([10, 10, 12, 12]) }) it('does nothing if values not numbers', () => { - const arr = new PointArray([ 1, 2, 3, 4 ]).move() - expect(arr.toArray()).toEqual([ 1, 2, 3, 4 ]) + const arr = new PointArray([1, 2, 3, 4]).move() + expect(arr.toArray()).toEqual([1, 2, 3, 4]) }) }) describe('size()', () => { it('correctly sizes the points over the whole area', () => { - var array = new PointArray([ 10, 10, 20, 20, 30, 30 ]) - expect(array.size(60, 60).valueOf()).toEqual([ [ 10, 10 ], [ 40, 40 ], [ 70, 70 ] ]) + var array = new PointArray([10, 10, 20, 20, 30, 30]) + expect(array.size(60, 60).valueOf()).toEqual([ + [10, 10], + [40, 40], + [70, 70] + ]) }) it('let coordinates untouched when width/height is zero', () => { - var array = new PointArray([ 10, 10, 10, 20, 10, 30 ]) - expect(array.size(60, 60).valueOf()).toEqual([ [ 10, 10 ], [ 10, 40 ], [ 10, 70 ] ]) - - array = new PointArray([ 10, 10, 20, 10, 30, 10 ]) - expect(array.size(60, 60).valueOf()).toEqual([ [ 10, 10 ], [ 40, 10 ], [ 70, 10 ] ]) + var array = new PointArray([10, 10, 10, 20, 10, 30]) + expect(array.size(60, 60).valueOf()).toEqual([ + [10, 10], + [10, 40], + [10, 70] + ]) + + array = new PointArray([10, 10, 20, 10, 30, 10]) + expect(array.size(60, 60).valueOf()).toEqual([ + [10, 10], + [40, 10], + [70, 10] + ]) }) - }) describe('toString()', () => { @@ -103,7 +144,7 @@ describe('PointArray.js', () => { describe('toLine', () => { it('returns an object which can be passed to a line as point attributes', () => { - const arr = new PointArray([ 1, 2, 3, 4 ]) + const arr = new PointArray([1, 2, 3, 4]) expect(arr.toLine()).toEqual({ x1: 1, y1: 2, x2: 3, y2: 4 }) }) }) @@ -111,7 +152,7 @@ describe('PointArray.js', () => { describe('transform()', () => { it('translates correctly', () => { const square = new PointArray(squareString) - const translation = new Matrix({ translate: [ 2, 1 ] }) + const translation = new Matrix({ translate: [2, 1] }) const newSquare = square.transform(translation) expect(newSquare.toString()).toEqual('2,1 3,1 3,2 2,2') }) @@ -129,7 +170,7 @@ describe('PointArray.js', () => { it('works with transform object instead of matrix', () => { const square = new PointArray(squareString) - const newSquare = square.transform({ translate: [ 2, 1 ] }) + const newSquare = square.transform({ translate: [2, 1] }) expect(newSquare.toString()).toEqual('2,1 3,1 3,2 2,2') }) }) diff --git a/spec/spec/types/SVGArray.js b/spec/spec/types/SVGArray.js index dc58a89..35c4b85 100644 --- a/spec/spec/types/SVGArray.js +++ b/spec/spec/types/SVGArray.js @@ -6,7 +6,6 @@ const { any } = jasmine describe('SVGArray.js', () => { describe('()', () => { - it('preallocates memory if only number is passed', () => { const arr = new SVGArray(1) expect(arr.length).toBe(1) @@ -14,29 +13,28 @@ describe('SVGArray.js', () => { it('parses a matrix array correctly to string', () => { const array = new SVGArray([ - 0.343, 0.669, 0.119, 0, 0, - 0.249, -0.626, 0.130, 0, 0, - 0.172, 0.334, 0.111, 0, 0, - 0.000, 0.000, 0.000, 1, -0 + 0.343, 0.669, 0.119, 0, 0, 0.249, -0.626, 0.13, 0, 0, 0.172, 0.334, + 0.111, 0, 0, 0.0, 0.0, 0.0, 1, -0 ]) - expect(array + '').toBe('0.343 0.669 0.119 0 0 0.249 -0.626 0.13 0 0 0.172 0.334 0.111 0 0 0 0 0 1 0') + expect(array + '').toBe( + '0.343 0.669 0.119 0 0 0.249 -0.626 0.13 0 0 0.172 0.334 0.111 0 0 0 0 0 1 0' + ) }) it('parses space separated string and converts it to array', () => { - expect((new SVGArray('1 2 3 4')).valueOf()).toEqual([ 1, 2, 3, 4 ]) + expect(new SVGArray('1 2 3 4').valueOf()).toEqual([1, 2, 3, 4]) }) it('parses comma separated string and converts it to array', () => { - expect((new SVGArray('1,2,3,4')).valueOf()).toEqual([ 1, 2, 3, 4 ]) + expect(new SVGArray('1,2,3,4').valueOf()).toEqual([1, 2, 3, 4]) }) - }) describe('reverse()', () => { it('reverses the array', () => { - const array = new SVGArray([ 1, 2, 3, 4, 5 ]).reverse() - expect(array.valueOf()).toEqual([ 5, 4, 3, 2, 1 ]) + const array = new SVGArray([1, 2, 3, 4, 5]).reverse() + expect(array.valueOf()).toEqual([5, 4, 3, 2, 1]) }) it('returns itself', () => { @@ -47,7 +45,7 @@ describe('SVGArray.js', () => { describe('clone()', () => { it('creates a shallow clone of the array', () => { - const array = new SVGArray([ 1, 2, 3, 4, 5 ]) + const array = new SVGArray([1, 2, 3, 4, 5]) const clone = array.clone() expect(array).toEqual(clone) @@ -55,25 +53,33 @@ describe('SVGArray.js', () => { }) it('also works with PointArray (one depths clone)', () => { - const array = new PointArray([ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]) + const array = new PointArray([ + [1, 2], + [3, 4], + [5, 6] + ]) const clone = array.clone() expect(array).toEqual(clone) expect(array).not.toBe(clone) - for (let i = array.length; i--;) { + for (let i = array.length; i--; ) { expect(array[i]).not.toBe(clone[i]) } }) it('also works with PathArray (one depths clone)', () => { - const array = new PathArray([ [ 'M', 1, 2 ], [ 'L', 3, 4 ], [ 'L', 5, 6 ] ]) + const array = new PathArray([ + ['M', 1, 2], + ['L', 3, 4], + ['L', 5, 6] + ]) const clone = array.clone() expect(array).toEqual(clone) expect(array).not.toBe(clone) - for (let i = array.length; i--;) { + for (let i = array.length; i--; ) { expect(array[i]).not.toBe(clone[i]) } }) @@ -81,9 +87,9 @@ describe('SVGArray.js', () => { describe('toSet()', () => { it('creates a Set from the Array', () => { - const set = new SVGArray([ 1, 1, 2, 3 ]).toSet() + const set = new SVGArray([1, 1, 2, 3]).toSet() expect(set).toEqual(any(Set)) - expect(set).toEqual(new Set([ 1, 2, 3 ])) + expect(set).toEqual(new Set([1, 2, 3])) }) }) }) diff --git a/spec/spec/types/SVGNumber.js b/spec/spec/types/SVGNumber.js index 1660724..2002833 100644 --- a/spec/spec/types/SVGNumber.js +++ b/spec/spec/types/SVGNumber.js @@ -56,13 +56,15 @@ describe('Number.js', () => { }) it('falls back to maximum value if given number is positive infinite', () => { - number = new SVGNumber(1.7976931348623157E+10308) - expect(number.value).toBe(3.4e+38) + // eslint-disable-next-line no-loss-of-precision + number = new SVGNumber(1.7976931348623157e10308) + expect(number.value).toBe(3.4e38) }) it('falls back to minimum value if given number is negative infinite', () => { - number = new SVGNumber(-1.7976931348623157E+10308) - expect(number.value).toBe(-3.4e+38) + // eslint-disable-next-line no-loss-of-precision + number = new SVGNumber(-1.7976931348623157e10308) + expect(number.value).toBe(-3.4e38) }) }) diff --git a/spec/spec/utils/adopter.js b/spec/spec/utils/adopter.js index 60c1642..3c12790 100644 --- a/spec/spec/utils/adopter.js +++ b/spec/spec/utils/adopter.js @@ -69,7 +69,9 @@ describe('adopter.js', () => { const rect = makeInstance('<rect width="200px" />') expect(adoptSpy).toHaveBeenCalledWith(any(Node)) - expect(adoptSpy).toHaveBeenCalledWith(objectContaining({ nodeName: 'rect' })) + expect(adoptSpy).toHaveBeenCalledWith( + objectContaining({ nodeName: 'rect' }) + ) expect(rect).toEqual(any(Rect)) expect(rect.parent()).toBe(null) }) @@ -78,7 +80,12 @@ describe('adopter.js', () => { const div = makeInstance('<div />', true) expect(adoptSpy).toHaveBeenCalledWith(any(Node)) - expect(adoptSpy).toHaveBeenCalledWith(objectContaining({ nodeName: 'DIV', namespaceURI: 'http://www.w3.org/1999/xhtml' })) + expect(adoptSpy).toHaveBeenCalledWith( + objectContaining({ + nodeName: 'DIV', + namespaceURI: 'http://www.w3.org/1999/xhtml' + }) + ) expect(div).toEqual(any(Dom)) expect(div.parent()).toBe(null) }) @@ -106,7 +113,9 @@ describe('adopter.js', () => { const rect = makeInstance(create('rect')) expect(adoptSpy).toHaveBeenCalledWith(any(Node)) - expect(adoptSpy).toHaveBeenCalledWith(objectContaining({ nodeName: 'rect' })) + expect(adoptSpy).toHaveBeenCalledWith( + objectContaining({ nodeName: 'rect' }) + ) expect(rect).toEqual(any(Rect)) }) }) @@ -206,7 +215,10 @@ describe('adopter.js', () => { const A = class {} extend(A, { - test () { this.prop = 'test'; return this } + test() { + this.prop = 'test' + return this + } }) expect(typeof A.prototype.test).toBe('function') @@ -218,8 +230,11 @@ describe('adopter.js', () => { const B = class {} const C = class {} - extend([ A, B, C ], { - test () { this.prop = 'test'; return this } + extend([A, B, C], { + test() { + this.prop = 'test' + return this + } }) expect(typeof A.prototype.test).toBe('function') @@ -238,7 +253,8 @@ describe('adopter.js', () => { const A = class {} extend(A, { test: wrapWithAttrCheck(function () { - this.prop = 'test'; return this + this.prop = 'test' + return this }), attr: attrSpy }) diff --git a/spec/spec/utils/methods.js b/spec/spec/utils/methods.js index 10d50d8..457a078 100644 --- a/spec/spec/utils/methods.js +++ b/spec/spec/utils/methods.js @@ -1,6 +1,10 @@ /* globals describe, expect, it */ -import { registerMethods, getMethodsFor, getMethodNames } from '../../../src/utils/methods.js' +import { + registerMethods, + getMethodsFor, + getMethodNames +} from '../../../src/utils/methods.js' describe('methods.js', () => { describe('registerMethods() / getMethodsFor() / addMethodNames / getMethodNames()', () => { diff --git a/spec/spec/utils/pathParser.js b/spec/spec/utils/pathParser.js index 09cfa4a..15d0453 100644 --- a/spec/spec/utils/pathParser.js +++ b/spec/spec/utils/pathParser.js @@ -5,136 +5,159 @@ import { pathParser } from '../../../src/utils/pathParser.js' describe('pathParser.js', () => { describe('pathParser()', () => { it('parses all paths correctly', () => { - expect(pathParser('M2,0a2 2 0 00-2 2a2 2 0 002 2a.5.5 0 011 0z')).toEqual([ - [ 'M', 2, 0 ], - [ 'A', 2, 2, 0, 0, 0, 0, 2 ], - [ 'A', 2, 2, 0, 0, 0, 2, 4 ], - [ 'A', 0.5, 0.5, 0, 0, 1, 3, 4 ], - [ 'Z' ] - ]) - - expect(pathParser('M2,0a2 2 0 00-2 2a2 2 0 002 2a.5.5 0 111 0z')).toEqual([ - [ 'M', 2, 0 ], - [ 'A', 2, 2, 0, 0, 0, 0, 2 ], - [ 'A', 2, 2, 0, 0, 0, 2, 4 ], - [ 'A', 0.5, 0.5, 0, 1, 1, 3, 4 ], - [ 'Z' ] - ]) + expect(pathParser('M2,0a2 2 0 00-2 2a2 2 0 002 2a.5.5 0 011 0z')).toEqual( + [ + ['M', 2, 0], + ['A', 2, 2, 0, 0, 0, 0, 2], + ['A', 2, 2, 0, 0, 0, 2, 4], + ['A', 0.5, 0.5, 0, 0, 1, 3, 4], + ['Z'] + ] + ) + + expect(pathParser('M2,0a2 2 0 00-2 2a2 2 0 002 2a.5.5 0 111 0z')).toEqual( + [ + ['M', 2, 0], + ['A', 2, 2, 0, 0, 0, 0, 2], + ['A', 2, 2, 0, 0, 0, 2, 4], + ['A', 0.5, 0.5, 0, 1, 1, 3, 4], + ['Z'] + ] + ) expect(pathParser('m10 10 h 80 v 80 h -80 l 300 400 z')).toEqual([ - [ 'M', 10, 10 ], - [ 'H', 90 ], - [ 'V', 90 ], - [ 'H', 10 ], - [ 'L', 310, 490 ], - [ 'Z' ] - ]) - - expect(pathParser('m10 80 c 40 10 65 10 95 80 s 150 150 180 80 t 300 300 q 52 10 95 80 z')).toEqual([ - [ 'M', 10, 80 ], - [ 'C', 50, 90, 75, 90, 105, 160 ], - [ 'S', 255, 310, 285, 240 ], - [ 'T', 585, 540 ], - [ 'Q', 637, 550, 680, 620 ], - [ 'Z' ] - ]) - - expect(pathParser('m80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 z')).toEqual([ - [ 'M', 80, 80 ], - [ 'A', 45, 45, 0, 0, 0, 125, 125 ], - [ 'L', 125, 80 ], - [ 'Z' ] - ]) - - expect(pathParser('M215.458,245.23c0,0,77.403,0,94.274,0S405,216.451,405,138.054S329.581,15,287.9,15c-41.68,0-139.924,0-170.688,0C86.45,15,15,60.65,15,134.084c0,73.434,96.259,112.137,114.122,112.137C146.984,246.221,215.458,245.23,215.458,245.23z')).toEqual([ - [ 'M', 215.458, 245.23 ], - [ 'C', 215.458, 245.23, 292.861, 245.23, 309.73199999999997, 245.23 ], - [ 'S', 405, 216.451, 405, 138.054 ], - [ 'S', 329.581, 15, 287.9, 15 ], - [ 'C', 246.21999999999997, 15, 147.97599999999997, 15, 117.21199999999999, 15 ], - [ 'C', 86.45, 15, 15, 60.65, 15, 134.084 ], - [ 'C', 15, 207.518, 111.259, 246.221, 129.122, 246.221 ], - [ 'C', 146.984, 246.221, 215.458, 245.23, 215.458, 245.23 ], - [ 'Z' ] - ]) - - expect(pathParser('M10 10-45-30.5.5 .89L2e-2.5.5-.5C.5.5.5.5.5.5L-3-4z')).toEqual([ - [ 'M', 10, 10 ], - [ 'L', -45, -30.5 ], - [ 'L', 0.5, 0.89 ], - [ 'L', 0.02, 0.5 ], - [ 'L', 0.5, -0.5 ], - [ 'C', 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ], - [ 'L', -3, -4 ], - [ 'Z' ] - ]) - - expect(pathParser('m 0,0 0,3189 2209,0 0,-3189 -2209,0 z m 154,154 1901,0 0,2881 -1901,0 0,-2881 z')).toEqual([ - [ 'M', 0, 0 ], - [ 'L', 0, 3189 ], - [ 'L', 2209, 3189 ], - [ 'L', 2209, 0 ], - [ 'L', 0, 0 ], - [ 'Z' ], - [ 'M', 154, 154 ], - [ 'L', 2055, 154 ], - [ 'L', 2055, 3035 ], - [ 'L', 154, 3035 ], - [ 'L', 154, 154 ], - [ 'Z' ] + ['M', 10, 10], + ['H', 90], + ['V', 90], + ['H', 10], + ['L', 310, 490], + ['Z'] + ]) + + expect( + pathParser( + 'm10 80 c 40 10 65 10 95 80 s 150 150 180 80 t 300 300 q 52 10 95 80 z' + ) + ).toEqual([ + ['M', 10, 80], + ['C', 50, 90, 75, 90, 105, 160], + ['S', 255, 310, 285, 240], + ['T', 585, 540], + ['Q', 637, 550, 680, 620], + ['Z'] + ]) + + expect(pathParser('m80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 z')).toEqual( + [['M', 80, 80], ['A', 45, 45, 0, 0, 0, 125, 125], ['L', 125, 80], ['Z']] + ) + + expect( + pathParser( + 'M215.458,245.23c0,0,77.403,0,94.274,0S405,216.451,405,138.054S329.581,15,287.9,15c-41.68,0-139.924,0-170.688,0C86.45,15,15,60.65,15,134.084c0,73.434,96.259,112.137,114.122,112.137C146.984,246.221,215.458,245.23,215.458,245.23z' + ) + ).toEqual([ + ['M', 215.458, 245.23], + ['C', 215.458, 245.23, 292.861, 245.23, 309.73199999999997, 245.23], + ['S', 405, 216.451, 405, 138.054], + ['S', 329.581, 15, 287.9, 15], + [ + 'C', + 246.21999999999997, + 15, + 147.97599999999997, + 15, + 117.21199999999999, + 15 + ], + ['C', 86.45, 15, 15, 60.65, 15, 134.084], + ['C', 15, 207.518, 111.259, 246.221, 129.122, 246.221], + ['C', 146.984, 246.221, 215.458, 245.23, 215.458, 245.23], + ['Z'] + ]) + + expect( + pathParser('M10 10-45-30.5.5 .89L2e-2.5.5-.5C.5.5.5.5.5.5L-3-4z') + ).toEqual([ + ['M', 10, 10], + ['L', -45, -30.5], + ['L', 0.5, 0.89], + ['L', 0.02, 0.5], + ['L', 0.5, -0.5], + ['C', 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], + ['L', -3, -4], + ['Z'] + ]) + + expect( + pathParser( + 'm 0,0 0,3189 2209,0 0,-3189 -2209,0 z m 154,154 1901,0 0,2881 -1901,0 0,-2881 z' + ) + ).toEqual([ + ['M', 0, 0], + ['L', 0, 3189], + ['L', 2209, 3189], + ['L', 2209, 0], + ['L', 0, 0], + ['Z'], + ['M', 154, 154], + ['L', 2055, 154], + ['L', 2055, 3035], + ['L', 154, 3035], + ['L', 154, 154], + ['Z'] ]) expect(pathParser('m 0,0 a 45 45, 0, 0, 0, 125 125')).toEqual([ - [ 'M', 0, 0 ], - [ 'A', 45, 45, 0, 0, 0, 125, 125 ] + ['M', 0, 0], + ['A', 45, 45, 0, 0, 0, 125, 125] ]) expect(pathParser('M10 10 80 80 30 30 Z')).toEqual([ - [ 'M', 10, 10 ], - [ 'L', 80, 80 ], - [ 'L', 30, 30 ], - [ 'Z' ] + ['M', 10, 10], + ['L', 80, 80], + ['L', 30, 30], + ['Z'] ]) expect(pathParser('M10 10L.5.5.3.3Z')).toEqual([ - [ 'M', 10, 10 ], - [ 'L', 0.5, 0.5 ], - [ 'L', 0.3, 0.3 ], - [ 'Z' ] + ['M', 10, 10], + ['L', 0.5, 0.5], + ['L', 0.3, 0.3], + ['Z'] ]) // "a" commands without optional whitespace around the flag params and ending coordinate pair expect(pathParser('a32 32 0 00.03-45.22', false)).toEqual([ - [ 'a', 32.0, 32.0, 0.0, 0.0, 0.0, 0.03, -45.22 ], + ['a', 32.0, 32.0, 0.0, 0.0, 0.0, 0.03, -45.22] ]) expect(pathParser('a48 48 0 1148-48', false)).toEqual([ - [ 'a', 48.0, 48.0, 0.0, 1.0, 1.0, 48.0, -48.0], + ['a', 48.0, 48.0, 0.0, 1.0, 1.0, 48.0, -48.0] ]) expect(pathParser('a82.6 82.6 0 0033.48-20.25', false)).toEqual([ - [ 'a', 82.6, 82.6, 0.0, 0.0, 0.0, 33.48, -20.25 ], + ['a', 82.6, 82.6, 0.0, 0.0, 0.0, 33.48, -20.25] ]) expect(pathParser('a82.45 82.45 0 00-20.24 33.47', false)).toEqual([ - [ 'a', 82.45, 82.45, 0.0, 0.0, 0.0, -20.24, 33.47 ], + ['a', 82.45, 82.45, 0.0, 0.0, 0.0, -20.24, 33.47] ]) expect(pathParser('a2.51 2.51 0 01.25.32', false)).toEqual([ - [ 'a', 2.51, 2.51, 0, 0, 1, 0.25, 0.32 ], + ['a', 2.51, 2.51, 0, 0, 1, 0.25, 0.32] ]) expect(pathParser('a2.51 2.51 0 00.25.32', false)).toEqual([ - [ 'a', 2.51, 2.51, 0, 0, 0, 0.25, 0.32 ], + ['a', 2.51, 2.51, 0, 0, 0, 0.25, 0.32] ]) expect(pathParser('a2.51 2.51 0 000.25.32', false)).toEqual([ - [ 'a', 2.51, 2.51, 0, 0, 0, 0.25, 0.32 ], + ['a', 2.51, 2.51, 0, 0, 0, 0.25, 0.32] ]) expect(pathParser('a48 48 0 1148-48 48 48 0 01-48 48', false)).toEqual([ - [ 'a', 48.0, 48.0, 0.0, 1.0, 1.0, 48.0, -48.0 ], - [ 'a', 48.0, 48.0, 0.0, 0.0, 1.0, -48.0, 48.0 ] + ['a', 48.0, 48.0, 0.0, 1.0, 1.0, 48.0, -48.0], + ['a', 48.0, 48.0, 0.0, 0.0, 1.0, -48.0, 48.0] ]) }) }) diff --git a/spec/spec/utils/utils.js b/spec/spec/utils/utils.js index 5a2ae97..0b3015e 100644 --- a/spec/spec/utils/utils.js +++ b/spec/spec/utils/utils.js @@ -20,7 +20,7 @@ describe('utils.js', function () { var arr2 beforeEach(function () { - arr1 = [ 1, 2, 3, 4 ] + arr1 = [1, 2, 3, 4] arr2 = map(arr1, function (el) { return el * 2 }) @@ -32,7 +32,7 @@ describe('utils.js', function () { }) it('executes a function on every element and returns the result in a new array', function () { - expect(arr2).toEqual([ 2, 4, 6, 8 ]) + expect(arr2).toEqual([2, 4, 6, 8]) }) }) @@ -41,7 +41,7 @@ describe('utils.js', function () { var arr2 beforeEach(function () { - arr1 = [ 1, 2, 3, 4 ] + arr1 = [1, 2, 3, 4] arr2 = filter(arr1, function (el) { return el % 2 === 0 }) @@ -53,7 +53,7 @@ describe('utils.js', function () { }) it('filters elements by function', function () { - expect(arr2).toEqual([ 2, 4 ]) + expect(arr2).toEqual([2, 4]) }) }) @@ -130,16 +130,28 @@ describe('utils.js', function () { var el = { bbox: () => ({ width: 200, height: 100 }) } it('calculates height proportionally', function () { - expect(proportionalSize(el, 400, null)).toEqual({ width: 400, height: 200 }) + expect(proportionalSize(el, 400, null)).toEqual({ + width: 400, + height: 200 + }) }) it('calculates width proportionally', function () { - expect(proportionalSize(el, null, 200)).toEqual({ width: 400, height: 200 }) + expect(proportionalSize(el, null, 200)).toEqual({ + width: 400, + height: 200 + }) }) it('prefers passed box over element', function () { - expect(proportionalSize(el, 300, null, box)).toEqual({ width: 300, height: 200 }) - expect(proportionalSize(el, null, 200, box)).toEqual({ width: 300, height: 200 }) + expect(proportionalSize(el, 300, null, box)).toEqual({ + width: 300, + height: 200 + }) + expect(proportionalSize(el, null, 200, box)).toEqual({ + width: 300, + height: 200 + }) }) }) @@ -147,48 +159,48 @@ describe('utils.js', function () { var el = { bbox: () => ({ width: 200, height: 100, x: 300, y: 400 }) } it('gets the origin from [ox, oy]', function () { - var origin = { origin: [ 10, 20 ] } - expect(getOrigin(origin, el)).toEqual([ 10, 20 ]) + var origin = { origin: [10, 20] } + expect(getOrigin(origin, el)).toEqual([10, 20]) }) it('gets the origin from [ox, oy] as strings', function () { - var origin = { origin: [ 'center', 'top' ] } - expect(getOrigin(origin, el)).toEqual([ 400, 400 ]) + var origin = { origin: ['center', 'top'] } + expect(getOrigin(origin, el)).toEqual([400, 400]) }) it('gets the origin from {x, y}', function () { var origin = { origin: { x: 10, y: 20 } } - expect(getOrigin(origin, el)).toEqual([ 10, 20 ]) + expect(getOrigin(origin, el)).toEqual([10, 20]) }) it('gets the origin from {ox, oy}', function () { var origin = { ox: 10, oy: 20 } - expect(getOrigin(origin, el)).toEqual([ 10, 20 ]) + expect(getOrigin(origin, el)).toEqual([10, 20]) }) it('gets the origin from {ox, oy} as strings', function () { var origin = { ox: 'center', oy: 'top' } - expect(getOrigin(origin, el)).toEqual([ 400, 400 ]) + expect(getOrigin(origin, el)).toEqual([400, 400]) }) it('gets the origin from {originX, originY}', function () { var origin = { originX: 10, originY: 20 } - expect(getOrigin(origin, el)).toEqual([ 10, 20 ]) + expect(getOrigin(origin, el)).toEqual([10, 20]) }) it('gets the origin from {originX, originY} as strings', function () { var origin = { originX: 'center', originY: 'top' } - expect(getOrigin(origin, el)).toEqual([ 400, 400 ]) + expect(getOrigin(origin, el)).toEqual([400, 400]) }) it('gets the origin from string', function () { var origin = { origin: 'center top' } - expect(getOrigin(origin, el)).toEqual([ 400, 400 ]) + expect(getOrigin(origin, el)).toEqual([400, 400]) }) it('gets the origin from number', function () { var origin = { origin: 5 } - expect(getOrigin(origin, el)).toEqual([ 5, 5 ]) + expect(getOrigin(origin, el)).toEqual([5, 5]) }) }) }) diff --git a/spec/spec/utils/window.js b/spec/spec/utils/window.js index 65fbcab..e681491 100644 --- a/spec/spec/utils/window.js +++ b/spec/spec/utils/window.js @@ -1,6 +1,13 @@ /* globals describe, expect, it */ -import { registerWindow, globals, withWindow, getWindow, saveWindow, restoreWindow } from '../../../src/utils/window.js' +import { + registerWindow, + globals, + withWindow, + getWindow, + saveWindow, + restoreWindow +} from '../../../src/utils/window.js' describe('window.js', () => { describe('registerWindow()', () => { diff --git a/src/animation/Animator.js b/src/animation/Animator.js index fc3df10..11cca54 100644 --- a/src/animation/Animator.js +++ b/src/animation/Animator.js @@ -9,7 +9,7 @@ const Animator = { timer: () => globals.window.performance || globals.window.Date, transforms: [], - frame (fn) { + frame(fn) { // Store the node const node = Animator.frames.push({ run: fn }) @@ -22,7 +22,7 @@ const Animator = { return node }, - timeout (fn, delay) { + timeout(fn, delay) { delay = delay || 0 // Work out when the event should fire @@ -39,7 +39,7 @@ const Animator = { return node }, - immediate (fn) { + immediate(fn) { // Add the immediate fn to the end of the queue const node = Animator.immediates.push(fn) // Request another animation frame if we need one @@ -50,19 +50,19 @@ const Animator = { return node }, - cancelFrame (node) { + cancelFrame(node) { node != null && Animator.frames.remove(node) }, - clearTimeout (node) { + clearTimeout(node) { node != null && Animator.timeouts.remove(node) }, - cancelImmediate (node) { + cancelImmediate(node) { node != null && Animator.immediates.remove(node) }, - _draw (now) { + _draw(now) { // Run all the timeouts we can run, if they are not ready yet, add them // to the end of the queue immediately! (bad timeouts!!! [sarcasm]) let nextTimeout = null @@ -82,7 +82,7 @@ const Animator = { // Run all of the animation frames let nextFrame = null const lastFrame = Animator.frames.last() - while ((nextFrame !== lastFrame) && (nextFrame = Animator.frames.shift())) { + while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) { nextFrame.run(now) } @@ -92,9 +92,10 @@ const Animator = { } // If we have remaining timeouts or frames, draw until we don't anymore - Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() - ? globals.window.requestAnimationFrame(Animator._draw) - : null + Animator.nextDraw = + Animator.timeouts.first() || Animator.frames.first() + ? globals.window.requestAnimationFrame(Animator._draw) + : null } } diff --git a/src/animation/Controller.js b/src/animation/Controller.js index 303fb71..1cf879d 100644 --- a/src/animation/Controller.js +++ b/src/animation/Controller.js @@ -7,7 +7,7 @@ Base Class The base stepper class that will be ***/ -function makeSetterGetter (k, f) { +function makeSetterGetter(k, f) { return function (v) { if (v == null) return this[k] this[k] = v @@ -24,27 +24,27 @@ export const easing = { return -Math.cos(pos * Math.PI) / 2 + 0.5 }, '>': function (pos) { - return Math.sin(pos * Math.PI / 2) + return Math.sin((pos * Math.PI) / 2) }, '<': function (pos) { - return -Math.cos(pos * Math.PI / 2) + 1 + return -Math.cos((pos * Math.PI) / 2) + 1 }, bezier: function (x1, y1, x2, y2) { // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo return function (t) { if (t < 0) { if (x1 > 0) { - return y1 / x1 * t + return (y1 / x1) * t } else if (x2 > 0) { - return y2 / x2 * t + return (y2 / x2) * t } else { return 0 } } else if (t > 1) { if (x2 < 1) { - return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2) + return ((1 - y2) / (1 - x2)) * t + (y2 - x2) / (1 - x2) } else if (x1 < 1) { - return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1) + return ((1 - y1) / (1 - x1)) * t + (y1 - x1) / (1 - x1) } else { return 1 } @@ -93,7 +93,7 @@ export const easing = { } export class Stepper { - done () { + done() { return false } } @@ -104,12 +104,12 @@ Easing Functions ***/ export class Ease extends Stepper { - constructor (fn = timeline.ease) { + constructor(fn = timeline.ease) { super() this.ease = easing[fn] || fn } - step (from, to, pos) { + step(from, to, pos) { if (typeof from !== 'number') { return pos < 1 ? from : to } @@ -123,22 +123,21 @@ Controller Types ***/ export class Controller extends Stepper { - constructor (fn) { + constructor(fn) { super() this.stepper = fn } - done (c) { + done(c) { return c.done } - step (current, target, dt, c) { + step(current, target, dt, c) { return this.stepper(current, target, dt, c) } - } -function recalculate () { +function recalculate() { // Apply the default parameters const duration = (this._duration || 500) / 1000 const overshoot = this._overshoot || 0 @@ -156,13 +155,12 @@ function recalculate () { } export class Spring extends Controller { - constructor (duration = 500, overshoot = 0) { + constructor(duration = 500, overshoot = 0) { super() - this.duration(duration) - .overshoot(overshoot) + this.duration(duration).overshoot(overshoot) } - step (current, target, dt, c) { + step(current, target, dt, c) { if (typeof current === 'string') return current c.done = dt === Infinity if (dt === Infinity) return target @@ -177,9 +175,7 @@ export class Spring extends Controller { // Apply the control to get the new position and store it const acceleration = -this.d * velocity - this.k * (current - target) - const newPosition = current - + velocity * dt - + acceleration * dt * dt / 2 + const newPosition = current + velocity * dt + (acceleration * dt * dt) / 2 // Store the velocity c.velocity = velocity + acceleration * dt @@ -196,12 +192,12 @@ extend(Spring, { }) export class PID extends Controller { - constructor (p = 0.1, i = 0.01, d = 0, windup = 1000) { + constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) { super() this.p(p).i(i).d(d).windup(windup) } - step (current, target, dt, c) { + step(current, target, dt, c) { if (typeof current === 'string') return current c.done = dt === Infinity diff --git a/src/animation/Morphable.js b/src/animation/Morphable.js index e9b3ff8..240ca7b 100644 --- a/src/animation/Morphable.js +++ b/src/animation/Morphable.js @@ -19,9 +19,7 @@ const getClassForType = (value) => { if (Color.isColor(value)) { return Color } else if (delimiter.test(value)) { - return isPathLetter.test(value) - ? PathArray - : SVGArray + return isPathLetter.test(value) ? PathArray : SVGArray } else if (numberAndUnit.test(value)) { return SVGNumber } else { @@ -39,7 +37,7 @@ const getClassForType = (value) => { } export default class Morphable { - constructor (stepper) { + constructor(stepper) { this._stepper = stepper || new Ease('-') this._from = null @@ -49,12 +47,17 @@ export default class Morphable { this._morphObj = null } - at (pos) { - return this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context) - + at(pos) { + return this._morphObj.morph( + this._from, + this._to, + pos, + this._stepper, + this._context + ) } - done () { + done() { const complete = this._context .map(this._stepper.done) .reduce(function (last, curr) { @@ -63,7 +66,7 @@ export default class Morphable { return complete } - from (val) { + from(val) { if (val == null) { return this._from } @@ -72,13 +75,13 @@ export default class Morphable { return this } - stepper (stepper) { + stepper(stepper) { if (stepper == null) return this._stepper this._stepper = stepper return this } - to (val) { + to(val) { if (val == null) { return this._to } @@ -87,7 +90,7 @@ export default class Morphable { return this } - type (type) { + type(type) { // getter if (type == null) { return this._type @@ -98,33 +101,34 @@ export default class Morphable { return this } - _set (value) { + _set(value) { if (!this._type) { this.type(getClassForType(value)) } - let result = (new this._type(value)) + let result = new this._type(value) if (this._type === Color) { result = this._to ? result[this._to[4]]() : this._from - ? result[this._from[4]]() - : result + ? result[this._from[4]]() + : result } if (this._type === ObjectBag) { result = this._to ? result.align(this._to) : this._from - ? result.align(this._from) - : result + ? result.align(this._from) + : result } result = result.toConsumable() this._morphObj = this._morphObj || new this._type() - this._context = this._context - || Array.apply(null, Array(result.length)) + this._context = + this._context || + Array.apply(null, Array(result.length)) .map(Object) .map(function (o) { o.done = true @@ -132,36 +136,34 @@ export default class Morphable { }) return result } - } export class NonMorphable { - constructor (...args) { + constructor(...args) { this.init(...args) } - init (val) { + init(val) { val = Array.isArray(val) ? val[0] : val this.value = val return this } - toArray () { - return [ this.value ] + toArray() { + return [this.value] } - valueOf () { + valueOf() { return this.value } - } export class TransformBag { - constructor (...args) { + constructor(...args) { this.init(...args) } - init (obj) { + init(obj) { if (Array.isArray(obj)) { obj = { scaleX: obj[0], @@ -179,7 +181,7 @@ export class TransformBag { return this } - toArray () { + toArray() { const v = this return [ @@ -207,23 +209,24 @@ TransformBag.defaults = { } const sortByKey = (a, b) => { - return (a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0)) + return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 } export class ObjectBag { - constructor (...args) { + constructor(...args) { this.init(...args) } - align (other) { + align(other) { const values = this.values for (let i = 0, il = values.length; i < il; ++i) { - // If the type is the same we only need to check if the color is in the correct format if (values[i + 1] === other[i + 1]) { if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) { const space = other[i + 7] - const color = new Color(this.values.splice(i + 3, 5))[space]().toArray() + const color = new Color(this.values.splice(i + 3, 5)) + [space]() + .toArray() this.values.splice(i + 3, 0, ...color) } @@ -237,19 +240,26 @@ export class ObjectBag { // The types differ, so we overwrite the new type with the old one // And initialize it with the types default (e.g. black for color or 0 for number) - const defaultObject = new (other[i + 1])().toArray() + const defaultObject = new other[i + 1]().toArray() // Than we fix the values array - const toDelete = (values[i + 2]) + 3 + const toDelete = values[i + 2] + 3 - values.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject) + values.splice( + i, + toDelete, + other[i], + other[i + 1], + other[i + 2], + ...defaultObject + ) i += values[i + 2] + 2 } return this } - init (objOrArr) { + init(objOrArr) { this.values = [] if (Array.isArray(objOrArr)) { @@ -263,7 +273,7 @@ export class ObjectBag { for (const i in objOrArr) { const Type = getClassForType(objOrArr[i]) const val = new Type(objOrArr[i]).toArray() - entries.push([ i, Type, val.length, ...val ]) + entries.push([i, Type, val.length, ...val]) } entries.sort(sortByKey) @@ -272,11 +282,11 @@ export class ObjectBag { return this } - toArray () { + toArray() { return this.values } - valueOf () { + valueOf() { const obj = {} const arr = this.values @@ -286,40 +296,35 @@ export class ObjectBag { const Type = arr.shift() const num = arr.shift() const values = arr.splice(0, num) - obj[key] = new Type(values)// .valueOf() + obj[key] = new Type(values) // .valueOf() } return obj } - } -const morphableTypes = [ - NonMorphable, - TransformBag, - ObjectBag -] +const morphableTypes = [NonMorphable, TransformBag, ObjectBag] -export function registerMorphableType (type = []) { +export function registerMorphableType(type = []) { morphableTypes.push(...[].concat(type)) } -export function makeMorphable () { +export function makeMorphable() { extend(morphableTypes, { - to (val) { + to(val) { return new Morphable() .type(this.constructor) - .from(this.toArray())// this.valueOf()) + .from(this.toArray()) // this.valueOf()) .to(val) }, - fromArray (arr) { + fromArray(arr) { this.init(arr) return this }, - toConsumable () { + toConsumable() { return this.toArray() }, - morph (from, to, pos, stepper, context) { + morph(from, to, pos, stepper, context) { const mapper = function (i, index) { return stepper.step(i, to[index], pos, context[index], context) } diff --git a/src/animation/Queue.js b/src/animation/Queue.js index ba484dc..65108f3 100644 --- a/src/animation/Queue.js +++ b/src/animation/Queue.js @@ -1,22 +1,25 @@ export default class Queue { - constructor () { + constructor() { this._first = null this._last = null } // Shows us the first item in the list - first () { + first() { return this._first && this._first.value } // Shows us the last item in the list - last () { + last() { return this._last && this._last.value } - push (value) { + push(value) { // An item stores an id and the provided value - const item = typeof value.next !== 'undefined' ? value : { value: value, next: null, prev: null } + const item = + typeof value.next !== 'undefined' + ? value + : { value: value, next: null, prev: null } // Deal with the queue being empty or populated if (this._last) { @@ -33,7 +36,7 @@ export default class Queue { } // Removes the item that was returned from the push - remove (item) { + remove(item) { // Relink the previous item if (item.prev) item.prev.next = item.next if (item.next) item.next.prev = item.prev @@ -45,7 +48,7 @@ export default class Queue { item.next = null } - shift () { + shift() { // Check if we have a value const remove = this._first if (!remove) return null @@ -56,5 +59,4 @@ export default class Queue { this._last = this._first ? this._last : null return remove.value } - } diff --git a/src/animation/Runner.js b/src/animation/Runner.js index 9d50042..a83a02f 100644 --- a/src/animation/Runner.js +++ b/src/animation/Runner.js @@ -15,21 +15,17 @@ import SVGNumber from '../types/SVGNumber.js' import Timeline from './Timeline.js' export default class Runner extends EventTarget { - constructor (options) { + constructor(options) { super() // Store a unique id on the runner, so that we can identify it later this.id = Runner.id++ // Ensure a default value - options = options == null - ? timeline.duration - : options + options = options == null ? timeline.duration : options // Ensure that we get a controller - options = typeof options === 'function' - ? new Controller(options) - : options + options = typeof options === 'function' ? new Controller(options) : options // Declare all of the variables this._element = null @@ -71,7 +67,7 @@ export default class Runner extends EventTarget { this._persist = this._isDeclarative ? true : null } - static sanitise (duration, delay, when) { + static sanitise(duration, delay, when) { // Initialise the default parameters let times = 1 let swing = false @@ -100,7 +96,7 @@ export default class Runner extends EventTarget { } } - active (enabled) { + active(enabled) { if (enabled == null) return this.enabled this.enabled = enabled return this @@ -111,16 +107,16 @@ export default class Runner extends EventTarget { =============== Methods that shouldn't be used externally */ - addTransform (transform, index) { + addTransform(transform) { this.transforms.lmultiplyO(transform) return this } - after (fn) { + after(fn) { return this.on('finished', fn) } - animate (duration, delay, when) { + animate(duration, delay, when) { const o = Runner.sanitise(duration, delay, when) const runner = new Runner(o.duration) if (this._timeline) runner.timeline(this._timeline) @@ -128,33 +124,37 @@ export default class Runner extends EventTarget { return runner.loop(o).schedule(o.delay, o.when) } - clearTransform () { + clearTransform() { this.transforms = new Matrix() return this } // TODO: Keep track of all transformations so that deletion is faster - clearTransformsFromQueue () { - if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) { + clearTransformsFromQueue() { + if ( + !this.done || + !this._timeline || + !this._timeline._runnerIds.includes(this.id) + ) { this._queue = this._queue.filter((item) => { return !item.isTransform }) } } - delay (delay) { + delay(delay) { return this.animate(0, delay) } - duration () { + duration() { return this._times * (this._wait + this._duration) - this._wait } - during (fn) { + during(fn) { return this.queue(null, fn) } - ease (fn) { + ease(fn) { this._stepper = new Ease(fn) return this } @@ -165,18 +165,18 @@ export default class Runner extends EventTarget { help us make new runners from the current runner */ - element (element) { + element(element) { if (element == null) return this._element this._element = element element._prepareRunner() return this } - finish () { + finish() { return this.step(Infinity) } - loop (times, swing, wait) { + loop(times, swing, wait) { // Deal with the user passing in an object if (typeof times === 'object') { swing = times.swing @@ -190,16 +190,18 @@ export default class Runner extends EventTarget { this._wait = wait || 0 // Allow true to be passed - if (this._times === true) { this._times = Infinity } + if (this._times === true) { + this._times = Infinity + } return this } - loops (p) { + loops(p) { const loopDuration = this._duration + this._wait if (p == null) { const loopsDone = Math.floor(this._time / loopDuration) - const relativeTime = (this._time - loopsDone * loopDuration) + const relativeTime = this._time - loopsDone * loopDuration const position = relativeTime / this._duration return Math.min(loopsDone + position, this._times) } @@ -209,13 +211,13 @@ export default class Runner extends EventTarget { return this.time(time) } - persist (dtOrForever) { + persist(dtOrForever) { if (dtOrForever == null) return this._persist this._persist = dtOrForever return this } - position (p) { + position(p) { // Get all of the variables we need const x = this._time const d = this._duration @@ -235,18 +237,20 @@ export default class Runner extends EventTarget { // Figure out the value without thinking about the start or end time const f = function (x) { - const swinging = s * Math.floor(x % (2 * (w + d)) / (w + d)) + const swinging = s * Math.floor((x % (2 * (w + d))) / (w + d)) const backwards = (swinging && !r) || (!swinging && r) - const uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards + const uncliped = + (Math.pow(-1, backwards) * (x % (w + d))) / d + backwards const clipped = Math.max(Math.min(uncliped, 1), 0) return clipped } // Figure out the value by incorporating the start time const endTime = t * (w + d) - w - position = x <= 0 - ? Math.round(f(1e-5)) - : x < endTime + position = + x <= 0 + ? Math.round(f(1e-5)) + : x < endTime ? f(x) : Math.round(f(endTime - 1e-5)) return position @@ -254,13 +258,13 @@ export default class Runner extends EventTarget { // Work out the loops done and add the position to the loops done const loopsDone = Math.floor(this.loops()) - const swingForward = s && (loopsDone % 2 === 0) + const swingForward = s && loopsDone % 2 === 0 const forwards = (swingForward && !r) || (r && swingForward) position = loopsDone + (forwards ? p : 1 - p) return this.loops(position) } - progress (p) { + progress(p) { if (p == null) { return Math.min(1, this._time / this.duration()) } @@ -272,7 +276,7 @@ export default class Runner extends EventTarget { =================== These methods allow us to attach basic functions to the runner directly */ - queue (initFn, runFn, retargetFn, isTransform) { + queue(initFn, runFn, retargetFn, isTransform) { this._queue.push({ initialiser: initFn || noop, runner: runFn || noop, @@ -286,19 +290,19 @@ export default class Runner extends EventTarget { return this } - reset () { + reset() { if (this._reseted) return this this.time(0) this._reseted = true return this } - reverse (reverse) { + reverse(reverse) { this._reverse = reverse == null ? !this._reverse : reverse return this } - schedule (timeline, delay, when) { + schedule(timeline, delay, when) { // The user doesn't need to pass a timeline if we already have one if (!(timeline instanceof Timeline)) { when = delay @@ -316,7 +320,7 @@ export default class Runner extends EventTarget { return this } - step (dt) { + step(dt) { // If we are inactive, this stepper just gets skipped if (!this.enabled) return this @@ -373,7 +377,7 @@ export default class Runner extends EventTarget { ======================== Control how the animation plays */ - time (time) { + time(time) { if (time == null) { return this._time } @@ -382,21 +386,21 @@ export default class Runner extends EventTarget { return this } - timeline (timeline) { + timeline(timeline) { // check explicitly for undefined so we can set the timeline to null if (typeof timeline === 'undefined') return this._timeline this._timeline = timeline return this } - unschedule () { + unschedule() { const timeline = this.timeline() timeline && timeline.unschedule(this) return this } // Run each initialise function in the runner if required - _initialise (running) { + _initialise(running) { // If we aren't running, we shouldn't initialise when not declarative if (!running && !this._isDeclarative) return @@ -418,7 +422,7 @@ export default class Runner extends EventTarget { } // Save a morpher to the morpher list so that we can retarget it later - _rememberMorpher (method, morpher) { + _rememberMorpher(method, morpher) { this._history[method] = { morpher: morpher, caller: this._queue[this._queue.length - 1] @@ -438,7 +442,7 @@ export default class Runner extends EventTarget { // Try to set the target for a morpher if the morpher exists, otherwise // Run each run function for the position or dt given - _run (positionOrDt) { + _run(positionOrDt) { // Run all of the _queue directly let allfinished = true for (let i = 0, len = this._queue.length; i < len; ++i) { @@ -448,7 +452,7 @@ export default class Runner extends EventTarget { // Run the function if its not finished, we keep track of the finished // flag for the sake of declarative _queue const converged = current.runner.call(this, positionOrDt) - current.finished = current.finished || (converged === true) + current.finished = current.finished || converged === true allfinished = allfinished && current.finished } @@ -457,7 +461,7 @@ export default class Runner extends EventTarget { } // do nothing and return false - _tryRetarget (method, target, extra) { + _tryRetarget(method, target, extra) { if (this._history[method]) { // if the last method wasn't even initialised, throw it away if (!this._history[method].caller.initialised) { @@ -482,23 +486,22 @@ export default class Runner extends EventTarget { } return false } - } Runner.id = 0 export class FakeRunner { - constructor (transforms = new Matrix(), id = -1, done = true) { + constructor(transforms = new Matrix(), id = -1, done = true) { this.transforms = transforms this.id = id this.done = done } - clearTransformsFromQueue () { } + clearTransformsFromQueue() {} } -extend([ Runner, FakeRunner ], { - mergeWith (runner) { +extend([Runner, FakeRunner], { + mergeWith(runner) { return new FakeRunner( runner.transforms.lmultiply(this.transforms), runner.id @@ -511,7 +514,7 @@ extend([ Runner, FakeRunner ], { const lmultiply = (last, curr) => last.lmultiplyO(curr) const getRunnerTransform = (runner) => runner.transforms -function mergeTransforms () { +function mergeTransforms() { // Find the matrix to apply to the element and apply it const runners = this._transformationRunners.runners const netTransform = runners @@ -528,12 +531,12 @@ function mergeTransforms () { } export class RunnerArray { - constructor () { + constructor() { this.runners = [] this.ids = [] } - add (runner) { + add(runner) { if (this.runners.includes(runner)) return const id = runner.id + 1 @@ -543,39 +546,44 @@ export class RunnerArray { return this } - clearBefore (id) { + clearBefore(id) { const deleteCnt = this.ids.indexOf(id + 1) || 1 this.ids.splice(0, deleteCnt, 0) - this.runners.splice(0, deleteCnt, new FakeRunner()) + this.runners + .splice(0, deleteCnt, new FakeRunner()) .forEach((r) => r.clearTransformsFromQueue()) return this } - edit (id, newRunner) { + edit(id, newRunner) { const index = this.ids.indexOf(id + 1) this.ids.splice(index, 1, id + 1) this.runners.splice(index, 1, newRunner) return this } - getByID (id) { + getByID(id) { return this.runners[this.ids.indexOf(id + 1)] } - length () { + length() { return this.ids.length } - merge () { + merge() { let lastRunner = null for (let i = 0; i < this.runners.length; ++i) { const runner = this.runners[i] - const condition = lastRunner - && runner.done && lastRunner.done + const condition = + lastRunner && + runner.done && + lastRunner.done && // don't merge runner when persisted on timeline - && (!runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) - && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id)) + (!runner._timeline || + !runner._timeline._runnerIds.includes(runner.id)) && + (!lastRunner._timeline || + !lastRunner._timeline._runnerIds.includes(lastRunner.id)) if (condition) { // the +1 happens in the function @@ -592,18 +600,17 @@ export class RunnerArray { return this } - remove (id) { + remove(id) { const index = this.ids.indexOf(id + 1) this.ids.splice(index, 1) this.runners.splice(index, 1) return this } - } registerMethods({ Element: { - animate (duration, delay, when) { + animate(duration, delay, when) { const o = Runner.sanitise(duration, delay, when) const timeline = this.timeline() return new Runner(o.duration) @@ -613,7 +620,7 @@ registerMethods({ .schedule(o.delay, o.when) }, - delay (by, when) { + delay(by, when) { return this.animate(0, by, when) }, @@ -621,21 +628,23 @@ registerMethods({ // which run before the current one. This is because absolute transformations // overwrite anything anyway so there is no need to waste time computing // other runners - _clearTransformRunnersBefore (currentRunner) { + _clearTransformRunnersBefore(currentRunner) { this._transformationRunners.clearBefore(currentRunner.id) }, - _currentTransform (current) { - return this._transformationRunners.runners - // we need the equal sign here to make sure, that also transformations - // on the same runner which execute before the current transformation are - // taken into account - .filter((runner) => runner.id <= current.id) - .map(getRunnerTransform) - .reduce(lmultiply, new Matrix()) + _currentTransform(current) { + return ( + this._transformationRunners.runners + // we need the equal sign here to make sure, that also transformations + // on the same runner which execute before the current transformation are + // taken into account + .filter((runner) => runner.id <= current.id) + .map(getRunnerTransform) + .reduce(lmultiply, new Matrix()) + ) }, - _addRunner (runner) { + _addRunner(runner) { this._transformationRunners.add(runner) // Make sure that the runner merge is executed at the very end of @@ -645,29 +654,30 @@ registerMethods({ this._frameId = Animator.immediate(mergeTransforms.bind(this)) }, - _prepareRunner () { + _prepareRunner() { if (this._frameId == null) { - this._transformationRunners = new RunnerArray() - .add(new FakeRunner(new Matrix(this))) + this._transformationRunners = new RunnerArray().add( + new FakeRunner(new Matrix(this)) + ) } } } }) // Will output the elements from array A that are not in the array B -const difference = (a, b) => a.filter(x => !b.includes(x)) +const difference = (a, b) => a.filter((x) => !b.includes(x)) extend(Runner, { - attr (a, v) { + attr(a, v) { return this.styleAttr('attr', a, v) }, // Add animatable styles - css (s, v) { + css(s, v) { return this.styleAttr('css', s, v) }, - styleAttr (type, nameOrAttrs, val) { + styleAttr(type, nameOrAttrs, val) { if (typeof nameOrAttrs === 'string') { return this.styleAttr(type, { [nameOrAttrs]: val }) } @@ -678,62 +688,69 @@ extend(Runner, { let morpher = new Morphable(this._stepper).to(attrs) let keys = Object.keys(attrs) - this.queue(function () { - morpher = morpher.from(this.element()[type](keys)) - }, function (pos) { - this.element()[type](morpher.at(pos).valueOf()) - return morpher.done() - }, function (newToAttrs) { + this.queue( + function () { + morpher = morpher.from(this.element()[type](keys)) + }, + function (pos) { + this.element()[type](morpher.at(pos).valueOf()) + return morpher.done() + }, + function (newToAttrs) { + // Check if any new keys were added + const newKeys = Object.keys(newToAttrs) + const differences = difference(newKeys, keys) + + // If their are new keys, initialize them and add them to morpher + if (differences.length) { + // Get the values + const addedFromAttrs = this.element()[type](differences) + + // Get the already initialized values + const oldFromAttrs = new ObjectBag(morpher.from()).valueOf() + + // Merge old and new + Object.assign(oldFromAttrs, addedFromAttrs) + morpher.from(oldFromAttrs) + } - // Check if any new keys were added - const newKeys = Object.keys(newToAttrs) - const differences = difference(newKeys, keys) + // Get the object from the morpher + const oldToAttrs = new ObjectBag(morpher.to()).valueOf() - // If their are new keys, initialize them and add them to morpher - if (differences.length) { - // Get the values - const addedFromAttrs = this.element()[type](differences) + // Merge in new attributes + Object.assign(oldToAttrs, newToAttrs) - // Get the already initialized values - const oldFromAttrs = new ObjectBag(morpher.from()).valueOf() + // Change morpher target + morpher.to(oldToAttrs) - // Merge old and new - Object.assign(oldFromAttrs, addedFromAttrs) - morpher.from(oldFromAttrs) + // Make sure that we save the work we did so we don't need it to do again + keys = newKeys + attrs = newToAttrs } - - // Get the object from the morpher - const oldToAttrs = new ObjectBag(morpher.to()).valueOf() - - // Merge in new attributes - Object.assign(oldToAttrs, newToAttrs) - - // Change morpher target - morpher.to(oldToAttrs) - - // Make sure that we save the work we did so we don't need it to do again - keys = newKeys - attrs = newToAttrs - }) + ) this._rememberMorpher(type, morpher) return this }, - zoom (level, point) { + zoom(level, point) { if (this._tryRetarget('zoom', level, point)) return this let morpher = new Morphable(this._stepper).to(new SVGNumber(level)) - this.queue(function () { - morpher = morpher.from(this.element().zoom()) - }, function (pos) { - this.element().zoom(morpher.at(pos), point) - return morpher.done() - }, function (newLevel, newPoint) { - point = newPoint - morpher.to(newLevel) - }) + this.queue( + function () { + morpher = morpher.from(this.element().zoom()) + }, + function (pos) { + this.element().zoom(morpher.at(pos), point) + return morpher.done() + }, + function (newLevel, newPoint) { + point = newPoint + morpher.to(newLevel) + } + ) this._rememberMorpher('zoom', morpher) return this @@ -756,22 +773,30 @@ extend(Runner, { // - Note F(1) = T // 4. Now you get the delta matrix as a result: D = F * inv(M) - transform (transforms, relative, affine) { + transform(transforms, relative, affine) { // If we have a declarative function, we should retarget it if possible relative = transforms.relative || relative - if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) { + if ( + this._isDeclarative && + !relative && + this._tryRetarget('transform', transforms) + ) { return this } // Parse the parameters const isMatrix = Matrix.isMatrixLike(transforms) - affine = transforms.affine != null - ? transforms.affine - : (affine != null ? affine : !isMatrix) + affine = + transforms.affine != null + ? transforms.affine + : affine != null + ? affine + : !isMatrix // Create a morpher and set its type - const morpher = new Morphable(this._stepper) - .type(affine ? TransformBag : Matrix) + const morpher = new Morphable(this._stepper).type( + affine ? TransformBag : Matrix + ) let origin let element @@ -779,7 +804,7 @@ extend(Runner, { let currentAngle let startTransform - function setup () { + function setup() { // make sure element and origin is defined element = element || this.element() origin = origin || getOrigin(transforms, element) @@ -795,17 +820,17 @@ extend(Runner, { } } - function run (pos) { + function run(pos) { // clear all other transforms before this in case something is saved // on this runner. We are absolute. We dont need these! if (!relative) this.clearTransform() - const { x, y } = new Point(origin).transform(element._currentTransform(this)) + const { x, y } = new Point(origin).transform( + element._currentTransform(this) + ) - let target = new Matrix({ ...transforms, origin: [ x, y ] }) - let start = this._isDeclarative && current - ? current - : startTransform + let target = new Matrix({ ...transforms, origin: [x, y] }) + let start = this._isDeclarative && current ? current : startTransform if (affine) { target = target.decompose(x, y) @@ -816,8 +841,8 @@ extend(Runner, { const rCurrent = start.rotate // Figure out the shortest path to rotate directly - const possibilities = [ rTarget - 360, rTarget, rTarget + 360 ] - const distances = possibilities.map(a => Math.abs(a - rCurrent)) + const possibilities = [rTarget - 360, rTarget, rTarget + 360] + const distances = possibilities.map((a) => Math.abs(a - rCurrent)) const shortest = Math.min(...distances) const index = distances.indexOf(shortest) target.rotate = possibilities[index] @@ -846,11 +871,11 @@ extend(Runner, { return morpher.done() } - function retarget (newTransforms) { + function retarget(newTransforms) { // only get a new origin if it changed since the last call if ( - (newTransforms.origin || 'center').toString() - !== (transforms.origin || 'center').toString() + (newTransforms.origin || 'center').toString() !== + (transforms.origin || 'center').toString() ) { origin = getOrigin(newTransforms, element) } @@ -865,28 +890,28 @@ extend(Runner, { }, // Animatable x-axis - x (x, relative) { + x(x) { return this._queueNumber('x', x) }, // Animatable y-axis - y (y) { + y(y) { return this._queueNumber('y', y) }, - dx (x = 0) { + dx(x = 0) { return this._queueNumberDelta('x', x) }, - dy (y = 0) { + dy(y = 0) { return this._queueNumberDelta('y', y) }, - dmove (x, y) { + dmove(x, y) { return this.dx(x).dy(y) }, - _queueNumberDelta (method, to) { + _queueNumberDelta(method, to) { to = new SVGNumber(to) // Try to change the target if we have this method already registered @@ -895,66 +920,73 @@ extend(Runner, { // Make a morpher and queue the animation const morpher = new Morphable(this._stepper).to(to) let from = null - this.queue(function () { - from = this.element()[method]() - morpher.from(from) - morpher.to(from + to) - }, function (pos) { - this.element()[method](morpher.at(pos)) - return morpher.done() - }, function (newTo) { - morpher.to(from + new SVGNumber(newTo)) - }) + this.queue( + function () { + from = this.element()[method]() + morpher.from(from) + morpher.to(from + to) + }, + function (pos) { + this.element()[method](morpher.at(pos)) + return morpher.done() + }, + function (newTo) { + morpher.to(from + new SVGNumber(newTo)) + } + ) // Register the morpher so that if it is changed again, we can retarget it this._rememberMorpher(method, morpher) return this }, - _queueObject (method, to) { + _queueObject(method, to) { // Try to change the target if we have this method already registered if (this._tryRetarget(method, to)) return this // Make a morpher and queue the animation const morpher = new Morphable(this._stepper).to(to) - this.queue(function () { - morpher.from(this.element()[method]()) - }, function (pos) { - this.element()[method](morpher.at(pos)) - return morpher.done() - }) + this.queue( + function () { + morpher.from(this.element()[method]()) + }, + function (pos) { + this.element()[method](morpher.at(pos)) + return morpher.done() + } + ) // Register the morpher so that if it is changed again, we can retarget it this._rememberMorpher(method, morpher) return this }, - _queueNumber (method, value) { + _queueNumber(method, value) { return this._queueObject(method, new SVGNumber(value)) }, // Animatable center x-axis - cx (x) { + cx(x) { return this._queueNumber('cx', x) }, // Animatable center y-axis - cy (y) { + cy(y) { return this._queueNumber('cy', y) }, // Add animatable move - move (x, y) { + move(x, y) { return this.x(x).y(y) }, // Add animatable center - center (x, y) { + center(x, y) { return this.cx(x).cy(y) }, // Add animatable size - size (width, height) { + size(width, height) { // animate bbox based size for all other elements let box @@ -963,62 +995,64 @@ extend(Runner, { } if (!width) { - width = box.width / box.height * height + width = (box.width / box.height) * height } if (!height) { - height = box.height / box.width * width + height = (box.height / box.width) * width } - return this - .width(width) - .height(height) + return this.width(width).height(height) }, // Add animatable width - width (width) { + width(width) { return this._queueNumber('width', width) }, // Add animatable height - height (height) { + height(height) { return this._queueNumber('height', height) }, // Add animatable plot - plot (a, b, c, d) { + plot(a, b, c, d) { // Lines can be plotted with 4 arguments if (arguments.length === 4) { - return this.plot([ a, b, c, d ]) + return this.plot([a, b, c, d]) } if (this._tryRetarget('plot', a)) return this const morpher = new Morphable(this._stepper) - .type(this._element.MorphArray).to(a) - - this.queue(function () { - morpher.from(this._element.array()) - }, function (pos) { - this._element.plot(morpher.at(pos)) - return morpher.done() - }) + .type(this._element.MorphArray) + .to(a) + + this.queue( + function () { + morpher.from(this._element.array()) + }, + function (pos) { + this._element.plot(morpher.at(pos)) + return morpher.done() + } + ) this._rememberMorpher('plot', morpher) return this }, // Add leading method - leading (value) { + leading(value) { return this._queueNumber('leading', value) }, // Add animatable viewbox - viewbox (x, y, width, height) { + viewbox(x, y, width, height) { return this._queueObject('viewbox', new Box(x, y, width, height)) }, - update (o) { + update(o) { if (typeof o !== 'object') { return this.update({ offset: arguments[0], diff --git a/src/animation/Timeline.js b/src/animation/Timeline.js index 3f81b66..39e0f1a 100644 --- a/src/animation/Timeline.js +++ b/src/animation/Timeline.js @@ -7,7 +7,12 @@ const makeSchedule = function (runnerInfo) { const start = runnerInfo.start const duration = runnerInfo.runner.duration() const end = start + duration - return { start: start, duration: duration, end: end, runner: runnerInfo.runner } + return { + start: start, + duration: duration, + end: end, + runner: runnerInfo.runner + } } const defaultSource = function () { @@ -17,7 +22,7 @@ const defaultSource = function () { export default class Timeline extends EventTarget { // Construct a new timeline on the given element - constructor (timeSource = defaultSource) { + constructor(timeSource = defaultSource) { super() this._timeSource = timeSource @@ -44,55 +49,55 @@ export default class Timeline extends EventTarget { this._stepImmediate = this._stepFn.bind(this, true) } - active () { + active() { return !!this._nextFrame } - finish () { + finish() { // Go to end and pause this.time(this.getEndTimeOfTimeline() + 1) return this.pause() } // Calculates the end of the timeline - getEndTime () { + getEndTime() { const lastRunnerInfo = this.getLastRunnerInfo() const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0 const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time return lastStartTime + lastDuration } - getEndTimeOfTimeline () { + getEndTimeOfTimeline() { const endTimes = this._runners.map((i) => i.start + i.runner.duration()) return Math.max(0, ...endTimes) } - getLastRunnerInfo () { + getLastRunnerInfo() { return this.getRunnerInfoById(this._lastRunnerId) } - getRunnerInfoById (id) { + getRunnerInfoById(id) { return this._runners[this._runnerIds.indexOf(id)] || null } - pause () { + pause() { this._paused = true return this._continue() } - persist (dtOrForever) { + persist(dtOrForever) { if (dtOrForever == null) return this._persist this._persist = dtOrForever return this } - play () { + play() { // Now make sure we are not paused and continue the animation this._paused = false return this.updateTime()._continue() } - reverse (yes) { + reverse(yes) { const currentSpeed = this.speed() if (yes == null) return this.speed(-currentSpeed) @@ -101,7 +106,7 @@ export default class Timeline extends EventTarget { } // schedules a runner on the timeline - schedule (runner, delay, when) { + schedule(runner, delay, when) { if (runner == null) { return this._runners.map(makeSchedule) } @@ -152,42 +157,42 @@ export default class Timeline extends EventTarget { this._runners.push(runnerInfo) this._runners.sort((a, b) => a.start - b.start) - this._runnerIds = this._runners.map(info => info.runner.id) + this._runnerIds = this._runners.map((info) => info.runner.id) this.updateTime()._continue() return this } - seek (dt) { + seek(dt) { return this.time(this._time + dt) } - source (fn) { + source(fn) { if (fn == null) return this._timeSource this._timeSource = fn return this } - speed (speed) { + speed(speed) { if (speed == null) return this._speed this._speed = speed return this } - stop () { + stop() { // Go to start and pause this.time(0) return this.pause() } - time (time) { + time(time) { if (time == null) return this._time this._time = time return this._continue(true) } // Remove the runner from this timeline - unschedule (runner) { + unschedule(runner) { const index = this._runnerIds.indexOf(runner.id) if (index < 0) return this @@ -199,7 +204,7 @@ export default class Timeline extends EventTarget { } // Makes sure, that after pausing the time doesn't jump - updateTime () { + updateTime() { if (!this.active()) { this._lastSourceTime = this._timeSource() } @@ -207,7 +212,7 @@ export default class Timeline extends EventTarget { } // Checks if we are running and continues the animation - _continue (immediateStep = false) { + _continue(immediateStep = false) { Animator.cancelFrame(this._nextFrame) this._nextFrame = null @@ -218,7 +223,7 @@ export default class Timeline extends EventTarget { return this } - _stepFn (immediateStep = false) { + _stepFn(immediateStep = false) { // Get the time delta from the last time and update the time const time = this._timeSource() let dtSource = time - this._lastSourceTime @@ -249,7 +254,7 @@ export default class Timeline extends EventTarget { // runner always wins the reset even if the other runner started earlier // and therefore should win the attribute battle // this can be solved by resetting them backwards - for (let k = this._runners.length; k--;) { + for (let k = this._runners.length; k--; ) { // Get and run the current runner and ignore it if its inactive const runnerInfo = this._runners[k] const runner = runnerInfo.runner @@ -309,7 +314,10 @@ export default class Timeline extends EventTarget { // Basically: we continue when there are runners right from us in time // when -->, and when runners are left from us when <-- - if ((runnersLeft && !(this._speed < 0 && this._time === 0)) || (this._runnerIds.length && this._speed < 0 && this._time > 0)) { + if ( + (runnersLeft && !(this._speed < 0 && this._time === 0)) || + (this._runnerIds.length && this._speed < 0 && this._time > 0) + ) { this._continue() } else { this.pause() @@ -318,14 +326,13 @@ export default class Timeline extends EventTarget { return this } - } registerMethods({ Element: { timeline: function (timeline) { if (timeline == null) { - this._timeline = (this._timeline || new Timeline()) + this._timeline = this._timeline || new Timeline() return this._timeline } else { this._timeline = timeline diff --git a/src/elements/A.js b/src/elements/A.js index 173fc92..231954f 100644 --- a/src/elements/A.js +++ b/src/elements/A.js @@ -1,24 +1,28 @@ -import { nodeOrNew, register, wrapWithAttrCheck, extend } from '../utils/adopter.js' +import { + nodeOrNew, + register, + wrapWithAttrCheck, + extend +} from '../utils/adopter.js' import { registerMethods } from '../utils/methods.js' import { xlink } from '../modules/core/namespaces.js' import Container from './Container.js' import * as containerGeometry from '../modules/core/containerGeometry.js' export default class A extends Container { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('a', node), attrs) } // Link target attribute - target (target) { + target(target) { return this.attr('target', target) } // Link url - to (url) { + to(url) { return this.attr('href', url, xlink) } - } extend(A, containerGeometry) @@ -31,7 +35,7 @@ registerMethods({ }) }, Element: { - unlink () { + unlink() { const link = this.linker() if (!link) return this @@ -48,7 +52,7 @@ registerMethods({ link.remove() return this }, - linkTo (url) { + linkTo(url) { // reuse old link if possible let link = this.linker() @@ -65,7 +69,7 @@ registerMethods({ return this }, - linker () { + linker() { const link = this.parent() if (link && link.node.nodeName.toLowerCase() === 'a') { return link diff --git a/src/elements/Circle.js b/src/elements/Circle.js index 6981b05..5dae51e 100644 --- a/src/elements/Circle.js +++ b/src/elements/Circle.js @@ -10,25 +10,25 @@ import SVGNumber from '../types/SVGNumber.js' import Shape from './Shape.js' export default class Circle extends Shape { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('circle', node), attrs) } - radius (r) { + radius(r) { return this.attr('r', r) } // Radius x value - rx (rx) { + rx(rx) { return this.attr('r', rx) } // Alias radius x value - ry (ry) { + ry(ry) { return this.rx(ry) } - size (size) { + size(size) { return this.radius(new SVGNumber(size).divide(2)) } } @@ -39,9 +39,7 @@ registerMethods({ Container: { // Create circle element circle: wrapWithAttrCheck(function (size = 0) { - return this.put(new Circle()) - .size(size) - .move(0, 0) + return this.put(new Circle()).size(size).move(0, 0) }) } }) diff --git a/src/elements/ClipPath.js b/src/elements/ClipPath.js index f17428f..747059d 100644 --- a/src/elements/ClipPath.js +++ b/src/elements/ClipPath.js @@ -4,12 +4,12 @@ import Container from './Container.js' import baseFind from '../modules/core/selector.js' export default class ClipPath extends Container { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('clipPath', node), attrs) } // Unclip all clipped elements and remove itself - remove () { + remove() { // unclip all targets this.targets().forEach(function (el) { el.unclip() @@ -19,7 +19,7 @@ export default class ClipPath extends Container { return super.remove() } - targets () { + targets() { return baseFind('svg [clip-path*=' + this.id() + ']') } } @@ -33,22 +33,23 @@ registerMethods({ }, Element: { // Distribute clipPath to svg element - clipper () { + clipper() { return this.reference('clip-path') }, - clipWith (element) { + clipWith(element) { // use given clip or create a new one - const clipper = element instanceof ClipPath - ? element - : this.parent().clip().add(element) + const clipper = + element instanceof ClipPath + ? element + : this.parent().clip().add(element) // apply mask return this.attr('clip-path', 'url(#' + clipper.id() + ')') }, // Unclip element - unclip () { + unclip() { return this.attr('clip-path', null) } } diff --git a/src/elements/Container.js b/src/elements/Container.js index 9278435..0f45b6d 100644 --- a/src/elements/Container.js +++ b/src/elements/Container.js @@ -2,7 +2,7 @@ import { register } from '../utils/adopter.js' import Element from './Element.js' export default class Container extends Element { - flatten (parent = this, index) { + flatten() { this.each(function () { if (this instanceof Container) { return this.flatten().ungroup() @@ -12,7 +12,7 @@ export default class Container extends Element { return this } - ungroup (parent = this.parent(), index = parent.index(this)) { + ungroup(parent = this.parent(), index = parent.index(this)) { // when parent != this, we want append all elements to the end index = index === -1 ? parent.children().length : index diff --git a/src/elements/Defs.js b/src/elements/Defs.js index 7491ba0..6d9f725 100644 --- a/src/elements/Defs.js +++ b/src/elements/Defs.js @@ -2,15 +2,15 @@ import { nodeOrNew, register } from '../utils/adopter.js' import Container from './Container.js' export default class Defs extends Container { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('defs', node), attrs) } - flatten () { + flatten() { return this } - ungroup () { + ungroup() { return this } } diff --git a/src/elements/Dom.js b/src/elements/Dom.js index 2584a43..604a1ee 100644 --- a/src/elements/Dom.js +++ b/src/elements/Dom.js @@ -16,7 +16,7 @@ import List from '../types/List.js' import attr from '../modules/core/attr.js' export default class Dom extends EventTarget { - constructor (node, attrs) { + constructor(node, attrs) { super() this.node = node this.type = node.nodeName @@ -27,11 +27,14 @@ export default class Dom extends EventTarget { } // Add given element at a position - add (element, i) { + add(element, i) { element = makeInstance(element) // If non-root svg nodes are added we have to remove their namespaces - if (element.removeNamespace && this.node instanceof globals.window.SVGElement) { + if ( + element.removeNamespace && + this.node instanceof globals.window.SVGElement + ) { element.removeNamespace() } @@ -45,19 +48,21 @@ export default class Dom extends EventTarget { } // Add element to given container and return self - addTo (parent, i) { + addTo(parent, i) { return makeInstance(parent).put(this, i) } // Returns all child elements - children () { - return new List(map(this.node.children, function (node) { - return adopt(node) - })) + children() { + return new List( + map(this.node.children, function (node) { + return adopt(node) + }) + ) } // Remove all elements in this container - clear () { + clear() { // remove children while (this.node.hasChildNodes()) { this.node.removeChild(this.node.lastChild) @@ -67,7 +72,7 @@ export default class Dom extends EventTarget { } // Clone element - clone (deep = true, assignNewIds = true) { + clone(deep = true, assignNewIds = true) { // write dom data to the dom so the clone can pickup the data this.writeDataToDom() @@ -81,12 +86,12 @@ export default class Dom extends EventTarget { } // Iterates over all children and invokes a given block - each (block, deep) { + each(block, deep) { const children = this.children() let i, il for (i = 0, il = children.length; i < il; i++) { - block.apply(children[i], [ i, children ]) + block.apply(children[i], [i, children]) if (deep) { children[i].each(block, deep) @@ -96,39 +101,39 @@ export default class Dom extends EventTarget { return this } - element (nodeName, attrs) { + element(nodeName, attrs) { return this.put(new Dom(create(nodeName), attrs)) } // Get first child - first () { + first() { return adopt(this.node.firstChild) } // Get a element at the given index - get (i) { + get(i) { return adopt(this.node.childNodes[i]) } - getEventHolder () { + getEventHolder() { return this.node } - getEventTarget () { + getEventTarget() { return this.node } // Checks if the given element is a child - has (element) { + has(element) { return this.index(element) >= 0 } - html (htmlOrFn, outerHTML) { + html(htmlOrFn, outerHTML) { return this.xml(htmlOrFn, outerHTML, html) } // Get / set id - id (id) { + id(id) { // generate new id if no id set if (typeof id === 'undefined' && !this.node.id) { this.node.id = eid(this.type) @@ -139,24 +144,31 @@ export default class Dom extends EventTarget { } // Gets index of given element - index (element) { + index(element) { return [].slice.call(this.node.childNodes).indexOf(element.node) } // Get the last child - last () { + last() { return adopt(this.node.lastChild) } // matches the element vs a css selector - matches (selector) { + matches(selector) { const el = this.node - const matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null + const matcher = + el.matches || + el.matchesSelector || + el.msMatchesSelector || + el.mozMatchesSelector || + el.webkitMatchesSelector || + el.oMatchesSelector || + null return matcher && matcher.call(el, selector) } // Returns the parent element instance - parent (type) { + parent(type) { let parent = this // check for parent @@ -169,26 +181,29 @@ export default class Dom extends EventTarget { // loop through ancestors if type is given do { - if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent + if ( + typeof type === 'string' ? parent.matches(type) : parent instanceof type + ) + return parent } while ((parent = adopt(parent.node.parentNode))) return parent } // Basically does the same as `add()` but returns the added element instead - put (element, i) { + put(element, i) { element = makeInstance(element) this.add(element, i) return element } // Add element to given container and return container - putIn (parent, i) { + putIn(parent, i) { return makeInstance(parent).add(this, i) } // Remove element - remove () { + remove() { if (this.parent()) { this.parent().removeElement(this) } @@ -197,14 +212,14 @@ export default class Dom extends EventTarget { } // Remove a given child - removeElement (element) { + removeElement(element) { this.node.removeChild(element.node) return this } // Replace this with element - replace (element) { + replace(element) { element = makeInstance(element) if (this.node.parentNode) { @@ -214,7 +229,7 @@ export default class Dom extends EventTarget { return element } - round (precision = 2, map = null) { + round(precision = 2, map = null) { const factor = 10 ** precision const attrs = this.attr(map) @@ -229,22 +244,22 @@ export default class Dom extends EventTarget { } // Import / Export raw svg - svg (svgOrFn, outerSVG) { + svg(svgOrFn, outerSVG) { return this.xml(svgOrFn, outerSVG, svg) } // Return id on string conversion - toString () { + toString() { return this.id() } - words (text) { + words(text) { // This is faster than removing all children and adding a new one this.node.textContent = text return this } - wrap (node) { + wrap(node) { const parent = this.parent() if (!parent) { @@ -256,7 +271,7 @@ export default class Dom extends EventTarget { } // write svgjs data to the dom - writeDataToDom () { + writeDataToDom() { // dump variables recursively this.each(function () { this.writeDataToDom() @@ -266,7 +281,7 @@ export default class Dom extends EventTarget { } // Import / Export raw svg - xml (xmlOrFn, outerXML, ns) { + xml(xmlOrFn, outerXML, ns) { if (typeof xmlOrFn === 'boolean') { ns = outerXML outerXML = xmlOrFn @@ -312,9 +327,7 @@ export default class Dom extends EventTarget { } // Return outer or inner content - return outerXML - ? current.node.outerHTML - : current.node.innerHTML + return outerXML ? current.node.outerHTML : current.node.innerHTML } // Act as setter if we got a string @@ -330,16 +343,14 @@ export default class Dom extends EventTarget { well.innerHTML = xmlOrFn // Transplant nodes into the fragment - for (let len = well.children.length; len--;) { + for (let len = well.children.length; len--; ) { fragment.appendChild(well.firstElementChild) } const parent = this.parent() // Add the whole fragment at once - return outerXML - ? this.replace(fragment) && parent - : this.add(fragment) + return outerXML ? this.replace(fragment) && parent : this.add(fragment) } } diff --git a/src/elements/Element.js b/src/elements/Element.js index 2aaeab5..61db7b7 100644 --- a/src/elements/Element.js +++ b/src/elements/Element.js @@ -16,7 +16,7 @@ import List from '../types/List.js' import SVGNumber from '../types/SVGNumber.js' export default class Element extends Dom { - constructor (node, attrs) { + constructor(node, attrs) { super(node, attrs) // initialize data object @@ -32,61 +32,61 @@ export default class Element extends Dom { } // Move element by its center - center (x, y) { + center(x, y) { return this.cx(x).cy(y) } // Move by center over x-axis - cx (x) { + cx(x) { return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2) } // Move by center over y-axis - cy (y) { + cy(y) { return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2) } // Get defs - defs () { + defs() { const root = this.root() return root && root.defs() } // Relative move over x and y axes - dmove (x, y) { + dmove(x, y) { return this.dx(x).dy(y) } // Relative move over x axis - dx (x = 0) { + dx(x = 0) { return this.x(new SVGNumber(x).plus(this.x())) } // Relative move over y axis - dy (y = 0) { + dy(y = 0) { return this.y(new SVGNumber(y).plus(this.y())) } - getEventHolder () { + getEventHolder() { return this } // Set height of element - height (height) { + height(height) { return this.attr('height', height) } // Move element to given x and y values - move (x, y) { + move(x, y) { return this.x(x).y(y) } // return array of all ancestors of given type up to the root svg - parents (until = this.root()) { + parents(until = this.root()) { const isSelector = typeof until === 'string' if (!isSelector) { until = makeInstance(until) @@ -95,13 +95,13 @@ export default class Element extends Dom { let parent = this while ( - (parent = parent.parent()) - && parent.node !== globals.document - && parent.nodeName !== '#document-fragment') { - + (parent = parent.parent()) && + parent.node !== globals.document && + parent.nodeName !== '#document-fragment' + ) { parents.push(parent) - if (!isSelector && (parent.node === until.node)) { + if (!isSelector && parent.node === until.node) { break } if (isSelector && parent.matches(until)) { @@ -117,7 +117,7 @@ export default class Element extends Dom { } // Get referenced element form attribute value - reference (attr) { + reference(attr) { attr = this.attr(attr) if (!attr) return null @@ -126,33 +126,31 @@ export default class Element extends Dom { } // Get parent document - root () { + root() { const p = this.parent(getClass(root)) return p && p.root() } // set given data to the elements data property - setData (o) { + setData(o) { this.dom = o return this } // Set element size to given width and height - size (width, height) { + size(width, height) { const p = proportionalSize(this, width, height) - return this - .width(new SVGNumber(p.width)) - .height(new SVGNumber(p.height)) + return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height)) } // Set width of element - width (width) { + width(width) { return this.attr('width', width) } // write svgjs data to the dom - writeDataToDom () { + writeDataToDom() { // remove previously set data this.node.removeAttribute('svgjs:data') @@ -164,18 +162,23 @@ export default class Element extends Dom { } // Move over x-axis - x (x) { + x(x) { return this.attr('x', x) } // Move over y-axis - y (y) { + y(y) { return this.attr('y', y) } } extend(Element, { - bbox, rbox, inside, point, ctm, screenCTM + bbox, + rbox, + inside, + point, + ctm, + screenCTM }) register(Element, 'Element') diff --git a/src/elements/Ellipse.js b/src/elements/Ellipse.js index 7f4e853..3f8b04b 100644 --- a/src/elements/Ellipse.js +++ b/src/elements/Ellipse.js @@ -11,16 +11,16 @@ import Shape from './Shape.js' import * as circled from '../modules/core/circled.js' export default class Ellipse extends Shape { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('ellipse', node), attrs) } - size (width, height) { + size(width, height) { const p = proportionalSize(this, width, height) - return this - .rx(new SVGNumber(p.width).divide(2)) - .ry(new SVGNumber(p.height).divide(2)) + return this.rx(new SVGNumber(p.width).divide(2)).ry( + new SVGNumber(p.height).divide(2) + ) } } diff --git a/src/elements/ForeignObject.js b/src/elements/ForeignObject.js index 0a417b0..a4148d5 100644 --- a/src/elements/ForeignObject.js +++ b/src/elements/ForeignObject.js @@ -3,7 +3,7 @@ import { registerMethods } from '../utils/methods.js' import Element from './Element.js' export default class ForeignObject extends Element { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('foreignObject', node), attrs) } } diff --git a/src/elements/Fragment.js b/src/elements/Fragment.js index d2c4764..ece3046 100644 --- a/src/elements/Fragment.js +++ b/src/elements/Fragment.js @@ -3,12 +3,12 @@ import { globals } from '../utils/window.js' import { register, create } from '../utils/adopter.js' class Fragment extends Dom { - constructor (node = globals.document.createDocumentFragment()) { + constructor(node = globals.document.createDocumentFragment()) { super(node) } // Import / Export raw xml - xml (xmlOrFn, outerXML, ns) { + xml(xmlOrFn, outerXML, ns) { if (typeof xmlOrFn === 'boolean') { ns = outerXML outerXML = xmlOrFn @@ -27,7 +27,6 @@ class Fragment extends Dom { // Act as setter if we got a string return super.xml(xmlOrFn, false, ns) } - } register(Fragment, 'Fragment') diff --git a/src/elements/G.js b/src/elements/G.js index b3a999e..4d3b03c 100644 --- a/src/elements/G.js +++ b/src/elements/G.js @@ -1,10 +1,15 @@ -import { nodeOrNew, register, wrapWithAttrCheck, extend } from '../utils/adopter.js' +import { + nodeOrNew, + register, + wrapWithAttrCheck, + extend +} from '../utils/adopter.js' import { registerMethods } from '../utils/methods.js' import Container from './Container.js' import * as containerGeometry from '../modules/core/containerGeometry.js' export default class G extends Container { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('g', node), attrs) } } diff --git a/src/elements/Gradient.js b/src/elements/Gradient.js index d3fa15b..1631c14 100644 --- a/src/elements/Gradient.js +++ b/src/elements/Gradient.js @@ -11,7 +11,7 @@ import baseFind from '../modules/core/selector.js' import * as gradiented from '../modules/core/gradiented.js' export default class Gradient extends Container { - constructor (type, attrs) { + constructor(type, attrs) { super( nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs @@ -19,26 +19,26 @@ export default class Gradient extends Container { } // custom attr to handle transform - attr (a, b, c) { + attr(a, b, c) { if (a === 'transform') a = 'gradientTransform' return super.attr(a, b, c) } - bbox () { + bbox() { return new Box() } - targets () { + targets() { return baseFind('svg [fill*=' + this.id() + ']') } // Alias string conversion to fill - toString () { + toString() { return this.url() } // Update gradient - update (block) { + update(block) { // remove all stops this.clear() @@ -51,7 +51,7 @@ export default class Gradient extends Container { } // Return the fill id - url () { + url() { return 'url(#' + this.id() + ')' } } @@ -61,7 +61,7 @@ extend(Gradient, gradiented) registerMethods({ Container: { // Create gradient element in defs - gradient (...args) { + gradient(...args) { return this.defs().gradient(...args) } }, diff --git a/src/elements/Image.js b/src/elements/Image.js index c51bc9a..080da16 100644 --- a/src/elements/Image.js +++ b/src/elements/Image.js @@ -9,35 +9,40 @@ import Shape from './Shape.js' import { globals } from '../utils/window.js' export default class Image extends Shape { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('image', node), attrs) } // (re)load image - load (url, callback) { + load(url, callback) { if (!url) return this const img = new globals.window.Image() - on(img, 'load', function (e) { - const p = this.parent(Pattern) + on( + img, + 'load', + function (e) { + const p = this.parent(Pattern) - // ensure image size - if (this.width() === 0 && this.height() === 0) { - this.size(img.width, img.height) - } + // ensure image size + if (this.width() === 0 && this.height() === 0) { + this.size(img.width, img.height) + } - if (p instanceof Pattern) { - // ensure pattern size if not set - if (p.width() === 0 && p.height() === 0) { - p.size(this.width(), this.height()) + if (p instanceof Pattern) { + // ensure pattern size if not set + if (p.width() === 0 && p.height() === 0) { + p.size(this.width(), this.height()) + } } - } - if (typeof callback === 'function') { - callback.call(this, e) - } - }, this) + if (typeof callback === 'function') { + callback.call(this, e) + } + }, + this + ) on(img, 'load error', function () { // dont forget to unbind memory leaking events @@ -57,9 +62,12 @@ registerAttrHook(function (attr, val, _this) { } if (val instanceof Image) { - val = _this.root().defs().pattern(0, 0, (pattern) => { - pattern.add(val) - }) + val = _this + .root() + .defs() + .pattern(0, 0, (pattern) => { + pattern.add(val) + }) } return val diff --git a/src/elements/Line.js b/src/elements/Line.js index 9350a23..0dab35d 100644 --- a/src/elements/Line.js +++ b/src/elements/Line.js @@ -12,25 +12,25 @@ import * as pointed from '../modules/core/pointed.js' export default class Line extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('line', node), attrs) } // Get array - array () { + array() { return new PointArray([ - [ this.attr('x1'), this.attr('y1') ], - [ this.attr('x2'), this.attr('y2') ] + [this.attr('x1'), this.attr('y1')], + [this.attr('x2'), this.attr('y2')] ]) } // Move by left top corner - move (x, y) { + move(x, y) { return this.attr(this.array().move(x, y).toLine()) } // Overwrite native plot() method - plot (x1, y1, x2, y2) { + plot(x1, y1, x2, y2) { if (x1 == null) { return this.array() } else if (typeof y1 !== 'undefined') { @@ -43,7 +43,7 @@ export default class Line extends Shape { } // Set element size to given width and height - size (width, height) { + size(width, height) { const p = proportionalSize(this, width, height) return this.attr(this.array().size(p.width, p.height).toLine()) } @@ -58,8 +58,8 @@ registerMethods({ // make sure plot is called as a setter // x1 is not necessarily a number, it can also be an array, a string and a PointArray return Line.prototype.plot.apply( - this.put(new Line()) - , args[0] != null ? args : [ 0, 0, 0, 0 ] + this.put(new Line()), + args[0] != null ? args : [0, 0, 0, 0] ) }) } diff --git a/src/elements/Marker.js b/src/elements/Marker.js index d6f98c8..5ddf802 100644 --- a/src/elements/Marker.js +++ b/src/elements/Marker.js @@ -4,31 +4,31 @@ import Container from './Container.js' export default class Marker extends Container { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('marker', node), attrs) } // Set height of element - height (height) { + height(height) { return this.attr('markerHeight', height) } - orient (orient) { + orient(orient) { return this.attr('orient', orient) } // Set marker refX and refY - ref (x, y) { + ref(x, y) { return this.attr('refX', x).attr('refY', y) } // Return the fill id - toString () { + toString() { return 'url(#' + this.id() + ')' } // Update marker - update (block) { + update(block) { // remove all content this.clear() @@ -41,15 +41,14 @@ export default class Marker extends Container { } // Set width of element - width (width) { + width(width) { return this.attr('markerWidth', width) } - } registerMethods({ Container: { - marker (...args) { + marker(...args) { // Create marker element in defs return this.defs().marker(...args) } @@ -68,17 +67,18 @@ registerMethods({ }, marker: { // Create and attach markers - marker (marker, width, height, block) { - let attr = [ 'marker' ] + marker(marker, width, height, block) { + let attr = ['marker'] // Build attribute name if (marker !== 'all') attr.push(marker) attr = attr.join('-') // Set marker attribute - marker = arguments[1] instanceof Marker - ? arguments[1] - : this.defs().marker(width, height, block) + marker = + arguments[1] instanceof Marker + ? arguments[1] + : this.defs().marker(width, height, block) return this.attr(attr, marker) } diff --git a/src/elements/Mask.js b/src/elements/Mask.js index 5b462f7..b8a2c99 100644 --- a/src/elements/Mask.js +++ b/src/elements/Mask.js @@ -5,12 +5,12 @@ import baseFind from '../modules/core/selector.js' export default class Mask extends Container { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('mask', node), attrs) } // Unmask all masked elements and remove itself - remove () { + remove() { // unmask all targets this.targets().forEach(function (el) { el.unmask() @@ -20,7 +20,7 @@ export default class Mask extends Container { return super.remove() } - targets () { + targets() { return baseFind('svg [mask*=' + this.id() + ']') } } @@ -33,22 +33,21 @@ registerMethods({ }, Element: { // Distribute mask to svg element - masker () { + masker() { return this.reference('mask') }, - maskWith (element) { + maskWith(element) { // use given mask or create a new one - const masker = element instanceof Mask - ? element - : this.parent().mask().add(element) + const masker = + element instanceof Mask ? element : this.parent().mask().add(element) // apply mask return this.attr('mask', 'url(#' + masker.id() + ')') }, // Unmask element - unmask () { + unmask() { return this.attr('mask', null) } } diff --git a/src/elements/Path.js b/src/elements/Path.js index 2aa0a51..ec9a19f 100644 --- a/src/elements/Path.js +++ b/src/elements/Path.js @@ -6,59 +6,65 @@ import Shape from './Shape.js' export default class Path extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('path', node), attrs) } // Get array - array () { + array() { return this._array || (this._array = new PathArray(this.attr('d'))) } // Clear array cache - clear () { + clear() { delete this._array return this } // Set height of element - height (height) { - return height == null ? this.bbox().height : this.size(this.bbox().width, height) + height(height) { + return height == null + ? this.bbox().height + : this.size(this.bbox().width, height) } // Move by left top corner - move (x, y) { + move(x, y) { return this.attr('d', this.array().move(x, y)) } // Plot new path - plot (d) { - return (d == null) + plot(d) { + return d == null ? this.array() - : this.clear().attr('d', typeof d === 'string' ? d : (this._array = new PathArray(d))) + : this.clear().attr( + 'd', + typeof d === 'string' ? d : (this._array = new PathArray(d)) + ) } // Set element size to given width and height - size (width, height) { + size(width, height) { const p = proportionalSize(this, width, height) return this.attr('d', this.array().size(p.width, p.height)) } // Set width of element - width (width) { - return width == null ? this.bbox().width : this.size(width, this.bbox().height) + width(width) { + return width == null + ? this.bbox().width + : this.size(width, this.bbox().height) } // Move by left top corner over x-axis - x (x) { + x(x) { return x == null ? this.bbox().x : this.move(x, this.bbox().y) } // Move by left top corner over y-axis - y (y) { + y(y) { return y == null ? this.bbox().y : this.move(this.bbox().x, y) } - } // Define morphable array diff --git a/src/elements/Pattern.js b/src/elements/Pattern.js index 18a75e8..b42a83a 100644 --- a/src/elements/Pattern.js +++ b/src/elements/Pattern.js @@ -6,31 +6,31 @@ import baseFind from '../modules/core/selector.js' export default class Pattern extends Container { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('pattern', node), attrs) } // custom attr to handle transform - attr (a, b, c) { + attr(a, b, c) { if (a === 'transform') a = 'patternTransform' return super.attr(a, b, c) } - bbox () { + bbox() { return new Box() } - targets () { + targets() { return baseFind('svg [fill*=' + this.id() + ']') } // Alias string conversion to fill - toString () { + toString() { return this.url() } // Update pattern by rebuilding - update (block) { + update(block) { // remove content this.clear() @@ -43,16 +43,15 @@ export default class Pattern extends Container { } // Return the fill id - url () { + url() { return 'url(#' + this.id() + ')' } - } registerMethods({ Container: { // Create pattern element in defs - pattern (...args) { + pattern(...args) { return this.defs().pattern(...args) } }, diff --git a/src/elements/Polygon.js b/src/elements/Polygon.js index 0c99aa7..d64dcb3 100644 --- a/src/elements/Polygon.js +++ b/src/elements/Polygon.js @@ -12,7 +12,7 @@ import * as poly from '../modules/core/poly.js' export default class Polygon extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('polygon', node), attrs) } } diff --git a/src/elements/Polyline.js b/src/elements/Polyline.js index e390da3..2f063f2 100644 --- a/src/elements/Polyline.js +++ b/src/elements/Polyline.js @@ -12,7 +12,7 @@ import * as poly from '../modules/core/poly.js' export default class Polyline extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('polyline', node), attrs) } } diff --git a/src/elements/Rect.js b/src/elements/Rect.js index 0ed85fc..749cf6d 100644 --- a/src/elements/Rect.js +++ b/src/elements/Rect.js @@ -10,7 +10,7 @@ import Shape from './Shape.js' export default class Rect extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('rect', node), attrs) } } diff --git a/src/elements/Stop.js b/src/elements/Stop.js index d29090c..193256e 100644 --- a/src/elements/Stop.js +++ b/src/elements/Stop.js @@ -4,12 +4,12 @@ import SVGNumber from '../types/SVGNumber.js' import { registerMethods } from '../utils/methods.js' export default class Stop extends Element { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('stop', node), attrs) } // add color stops - update (o) { + update(o) { if (typeof o === 'number' || o instanceof SVGNumber) { o = { offset: arguments[0], diff --git a/src/elements/Style.js b/src/elements/Style.js index f7c3c57..fc1a27e 100644 --- a/src/elements/Style.js +++ b/src/elements/Style.js @@ -3,7 +3,7 @@ import { registerMethods } from '../utils/methods.js' import { unCamelCase } from '../utils/utils.js' import Element from './Element.js' -function cssRule (selector, rule) { +function cssRule(selector, rule) { if (!selector) return '' if (!rule) return selector @@ -19,16 +19,16 @@ function cssRule (selector, rule) { } export default class Style extends Element { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('style', node), attrs) } - addText (w = '') { + addText(w = '') { this.node.textContent += w return this } - font (name, src, params = {}) { + font(name, src, params = {}) { return this.rule('@font-face', { fontFamily: name, src: src, @@ -36,16 +36,16 @@ export default class Style extends Element { }) } - rule (selector, obj) { + rule(selector, obj) { return this.addText(cssRule(selector, obj)) } } registerMethods('Dom', { - style (selector, obj) { + style(selector, obj) { return this.put(new Style()).rule(selector, obj) }, - fontface (name, src, params) { + fontface(name, src, params) { return this.put(new Style()).font(name, src, params) } }) diff --git a/src/elements/Svg.js b/src/elements/Svg.js index acddf34..7b36daa 100644 --- a/src/elements/Svg.js +++ b/src/elements/Svg.js @@ -11,34 +11,35 @@ import Defs from './Defs.js' import { globals } from '../utils/window.js' export default class Svg extends Container { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('svg', node), attrs) this.namespace() } // Creates and returns defs element - defs () { + defs() { if (!this.isRoot()) return this.root().defs() - return adopt(this.node.querySelector('defs')) - || this.put(new Defs()) + return adopt(this.node.querySelector('defs')) || this.put(new Defs()) } - isRoot () { - return !this.node.parentNode - || (!(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== '#document-fragment') + isRoot() { + return ( + !this.node.parentNode || + (!(this.node.parentNode instanceof globals.window.SVGElement) && + this.node.parentNode.nodeName !== '#document-fragment') + ) } // Add namespaces - namespace () { + namespace() { if (!this.isRoot()) return this.root().namespace() - return this - .attr({ xmlns: svg, version: '1.1' }) + return this.attr({ xmlns: svg, version: '1.1' }) .attr('xmlns:xlink', xlink, xmlns) .attr('xmlns:svgjs', svgjs, xmlns) } - removeNamespace () { + removeNamespace() { return this.attr({ xmlns: null, version: null }) .attr('xmlns:xlink', null, xmlns) .attr('xmlns:svgjs', null, xmlns) @@ -46,11 +47,10 @@ export default class Svg extends Container { // Check if this is a root svg // If not, call root() from this element - root () { + root() { if (this.isRoot()) return this return super.root() } - } registerMethods({ diff --git a/src/elements/Symbol.js b/src/elements/Symbol.js index d2a98ac..28ad206 100644 --- a/src/elements/Symbol.js +++ b/src/elements/Symbol.js @@ -4,7 +4,7 @@ import Container from './Container.js' export default class Symbol extends Container { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('symbol', node), attrs) } } diff --git a/src/elements/Text.js b/src/elements/Text.js index f716f83..39371f6 100644 --- a/src/elements/Text.js +++ b/src/elements/Text.js @@ -13,7 +13,7 @@ import * as textable from '../modules/core/textable.js' export default class Text extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('text', node), attrs) this.dom.leading = new SVGNumber(1.3) // store leading value for rebuilding @@ -22,7 +22,7 @@ export default class Text extends Shape { } // Set / get leading - leading (value) { + leading(value) { // act as getter if (value == null) { return this.dom.leading @@ -35,7 +35,7 @@ export default class Text extends Shape { } // Rebuild appearance type - rebuild (rebuild) { + rebuild(rebuild) { // store new rebuild flag if given if (typeof rebuild === 'boolean') { this._rebuild = rebuild @@ -48,7 +48,8 @@ export default class Text extends Shape { const leading = this.dom.leading this.each(function (i) { - const fontSize = globals.window.getComputedStyle(this.node) + const fontSize = globals.window + .getComputedStyle(this.node) .getPropertyValue('font-size') const dy = leading * new SVGNumber(fontSize) @@ -72,14 +73,14 @@ export default class Text extends Shape { } // overwrite method from parent to set data properly - setData (o) { + setData(o) { this.dom = o this.dom.leading = new SVGNumber(o.leading || 1.3) return this } // Set the text content - text (text) { + text(text) { // act as getter if (text === undefined) { const children = this.node.childNodes @@ -94,7 +95,11 @@ export default class Text extends Shape { } // add newline if its not the first child and newLined is set to true - if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) { + if ( + i !== firstLine && + children[i].nodeType !== 3 && + adopt(children[i]).dom.newLined === true + ) { text += '\n' } @@ -124,7 +129,6 @@ export default class Text extends Shape { // disable build mode and rebuild lines return this.build(false).rebuild() } - } extend(Text, textable) diff --git a/src/elements/TextPath.js b/src/elements/TextPath.js index 2af73e7..89c6c42 100644 --- a/src/elements/TextPath.js +++ b/src/elements/TextPath.js @@ -8,19 +8,19 @@ import baseFind from '../modules/core/selector.js' export default class TextPath extends Text { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('textPath', node), attrs) } // return the array of the path track element - array () { + array() { const track = this.track() return track ? track.array() : null } // Plot path if any - plot (d) { + plot(d) { const track = this.track() let pathArray = null @@ -28,11 +28,11 @@ export default class TextPath extends Text { pathArray = track.plot(d) } - return (d == null) ? pathArray : this + return d == null ? pathArray : this } // Get the path element - track () { + track() { return this.reference('href') } } @@ -75,7 +75,7 @@ registerMethods({ }), // Get the textPath children - textPath () { + textPath() { return this.findOne('textPath') } }, @@ -91,7 +91,7 @@ registerMethods({ return text.path(this) }), - targets () { + targets() { return baseFind('svg textPath').filter((node) => { return (node.attr('href') || '').includes(this.id()) }) diff --git a/src/elements/Tspan.js b/src/elements/Tspan.js index 73cd52d..12b49f8 100644 --- a/src/elements/Tspan.js +++ b/src/elements/Tspan.js @@ -13,23 +13,23 @@ import * as textable from '../modules/core/textable.js' export default class Tspan extends Shape { // Initialize node - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('tspan', node), attrs) this._build = false // disable build mode for adding multiple lines } // Shortcut dx - dx (dx) { + dx(dx) { return this.attr('dx', dx) } // Shortcut dy - dy (dy) { + dy(dy) { return this.attr('dy', dy) } // Create new line - newLine () { + newLine() { // mark new line this.dom.newLined = true @@ -43,7 +43,8 @@ export default class Tspan extends Shape { const i = text.index(this) - const fontSize = globals.window.getComputedStyle(this.node) + const fontSize = globals.window + .getComputedStyle(this.node) .getPropertyValue('font-size') const dy = text.dom.leading * new SVGNumber(fontSize) @@ -52,8 +53,9 @@ export default class Tspan extends Shape { } // Set text content - text (text) { - if (text == null) return this.node.textContent + (this.dom.newLined ? '\n' : '') + text(text) { + if (text == null) + return this.node.textContent + (this.dom.newLined ? '\n' : '') if (typeof text === 'function') { this.clear().build(true) @@ -65,7 +67,6 @@ export default class Tspan extends Shape { return this } - } extend(Tspan, textable) diff --git a/src/elements/Use.js b/src/elements/Use.js index 30d9436..e92dd48 100644 --- a/src/elements/Use.js +++ b/src/elements/Use.js @@ -4,12 +4,12 @@ import { xlink } from '../modules/core/namespaces.js' import Shape from './Shape.js' export default class Use extends Shape { - constructor (node, attrs = node) { + constructor(node, attrs = node) { super(nodeOrNew('use', node), attrs) } // Use element as a reference - use (element, file) { + use(element, file) { // Set lined element return this.attr('href', (file || '') + '#' + element, xlink) } diff --git a/src/main.js b/src/main.js index 1ef1f27..5b652c4 100644 --- a/src/main.js +++ b/src/main.js @@ -77,7 +77,13 @@ export { /* Animation Modules */ export { default as Animator } from './animation/Animator.js' -export { Controller, Ease, PID, Spring, easing } from './animation/Controller.js' +export { + Controller, + Ease, + PID, + Spring, + easing +} from './animation/Controller.js' export { default as Queue } from './animation/Queue.js' export { default as Runner } from './animation/Runner.js' export { default as Timeline } from './animation/Timeline.js' @@ -126,43 +132,24 @@ export { default as TextPath } from './elements/TextPath.js' export { default as Tspan } from './elements/Tspan.js' export { default as Use } from './elements/Use.js' -extend([ - Svg, - Symbol, - Image, - Pattern, - Marker -], getMethodsFor('viewbox')) - -extend([ - Line, - Polyline, - Polygon, - Path -], getMethodsFor('marker')) +extend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox')) + +extend([Line, Polyline, Polygon, Path], getMethodsFor('marker')) extend(Text, getMethodsFor('Text')) extend(Path, getMethodsFor('Path')) extend(Defs, getMethodsFor('Defs')) -extend([ - Text, - Tspan -], getMethodsFor('Tspan')) +extend([Text, Tspan], getMethodsFor('Tspan')) -extend([ - Rect, - Ellipse, - Gradient, - Runner -], getMethodsFor('radius')) +extend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius')) extend(EventTarget, getMethodsFor('EventTarget')) extend(Dom, getMethodsFor('Dom')) extend(Element, getMethodsFor('Element')) extend(Shape, getMethodsFor('Shape')) -extend([ Container, Fragment ], getMethodsFor('Container')) +extend([Container, Fragment], getMethodsFor('Container')) extend(Gradient, getMethodsFor('Gradient')) extend(Runner, getMethodsFor('Runner')) diff --git a/src/modules/core/attr.js b/src/modules/core/attr.js index d54b235..a96f706 100644 --- a/src/modules/core/attr.js +++ b/src/modules/core/attr.js @@ -5,12 +5,12 @@ import SVGArray from '../../types/SVGArray.js' import SVGNumber from '../../types/SVGNumber.js' const hooks = [] -export function registerAttrHook (fn) { +export function registerAttrHook(fn) { hooks.push(fn) } // Set svg element attribute -export default function attr (attr, val, ns) { +export default function attr(attr, val, ns) { // act as full getter if (attr == null) { // get an object of attributes @@ -42,8 +42,8 @@ export default function attr (attr, val, ns) { return val == null ? defaults[attr] : isNumber.test(val) - ? parseFloat(val) - : val + ? parseFloat(val) + : val } else { // Loop through hooks and execute them to convert value val = hooks.reduce((_val, hook) => { diff --git a/src/modules/core/circled.js b/src/modules/core/circled.js index a03e29b..3c3a65f 100644 --- a/src/modules/core/circled.js +++ b/src/modules/core/circled.js @@ -1,48 +1,42 @@ import SVGNumber from '../../types/SVGNumber.js' // Radius x value -export function rx (rx) { +export function rx(rx) { return this.attr('rx', rx) } // Radius y value -export function ry (ry) { +export function ry(ry) { return this.attr('ry', ry) } // Move over x-axis -export function x (x) { - return x == null - ? this.cx() - this.rx() - : this.cx(x + this.rx()) +export function x(x) { + return x == null ? this.cx() - this.rx() : this.cx(x + this.rx()) } // Move over y-axis -export function y (y) { - return y == null - ? this.cy() - this.ry() - : this.cy(y + this.ry()) +export function y(y) { + return y == null ? this.cy() - this.ry() : this.cy(y + this.ry()) } // Move by center over x-axis -export function cx (x) { +export function cx(x) { return this.attr('cx', x) } // Move by center over y-axis -export function cy (y) { +export function cy(y) { return this.attr('cy', y) } // Set width of element -export function width (width) { - return width == null - ? this.rx() * 2 - : this.rx(new SVGNumber(width).divide(2)) +export function width(width) { + return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2)) } // Set height of element -export function height (height) { +export function height(height) { return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2)) diff --git a/src/modules/core/containerGeometry.js b/src/modules/core/containerGeometry.js index 908bb27..21139e8 100644 --- a/src/modules/core/containerGeometry.js +++ b/src/modules/core/containerGeometry.js @@ -2,9 +2,8 @@ import Matrix from '../../types/Matrix.js' import Point from '../../types/Point.js' import { proportionalSize } from '../../utils/utils.js' -export function dmove (dx, dy) { - this.children().forEach((child, i) => { - +export function dmove(dx, dy) { + this.children().forEach((child) => { let bbox // We have to wrap this for elements that dont have a bbox @@ -30,32 +29,32 @@ export function dmove (dx, dy) { return this } -export function dx (dx) { +export function dx(dx) { return this.dmove(dx, 0) } -export function dy (dy) { +export function dy(dy) { return this.dmove(0, dy) } -export function height (height, box = this.bbox()) { +export function height(height, box = this.bbox()) { if (height == null) return box.height return this.size(box.width, height, box) } -export function move (x = 0, y = 0, box = this.bbox()) { +export function move(x = 0, y = 0, box = this.bbox()) { const dx = x - box.x const dy = y - box.y return this.dmove(dx, dy) } -export function size (width, height, box = this.bbox()) { +export function size(width, height, box = this.bbox()) { const p = proportionalSize(this, width, height, box) const scaleX = p.width / box.width const scaleY = p.height / box.height - this.children().forEach((child, i) => { + this.children().forEach((child) => { const o = new Point(box).transform(new Matrix(child).inverse()) child.scale(scaleX, scaleY, o.x, o.y) }) @@ -63,17 +62,17 @@ export function size (width, height, box = this.bbox()) { return this } -export function width (width, box = this.bbox()) { +export function width(width, box = this.bbox()) { if (width == null) return box.width return this.size(width, box.height, box) } -export function x (x, box = this.bbox()) { +export function x(x, box = this.bbox()) { if (x == null) return box.x return this.move(x, box.y, box) } -export function y (y, box = this.bbox()) { +export function y(y, box = this.bbox()) { if (y == null) return box.y return this.move(box.x, y, box) } diff --git a/src/modules/core/defaults.js b/src/modules/core/defaults.js index e8e65b6..2c346a7 100644 --- a/src/modules/core/defaults.js +++ b/src/modules/core/defaults.js @@ -1,5 +1,4 @@ - -export function noop () {} +export function noop() {} // Default animation values export const timeline = { @@ -10,7 +9,6 @@ export const timeline = { // Default attribute values export const attrs = { - // fill and stroke 'fill-opacity': 1, 'stroke-opacity': 1, diff --git a/src/modules/core/event.js b/src/modules/core/event.js index 3594fc4..8e08716 100644 --- a/src/modules/core/event.js +++ b/src/modules/core/event.js @@ -5,7 +5,7 @@ import { globals } from '../../utils/window.js' let listenerId = 0 export const windowEvents = {} -export function getEvents (instance) { +export function getEvents(instance) { let n = instance.getEventHolder() // We dont want to save events in global space @@ -14,18 +14,18 @@ export function getEvents (instance) { return n.events } -export function getEventTarget (instance) { +export function getEventTarget(instance) { return instance.getEventTarget() } -export function clearEvents (instance) { +export function clearEvents(instance) { let n = instance.getEventHolder() if (n === globals.window) n = windowEvents if (n.events) n.events = {} } // Add event binder in the SVG namespace -export function on (node, events, listener, binding, options) { +export function on(node, events, listener, binding, options) { const l = listener.bind(binding || node) const instance = makeInstance(node) const bag = getEvents(instance) @@ -56,7 +56,7 @@ export function on (node, events, listener, binding, options) { } // Add event unbinder in the SVG namespace -export function off (node, events, listener, options) { +export function off(node, events, listener, options) { const instance = makeInstance(node) const bag = getEvents(instance) const n = getEventTarget(instance) @@ -79,7 +79,11 @@ export function off (node, events, listener, options) { // remove listener reference if (bag[ev] && bag[ev][ns || '*']) { // removeListener - n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false) + n.removeEventListener( + ev, + bag[ev][ns || '*'][listener], + options || false + ) delete bag[ev][ns || '*'][listener] } @@ -87,7 +91,7 @@ export function off (node, events, listener, options) { // remove all listeners for a namespaced event if (bag[ev] && bag[ev][ns]) { for (l in bag[ev][ns]) { - off(n, [ ev, ns ].join('.'), l) + off(n, [ev, ns].join('.'), l) } delete bag[ev][ns] @@ -97,7 +101,7 @@ export function off (node, events, listener, options) { for (event in bag) { for (namespace in bag[event]) { if (ns === namespace) { - off(n, [ event, ns ].join('.')) + off(n, [event, ns].join('.')) } } } @@ -105,7 +109,7 @@ export function off (node, events, listener, options) { // remove all listeners for the event if (bag[ev]) { for (namespace in bag[ev]) { - off(n, [ ev, namespace ].join('.')) + off(n, [ev, namespace].join('.')) } delete bag[ev] @@ -121,14 +125,18 @@ export function off (node, events, listener, options) { }) } -export function dispatch (node, event, data, options) { +export function dispatch(node, event, data, options) { const n = getEventTarget(node) // Dispatch event if (event instanceof globals.window.Event) { n.dispatchEvent(event) } else { - event = new globals.window.CustomEvent(event, { detail: data, cancelable: true, ...options }) + event = new globals.window.CustomEvent(event, { + detail: data, + cancelable: true, + ...options + }) n.dispatchEvent(event) } return event diff --git a/src/modules/core/gradiented.js b/src/modules/core/gradiented.js index 6c744e4..cd0a512 100644 --- a/src/modules/core/gradiented.js +++ b/src/modules/core/gradiented.js @@ -1,12 +1,12 @@ import SVGNumber from '../../types/SVGNumber.js' -export function from (x, y) { +export function from(x, y) { return (this._element || this).type === 'radialGradient' ? this.attr({ fx: new SVGNumber(x), fy: new SVGNumber(y) }) : this.attr({ x1: new SVGNumber(x), y1: new SVGNumber(y) }) } -export function to (x, y) { +export function to(x, y) { return (this._element || this).type === 'radialGradient' ? this.attr({ cx: new SVGNumber(x), cy: new SVGNumber(y) }) : this.attr({ x2: new SVGNumber(x), y2: new SVGNumber(y) }) diff --git a/src/modules/core/parser.js b/src/modules/core/parser.js index 4f92657..fc48c3b 100644 --- a/src/modules/core/parser.js +++ b/src/modules/core/parser.js @@ -1,7 +1,7 @@ import { globals } from '../../utils/window.js' import { makeInstance } from '../../utils/adopter.js' -export default function parser () { +export default function parser() { // Reuse cached element if possible if (!parser.nodes) { const svg = makeInstance().size(2, 0) diff --git a/src/modules/core/pointed.js b/src/modules/core/pointed.js index 540e5f8..0d4ef7a 100644 --- a/src/modules/core/pointed.js +++ b/src/modules/core/pointed.js @@ -3,23 +3,23 @@ import PointArray from '../../types/PointArray.js' export const MorphArray = PointArray // Move by left top corner over x-axis -export function x (x) { +export function x(x) { return x == null ? this.bbox().x : this.move(x, this.bbox().y) } // Move by left top corner over y-axis -export function y (y) { +export function y(y) { return y == null ? this.bbox().y : this.move(this.bbox().x, y) } // Set width of element -export function width (width) { +export function width(width) { const b = this.bbox() return width == null ? b.width : this.size(width, b.height) } // Set height of element -export function height (height) { +export function height(height) { const b = this.bbox() return height == null ? b.height : this.size(b.width, height) } diff --git a/src/modules/core/poly.js b/src/modules/core/poly.js index d422028..0640735 100644 --- a/src/modules/core/poly.js +++ b/src/modules/core/poly.js @@ -2,32 +2,33 @@ import { proportionalSize } from '../../utils/utils.js' import PointArray from '../../types/PointArray.js' // Get array -export function array () { +export function array() { return this._array || (this._array = new PointArray(this.attr('points'))) } // Clear array cache -export function clear () { +export function clear() { delete this._array return this } // Move by left top corner -export function move (x, y) { +export function move(x, y) { return this.attr('points', this.array().move(x, y)) } // Plot new path -export function plot (p) { - return (p == null) +export function plot(p) { + return p == null ? this.array() - : this.clear().attr('points', typeof p === 'string' - ? p - : (this._array = new PointArray(p))) + : this.clear().attr( + 'points', + typeof p === 'string' ? p : (this._array = new PointArray(p)) + ) } // Set element size to given width and height -export function size (width, height) { +export function size(width, height) { const p = proportionalSize(this, width, height) return this.attr('points', this.array().size(p.width, p.height)) } diff --git a/src/modules/core/regex.js b/src/modules/core/regex.js index a18c692..03d1fa3 100644 --- a/src/modules/core/regex.js +++ b/src/modules/core/regex.js @@ -1,5 +1,6 @@ // Parse unit value -export const numberAndUnit = /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i +export const numberAndUnit = + /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i // Parse hex value export const hex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i diff --git a/src/modules/core/selector.js b/src/modules/core/selector.js index 1667d4d..7dec4e4 100644 --- a/src/modules/core/selector.js +++ b/src/modules/core/selector.js @@ -3,17 +3,19 @@ import { globals } from '../../utils/window.js' import { map } from '../../utils/utils.js' import List from '../../types/List.js' -export default function baseFind (query, parent) { - return new List(map((parent || globals.document).querySelectorAll(query), function (node) { - return adopt(node) - })) +export default function baseFind(query, parent) { + return new List( + map((parent || globals.document).querySelectorAll(query), function (node) { + return adopt(node) + }) + ) } // Scoped find method -export function find (query) { +export function find(query) { return baseFind(query, this.node) } -export function findOne (query) { +export function findOne(query) { return adopt(this.node.querySelector(query)) } diff --git a/src/modules/core/textable.js b/src/modules/core/textable.js index 28b13cb..44a1ee5 100644 --- a/src/modules/core/textable.js +++ b/src/modules/core/textable.js @@ -1,7 +1,7 @@ import { globals } from '../../utils/window.js' // Create plain text node -export function plain (text) { +export function plain(text) { // clear if build mode is disabled if (this._build === false) { this.clear() @@ -14,14 +14,14 @@ export function plain (text) { } // Get length of text element -export function length () { +export function length() { return this.node.getComputedTextLength() } // Move over x-axis // Text is moved by its bounding box // text-anchor does NOT matter -export function x (x, box = this.bbox()) { +export function x(x, box = this.bbox()) { if (x == null) { return box.x } @@ -30,7 +30,7 @@ export function x (x, box = this.bbox()) { } // Move over y-axis -export function y (y, box = this.bbox()) { +export function y(y, box = this.bbox()) { if (y == null) { return box.y } @@ -38,12 +38,12 @@ export function y (y, box = this.bbox()) { return this.attr('y', this.attr('y') + y - box.y) } -export function move (x, y, box = this.bbox()) { +export function move(x, y, box = this.bbox()) { return this.x(x, box).y(y, box) } // Move center over x-axis -export function cx (x, box = this.bbox()) { +export function cx(x, box = this.bbox()) { if (x == null) { return box.cx } @@ -52,7 +52,7 @@ export function cx (x, box = this.bbox()) { } // Move center over y-axis -export function cy (y, box = this.bbox()) { +export function cy(y, box = this.bbox()) { if (y == null) { return box.cy } @@ -60,24 +60,24 @@ export function cy (y, box = this.bbox()) { return this.attr('y', this.attr('y') + y - box.cy) } -export function center (x, y, box = this.bbox()) { +export function center(x, y, box = this.bbox()) { return this.cx(x, box).cy(y, box) } -export function ax (x) { +export function ax(x) { return this.attr('x', x) } -export function ay (y) { +export function ay(y) { return this.attr('y', y) } -export function amove (x, y) { +export function amove(x, y) { return this.ax(x).ay(y) } // Enable / disable build mode -export function build (build) { +export function build(build) { this._build = !!build return this } diff --git a/src/modules/optional/arrange.js b/src/modules/optional/arrange.js index 9aaeef1..292cd79 100644 --- a/src/modules/optional/arrange.js +++ b/src/modules/optional/arrange.js @@ -2,27 +2,27 @@ import { makeInstance } from '../../utils/adopter.js' import { registerMethods } from '../../utils/methods.js' // Get all siblings, including myself -export function siblings () { +export function siblings() { return this.parent().children() } // Get the current position siblings -export function position () { +export function position() { return this.parent().index(this) } // Get the next element (will return null if there is none) -export function next () { +export function next() { return this.siblings()[this.position() + 1] } // Get the next element (will return null if there is none) -export function prev () { +export function prev() { return this.siblings()[this.position() - 1] } // Send given element one step forward -export function forward () { +export function forward() { const i = this.position() const p = this.parent() @@ -33,7 +33,7 @@ export function forward () { } // Send given element one step backward -export function backward () { +export function backward() { const i = this.position() const p = this.parent() @@ -43,7 +43,7 @@ export function backward () { } // Send given element all the way to the front -export function front () { +export function front() { const p = this.parent() // Move node forward @@ -53,7 +53,7 @@ export function front () { } // Send given element all the way to the back -export function back () { +export function back() { const p = this.parent() // Move node back @@ -63,7 +63,7 @@ export function back () { } // Inserts a given element before the targeted element -export function before (element) { +export function before(element) { element = makeInstance(element) element.remove() @@ -75,7 +75,7 @@ export function before (element) { } // Inserts a given element after the targeted element -export function after (element) { +export function after(element) { element = makeInstance(element) element.remove() @@ -86,13 +86,13 @@ export function after (element) { return this } -export function insertBefore (element) { +export function insertBefore(element) { element = makeInstance(element) element.before(this) return this } -export function insertAfter (element) { +export function insertAfter(element) { element = makeInstance(element) element.after(this) return this diff --git a/src/modules/optional/class.js b/src/modules/optional/class.js index 4e544be..3141644 100644 --- a/src/modules/optional/class.js +++ b/src/modules/optional/class.js @@ -2,18 +2,18 @@ import { delimiter } from '../core/regex.js' import { registerMethods } from '../../utils/methods.js' // Return array of classes on the node -export function classes () { +export function classes() { const attr = this.attr('class') return attr == null ? [] : attr.trim().split(delimiter) } // Return true if class exists on the node, false otherwise -export function hasClass (name) { +export function hasClass(name) { return this.classes().indexOf(name) !== -1 } // Add class to the node -export function addClass (name) { +export function addClass(name) { if (!this.hasClass(name)) { const array = this.classes() array.push(name) @@ -24,21 +24,30 @@ export function addClass (name) { } // Remove class from the node -export function removeClass (name) { +export function removeClass(name) { if (this.hasClass(name)) { - this.attr('class', this.classes().filter(function (c) { - return c !== name - }).join(' ')) + this.attr( + 'class', + this.classes() + .filter(function (c) { + return c !== name + }) + .join(' ') + ) } return this } // Toggle the presence of a class on the node -export function toggleClass (name) { +export function toggleClass(name) { return this.hasClass(name) ? this.removeClass(name) : this.addClass(name) } registerMethods('Dom', { - classes, hasClass, addClass, removeClass, toggleClass + classes, + hasClass, + addClass, + removeClass, + toggleClass }) diff --git a/src/modules/optional/css.js b/src/modules/optional/css.js index ee93869..92f8c21 100644 --- a/src/modules/optional/css.js +++ b/src/modules/optional/css.js @@ -3,11 +3,12 @@ import { isBlank } from '../core/regex.js' import { registerMethods } from '../../utils/methods.js' // Dynamic style generator -export function css (style, val) { +export function css(style, val) { const ret = {} if (arguments.length === 0) { // get full style as object - this.node.style.cssText.split(/\s*;\s*/) + this.node.style.cssText + .split(/\s*;\s*/) .filter(function (el) { return !!el.length }) @@ -37,36 +38,39 @@ export function css (style, val) { if (typeof style === 'object') { for (const name in style) { // set empty string if null/undefined/'' was given - this.node.style[camelCase(name)] - = (style[name] == null || isBlank.test(style[name])) ? '' : style[name] + this.node.style[camelCase(name)] = + style[name] == null || isBlank.test(style[name]) ? '' : style[name] } } } // set style for property if (arguments.length === 2) { - this.node.style[camelCase(style)] - = (val == null || isBlank.test(val)) ? '' : val + this.node.style[camelCase(style)] = + val == null || isBlank.test(val) ? '' : val } return this } // Show element -export function show () { +export function show() { return this.css('display', '') } // Hide element -export function hide () { +export function hide() { return this.css('display', 'none') } // Is element visible? -export function visible () { +export function visible() { return this.css('display') !== 'none' } registerMethods('Dom', { - css, show, hide, visible + css, + show, + hide, + visible }) diff --git a/src/modules/optional/data.js b/src/modules/optional/data.js index 00bb8ea..9655048 100644 --- a/src/modules/optional/data.js +++ b/src/modules/optional/data.js @@ -2,10 +2,18 @@ import { registerMethods } from '../../utils/methods.js' import { filter, map } from '../../utils/utils.js' // Store data values on svg nodes -export function data (a, v, r) { +export function data(a, v, r) { if (a == null) { // get an object of attributes - return this.data(map(filter(this.node.attributes, (el) => el.nodeName.indexOf('data-') === 0), (el) => el.nodeName.slice(5))) + return this.data( + map( + filter( + this.node.attributes, + (el) => el.nodeName.indexOf('data-') === 0 + ), + (el) => el.nodeName.slice(5) + ) + ) } else if (a instanceof Array) { const data = {} for (const key of a) { @@ -23,12 +31,13 @@ export function data (a, v, r) { return this.attr('data-' + a) } } else { - this.attr('data-' + a, + this.attr( + 'data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' - ? v - : JSON.stringify(v) + ? v + : JSON.stringify(v) ) } diff --git a/src/modules/optional/memory.js b/src/modules/optional/memory.js index 459dcf1..31058c3 100644 --- a/src/modules/optional/memory.js +++ b/src/modules/optional/memory.js @@ -1,7 +1,7 @@ import { registerMethods } from '../../utils/methods.js' // Remember arbitrary data -export function remember (k, v) { +export function remember(k, v) { // remember every item in an object individually if (typeof arguments[0] === 'object') { for (const key in k) { @@ -19,7 +19,7 @@ export function remember (k, v) { } // Erase a given memory -export function forget () { +export function forget() { if (arguments.length === 0) { this._memory = {} } else { @@ -33,7 +33,7 @@ export function forget () { // This triggers creation of a new hidden class which is not performant // However, this function is not rarely used so it will not happen frequently // Return local memory object -export function memory () { +export function memory() { return (this._memory = this._memory || {}) } diff --git a/src/modules/optional/sugar.js b/src/modules/optional/sugar.js index d4c3da5..aa5fb82 100644 --- a/src/modules/optional/sugar.js +++ b/src/modules/optional/sugar.js @@ -7,15 +7,24 @@ import SVGNumber from '../../types/SVGNumber.js' // Define list of available attributes for stroke and fill const sugar = { - stroke: [ 'color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset' ], - fill: [ 'color', 'opacity', 'rule' ], + stroke: [ + 'color', + 'width', + 'opacity', + 'linecap', + 'linejoin', + 'miterlimit', + 'dasharray', + 'dashoffset' + ], + fill: ['color', 'opacity', 'rule'], prefix: function (t, a) { return a === 'color' ? t : t + '-' + a } } // Add sugar for fill and stroke -;[ 'fill', 'stroke' ].forEach(function (m) { +;['fill', 'stroke'].forEach(function (m) { const extension = {} let i @@ -23,7 +32,12 @@ const sugar = { if (typeof o === 'undefined') { return this.attr(m) } - if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || (o instanceof Element)) { + if ( + typeof o === 'string' || + o instanceof Color || + Color.isRgb(o) || + o instanceof Element + ) { this.attr(m, o) } else { // set all attributes from sugar.fill and sugar.stroke list @@ -37,10 +51,10 @@ const sugar = { return this } - registerMethods([ 'Element', 'Runner' ], extension) + registerMethods(['Element', 'Runner'], extension) }) -registerMethods([ 'Element', 'Runner' ], { +registerMethods(['Element', 'Runner'], { // Let the user set the matrix directly matrix: function (mat, b, c, d, e, f) { // Act as a getter @@ -61,7 +75,7 @@ registerMethods([ 'Element', 'Runner' ], { skew: function (x, y, cx, cy) { return arguments.length === 1 || arguments.length === 3 ? this.transform({ skew: x, ox: y, oy: cx }, true) - : this.transform({ skew: [ x, y ], ox: cx, oy: cy }, true) + : this.transform({ skew: [x, y], ox: cx, oy: cy }, true) }, shear: function (lam, cx, cy) { @@ -72,17 +86,17 @@ registerMethods([ 'Element', 'Runner' ], { scale: function (x, y, cx, cy) { return arguments.length === 1 || arguments.length === 3 ? this.transform({ scale: x, ox: y, oy: cx }, true) - : this.transform({ scale: [ x, y ], ox: cx, oy: cy }, true) + : this.transform({ scale: [x, y], ox: cx, oy: cy }, true) }, // Map translate to transform translate: function (x, y) { - return this.transform({ translate: [ x, y ] }, true) + return this.transform({ translate: [x, y] }, true) }, // Map relative translations to transform relative: function (x, y) { - return this.transform({ relative: [ x, y ] }, true) + return this.transform({ relative: [x, y] }, true) }, // Map flip to transform @@ -122,7 +136,7 @@ registerMethods('Path', { } }) -registerMethods([ 'Element', 'Runner' ], { +registerMethods(['Element', 'Runner'], { // Set font font: function (a, v) { if (typeof a === 'object') { @@ -133,15 +147,21 @@ registerMethods([ 'Element', 'Runner' ], { return a === 'leading' ? this.leading(v) : a === 'anchor' - ? this.attr('text-anchor', v) - : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' - ? this.attr('font-' + a, v) - : this.attr(a, v) + ? this.attr('text-anchor', v) + : a === 'size' || + a === 'family' || + a === 'weight' || + a === 'stretch' || + a === 'variant' || + a === 'style' + ? this.attr('font-' + a, v) + : this.attr(a, v) } }) // Add events to elements -const methods = [ 'click', +const methods = [ + 'click', 'dblclick', 'mousedown', 'mouseup', @@ -154,7 +174,8 @@ const methods = [ 'click', 'touchmove', 'touchleave', 'touchend', - 'touchcancel' ].reduce(function (last, event) { + 'touchcancel' +].reduce(function (last, event) { // add event to Element const fn = function (f) { if (f === null) { diff --git a/src/modules/optional/transform.js b/src/modules/optional/transform.js index d8e7381..7f950b3 100644 --- a/src/modules/optional/transform.js +++ b/src/modules/optional/transform.js @@ -4,22 +4,24 @@ import { registerMethods } from '../../utils/methods.js' import Matrix from '../../types/Matrix.js' // Reset all transformations -export function untransform () { +export function untransform() { return this.attr('transform', null) } // merge the whole transformation chain into one matrix and returns it -export function matrixify () { +export function matrixify() { const matrix = (this.attr('transform') || '') // split transformations - .split(transforms).slice(0, -1).map(function (str) { + .split(transforms) + .slice(0, -1) + .map(function (str) { // generate key => value pairs const kv = str.trim().split('(') - return [ kv[0], - kv[1].split(delimiter) - .map(function (str) { - return parseFloat(str) - }) + return [ + kv[0], + kv[1].split(delimiter).map(function (str) { + return parseFloat(str) + }) ] }) .reverse() @@ -35,7 +37,7 @@ export function matrixify () { } // add an element to another parent without changing the visual representation on the screen -export function toParent (parent, i) { +export function toParent(parent, i) { if (this === parent) return this const ctm = this.screenCTM() const pCtm = parent.screenCTM().inverse() @@ -46,12 +48,12 @@ export function toParent (parent, i) { } // same as above with parent equals root-svg -export function toRoot (i) { +export function toRoot(i) { return this.toParent(this.root(), i) } // Add transformations -export function transform (o, relative) { +export function transform(o, relative) { // Act as a getter if no object was passed if (o == null || typeof o === 'string') { const decomposed = new Matrix(this).decompose() @@ -64,11 +66,15 @@ export function transform (o, relative) { } // The user can pass a boolean, an Element or an Matrix or nothing - const cleanRelative = relative === true ? this : (relative || false) + const cleanRelative = relative === true ? this : relative || false const result = new Matrix(cleanRelative).transform(o) return this.attr('transform', result) } registerMethods('Element', { - untransform, matrixify, toParent, toRoot, transform + untransform, + matrixify, + toParent, + toRoot, + transform }) diff --git a/src/polyfills/children.js b/src/polyfills/children.js index 98e9143..690e23a 100644 --- a/src/polyfills/children.js +++ b/src/polyfills/children.js @@ -1,7 +1,7 @@ import { filter } from '../utils/utils.js' // IE11: children does not work for svg nodes -export default function children (node) { +export default function children(node) { return filter(node.childNodes, function (child) { return child.nodeType === 1 }) diff --git a/src/polyfills/innerHTML.js b/src/polyfills/innerHTML.js index 4f4140b..51632af 100644 --- a/src/polyfills/innerHTML.js +++ b/src/polyfills/innerHTML.js @@ -1,24 +1,29 @@ -/* globals SVGElement, DOMParser */ - -(function () { +;(function () { try { if (SVGElement.prototype.innerHTML) return - } catch (e) { return } + } catch (e) { + return + } const serializeXML = function (node, output) { const nodeType = node.nodeType if (nodeType === 3) { - output.push(node.textContent.replace(/&/, '&').replace(/</, '<').replace('>', '>')) + output.push( + node.textContent + .replace(/&/, '&') + .replace(/</, '<') + .replace('>', '>') + ) } else if (nodeType === 1) { output.push('<', node.tagName) if (node.hasAttributes()) { - [].forEach.call(node.attributes, function (attrNode) { + ;[].forEach.call(node.attributes, function (attrNode) { output.push(' ', attrNode.name, '="', attrNode.value, '"') }) } output.push('>') if (node.hasChildNodes()) { - [].forEach.call(node.childNodes, function (childNode) { + ;[].forEach.call(node.childNodes, function (childNode) { serializeXML(childNode, output) }) } else { @@ -49,8 +54,14 @@ const dXML = new DOMParser() dXML.async = false - const sXML = '<svg xmlns=\'http://www.w3.org/2000/svg\' xmlns:xlink=\'http://www.w3.org/1999/xlink\'>' + markupText + '</svg>' - const svgDocElement = dXML.parseFromString(sXML, 'text/xml').documentElement + const sXML = + "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>" + + markupText + + '</svg>' + const svgDocElement = dXML.parseFromString( + sXML, + 'text/xml' + ).documentElement let childNode = svgDocElement.firstChild while (childNode) { @@ -59,7 +70,7 @@ } } catch (e) { throw new Error('Can not set innerHTML on node') - }; + } } }) @@ -78,18 +89,27 @@ const dXML = new DOMParser() dXML.async = false - const sXML = '<svg xmlns=\'http://www.w3.org/2000/svg\' xmlns:xlink=\'http://www.w3.org/1999/xlink\'>' + markupText + '</svg>' - const svgDocElement = dXML.parseFromString(sXML, 'text/xml').documentElement + const sXML = + "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>" + + markupText + + '</svg>' + const svgDocElement = dXML.parseFromString( + sXML, + 'text/xml' + ).documentElement let childNode = svgDocElement.firstChild while (childNode) { - this.parentNode.insertBefore(this.ownerDocument.importNode(childNode, true), this) + this.parentNode.insertBefore( + this.ownerDocument.importNode(childNode, true), + this + ) // this.appendChild(this.ownerDocument.importNode(childNode, true)); childNode = childNode.nextSibling } } catch (e) { throw new Error('Can not set outerHTML on node') - }; + } } }) })() @@ -2,7 +2,7 @@ import * as svgMembers from './main.js' import { makeInstance } from './utils/adopter.js' // The main wrapping element -export default function SVG (element, isHTML) { +export default function SVG(element, isHTML) { return makeInstance(element, isHTML) } diff --git a/src/types/Box.js b/src/types/Box.js index ab19732..cd441ac 100644 --- a/src/types/Box.js +++ b/src/types/Box.js @@ -6,46 +6,55 @@ import Matrix from './Matrix.js' import Point from './Point.js' import parser from '../modules/core/parser.js' -export function isNulledBox (box) { +export function isNulledBox(box) { return !box.width && !box.height && !box.x && !box.y } -export function domContains (node) { - return node === globals.document - || (globals.document.documentElement.contains || function (node) { - // This is IE - it does not support contains() for top-level SVGs - while (node.parentNode) { - node = node.parentNode +export function domContains(node) { + return ( + node === globals.document || + ( + globals.document.documentElement.contains || + function (node) { + // This is IE - it does not support contains() for top-level SVGs + while (node.parentNode) { + node = node.parentNode + } + return node === globals.document } - return node === globals.document - }).call(globals.document.documentElement, node) + ).call(globals.document.documentElement, node) + ) } export default class Box { - constructor (...args) { + constructor(...args) { this.init(...args) } - addOffset () { + addOffset() { // offset by window scroll position, because getBoundingClientRect changes when window is scrolled this.x += globals.window.pageXOffset this.y += globals.window.pageYOffset return new Box(this) } - init (source) { - const base = [ 0, 0, 0, 0 ] - source = typeof source === 'string' - ? source.split(delimiter).map(parseFloat) - : Array.isArray(source) + init(source) { + const base = [0, 0, 0, 0] + source = + typeof source === 'string' + ? source.split(delimiter).map(parseFloat) + : Array.isArray(source) ? source : typeof source === 'object' - ? [ source.left != null - ? source.left - : source.x, source.top != null ? source.top : source.y, source.width, source.height ] - : arguments.length === 4 - ? [].slice.call(arguments) - : base + ? [ + source.left != null ? source.left : source.x, + source.top != null ? source.top : source.y, + source.width, + source.height + ] + : arguments.length === 4 + ? [].slice.call(arguments) + : base this.x = source[0] || 0 this.y = source[1] || 0 @@ -61,12 +70,12 @@ export default class Box { return this } - isNulled () { + isNulled() { return isNulledBox(this) } // Merge rect box with another, return a new instance - merge (box) { + merge(box) { const x = Math.min(this.x, box.x) const y = Math.min(this.y, box.y) const width = Math.max(this.x + this.width, box.x + box.width) - x @@ -75,15 +84,15 @@ export default class Box { return new Box(x, y, width, height) } - toArray () { - return [ this.x, this.y, this.width, this.height ] + toArray() { + return [this.x, this.y, this.width, this.height] } - toString () { + toString() { return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height } - transform (m) { + transform(m) { if (!(m instanceof Matrix)) { m = new Matrix(m) } @@ -108,16 +117,11 @@ export default class Box { yMax = Math.max(yMax, p.y) }) - return new Box( - xMin, yMin, - xMax - xMin, - yMax - yMin - ) + return new Box(xMin, yMin, xMax - xMin, yMax - yMin) } - } -function getBox (el, getBBoxFn, retry) { +function getBox(el, getBBoxFn, retry) { let box try { @@ -137,7 +141,7 @@ function getBox (el, getBBoxFn, retry) { return box } -export function bbox () { +export function bbox() { // Function to get bbox is getBBox() const getBBox = (node) => node.getBBox() @@ -151,7 +155,11 @@ export function bbox () { return box } catch (e) { // We give up... - throw new Error(`Getting bbox of element "${el.node.nodeName}" is not possible: ${e.toString()}`) + throw new Error( + `Getting bbox of element "${ + el.node.nodeName + }" is not possible: ${e.toString()}` + ) } } @@ -161,12 +169,14 @@ export function bbox () { return bbox } -export function rbox (el) { +export function rbox(el) { const getRBox = (node) => node.getBoundingClientRect() const retry = (el) => { // There is no point in trying tricks here because if we insert the element into the dom ourselves // it obviously will be at the wrong position - throw new Error(`Getting rbox of element "${el.node.nodeName}" is not possible`) + throw new Error( + `Getting rbox of element "${el.node.nodeName}" is not possible` + ) } const box = getBox(this, getRBox, retry) @@ -183,18 +193,17 @@ export function rbox (el) { } // Checks whether the given point is inside the bounding box -export function inside (x, y) { +export function inside(x, y) { const box = this.bbox() - return x > box.x - && y > box.y - && x < box.x + box.width - && y < box.y + box.height + return ( + x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height + ) } registerMethods({ viewbox: { - viewbox (x, y, width, height) { + viewbox(x, y, width, height) { // act as getter if (x == null) return new Box(this.attr('viewBox')) @@ -202,7 +211,7 @@ registerMethods({ return this.attr('viewBox', new Box(x, y, width, height)) }, - zoom (level, point) { + zoom(level, point) { // Its best to rely on the attributes here and here is why: // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!) // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely @@ -210,18 +219,24 @@ registerMethods({ // Furthermore this size is incorrect if the element is further transformed by its parents // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here! // getBBox: returns the bounding box of its content - that doesn't help! - let { width, height } = this.attr([ 'width', 'height' ]) + let { width, height } = this.attr(['width', 'height']) // Width and height is a string when a number with a unit is present which we can't use // So we try clientXYZ - if ((!width && !height) || (typeof width === 'string' || typeof height === 'string')) { + if ( + (!width && !height) || + typeof width === 'string' || + typeof height === 'string' + ) { width = this.node.clientWidth height = this.node.clientHeight } // Giving up... if (!width || !height) { - throw new Error('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element') + throw new Error( + 'Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element' + ) } const v = this.viewbox() @@ -240,7 +255,8 @@ registerMethods({ // The * 100 is a bit of wiggle room for the matrix transformation if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100 - point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y) + point = + point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y) const box = new Box(v).transform( new Matrix({ scale: zoomAmount, origin: point }) diff --git a/src/types/Color.js b/src/types/Color.js index c050ecc..79fa24e 100644 --- a/src/types/Color.js +++ b/src/types/Color.js @@ -1,25 +1,28 @@ - import { hex, isHex, isRgb, rgb, whitespace } from '../modules/core/regex.js' -function sixDigitHex (hex) { +function sixDigitHex(hex) { return hex.length === 4 - ? [ '#', - hex.substring(1, 2), hex.substring(1, 2), - hex.substring(2, 3), hex.substring(2, 3), - hex.substring(3, 4), hex.substring(3, 4) - ].join('') + ? [ + '#', + hex.substring(1, 2), + hex.substring(1, 2), + hex.substring(2, 3), + hex.substring(2, 3), + hex.substring(3, 4), + hex.substring(3, 4) + ].join('') : hex } -function componentHex (component) { +function componentHex(component) { const integer = Math.round(component) const bounded = Math.max(0, Math.min(255, integer)) const hex = bounded.toString(16) return hex.length === 1 ? '0' + hex : hex } -function is (object, space) { - for (let i = space.length; i--;) { +function is(object, space) { + for (let i = space.length; i--; ) { if (object[space[i]] == null) { return false } @@ -27,26 +30,26 @@ function is (object, space) { return true } -function getParameters (a, b) { +function getParameters(a, b) { const params = is(a, 'rgb') ? { _a: a.r, _b: a.g, _c: a.b, _d: 0, space: 'rgb' } : is(a, 'xyz') - ? { _a: a.x, _b: a.y, _c: a.z, _d: 0, space: 'xyz' } - : is(a, 'hsl') - ? { _a: a.h, _b: a.s, _c: a.l, _d: 0, space: 'hsl' } - : is(a, 'lab') - ? { _a: a.l, _b: a.a, _c: a.b, _d: 0, space: 'lab' } - : is(a, 'lch') - ? { _a: a.l, _b: a.c, _c: a.h, _d: 0, space: 'lch' } - : is(a, 'cmyk') - ? { _a: a.c, _b: a.m, _c: a.y, _d: a.k, space: 'cmyk' } - : { _a: 0, _b: 0, _c: 0, space: 'rgb' } + ? { _a: a.x, _b: a.y, _c: a.z, _d: 0, space: 'xyz' } + : is(a, 'hsl') + ? { _a: a.h, _b: a.s, _c: a.l, _d: 0, space: 'hsl' } + : is(a, 'lab') + ? { _a: a.l, _b: a.a, _c: a.b, _d: 0, space: 'lab' } + : is(a, 'lch') + ? { _a: a.l, _b: a.c, _c: a.h, _d: 0, space: 'lch' } + : is(a, 'cmyk') + ? { _a: a.c, _b: a.m, _c: a.y, _d: a.k, space: 'cmyk' } + : { _a: 0, _b: 0, _c: 0, space: 'rgb' } params.space = b || params.space return params } -function cieSpace (space) { +function cieSpace(space) { if (space === 'lab' || space === 'xyz' || space === 'lch') { return true } else { @@ -54,7 +57,7 @@ function cieSpace (space) { } } -function hueToRgb (p, q, t) { +function hueToRgb(p, q, t) { if (t < 0) t += 1 if (t > 1) t -= 1 if (t < 1 / 6) return p + (q - p) * 6 * t @@ -64,108 +67,90 @@ function hueToRgb (p, q, t) { } export default class Color { - constructor (...inputs) { + constructor(...inputs) { this.init(...inputs) } // Test if given value is a color - static isColor (color) { - return color && ( - color instanceof Color - || this.isRgb(color) - || this.test(color) + static isColor(color) { + return ( + color && (color instanceof Color || this.isRgb(color) || this.test(color)) ) } // Test if given value is an rgb object - static isRgb (color) { - return color && typeof color.r === 'number' - && typeof color.g === 'number' - && typeof color.b === 'number' + static isRgb(color) { + return ( + color && + typeof color.r === 'number' && + typeof color.g === 'number' && + typeof color.b === 'number' + ) } /* Generating random colors */ - static random (mode = 'vibrant', t, u) { - + static random(mode = 'vibrant', t) { // Get the math modules const { random, round, sin, PI: pi } = Math // Run the correct generator if (mode === 'vibrant') { - const l = (81 - 57) * random() + 57 const c = (83 - 45) * random() + 45 const h = 360 * random() const color = new Color(l, c, h, 'lch') return color - } else if (mode === 'sine') { - t = t == null ? random() : t - const r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150) - const g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200) - const b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150) + const r = round(80 * sin((2 * pi * t) / 0.5 + 0.01) + 150) + const g = round(50 * sin((2 * pi * t) / 0.5 + 4.6) + 200) + const b = round(100 * sin((2 * pi * t) / 0.5 + 2.3) + 150) const color = new Color(r, g, b) return color - } else if (mode === 'pastel') { - const l = (94 - 86) * random() + 86 const c = (26 - 9) * random() + 9 const h = 360 * random() const color = new Color(l, c, h, 'lch') return color - } else if (mode === 'dark') { - const l = 10 + 10 * random() const c = (125 - 75) * random() + 86 const h = 360 * random() const color = new Color(l, c, h, 'lch') return color - } else if (mode === 'rgb') { - const r = 255 * random() const g = 255 * random() const b = 255 * random() const color = new Color(r, g, b) return color - } else if (mode === 'lab') { - const l = 100 * random() const a = 256 * random() - 128 const b = 256 * random() - 128 const color = new Color(l, a, b, 'lab') return color - } else if (mode === 'grey') { - const grey = 255 * random() const color = new Color(grey, grey, grey) return color - } else { - throw new Error('Unsupported random color mode') - } } // Test if given value is a color string - static test (color) { - return (typeof color === 'string') - && (isHex.test(color) || isRgb.test(color)) + static test(color) { + return typeof color === 'string' && (isHex.test(color) || isRgb.test(color)) } - cmyk () { - + cmyk() { // Get the rgb values for the current color const { _a, _b, _c } = this.rgb() - const [ r, g, b ] = [ _a, _b, _c ].map(v => v / 255) + const [r, g, b] = [_a, _b, _c].map((v) => v / 255) // Get the cmyk values in an unbounded format const k = Math.min(1 - r, 1 - g, 1 - b) @@ -184,11 +169,10 @@ export default class Color { return color } - hsl () { - + hsl() { // Get the rgb values const { _a, _b, _c } = this.rgb() - const [ r, g, b ] = [ _a, _b, _c ].map(v => v / 255) + const [r, g, b] = [_a, _b, _c].map((v) => v / 255) // Find the maximum and minimum values to get the lightness const max = Math.max(r, g, b) @@ -203,24 +187,24 @@ export default class Color { const s = isGrey ? 0 : l > 0.5 - ? delta / (2 - max - min) - : delta / (max + min) + ? delta / (2 - max - min) + : delta / (max + min) const h = isGrey ? 0 : max === r - ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 - : max === g - ? ((b - r) / delta + 2) / 6 - : max === b - ? ((r - g) / delta + 4) / 6 - : 0 + ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 + : max === g + ? ((b - r) / delta + 2) / 6 + : max === b + ? ((r - g) / delta + 4) / 6 + : 0 // Construct and return the new color const color = new Color(360 * h, 100 * s, 100 * l, 'hsl') return color } - init (a = 0, b = 0, c = 0, d = 0, space = 'rgb') { + init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') { // This catches the case when a falsy value is passed like '' a = !a ? 0 : a @@ -238,7 +222,7 @@ export default class Color { // Assign the values straight to the color Object.assign(this, { _a: a, _b: b, _c: c, _d: d, space }) - // If the user gave us an array, make the color from it + // If the user gave us an array, make the color from it } else if (a instanceof Array) { this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb' Object.assign(this, { _a: a[0], _b: a[1], _c: a[2], _d: a[3] || 0 }) @@ -249,40 +233,43 @@ export default class Color { } else if (typeof a === 'string') { if (isRgb.test(a)) { const noWhitespace = a.replace(whitespace, '') - const [ _a, _b, _c ] = rgb.exec(noWhitespace) - .slice(1, 4).map(v => parseInt(v)) + const [_a, _b, _c] = rgb + .exec(noWhitespace) + .slice(1, 4) + .map((v) => parseInt(v)) Object.assign(this, { _a, _b, _c, _d: 0, space: 'rgb' }) } else if (isHex.test(a)) { - const hexParse = v => parseInt(v, 16) - const [ , _a, _b, _c ] = hex.exec(sixDigitHex(a)).map(hexParse) + const hexParse = (v) => parseInt(v, 16) + const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse) Object.assign(this, { _a, _b, _c, _d: 0, space: 'rgb' }) - } else throw Error('Unsupported string format, can\'t construct Color') + } else throw Error("Unsupported string format, can't construct Color") } // Now add the components as a convenience const { _a, _b, _c, _d } = this - const components = this.space === 'rgb' - ? { r: _a, g: _b, b: _c } - : this.space === 'xyz' + const components = + this.space === 'rgb' + ? { r: _a, g: _b, b: _c } + : this.space === 'xyz' ? { x: _a, y: _b, z: _c } : this.space === 'hsl' - ? { h: _a, s: _b, l: _c } - : this.space === 'lab' - ? { l: _a, a: _b, b: _c } - : this.space === 'lch' - ? { l: _a, c: _b, h: _c } - : this.space === 'cmyk' - ? { c: _a, m: _b, y: _c, k: _d } - : {} + ? { h: _a, s: _b, l: _c } + : this.space === 'lab' + ? { l: _a, a: _b, b: _c } + : this.space === 'lch' + ? { l: _a, c: _b, h: _c } + : this.space === 'cmyk' + ? { c: _a, m: _b, y: _c, k: _d } + : {} Object.assign(this, components) } - lab () { + lab() { // Get the xyz color const { x, y, z } = this.xyz() // Get the lab components - const l = (116 * y) - 16 + const l = 116 * y - 16 const a = 500 * (x - y) const b = 200 * (y - z) @@ -291,14 +278,13 @@ export default class Color { return color } - lch () { - + lch() { // Get the lab color directly const { l, a, b } = this.lab() // Get the chromaticity and the hue using polar coordinates const c = Math.sqrt(a ** 2 + b ** 2) - let h = 180 * Math.atan2(b, a) / Math.PI + let h = (180 * Math.atan2(b, a)) / Math.PI if (h < 0) { h *= -1 h = 360 - h @@ -312,7 +298,7 @@ export default class Color { Conversion Methods */ - rgb () { + rgb() { if (this.space === 'rgb') { return this } else if (cieSpace(this.space)) { @@ -337,22 +323,22 @@ export default class Color { const ct = 16 / 116 const mx = 0.008856 const nm = 7.787 - x = 0.95047 * ((xL ** 3 > mx) ? xL ** 3 : (xL - ct) / nm) - y = 1.00000 * ((yL ** 3 > mx) ? yL ** 3 : (yL - ct) / nm) - z = 1.08883 * ((zL ** 3 > mx) ? zL ** 3 : (zL - ct) / nm) + x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm) + y = 1.0 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm) + z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm) } // Convert xyz to unbounded rgb values const rU = x * 3.2406 + y * -1.5372 + z * -0.4986 const gU = x * -0.9689 + y * 1.8758 + z * 0.0415 - const bU = x * 0.0557 + y * -0.2040 + z * 1.0570 + const bU = x * 0.0557 + y * -0.204 + z * 1.057 // Convert the values to true rgb values const pow = Math.pow const bd = 0.0031308 - const r = (rU > bd) ? (1.055 * pow(rU, 1 / 2.4) - 0.055) : 12.92 * rU - const g = (gU > bd) ? (1.055 * pow(gU, 1 / 2.4) - 0.055) : 12.92 * gU - const b = (bU > bd) ? (1.055 * pow(bU, 1 / 2.4) - 0.055) : 12.92 * bU + const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU + const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU + const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU // Make and return the color const color = new Color(255 * r, 255 * g, 255 * b) @@ -402,46 +388,45 @@ export default class Color { } } - toArray () { + toArray() { const { _a, _b, _c, _d, space } = this - return [ _a, _b, _c, _d, space ] + return [_a, _b, _c, _d, space] } - toHex () { - const [ r, g, b ] = this._clamped().map(componentHex) + toHex() { + const [r, g, b] = this._clamped().map(componentHex) return `#${r}${g}${b}` } - toRgb () { - const [ rV, gV, bV ] = this._clamped() + toRgb() { + const [rV, gV, bV] = this._clamped() const string = `rgb(${rV},${gV},${bV})` return string } - toString () { + toString() { return this.toHex() } - xyz () { - + xyz() { // Normalise the red, green and blue values const { _a: r255, _b: g255, _c: b255 } = this.rgb() - const [ r, g, b ] = [ r255, g255, b255 ].map(v => v / 255) + const [r, g, b] = [r255, g255, b255].map((v) => v / 255) // Convert to the lab rgb space - const rL = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92 - const gL = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92 - const bL = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92 + const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92 + const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92 + const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92 // Convert to the xyz color space without bounding the values const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047 - const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.00000 + const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.0 const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883 // Get the proper xyz values by applying the bounding - const x = (xU > 0.008856) ? Math.pow(xU, 1 / 3) : (7.787 * xU) + 16 / 116 - const y = (yU > 0.008856) ? Math.pow(yU, 1 / 3) : (7.787 * yU) + 16 / 116 - const z = (zU > 0.008856) ? Math.pow(zU, 1 / 3) : (7.787 * zU) + 16 / 116 + const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116 + const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116 + const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116 // Make and return the color const color = new Color(x, y, z, 'xyz') @@ -452,15 +437,14 @@ export default class Color { Input and Output methods */ - _clamped () { + _clamped() { const { _a, _b, _c } = this.rgb() const { max, min, round } = Math - const format = v => max(0, min(round(v), 255)) - return [ _a, _b, _c ].map(format) + const format = (v) => max(0, min(round(v), 255)) + return [_a, _b, _c].map(format) } /* Constructing colors */ - } diff --git a/src/types/EventTarget.js b/src/types/EventTarget.js index 58f5d5c..de13a5f 100644 --- a/src/types/EventTarget.js +++ b/src/types/EventTarget.js @@ -3,13 +3,13 @@ import { register } from '../utils/adopter.js' import Base from './Base.js' export default class EventTarget extends Base { - addEventListener () {} + addEventListener() {} - dispatch (event, data, options) { + dispatch(event, data, options) { return dispatch(this, event, data, options) } - dispatchEvent (event) { + dispatchEvent(event) { const bag = this.getEventHolder().events if (!bag) return true @@ -25,32 +25,32 @@ export default class EventTarget extends Base { } // Fire given event - fire (event, data, options) { + fire(event, data, options) { this.dispatch(event, data, options) return this } - getEventHolder () { + getEventHolder() { return this } - getEventTarget () { + getEventTarget() { return this } // Unbind event from listener - off (event, listener, options) { + off(event, listener, options) { off(this, event, listener, options) return this } // Bind given event to listener - on (event, listener, binding, options) { + on(event, listener, binding, options) { on(this, event, listener, binding, options) return this } - removeEventListener () {} + removeEventListener() {} } register(EventTarget, 'EventTarget') diff --git a/src/types/List.js b/src/types/List.js index 197a155..bdeb766 100644 --- a/src/types/List.js +++ b/src/types/List.js @@ -2,7 +2,7 @@ import { extend } from '../utils/adopter.js' // import { subClassArray } from './ArrayPolyfill.js' class List extends Array { - constructor (arr = [], ...args) { + constructor(arr = [], ...args) { super(arr, ...args) if (typeof arr === 'number') return this this.length = 0 @@ -19,25 +19,25 @@ class List extends Array { export default List -extend([ List ], { - each (fnOrMethodName, ...args) { +extend([List], { + each(fnOrMethodName, ...args) { if (typeof fnOrMethodName === 'function') { return this.map((el, i, arr) => { return fnOrMethodName.call(el, el, i, arr) }) } else { - return this.map(el => { + return this.map((el) => { return el[fnOrMethodName](...args) }) } }, - toArray () { + toArray() { return Array.prototype.concat.apply([], this) } }) -const reserved = [ 'toArray', 'constructor', 'each' ] +const reserved = ['toArray', 'constructor', 'each'] List.extend = function (methods) { methods = methods.reduce((obj, name) => { @@ -54,5 +54,5 @@ List.extend = function (methods) { return obj }, {}) - extend([ List ], methods) + extend([List], methods) } diff --git a/src/types/Matrix.js b/src/types/Matrix.js index c329df4..760f002 100644 --- a/src/types/Matrix.js +++ b/src/types/Matrix.js @@ -4,87 +4,116 @@ import { register } from '../utils/adopter.js' import Element from '../elements/Element.js' import Point from './Point.js' -function closeEnough (a, b, threshold) { +function closeEnough(a, b, threshold) { return Math.abs(b - a) < (threshold || 1e-6) } export default class Matrix { - constructor (...args) { + constructor(...args) { this.init(...args) } - static formatTransforms (o) { + static formatTransforms(o) { // Get all of the parameters required to form the matrix const flipBoth = o.flip === 'both' || o.flip === true const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1 const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1 - const skewX = o.skew && o.skew.length - ? o.skew[0] - : isFinite(o.skew) + const skewX = + o.skew && o.skew.length + ? o.skew[0] + : isFinite(o.skew) ? o.skew : isFinite(o.skewX) - ? o.skewX - : 0 - const skewY = o.skew && o.skew.length - ? o.skew[1] - : isFinite(o.skew) + ? o.skewX + : 0 + const skewY = + o.skew && o.skew.length + ? o.skew[1] + : isFinite(o.skew) ? o.skew : isFinite(o.skewY) - ? o.skewY - : 0 - const scaleX = o.scale && o.scale.length - ? o.scale[0] * flipX - : isFinite(o.scale) + ? o.skewY + : 0 + const scaleX = + o.scale && o.scale.length + ? o.scale[0] * flipX + : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) - ? o.scaleX * flipX - : flipX - const scaleY = o.scale && o.scale.length - ? o.scale[1] * flipY - : isFinite(o.scale) + ? o.scaleX * flipX + : flipX + const scaleY = + o.scale && o.scale.length + ? o.scale[1] * flipY + : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) - ? o.scaleY * flipY - : flipY + ? o.scaleY * flipY + : flipY const shear = o.shear || 0 const theta = o.rotate || o.theta || 0 - const origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY) + const origin = new Point( + o.origin || o.around || o.ox || o.originX, + o.oy || o.originY + ) const ox = origin.x const oy = origin.y // We need Point to be invalid if nothing was passed because we cannot default to 0 here. That is why NaN - const position = new Point(o.position || o.px || o.positionX || NaN, o.py || o.positionY || NaN) + const position = new Point( + o.position || o.px || o.positionX || NaN, + o.py || o.positionY || NaN + ) const px = position.x const py = position.y - const translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY) + const translate = new Point( + o.translate || o.tx || o.translateX, + o.ty || o.translateY + ) const tx = translate.x const ty = translate.y - const relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY) + const relative = new Point( + o.relative || o.rx || o.relativeX, + o.ry || o.relativeY + ) const rx = relative.x const ry = relative.y // Populate all of the values return { - scaleX, scaleY, skewX, skewY, shear, theta, rx, ry, tx, ty, ox, oy, px, py + scaleX, + scaleY, + skewX, + skewY, + shear, + theta, + rx, + ry, + tx, + ty, + ox, + oy, + px, + py } } - static fromArray (a) { + static fromArray(a) { return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] } } - static isMatrixLike (o) { + static isMatrixLike(o) { return ( - o.a != null - || o.b != null - || o.c != null - || o.d != null - || o.e != null - || o.f != null + o.a != null || + o.b != null || + o.c != null || + o.d != null || + o.e != null || + o.f != null ) } // left matrix, right matrix, target matrix which is overwritten - static matrixMultiply (l, r, o) { + static matrixMultiply(l, r, o) { // Work out the product directly const a = l.a * r.a + l.c * r.b const b = l.b * r.a + l.d * r.b @@ -104,24 +133,24 @@ export default class Matrix { return o } - around (cx, cy, matrix) { + around(cx, cy, matrix) { return this.clone().aroundO(cx, cy, matrix) } // Transform around a center point - aroundO (cx, cy, matrix) { + aroundO(cx, cy, matrix) { const dx = cx || 0 const dy = cy || 0 return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy) } // Clones this matrix - clone () { + clone() { return new Matrix(this) } // Decomposes this matrix into its affine parameters - decompose (cx = 0, cy = 0) { + decompose(cx = 0, cy = 0) { // Get the parameters from the matrix const a = this.a const b = this.b @@ -138,14 +167,14 @@ export default class Matrix { // and the rotation of the resulting matrix const sx = ccw * Math.sqrt(a * a + b * b) const thetaRad = Math.atan2(ccw * b, ccw * a) - const theta = 180 / Math.PI * thetaRad + const theta = (180 / Math.PI) * thetaRad const ct = Math.cos(thetaRad) const st = Math.sin(thetaRad) // We can then solve the y basis vector simultaneously to get the other // two affine parameters directly from these parameters const lam = (a * c + b * d) / determinant - const sy = ((c * sx) / (lam * a - b)) || ((d * sx) / (lam * b + a)) + const sy = (c * sx) / (lam * a - b) || (d * sx) / (lam * b + a) // Use the translations const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy) @@ -174,45 +203,51 @@ export default class Matrix { } // Check if two matrices are equal - equals (other) { + equals(other) { if (other === this) return true const comp = new Matrix(other) - return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) - && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) - && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f) + return ( + closeEnough(this.a, comp.a) && + closeEnough(this.b, comp.b) && + closeEnough(this.c, comp.c) && + closeEnough(this.d, comp.d) && + closeEnough(this.e, comp.e) && + closeEnough(this.f, comp.f) + ) } // Flip matrix on x or y, at a given offset - flip (axis, around) { + flip(axis, around) { return this.clone().flipO(axis, around) } - flipO (axis, around) { + flipO(axis, around) { return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' - ? this.scaleO(1, -1, 0, around) - : this.scaleO(-1, -1, axis, around || axis) // Define an x, y flip point + ? this.scaleO(1, -1, 0, around) + : this.scaleO(-1, -1, axis, around || axis) // Define an x, y flip point } // Initialize - init (source) { - const base = Matrix.fromArray([ 1, 0, 0, 1, 0, 0 ]) + init(source) { + const base = Matrix.fromArray([1, 0, 0, 1, 0, 0]) // ensure source as object - source = source instanceof Element - ? source.matrixify() - : typeof source === 'string' + source = + source instanceof Element + ? source.matrixify() + : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) - ? Matrix.fromArray(source) - : (typeof source === 'object' && Matrix.isMatrixLike(source)) - ? source - : (typeof source === 'object') - ? new Matrix().transform(source) - : arguments.length === 6 - ? Matrix.fromArray([].slice.call(arguments)) - : base + ? Matrix.fromArray(source) + : typeof source === 'object' && Matrix.isMatrixLike(source) + ? source + : typeof source === 'object' + ? new Matrix().transform(source) + : arguments.length === 6 + ? Matrix.fromArray([].slice.call(arguments)) + : base // Merge the source matrix with the base matrix this.a = source.a != null ? source.a : base.a @@ -225,12 +260,12 @@ export default class Matrix { return this } - inverse () { + inverse() { return this.clone().inverseO() } // Inverses matrix - inverseO () { + inverseO() { // Get the current parameters out of the matrix const a = this.a const b = this.b @@ -264,40 +299,36 @@ export default class Matrix { return this } - lmultiply (matrix) { + lmultiply(matrix) { return this.clone().lmultiplyO(matrix) } - lmultiplyO (matrix) { + lmultiplyO(matrix) { const r = this - const l = matrix instanceof Matrix - ? matrix - : new Matrix(matrix) + const l = matrix instanceof Matrix ? matrix : new Matrix(matrix) return Matrix.matrixMultiply(l, r, this) } // Left multiplies by the given matrix - multiply (matrix) { + multiply(matrix) { return this.clone().multiplyO(matrix) } - multiplyO (matrix) { + multiplyO(matrix) { // Get the matrices const l = this - const r = matrix instanceof Matrix - ? matrix - : new Matrix(matrix) + const r = matrix instanceof Matrix ? matrix : new Matrix(matrix) return Matrix.matrixMultiply(l, r, this) } // Rotate matrix - rotate (r, cx, cy) { + rotate(r, cx, cy) { return this.clone().rotateO(r, cx, cy) } - rotateO (r, cx = 0, cy = 0) { + rotateO(r, cx = 0, cy = 0) { // Convert degrees to radians r = radians(r) @@ -317,11 +348,11 @@ export default class Matrix { } // Scale matrix - scale (x, y, cx, cy) { + scale() { return this.clone().scaleO(...arguments) } - scaleO (x, y = x, cx = 0, cy = 0) { + scaleO(x, y = x, cx = 0, cy = 0) { // Support uniform scaling if (arguments.length === 3) { cy = cx @@ -342,11 +373,12 @@ export default class Matrix { } // Shear matrix - shear (a, cx, cy) { + shear(a, cx, cy) { return this.clone().shearO(a, cx, cy) } - shearO (lx, cx = 0, cy = 0) { + // eslint-disable-next-line no-unused-vars + shearO(lx, cx = 0, cy = 0) { const { a, b, c, d, e, f } = this this.a = a + b * lx @@ -357,11 +389,11 @@ export default class Matrix { } // Skew Matrix - skew (x, y, cx, cy) { + skew() { return this.clone().skewO(...arguments) } - skewO (x, y = x, cx = 0, cy = 0) { + skewO(x, y = x, cx = 0, cy = 0) { // support uniformal skew if (arguments.length === 3) { cy = cx @@ -389,26 +421,40 @@ export default class Matrix { } // SkewX - skewX (x, cx, cy) { + skewX(x, cx, cy) { return this.skew(x, 0, cx, cy) } // SkewY - skewY (y, cx, cy) { + skewY(y, cx, cy) { return this.skew(0, y, cx, cy) } - toArray () { - return [ this.a, this.b, this.c, this.d, this.e, this.f ] + toArray() { + return [this.a, this.b, this.c, this.d, this.e, this.f] } // Convert matrix to string - toString () { - return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')' + toString() { + return ( + 'matrix(' + + this.a + + ',' + + this.b + + ',' + + this.c + + ',' + + this.d + + ',' + + this.e + + ',' + + this.f + + ')' + ) } // Transform a matrix into another matrix by manipulating the space - transform (o) { + transform(o) { // Check if o is a matrix and then left multiply it directly if (Matrix.isMatrixLike(o)) { const matrix = new Matrix(o) @@ -447,17 +493,17 @@ export default class Matrix { } // Translate matrix - translate (x, y) { + translate(x, y) { return this.clone().translateO(x, y) } - translateO (x, y) { + translateO(x, y) { this.e += x || 0 this.f += y || 0 return this } - valueOf () { + valueOf() { return { a: this.a, b: this.b, @@ -467,14 +513,13 @@ export default class Matrix { f: this.f } } - } -export function ctm () { +export function ctm() { return new Matrix(this.node.getCTM()) } -export function screenCTM () { +export function screenCTM() { /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 This is needed because FF does not return the transformation matrix for the inner coordinate system when getScreenCTM() is called on nested svgs. diff --git a/src/types/PathArray.js b/src/types/PathArray.js index 8a37ac4..9e59ed7 100644 --- a/src/types/PathArray.js +++ b/src/types/PathArray.js @@ -3,7 +3,7 @@ import parser from '../modules/core/parser.js' import Box from './Box.js' import { pathParser } from '../utils/pathParser.js' -function arrayToString (a) { +function arrayToString(a) { let s = '' for (let i = 0, il = a.length; i < il; i++) { s += a[i][0] @@ -42,13 +42,13 @@ function arrayToString (a) { export default class PathArray extends SVGArray { // Get bounding box of path - bbox () { + bbox() { parser().path.setAttribute('d', this.toString()) return new Box(parser.nodes.path.getBBox()) } // Move path string - move (x, y) { + move(x, y) { // get bounding box of current situation const box = this.bbox() @@ -89,7 +89,7 @@ export default class PathArray extends SVGArray { } // Absolutize and parse path to array - parse (d = 'M0 0') { + parse(d = 'M0 0') { if (Array.isArray(d)) { d = Array.prototype.concat.apply([], d).toString() } @@ -98,7 +98,7 @@ export default class PathArray extends SVGArray { } // Resize path string - size (width, height) { + size(width, height) { // get bounding box of current situation const box = this.bbox() let i, l @@ -144,8 +144,7 @@ export default class PathArray extends SVGArray { } // Convert array to string - toString () { + toString() { return arrayToString(this) } - } diff --git a/src/types/Point.js b/src/types/Point.js index 76fd985..5d44733 100644 --- a/src/types/Point.js +++ b/src/types/Point.js @@ -2,24 +2,24 @@ import Matrix from './Matrix.js' export default class Point { // Initialize - constructor (...args) { + constructor(...args) { this.init(...args) } // Clone point - clone () { + clone() { return new Point(this) } - init (x, y) { + init(x, y) { const base = { x: 0, y: 0 } // ensure source as object const source = Array.isArray(x) ? { x: x[0], y: x[1] } : typeof x === 'object' - ? { x: x.x, y: x.y } - : { x: x, y: y } + ? { x: x.x, y: x.y } + : { x: x, y: y } // merge source this.x = source.x == null ? base.x : source.x @@ -28,16 +28,16 @@ export default class Point { return this } - toArray () { - return [ this.x, this.y ] + toArray() { + return [this.x, this.y] } - transform (m) { + transform(m) { return this.clone().transformO(m) } // Transform point with matrix - transformO (m) { + transformO(m) { if (!Matrix.isMatrixLike(m)) { m = new Matrix(m) } @@ -50,9 +50,8 @@ export default class Point { return this } - } -export function point (x, y) { +export function point(x, y) { return new Point(x, y).transformO(this.screenCTM().inverseO()) } diff --git a/src/types/PointArray.js b/src/types/PointArray.js index 69d0cd6..f72c2bc 100644 --- a/src/types/PointArray.js +++ b/src/types/PointArray.js @@ -5,7 +5,7 @@ import Matrix from './Matrix.js' export default class PointArray extends SVGArray { // Get bounding box of points - bbox () { + bbox() { let maxX = -Infinity let maxY = -Infinity let minX = Infinity @@ -20,7 +20,7 @@ export default class PointArray extends SVGArray { } // Move point string - move (x, y) { + move(x, y) { const box = this.bbox() // get relative offset @@ -30,7 +30,7 @@ export default class PointArray extends SVGArray { // move every point if (!isNaN(x) && !isNaN(y)) { for (let i = this.length - 1; i >= 0; i--) { - this[i] = [ this[i][0] + x, this[i][1] + y ] + this[i] = [this[i][0] + x, this[i][1] + y] } } @@ -38,13 +38,14 @@ export default class PointArray extends SVGArray { } // Parse point string and flat array - parse (array = [ 0, 0 ]) { + parse(array = [0, 0]) { const points = [] // if it is an array, we flatten it and therefore clone it to 1 depths if (array instanceof Array) { array = Array.prototype.concat.apply([], array) - } else { // Else, it is considered as a string + } else { + // Else, it is considered as a string // parse points array = array.trim().split(delimiter).map(parseFloat) } @@ -55,28 +56,30 @@ export default class PointArray extends SVGArray { // wrap points in two-tuples for (let i = 0, len = array.length; i < len; i = i + 2) { - points.push([ array[i], array[i + 1] ]) + points.push([array[i], array[i + 1]]) } return points } // Resize poly string - size (width, height) { + size(width, height) { let i const box = this.bbox() // recalculate position of all points according to new size for (i = this.length - 1; i >= 0; i--) { - if (box.width) this[i][0] = ((this[i][0] - box.x) * width) / box.width + box.x - if (box.height) this[i][1] = ((this[i][1] - box.y) * height) / box.height + box.y + if (box.width) + this[i][0] = ((this[i][0] - box.x) * width) / box.width + box.x + if (box.height) + this[i][1] = ((this[i][1] - box.y) * height) / box.height + box.y } return this } // Convert array to line object - toLine () { + toLine() { return { x1: this[0][0], y1: this[0][1], @@ -86,7 +89,7 @@ export default class PointArray extends SVGArray { } // Convert array to string - toString () { + toString() { const array = [] // convert to a poly point string for (let i = 0, il = this.length; i < il; i++) { @@ -96,24 +99,23 @@ export default class PointArray extends SVGArray { return array.join(' ') } - transform (m) { + transform(m) { return this.clone().transformO(m) } // transform points with matrix (similar to Point.transform) - transformO (m) { + transformO(m) { if (!Matrix.isMatrixLike(m)) { m = new Matrix(m) } - for (let i = this.length; i--;) { + for (let i = this.length; i--; ) { // Perform the matrix multiplication - const [ x, y ] = this[i] + const [x, y] = this[i] this[i][0] = m.a * x + m.c * y + m.e this[i][1] = m.b * x + m.d * y + m.f } return this } - } diff --git a/src/types/SVGArray.js b/src/types/SVGArray.js index 6ce024a..5826406 100644 --- a/src/types/SVGArray.js +++ b/src/types/SVGArray.js @@ -1,16 +1,16 @@ import { delimiter } from '../modules/core/regex.js' export default class SVGArray extends Array { - constructor (...args) { + constructor(...args) { super(...args) this.init(...args) } - clone () { + clone() { return new this.constructor(this) } - init (arr) { + init(arr) { // This catches the case, that native map tries to create an array with new Array(1) if (typeof arr === 'number') return this this.length = 0 @@ -19,30 +19,29 @@ export default class SVGArray extends Array { } // Parse whitespace separated string - parse (array = []) { + parse(array = []) { // If already is an array, no need to parse it if (array instanceof Array) return array return array.trim().split(delimiter).map(parseFloat) } - toArray () { + toArray() { return Array.prototype.concat.apply([], this) } - toSet () { + toSet() { return new Set(this) } - toString () { + toString() { return this.join(' ') } // Flattens the array if needed - valueOf () { + valueOf() { const ret = [] ret.push(...this) return ret } - } diff --git a/src/types/SVGNumber.js b/src/types/SVGNumber.js index 25c87c1..5945341 100644 --- a/src/types/SVGNumber.js +++ b/src/types/SVGNumber.js @@ -3,21 +3,21 @@ import { numberAndUnit } from '../modules/core/regex.js' // Module for unit conversions export default class SVGNumber { // Initialize - constructor (...args) { + constructor(...args) { this.init(...args) } - convert (unit) { + convert(unit) { return new SVGNumber(this.value, unit) } // Divide number - divide (number) { + divide(number) { number = new SVGNumber(number) return new SVGNumber(this / number, this.unit || number.unit) } - init (value, unit) { + init(value, unit) { unit = Array.isArray(value) ? value[1] : unit value = Array.isArray(value) ? value[0] : value @@ -28,7 +28,13 @@ export default class SVGNumber { // parse value if (typeof value === 'number') { // ensure a valid numeric value - this.value = isNaN(value) ? 0 : !isFinite(value) ? (value < 0 ? -3.4e+38 : +3.4e+38) : value + this.value = isNaN(value) + ? 0 + : !isFinite(value) + ? value < 0 + ? -3.4e38 + : +3.4e38 + : value } else if (typeof value === 'string') { unit = value.match(numberAndUnit) @@ -57,42 +63,42 @@ export default class SVGNumber { } // Subtract number - minus (number) { + minus(number) { number = new SVGNumber(number) return new SVGNumber(this - number, this.unit || number.unit) } // Add number - plus (number) { + plus(number) { number = new SVGNumber(number) return new SVGNumber(this + number, this.unit || number.unit) } // Multiply number - times (number) { + times(number) { number = new SVGNumber(number) return new SVGNumber(this * number, this.unit || number.unit) } - toArray () { - return [ this.value, this.unit ] + toArray() { + return [this.value, this.unit] } - toJSON () { + toJSON() { return this.toString() } - toString () { - return (this.unit === '%' - ? ~~(this.value * 1e8) / 1e6 - : this.unit === 's' + toString() { + return ( + (this.unit === '%' + ? ~~(this.value * 1e8) / 1e6 + : this.unit === 's' ? this.value / 1e3 - : this.value - ) + this.unit + : this.value) + this.unit + ) } - valueOf () { + valueOf() { return this.value } - } diff --git a/src/utils/adopter.js b/src/utils/adopter.js index 7e1c85e..48814ec 100644 --- a/src/utils/adopter.js +++ b/src/utils/adopter.js @@ -8,12 +8,12 @@ const elements = {} export const root = '___SYMBOL___ROOT___' // Method for element creation -export function create (name, ns = svg) { +export function create(name, ns = svg) { // create element return globals.document.createElementNS(ns, name) } -export function makeInstance (element, isHTML = false) { +export function makeInstance(element, isHTML = false) { if (element instanceof Base) return element if (typeof element === 'object') { @@ -41,12 +41,16 @@ export function makeInstance (element, isHTML = false) { return element } -export function nodeOrNew (name, node) { - return (node && node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node) ? node : create(name) +export function nodeOrNew(name, node) { + return node && + node.ownerDocument && + node instanceof node.ownerDocument.defaultView.Node + ? node + : create(name) } // Adopt existing svg elements -export function adopt (node) { +export function adopt(node) { // check for presence of node if (!node) return null @@ -64,7 +68,7 @@ export function adopt (node) { if (className === 'LinearGradient' || className === 'RadialGradient') { className = 'Gradient' - // Fallback to Dom if element is not known + // Fallback to Dom if element is not known } else if (!elements[className]) { className = 'Dom' } @@ -74,11 +78,11 @@ export function adopt (node) { let adopter = adopt -export function mockAdopt (mock = adopt) { +export function mockAdopt(mock = adopt) { adopter = mock } -export function register (element, name = element.name, asRoot = false) { +export function register(element, name = element.name, asRoot = false) { elements[name] = element if (asRoot) elements[root] = element @@ -87,7 +91,7 @@ export function register (element, name = element.name, asRoot = false) { return element } -export function getClass (name) { +export function getClass(name) { return elements[name] } @@ -95,12 +99,12 @@ export function getClass (name) { let did = 1000 // Get next named element id -export function eid (name) { - return 'Svgjs' + capitalize(name) + (did++) +export function eid(name) { + return 'Svgjs' + capitalize(name) + did++ } // Deep new id assignment -export function assignNewId (node) { +export function assignNewId(node) { // do the same for SVG child nodes as well for (let i = node.children.length - 1; i >= 0; i--) { assignNewId(node.children[i]) @@ -115,10 +119,10 @@ export function assignNewId (node) { } // Method for extending objects -export function extend (modules, methods) { +export function extend(modules, methods) { let key, i - modules = Array.isArray(modules) ? modules : [ modules ] + modules = Array.isArray(modules) ? modules : [modules] for (i = modules.length - 1; i >= 0; i--) { for (key in methods) { @@ -127,7 +131,7 @@ export function extend (modules, methods) { } } -export function wrapWithAttrCheck (fn) { +export function wrapWithAttrCheck(fn) { return function (...args) { const o = args[args.length - 1] diff --git a/src/utils/methods.js b/src/utils/methods.js index 45525e3..9f61f91 100644 --- a/src/utils/methods.js +++ b/src/utils/methods.js @@ -1,7 +1,7 @@ const methods = {} const names = [] -export function registerMethods (name, m) { +export function registerMethods(name, m) { if (Array.isArray(name)) { for (const _name of name) { registerMethods(_name, m) @@ -20,14 +20,14 @@ export function registerMethods (name, m) { methods[name] = Object.assign(methods[name] || {}, m) } -export function getMethodsFor (name) { +export function getMethodsFor(name) { return methods[name] || {} } -export function getMethodNames () { - return [ ...new Set(names) ] +export function getMethodNames() { + return [...new Set(names)] } -export function addMethodNames (_names) { +export function addMethodNames(_names) { names.push(..._names) } diff --git a/src/utils/pathParser.js b/src/utils/pathParser.js index 1d0ee86..6d3f4e2 100644 --- a/src/utils/pathParser.js +++ b/src/utils/pathParser.js @@ -1,57 +1,68 @@ import { isPathLetter } from '../modules/core/regex.js' import Point from '../types/Point.js' -const segmentParameters = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 } +const segmentParameters = { + M: 2, + L: 2, + H: 1, + V: 1, + C: 6, + S: 4, + Q: 4, + T: 2, + A: 7, + Z: 0 +} const pathHandlers = { M: function (c, p, p0) { p.x = p0.x = c[0] p.y = p0.y = c[1] - return [ 'M', p.x, p.y ] + return ['M', p.x, p.y] }, L: function (c, p) { p.x = c[0] p.y = c[1] - return [ 'L', c[0], c[1] ] + return ['L', c[0], c[1]] }, H: function (c, p) { p.x = c[0] - return [ 'H', c[0] ] + return ['H', c[0]] }, V: function (c, p) { p.y = c[0] - return [ 'V', c[0] ] + return ['V', c[0]] }, C: function (c, p) { p.x = c[4] p.y = c[5] - return [ 'C', c[0], c[1], c[2], c[3], c[4], c[5] ] + return ['C', c[0], c[1], c[2], c[3], c[4], c[5]] }, S: function (c, p) { p.x = c[2] p.y = c[3] - return [ 'S', c[0], c[1], c[2], c[3] ] + return ['S', c[0], c[1], c[2], c[3]] }, Q: function (c, p) { p.x = c[2] p.y = c[3] - return [ 'Q', c[0], c[1], c[2], c[3] ] + return ['Q', c[0], c[1], c[2], c[3]] }, T: function (c, p) { p.x = c[0] p.y = c[1] - return [ 'T', c[0], c[1] ] + return ['T', c[0], c[1]] }, Z: function (c, p, p0) { p.x = p0.x p.y = p0.y - return [ 'Z' ] + return ['Z'] }, A: function (c, p) { p.x = c[5] p.y = c[6] - return [ 'A', c[0], c[1], c[2], c[3], c[4], c[5], c[6] ] + return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]] } } @@ -76,26 +87,30 @@ for (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) { })(mlhvqtcsaz[i].toUpperCase()) } -function makeAbsolut (parser) { +function makeAbsolut(parser) { const command = parser.segment[0] return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0) } -function segmentComplete (parser) { - return parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()] +function segmentComplete(parser) { + return ( + parser.segment.length && + parser.segment.length - 1 === + segmentParameters[parser.segment[0].toUpperCase()] + ) } -function startNewSegment (parser, token) { +function startNewSegment(parser, token) { parser.inNumber && finalizeNumber(parser, false) const pathLetter = isPathLetter.test(token) if (pathLetter) { - parser.segment = [ token ] + parser.segment = [token] } else { const lastCommand = parser.lastCommand const small = lastCommand.toLowerCase() const isSmall = lastCommand === small - parser.segment = [ small === 'm' ? (isSmall ? 'l' : 'L') : lastCommand ] + parser.segment = [small === 'm' ? (isSmall ? 'l' : 'L') : lastCommand] } parser.inSegment = true @@ -104,7 +119,7 @@ function startNewSegment (parser, token) { return pathLetter } -function finalizeNumber (parser, inNumber) { +function finalizeNumber(parser, inNumber) { if (!parser.inNumber) throw new Error('Parser Error') parser.number && parser.segment.push(parseFloat(parser.number)) parser.inNumber = inNumber @@ -117,7 +132,7 @@ function finalizeNumber (parser, inNumber) { } } -function finalizeSegment (parser) { +function finalizeSegment(parser) { parser.inSegment = false if (parser.absolute) { parser.segment = makeAbsolut(parser) @@ -125,7 +140,7 @@ function finalizeSegment (parser) { parser.segments.push(parser.segment) } -function isArcFlag (parser) { +function isArcFlag(parser) { if (!parser.segment.length) return false const isArc = parser.segment[0].toUpperCase() === 'A' const length = parser.segment.length @@ -133,12 +148,11 @@ function isArcFlag (parser) { return isArc && (length === 4 || length === 5) } -function isExponential (parser) { +function isExponential(parser) { return parser.lastToken.toUpperCase() === 'E' } -export function pathParser (d, toAbsolute = true) { - +export function pathParser(d, toAbsolute = true) { let index = 0 let token = '' const parser = { @@ -155,7 +169,7 @@ export function pathParser (d, toAbsolute = true) { p: new Point() } - while ((parser.lastToken = token, token = d.charAt(index++))) { + while (((parser.lastToken = token), (token = d.charAt(index++)))) { if (!parser.inSegment) { if (startNewSegment(parser, token)) { continue @@ -175,7 +189,6 @@ export function pathParser (d, toAbsolute = true) { } if (!isNaN(parseInt(token))) { - if (parser.number === '0' || isArcFlag(parser)) { parser.inNumber = true parser.number = token @@ -233,5 +246,4 @@ export function pathParser (d, toAbsolute = true) { } return parser.segments - } diff --git a/src/utils/utils.js b/src/utils/utils.js index 7d08e22..c6e6d3b 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1,5 +1,5 @@ // Map function -export function map (array, block) { +export function map(array, block) { let i const il = array.length const result = [] @@ -12,7 +12,7 @@ export function map (array, block) { } // Filter function -export function filter (array, block) { +export function filter(array, block) { let i const il = array.length const result = [] @@ -27,43 +27,43 @@ export function filter (array, block) { } // Degrees to radians -export function radians (d) { - return d % 360 * Math.PI / 180 +export function radians(d) { + return ((d % 360) * Math.PI) / 180 } // Radians to degrees -export function degrees (r) { - return r * 180 / Math.PI % 360 +export function degrees(r) { + return ((r * 180) / Math.PI) % 360 } // Convert dash-separated-string to camelCase -export function camelCase (s) { +export function camelCase(s) { return s.toLowerCase().replace(/-(.)/g, function (m, g) { return g.toUpperCase() }) } // Convert camel cased string to dash separated -export function unCamelCase (s) { +export function unCamelCase(s) { return s.replace(/([A-Z])/g, function (m, g) { return '-' + g.toLowerCase() }) } // Capitalize first letter of a string -export function capitalize (s) { +export function capitalize(s) { return s.charAt(0).toUpperCase() + s.slice(1) } // Calculate proportional width and height values when necessary -export function proportionalSize (element, width, height, box) { +export function proportionalSize(element, width, height, box) { if (width == null || height == null) { box = box || element.bbox() if (width == null) { - width = box.width / box.height * height + width = (box.width / box.height) * height } else if (height == null) { - height = box.height / box.width * width + height = (box.height / box.width) * width } } @@ -77,28 +77,20 @@ export function proportionalSize (element, width, height, box) { * This function adds support for string origins. * It searches for an origin in o.origin o.ox and o.originX. * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50 -**/ -export function getOrigin (o, element) { + **/ +export function getOrigin(o, element) { const origin = o.origin // First check if origin is in ox or originX - let ox = o.ox != null - ? o.ox - : o.originX != null - ? o.originX - : 'center' - let oy = o.oy != null - ? o.oy - : o.originY != null - ? o.originY - : 'center' + let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center' + let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center' // Then check if origin was used and overwrite in that case if (origin != null) { - [ ox, oy ] = Array.isArray(origin) + ;[ox, oy] = Array.isArray(origin) ? origin : typeof origin === 'object' - ? [ origin.x, origin.y ] - : [ origin, origin ] + ? [origin.x, origin.y] + : [origin, origin] } // Make sure to only call bbox when actually needed @@ -112,19 +104,19 @@ export function getOrigin (o, element) { ox = ox.includes('left') ? x : ox.includes('right') - ? x + width - : x + width / 2 + ? x + width + : x + width / 2 } if (condY) { oy = oy.includes('top') ? y : oy.includes('bottom') - ? y + height - : y + height / 2 + ? y + height + : y + height / 2 } } // Return the origin as it is if it wasn't a string - return [ ox, oy ] + return [ox, oy] } diff --git a/src/utils/window.js b/src/utils/window.js index 626fde3..5009c77 100644 --- a/src/utils/window.js +++ b/src/utils/window.js @@ -3,30 +3,30 @@ export const globals = { document: typeof document === 'undefined' ? null : document } -export function registerWindow (win = null, doc = null) { +export function registerWindow(win = null, doc = null) { globals.window = win globals.document = doc } const save = {} -export function saveWindow () { +export function saveWindow() { save.window = globals.window save.document = globals.document } -export function restoreWindow () { +export function restoreWindow() { globals.window = save.window globals.document = save.document } -export function withWindow (win, fn) { +export function withWindow(win, fn) { saveWindow() registerWindow(win, win.document) fn(win, win.document) restoreWindow() } -export function getWindow () { +export function getWindow() { return globals.window } diff --git a/svg.js.d.ts b/svg.js.d.ts index a0c44c2..dc61bee 100644 --- a/svg.js.d.ts +++ b/svg.js.d.ts @@ -1,1694 +1,1893 @@ -// Type definitions for @svgdotjs version 3.x
-// Project: @svgdotjs/svg.js
-
-// trick to keep reference to Array build-in type
-declare class BuiltInArray<T> extends Array<T> { }
-
-// trick to have nice attribute list for CSS
-declare type CSSStyleName = Exclude<keyof CSSStyleDeclaration, "parentRule" | "length">
-
-declare module "@svgdotjs/svg.js" {
-
- function SVG(): Svg;
- function SVG(selector: QuerySelector): Element;
- function SVG<T>(el: T): SVGTypeMapping<T>
- function SVG(domElement: HTMLElement): Element;
-
- function eid(name: string): string;
- function get(id: string): Element;
-
- function create(name: string): any;
- function extend(parent: object, obj: object): void;
- function invent(config: object): any;
- function adopt(node: HTMLElement): Element;
- function prepare(element: HTMLElement): void;
- function getClass(name: string): Element;
-
- function on(el: Node | Window, events: string, cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
- function on(el: Node | Window, events: Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
-
- function off(el: Node | Window, events?: string, cb?: EventListener | number, options?: AddEventListenerOptions): void;
- function off(el: Node | Window, events?: Event[], cb?: EventListener | number, options?: AddEventListenerOptions): void;
-
- function dispatch(node: Node | Window, event: Event, data?: object, options?: object): Event
-
- function find(query: QuerySelector): List<Element>
- function findOne(query: QuerySelector): Element | null
-
- function getWindow(): Window;
- function registerWindow(win: Window, doc: Document): void;
- function restoreWindow(): void;
- function saveWindow(): void;
- function withWindow(win: Window, fn: (win: Window, doc: Document) => void): void;
-
- let utils: {
- map(array: any[], block: Function): any;
- filter(array: any[], block: Function): any;
- radians(d: number): number;
- degrees(r: number): number;
- camelCase(s: string): string;
- unCamelCase(s: string): string;
- capitalize(s: string): string;
- // proportionalSize
- // getOrigin
- }
-
- let defaults: {
- attrs: {
- 'fill-opacity': number;
- 'stroke-opacity': number;
- 'stroke-width': number;
- 'stroke-linejoin': string;
- 'stroke-linecap': string;
- 'fill': string;
- 'stroke': string;
- 'opacity': number;
- 'x': number;
- 'y': number;
- 'cx': number;
- 'cy': number;
- 'width': number;
- 'height': number;
- 'r': number;
- 'rx': number;
- 'ry': number;
- 'offset': number;
- 'stop-opacity': number;
- 'stop-color': string;
- 'font-size': number;
- 'font-family': string;
- 'text-anchor': string;
- },
- timeline: {
- duration: number;
- ease: string;
- delay: number;
- }
-
- }
-
- // let easing: {
- // '-'(pos: number): number;
- // '<>'(pos: number): number;
- // '>'(pos: number): number;
- // '<'(pos: number): number;
- // bezier(x1: number, y1: number, x2: number, y2: number): (t: number) => number;
- // steps(steps: number, stepPosition?: "jump-start"|"jump-end"|"jump-none"|"jump-both"|"start"|"end"): (t: number, beforeFlag?: boolean) => number;
- // }
-
- let regex: {
- delimiter: RegExp;
- dots: RegExp;
- hex: RegExp;
- hyphen: RegExp;
- isBlank: RegExp;
- isHex: RegExp;
- isImage: RegExp;
- isNumber: RegExp;
- isPathLetter: RegExp;
- isRgb: RegExp;
- numberAndUnit: RegExp;
- numbersWithDots: RegExp;
- pathLetters: RegExp;
- reference: RegExp;
- rgb: RegExp;
- transforms: RegExp;
- whitespace: RegExp;
- }
-
- let namespaces: {
- ns: string;
- xmlns: string;
- xlink: string;
- svgjs: string;
- }
-
- interface LinkedHTMLElement extends HTMLElement {
- instance: Element;
- }
-
- // ************ Standard object/option/properties declaration ************
-
- type AttrNumberValue = number | "auto";
-
- /**
- * The SVG core attributes are all the common attributes that can be specified on any SVG element.
- * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core
- */
- interface CoreAttr {
- id?: string
- lang?: string
- tabindex?: number
- "xml:lang"?: string
- }
-
- /**
- * The SVG styling attributes are all the attributes that can be specified on any SVG element to apply CSS styling effects.
- * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Styling
- */
- interface StylingAttr {
- /**
- * a valid HTML class name
- */
- class?: string
- /**
- * SVG css style string format. It all can be find here https://www.w3.org/TR/SVG/styling.html#StyleAttribute
- */
- style?: string
- }
-
- /**
- * A global attribute that can be use with any svg element
- */
- interface GlobalAttr extends CoreAttr, StylingAttr { }
-
- // TODO: implement SVG Presentation Attributes. See https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation
-
- interface PathBaseAttr {
- pathLength?: number
- }
-
- interface RadiusAxisAttr {
- rx?: AttrNumberValue
- ry?: AttrNumberValue
- }
-
- /**
- * SVG Rectangle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect
- */
- interface RectAttr extends RadiusAxisAttr, PathBaseAttr, GlobalAttr {
- x?: number
- y?: number
- width: AttrNumberValue
- height: AttrNumberValue
- }
-
- /**
- * SVG Line attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line
- */
- interface LineAttr extends PathBaseAttr, GlobalAttr {
- x1?: number
- y1?: number
- x2?: number
- y2?: number
- }
-
- /**
- * SVG Circle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle
- */
- interface CircleAttr extends PathBaseAttr, GlobalAttr {
- cx?: number | string
- cy?: number | string
- r?: number | string
- }
-
- /**
- * SVG Ellipse attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse
- */
- interface EllipseAttr extends PathBaseAttr, GlobalAttr {
- cx?: number | string
- cy?: number | string
- rx?: number | string
- ry?: number | string
- }
-
- /**
- * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path
- */
- interface PathAttr extends PathBaseAttr, GlobalAttr {
- d?: string
- }
-
- /**
- * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon
- * or https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline
- */
- interface PolyAttr extends PathBaseAttr, GlobalAttr {
- points?: string
- }
-
- /**
- * SVG Text attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text
- */
- interface TextAttr extends GlobalAttr {
- x?: number | string
- y?: number | string
- dx?: number | string
- dy?: number | string
- lengthAdjust?: "spacing" | "spacingAndGlyphs"
- textLength?: number | string
- // see https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList
- // or https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#List-of-Ts
- // TODO: tbd
- // rotate?: string
- }
-
- /**
- * SVG TextPath attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath
- */
- interface TextPathAttr extends GlobalAttr {
- href?: string
- lengthAdjust?: "spacing" | "spacingAndGlyphs"
- method?: "align" | "stretch"
- side?: "left" | "right"
- spacing?: "auto" | "exact"
- startOffset?: number | string
- textLength?: number | string
- // See https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath
- // TODO: tbd as there is no reference to see the detail of how it would look like
- // path?: string
- }
-
- /**
- * A generic Dom Box object.
- * Notice: DOMRect is still in experiment state and document is not complete (Draft)
- * See https://developer.mozilla.org/en-US/docs/Web/API/DOMRect
- */
- interface DOMRect {
- x?: number
- y?: number
- width?: number
- height?: number
- top?: number
- right?: number
- bottom?: number
- left?: number
- }
-
- // ************ SVG.JS generic Conditional Types declaration ************
-
- type SVGTypeMapping<T> =
- T extends HTMLElement ? Dom :
- T extends SVGSVGElement ? Svg :
- T extends SVGRectElement ? Rect :
- T extends SVGCircleElement ? Circle :
- T extends SVGPathElement ? Path :
- T extends SVGTextElement ? Text :
- T extends SVGTextPathElement ? TextPath :
- T extends SVGGElement ? G :
- T extends SVGLineElement ? Line :
- T extends SVGPolylineElement ? Polyline :
- T extends SVGPolygonElement ? Polygon :
- T extends SVGGradientElement ? Gradient :
- T extends SVGImageElement ? Image :
- T extends SVGEllipseElement ? Ellipse :
- T extends SVGMaskElement ? Mask :
- T extends SVGMarkerElement ? Marker :
- T extends SVGClipPathElement ? ClipPath :
- T extends SVGTSpanElement ? Tspan :
- T extends SVGSymbolElement ? Symbol :
- T extends SVGUseElement ? Use : Element
-
- // element type as string
- type SvgType = "svg"
- type ClipPathType = "clipPath"
- type TextType = "text"
- type GType = "g"
- type AType = "a"
-
- type ParentElement = SvgType | GType | AType
-
- type AttrTypeMapping<T> =
- T extends Rect ? RectAttr : GlobalAttr
-
- type ElementAlias = Dom | Svg | Rect | Line | Polygon | Polyline | Ellipse | ClipPath | Use |
- Text | Path | TextPath | Circle | G | Gradient | Image | Element
-
- type ElementTypeAlias = typeof Dom | typeof Svg | typeof Rect | typeof Line | typeof Polygon |
- typeof Polyline | typeof Ellipse | typeof ClipPath | typeof Use | typeof Text | typeof Path |
- typeof TextPath | typeof Circle | typeof G | typeof Gradient | typeof Image | typeof Element
-
- type AttributeReference = "href" | "marker-start" | "marker-mid" | "marker-end" | "mask" |
- "clip-path" | "filter" | "fill"
-
- // ************* SVG.JS Type Declaration *************
- // ********** Locate in directory src/types **********
-
- // SVGArray.js
- // Notice: below class is defined the name as `Array` rather than `SVGArray`.
- // The purpose of giving the name as `Array` is to allow it to be aligned with SVG.JS export type
- // as SVG.JS export it as `Array` (to be precise `SVG.Array`) so reading through JS documentation
- // should be more straightforward.
- /**
- * Type alias to native array.
- *
- * **Caution**: If argument is a string, generic type must be a number or array of number and
- * the string is format as a concatenate of number separate by comma.
- * This is expensive to build runtime type check for such as case so please use it carefully.
- */
- type ArrayAlias<T> = BuiltInArray<T> | T[] | string
-
- class Array<T> extends BuiltInArray<T> {
- constructor(array?: ArrayAlias<T>);
-
- /**
- * Return array of generic T however it's flatten array by 1 level as it using `apply` function.
- * For example: if T is a `number[]` which is the number of 2 dimension `Array<number[]>` the result will be `number[]`
- */
- toArray(): any[]
- /**
- * return a concatenated string of each element separated by space
- */
- toString(): string
- valueOf(): T[]
- clone(): Array<T>
- toSet(): Set<T>
- parse(a?: ArrayAlias<T>): T[]
- to(a: any): Morphable;
- }
-
- // point.js
- class Point {
- x: number;
- y: number;
- constructor();
- constructor(position: CoordinateXY);
- constructor(point: Point);
- constructor(x: number, y?: number);
- clone(): Point;
- transform(matrix: Matrix): this;
- transformO(matrix: Matrix): this;
- toArray(): ArrayXY;
- }
-
- // pointArray.js
- class PointArray extends Array<ArrayXY> {
- constructor();
- constructor(array?: ArrayAlias<ArrayXY> | number[]);
-
- toLine(): LineAttr;
- transform(m: Matrix | MatrixLike): PointArray
- move(x: number, y: number): this;
- size(width: number, height: number): this;
- bbox(): Box;
- to(a: any): Morphable;
- toString(): string;
- }
-
- // SVGNumber.js
- type NumberUnit = [number, string]
-
- class Number {
- constructor();
- constructor(value: Number);
- constructor(value: string);
- constructor(value: number, unit?: any);
- constructor(n: NumberUnit);
-
- value: number
- unit: any
-
- toString(): string;
- toJSON(): object; // same as toString
- toArray(): NumberUnit
- valueOf(): number;
- plus(number: NumberAlias): Number;
- minus(number: NumberAlias): Number;
- times(number: NumberAlias): Number;
- divide(number: NumberAlias): Number;
- convert(unit: string): Number;
- to(a: any): Morphable
- }
-
- type NumberAlias = Number | number | string;
-
- // PathArray.js
-
- type LineCommand = ['M' | 'm' | 'L' | 'l', number, number] | ['H' | 'h' | 'V' | 'v', number] | ['Z' | 'z']
-
- type CurveCommand =
- // Bezier Curves
- ['C' | 'c', number, number, number, number, number, number] |
- ['S' | 's' | 'Q' | 'q', number, number, number, number] | ['T' | 't', number, number] |
- // Arcs
- ['A' | 'a', number, number, number, number, number, number, number]
-
- type PathCommand = LineCommand | CurveCommand
-
- type PathArrayAlias = PathArray | PathCommand[] | (string | number)[] | string;
-
- class PathArray extends Array<PathCommand> {
- constructor();
- constructor(d: ArrayAlias<PathCommand> | PathArrayAlias);
-
- move(x: number, y: number): this;
- size(width: number, height: number): this;
- equalCommands(other: PathArray): boolean
- morph(pa: PathArray): this
- parse(array?: ArrayAlias<PathCommand> | PathArrayAlias): PathCommand[];
- bbox(): Box;
- to(a: any): Morphable
- }
-
- // Matrix.js
- interface TransformData {
- origin?: number[];
- scaleX?: number;
- scaleY?: number;
- shear?: number;
- rotate?: number;
- translateX?: number;
- translateY?: number;
- originX?: number;
- originY?: number;
- }
-
- interface MatrixLike {
- a?: number;
- b?: number;
- c?: number;
- d?: number;
- e?: number;
- f?: number;
- }
-
- interface MatrixExtract extends TransformData, MatrixLike { }
-
- type FlipType = 'both' | 'x' | 'y' | boolean
- type ArrayXY = [number, number]
- type CoordinateXY = ArrayXY | { x: number, y: number }
-
- interface MatrixTransformParam {
- rotate?: number
- flip?: FlipType
- skew?: ArrayXY | number
- skewX?: number
- skewY?: number
- scale?: ArrayXY | number
- scaleX?: number
- scaleY?: number
- shear?: number
- theta?: number
- origin?: CoordinateXY | string
- around?: CoordinateXY
- ox?: number
- originX?: number
- oy?: number
- originY?: number
- position?: CoordinateXY
- px?: number
- positionX?: number
- py?: number
- positionY?: number
- translate?: CoordinateXY
- tx?: number
- translateX?: number
- ty?: number
- translateY?: number
- relative?: CoordinateXY
- rx?: number
- relativeX?: number
- ry?: number
- relativeY?: number
- }
-
- type MatrixAlias = MatrixLike | TransformData | MatrixTransformParam | number[] | Element | string;
-
- class Matrix implements MatrixLike {
- constructor();
- constructor(source: MatrixAlias);
- constructor(a: number, b: number, c: number, d: number, e: number, f: number);
-
- a: number;
- b: number;
- c: number;
- d: number;
- e: number;
- f: number;
-
- // *** To Be use by Test Only in restrict mode ***
- [key: string]: any
-
- clone(): Matrix;
- transform(o: MatrixLike | MatrixTransformParam): Matrix
- compose(o: MatrixExtract): Matrix
- decompose(cx?: number, cy?: number): MatrixExtract
- multiply(m: MatrixAlias | Matrix): Matrix;
- multiplyO(m: MatrixAlias | Matrix): this;
- lmultiply(m: MatrixAlias | Matrix): Matrix;
- lmultiplyO(m: MatrixAlias | Matrix): this;
- inverse(): Matrix;
- inverseO(): this;
- translate(x?: number, y?: number): Matrix;
- translateO(x?: number, y?: number): this;
- scale(x: number, y?: number, cx?: number, cy?: number): Matrix;
- scaleO(x: number, y?: number, cx?: number, cy?: number): this;
- rotate(r: number, cx?: number, cy?: number): Matrix;
- rotateO(r: number, cx?: number, cy?: number): this;
- flip(a: NumberAlias, offset?: number): Matrix;
- flipO(a: NumberAlias, offset?: number): this;
- flip(offset?: number): Matrix;
- shear(a: number, cx?: number, cy?: number): Matrix;
- shearO(a: number, cx?: number, cy?: number): this;
- skew(y?: number, cx?: number, cy?: number): Matrix;
- skewO(y?: number, cx?: number, cy?: number): this;
- skew(x: number, y?: number, cx?: number, cy?: number): Matrix;
- skewX(x: number, cx?: number, cy?: number): Matrix;
- skewY(y: number, cx?: number, cy?: number): Matrix;
- around(cx?: number, cy?: number, matrix?: Matrix): Matrix;
- aroundO(cx?: number, cy?: number, matrix?: Matrix): this;
- equals(m: Matrix): boolean
- toString(): string;
- toArray(): number[];
- valueOf(): MatrixLike;
- to(a: any): Morphable;
- }
-
- type ListEachCallback<T> = (el: T, index: number, list: List<T>) => any;
-
- // List.js
- class List<T> extends BuiltInArray<T> {
- each(fn: ListEachCallback<T>): List<any>;
- each(name: string, ...args: any[]): List<any>;
- toArray(): T[];
- }
-
- class Eventobject {
- [key: string]: Eventobject;
- }
-
- // EventTarget.js
- class EventTarget {
- events: Eventobject
-
- addEventListener(): void
- dispatch(event: Event | string, data?: object): Event
- dispatchEvent(event: Event): boolean
- fire(event: Event | string, data?: object): this
- getEventHolder(): this | Node
- getEventTarget(): this | Node
-
- on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this;
- off(events?: string | Event[], cb?: EventListener | number, options?: AddEventListenerOptions): this;
-
- removeEventListener(): void
- }
-
- // Color.js
- interface ColorLike {
- r: number;
- g: number;
- b: number;
-
- x: number;
- y: number;
- z: number;
-
- h: number;
- s: number;
- l: number;
- a: number;
- c: number;
-
- m: number;
- k: number;
-
- space: string;
- }
-
- type ColorAlias = string | ColorLike;
-
- class Color implements ColorLike {
- r: number;
- g: number;
- b: number;
-
- x: number;
- y: number;
- z: number;
-
- h: number;
- s: number;
- l: number;
- a: number;
- c: number;
-
- m: number;
- k: number;
-
- space: string;
- constructor()
- constructor(color: ColorAlias, space?: string);
- constructor(a: number, b: number, c: number, space?: string)
- constructor(a: number, b: number, c: number, d: number, space?: string)
- constructor(a: number[], space?: string)
-
- rgb(): Color
- lab(): Color
- xyz(): Color
- lch(): Color
- hsl(): Color
- cmyk(): Color
- toHex(): string
- toString(): string
- toRgb(): string
- toArray(): any[]
-
- to(a: any): Morphable
- fromArray(a: any): this
-
- static random(mode: 'sine', time?: number): Color
- static random(mode?: string): Color
- }
-
- // Box.js
- interface BoxLike {
- height: number;
- width: number;
- y: number;
- x: number;
- cx?: number;
- cy?: number;
- w?: number;
- h?: number;
- x2?: number;
- y2?: number;
- }
-
- class Box implements BoxLike {
- height: number;
- width: number;
- y: number;
- x: number;
- cx: number;
- cy: number;
- w: number;
- h: number;
- x2: number;
- y2: number;
-
- constructor();
- constructor(source: string);
- constructor(source: number[]);
- constructor(source: DOMRect);
- constructor(x: number, y: number, width: number, height: number);
-
- merge(box: BoxLike): Box;
- transform(m: Matrix): Box
- addOffset(): this;
- toString(): string;
- toArray(): number[];
- isNulled(): boolean;
- to(v: MorphValueLike): Morphable;
- }
-
- // Morphable.js
- type MorphValueLike = string | number | objectBag | NonMorphable | MatrixExtract | Array<any> | any[]
-
- class Morphable {
- constructor();
- constructor(st: Stepper);
-
- from(): MorphValueLike
- from(v: MorphValueLike): this
- to(): MorphValueLike
- to(v: MorphValueLike): this
- type(): any
- type(t: any): this
- stepper(): Stepper
- stepper(st: Stepper): this
- done(): boolean
- at(pos: number): any
- }
-
- class objectBag {
- constructor();
- constructor(a: object);
- valueOf(): object
- toArray(): object[]
-
- to(a: object): Morphable
- fromArray(a: any[]): this
- }
-
- class NonMorphable {
- constructor(a: object)
- valueOf(): object
- toArray(): object[]
-
- to(a: object): Morphable
- fromArray(a: object): this
- }
-
- class TransformBag {
- constructor()
- constructor(a: number[])
- constructor(a: TransformData)
- defaults: TransformData
- toArray(): number[]
- to(t: TransformData): Morphable
- fromArray(t: number[]): this
- }
-
- interface Stepper {
- done(c?: object): boolean
- }
-
- class Ease implements Stepper {
- constructor()
- constructor(fn: string)
- constructor(fn: Function)
-
- step(from: number, to: number, pos: number): number
- done(): boolean
- }
-
- class Controller implements Stepper {
- constructor(fn?: Function)
- step(current: number, target: number, dt: number, c: number): number
- done(c?: object): boolean
- }
-
- // Queue.js
- interface QueueParam {
- value: any
- next?: any
- prev?: any
- }
-
- class Queue {
- constructor();
-
- push(value: any): QueueParam
- shift(): any
- first(): number
- last(): number
- remove(item: QueueParam): void
- }
-
- // Timeline.js
- interface ScheduledRunnerInfo {
- start: number
- duration: number
- end: number
- runner: Runner
- }
-
- class Timeline extends EventTarget {
- constructor()
- constructor(fn: Function)
-
- active(): boolean
- schedule(runner: Runner, delay?: number, when?: string): this
- schedule(): ScheduledRunnerInfo[]
- unschedule(runner: Runner): this
- getEndTime(): number
- updateTime(): this
- persist(dtOrForever?: number | boolean): this
- play(): this
- pause(): this
- stop(): this
- finish(): this
- speed(speed: number): this
- reverse(yes: boolean): this
- seek(dt: number): this
- time(): number
- time(time: number): this
- source(): Function
- source(fn: Function): this
- }
-
- // Runner.js
- interface TimesParam {
- duration: number
- delay: number
- when: number | string
- swing: boolean
- wait: number
- times: number
- }
-
- type TimeLike = number | TimesParam | Stepper
-
- type EasingCallback = (...any: any) => number
- type EasingLiteral = "<>" | "-" | "<" | ">"
-
- class Runner {
- constructor();
- constructor(options: Function);
- constructor(options: number);
- constructor(options: Controller);
-
- static sanitise: (duration?: TimeLike, delay?: number, when?: string) => object
-
- element(): Element
- element(el: Element): this
- timeline(): Timeline
- timeline(timeline: Timeline): this
- animate(duration: TimeLike, delay?: number, when?: string): this
- schedule(delay: number, when?: string): this
- schedule(timeline: Timeline, delay?: number, when?: string): this
- unschedule(): this
- loop(times?: number, swing?: boolean, wait?: number): this
- loop(times: TimesParam): this
- delay(delay: number): this
-
-
-
- during(fn: Function): this
- queue(initFn: Function, runFn: Function, retargetFn?: boolean | Function, isTransform?: boolean): this
- after(fn: EventListener): this
- time(): number
- time(time: number): this
- duration(): number
- loops(): number
- loops(p: number): this
- persist(dtOrForever?: number | boolean): this
- position(): number
- position(p: number): this
- progress(): number
- progress(p: number): this
- step(deta?: number): this
- reset(): this
- finish(): this
- reverse(r?: boolean): this
- ease(fn: EasingCallback): this
- ease(kind: EasingLiteral): this
- active(): boolean
- active(a: boolean): this
- addTransform(m: Matrix): this
- clearTransform(): this
- clearTransformsFromQueue(): void
-
- // extends prototypes
- attr(a: string | object, v?: string): this
- css(s: string | object, v?: string): this
- styleAttr(type: string, name: string | object, val?: string): this
- zoom(level: NumberAlias, point?: Point): this
- transform(transforms: MatrixTransformParam, relative?: boolean, affine?: boolean): this
- x(x: number): this
- y(y: number): this
- dx(dx: number): this
- dy(dy: number): this
- cx(x: number): this
- cy(y: number): this
- dmove(dx: number, dy: number): this
- move(x: number, y: number): this
- center(x: number, y: number): this
- size(width: number, height: number): this
- width(width: number): this
- height(height: number): this
- plot(a: object): this
- plot(a: number, b: number, c: number, d: number): this
- leading(value: number): this
- viewbox(x: number, y: number, width: number, height: number): this
- update(offset: number, color: number, opacity: number): this
- update(o: StopProperties): this
- rx(): number
- rx(rx: number): this
- ry(): number
- ry(ry: number): this
- from(x: NumberAlias, y: NumberAlias): this
- to(x: NumberAlias, y: NumberAlias): this
- }
-
- // Animator.js
- let Animator: {
- nextDraw: any
- frames: Queue
- timeouts: Queue
- immediates: Queue
-
- timer(): boolean
- frame(fn: Function): object
- timeout(fn: Function, delay?: number): object
- immediate(fn: Function): object
- cancelFrame(o: object): void
- clearTimeout(o: object): void
- cancelImmediate(o: object): void
- }
-
- /**
- * Just fancy type alias to refer to css query selector.
- */
- type QuerySelector = string
-
- class Dom extends EventTarget {
- node: HTMLElement | SVGElement;
- type: string;
-
- constructor(node?: HTMLElement, attr?: object);
- constructor(att: object);
- add(element: Element, i?: number): this;
- addTo(parent: Dom | HTMLElement | string, i?: number): this
- children(): List<Element>;
- clear(): this;
- clone(deep?: boolean, assignNewIds?: boolean): this;
- each(block: (index: number, children: Element[]) => void, deep?: boolean): this;
- element(element: string, inherit?: object): this;
- first(): Element;
- get(i: number): Element;
- getEventHolder(): LinkedHTMLElement;
- getEventTarget(): LinkedHTMLElement;
- has(element: Element): boolean;
- id(): string
- id(id: string): this
- index(element: Element): number;
- last(): Element;
- matches(selector: string): boolean;
- /**
- * Finds the closest ancestor which matches the string or is of passed type. If nothing is passed, the parent is returned
- * @param type can be either string, svg.js object or undefined.
- */
- parent(type?: ElementTypeAlias | QuerySelector): Dom | null;
- put(element: Element, i?: number): Element;
- /**
- * Put the element into the given parent element and returns the parent element
- * @param parent The parent in which the current element is inserted
- */
- putIn(parent: ElementAlias | Node | QuerySelector): Dom;
-
- remove(): this;
- removeElement(element: Element): this;
- replace<T extends Dom>(element: T): T;
- round(precision?: number, map?: string[]): this
- svg(): string;
- svg(a: string, outer: true): Element;
- svg(a: string, outer?: false): this;
- svg(a: boolean, outer?: boolean): string;
- svg(a: null | Function, outer?: boolean): string;
-
- toString(): string;
- words(text: string): this;
- writeDataToDom(): this;
-
- // prototype extend Attribute in attr.js
- /**
- * Get the attribute object of SVG Element. The return object will be vary based on
- * the instance itself. For example, G element will only return GlobalAttr where Rect
- * will return RectAttr instead.
- */
- attr(): any;
- /**
- * Add or update the attribute from the SVG Element. To remove the attribute from the element set value to null
- * @param name name of attribute
- * @param value value of attribute can be string or number or null
- * @param namespace optional string that define namespace
- */
- attr(name: string, value: any, namespace?: string): this;
- attr(name: string): any;
- attr(obj: object): this;
- attr(obj: string[]): object;
-
- // prototype extend Selector in selector.js
- find(query: string): List<Element>
- findOne(query: string): Dom | null
-
- // prototype method register in data.js
- data(a: string): object | string | number
- data(a: string, v: object, substain?: boolean): this
- data(a: object): this
-
- // prototype method register in arrange.js
- siblings(): List<Element>
- position(): number
- next(): Element
- prev(): Element
- forward(): this
- backward(): this
- front(): this
- back(): this
- before(el: Element): Element
- after(el: Element): Element
- insertBefore(el: Element): this
- insertAfter(el: Element): this
-
- // prototype method register in class.js
- classes(): string[]
- hasClass(name: string): boolean
- addClass(name: string): this
- removeClass(name: string): this
- toggleClass(name: string): this
-
- // prototype method register in css.js
- css(): Partial<CSSStyleDeclaration>
- css<T extends CSSStyleName>(style: T): CSSStyleDeclaration[T]
- css<T extends CSSStyleName[]>(style: T): Partial<CSSStyleDeclaration>
- css<T extends CSSStyleName>(style: T, val: CSSStyleDeclaration[T]): this
- css(style: Partial<CSSStyleDeclaration>): this
- show(): this
- hide(): this
- visible(): boolean
-
- // memory.js
- remember(name: string, value: any): this;
- remember(name: string): any;
- remember(obj: object): this;
- forget(...keys: string[]): this;
- forget(): this;
- memory(): object;
-
- addEventListener(): void
- dispatch(event: Event | string, data?: object): Event
- dispatchEvent(event: Event): boolean
- fire(event: Event | string, data?: object): this
- getEventHolder(): this | Node
- getEventTarget(): this | Node
-
- // on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this;
- // off(events?: string | Event[], cb?: EventListener | number): this;
- removeEventListener(): void
- }
-
- // clip.js
- class ClipPath extends Container {
- constructor();
- constructor(node?: SVGClipPathElement);
- constructor(attr: object);
- node: SVGClipPathElement;
-
- targets(): List<Element>;
- remove(): this;
- }
-
- // container.js
- interface ViewBoxLike {
- x: number;
- y: number;
- width: number;
- height: number;
- }
-
- class Container extends Element {
- circle(size?: NumberAlias): Circle;
- circle(size: number, unit: number): Circle;
- clip(): ClipPath;
- ellipse(width?: number, height?: number): Ellipse;
- flatten(parent: Dom, depth?: number): this;
- foreignObject(width: number, height: number): ForeignObject
- gradient(type: string, block?: (stop: Gradient) => void): Gradient;
- group(): G;
-
- image(): Image;
- image(href?: string, callback?: (e: Event) => void): Image;
- line(points?: PointArrayAlias): Line;
- line(x1: number, y1: number, x2: number, y2: number): Line;
- link(url: string): A;
- marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
- mask(): Mask;
- nested(): Svg;
- path(): Path;
- path(d: PathArrayAlias): Path;
- pattern(width?: number, height?: number, block?: (pattern: Pattern) => void): Pattern
- plain(text: string): Text;
- polygon(points?: PointArrayAlias): Polygon;
- polyline(points?: PointArrayAlias): Polyline;
- rect(width?: number, height?: number): Rect;
- style(): Style;
- text(block: (tspan: Tspan) => void): Text;
- text(text: string): Text;
- ungroup(parent: Dom, depth?: number): this;
- use(element: Element | string, file?: string): Use;
- viewbox(): Box;
- viewbox(viewbox: ViewBoxLike | string): this;
- viewbox(x: number, y: number, width: number, height: number): this;
- textPath(text: string | Text, path: string | Path): TextPath
- symbol(): Symbol
- zoom(): number
- zoom(level: NumberAlias, point?: Point): this;
- }
-
- class Defs extends Container {
- constructor(node?: SVGDefsElement);
- node: SVGDefsElement;
- marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
- }
-
- class Svg extends Container {
- constructor(svgElement?: SVGSVGElement);
- constructor(id: string);
- node: SVGSVGElement;
- namespace(): this;
- defs(): Defs;
- remove(): this;
- isRoot(): boolean;
- }
-
- interface Sugar {
- fill(): any
- fill(fill: FillData): this;
- fill(color: string): this;
- fill(pattern: Element): this;
- fill(image: Image): this;
- stroke(): any;
- stroke(stroke: StrokeData): this;
- stroke(color: string): this;
- matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
- matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
- rotate(degrees: number, cx?: number, cy?: number): this;
- skew(skewX?: number, skewY?: number, cx?: number, cy?: number): this;
- scale(scaleX?: number, scaleY?: number, cx?: number, cy?: number): this;
- translate(x: number, y: number): this;
- shear(lam: Matrix, cx: number, cy: number): this
- relative(x: number, y: number): this
- flip(direction?: string, around?: number): this
- flip(around: number): this
- opacity(): number
- opacity(value: number): this
- font(a: string): string
- font(a: string, v: string | number): this
- font(a: object): this
- }
-
- // Symbol.js
- class Symbol extends Container {
- constructor(svgElement?: SVGSymbolElement);
- constructor(attr: object)
- node: SVGSymbolElement;
- }
-
- class Element extends Dom implements Sugar {
- constructor(node?: SVGElement);
- constructor(attr: object);
- node: SVGElement;
- type: string;
- dom: any
-
- addClass(name: string): this;
- after(element: Element): Element;
- animate(duration?: TimeLike, delay?: number, when?: string): Runner;
- delay(by: number, when?: string): Runner
- attr(): any;
- attr(name: string, value: any, namespace?: string): this;
- attr(name: string): any;
- attr(obj: string[]): object;
- attr(obj: object): this;
- back(): this;
- backward(): this;
- bbox(): Box;
- before(element: Element): Element;
- center(x: number, y: number): this;
- classes(): string[];
- click(cb: Function | null): this;
- clipper(): ClipPath;
- clipWith(element: Element): this;
- clone(deep?: boolean, assignNewIds?: boolean): this;
- ctm(): Matrix;
- cx(): number;
- cx(x: number): this;
- cy(): number;
- cy(y: number): this;
- data(name: string, value: any, sustain?: boolean): this;
- data(name: string): any;
- data(val: object): this;
- dblclick(cb: Function | null): this;
- defs(): Defs;
- dmove(x: NumberAlias, y: NumberAlias): this;
- dx(x: NumberAlias): this;
- dy(y: NumberAlias): this;
- event(): Event | CustomEvent;
- fill(): any;
- fill(color: string): this;
- fill(color: Color | ColorLike): this;
- fill(color: FillData): this;
- fill(pattern: Element): this;
- fire(event: Event): this;
- fire(event: string, data?: any): this;
- flip(a: string, offset?: number): this;
- flip(offset?: number): this;
- font(a: object): this
- font(a: string, v: string | number): this
- font(a: string): string
- forget(...keys: string[]): this;
- forget(): this;
- forward(): this;
- front(): this;
- hasClass(name: string): boolean;
- height(): NumberAlias;
- height(height: NumberAlias): this;
- hide(): this;
- hide(): this;
- id(): string;
- id(id: string): this;
- inside(x: number, y: number): boolean;
- is(cls: any): boolean;
- linkTo(url: (link: A) => void): A;
- linkTo(url: string): A;
- masker(): Mask
- maskWith(element: Element): this;
- maskWith(mask: Mask): this;
- matches(selector: string): boolean;
- matrix(): Matrix;
- matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
- matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
- matrixify(): Matrix;
- memory(): object;
- mousedown(cb: Function | null): this;
- mousemove(cb: Function | null): this;
- mouseout(cb: Function | null): this;
- mouseover(cb: Function | null): this;
- mouseup(cb: Function | null): this;
- mouseenter(cb: Function | null): this;
- mouseleave(cb: Function | null): this;
- move(x: NumberAlias, y: NumberAlias): this;
- native(): LinkedHTMLElement;
- next(): Element;
- // off(events?: string | Event[], cb?: EventListener | number): this;
- // on(event: string, cb: Function, context?: object): this;
- opacity(): number;
- opacity(o: number): this;
- relative(x: number, y: number): this
- shear(lam: Matrix, cx: number, cy: number): this
- toRoot(): Svg;
- /**
- * By default parents will return a list of elements up until the root svg.
- */
- parents(): List<Element>
- /**
- * List the parent by hierarchy until the given parent type or matcher. If the given value is null
- * then the result is only provided the list up until Svg root element which mean no Dom parent element is included.
- * @param util a parent type
- */
- parents<T extends Dom>(util: QuerySelector | T | null): List<Element>
- /**
- * Get reference svg element based on the given attribute.
- * @param attr a svg attribute
- */
- reference<R extends Dom>(attr: AttributeReference): R | null
-
- point(): Point;
- point(position: CoordinateXY): Point;
- point(point: Point): Point;
- point(x: number, y: number): Point;
- position(): number;
- prev(): Element;
- rbox(element?: Element): Box;
- reference(type: string): Element;
- remember(name: string, value: any): this;
- remember(name: string): any;
- remember(obj: object): this;
- remove(): this;
- removeClass(name: string): this;
- root(): Svg;
- rotate(d: number, cx?: number, cy?: number): this;
- scale(x?: number, y?: number, cx?: number, cy?: number): this;
- screenCTM(): Matrix;
- setData(data: object): this;
- show(): this;
- show(): this;
- size(width?: NumberAlias, height?: NumberAlias): this;
- skew(x?: number, y?: number, cx?: number, cy?: number): this;
- stop(jumpToEnd: boolean, clearQueue: boolean): Animation;
- stop(offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias): Stop;
- stop(val: { offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias }): Stop;
- stroke(): any;
- stroke(color: string): this;
- stroke(stroke: StrokeData): this;
- timeline(): Timeline
- timeline(tl: Timeline): this
- toggleClass(name: string): this;
- toParent(parent: Dom): this;
- toParent(parent: Dom, i: number): this;
- toSvg(): this;
- touchcancel(cb: Function | null): this;
- touchend(cb: Function | null): this;
- touchleave(cb: Function | null): this;
- touchmove(cb: Function | null): this;
- touchstart(cb: Function | null): this;
- transform(): MatrixExtract;
- transform(t: MatrixAlias, relative?: boolean): this;
- translate(x: number, y: number): this;
- unclip(): this;
- unmask(): this;
- untransform(): this;
- visible(): boolean;
- width(): NumberAlias;
- width(width: NumberAlias): this;
- x(): NumberAlias;
- x(x: NumberAlias): this;
- y(): NumberAlias;
- y(y: NumberAlias): this;
- }
-
- // ellipse.js
- interface CircleMethods extends Shape {
- rx(rx: number): this;
- rx(): this;
- ry(ry: number): this;
- ry(): this;
- radius(x: number, y?: number): this;
- }
- class Circle extends Shape implements CircleMethods {
- constructor(node?: SVGCircleElement);
- constructor(attr: CircleAttr)
-
- node: SVGCircleElement;
-
- rx(rx: number): this;
- rx(): this;
- ry(ry: number): this;
- ry(): this;
- radius(x: number, y?: number): this;
- }
- class Ellipse extends Shape implements CircleMethods {
- node: SVGEllipseElement;
- constructor(attr: EllipseAttr)
- constructor(node?: SVGEllipseElement);
-
- rx(rx: number): this;
- rx(): this;
- ry(ry: number): this;
- ry(): this;
- radius(x: number, y?: number): this;
- }
-
- interface StopProperties {
- color?: ColorAlias;
- offset?: number | string;
- opacity?: number;
- }
-
- // gradient.js
- class Stop extends Element {
- update(offset?: number, color?: ColorAlias, opacity?: number): this;
- update(opts: StopProperties): this;
- }
- class Gradient extends Container {
- constructor(node?: SVGGradientElement);
- constructor(attr: object);
- constructor(type: string);
- node: SVGGradientElement;
-
- at(offset?: number, color?: ColorAlias, opacity?: number): Stop;
- at(opts: StopProperties): Stop;
- url(): string;
- toString(): string;
- targets(): List<Element>
- bbox(): Box
-
- // gradiented.js
- from(x: number, y: number): this;
- to(x: number, y: number): this;
-
- // TODO: check with main.js
- radius(x: number, y?: number): this;
- targets(): List<Element>
- bbox(): Box
- update(block?: (gradient: Gradient) => void): this;
- }
-
- // group.js
- class G extends Container {
- constructor(node?: SVGGElement);
- constructor(attr: object);
- node: SVGGElement;
- gbox(): Box;
- }
-
- // hyperlink.js
- class A extends Container {
- constructor(node?: SVGAElement);
- constructor(attr: object);
- node: SVGAElement;
- to(url: string): this;
- to(): string;
- target(target: string): this;
- target(): string;
- }
-
-
- // ForeignObject.js
- class ForeignObject extends Element {
- constructor(node?: SVGForeignObjectElement, attrs?: object);
- constructor(attrs?: object);
- add(element: Dom, i?: number): this;
- }
-
- // image.js
- class Image extends Shape {
- constructor(node?: SVGImageElement);
- constructor(attr: object);
- node: SVGImageElement;
- load(url?: string, callback?: (event: Event) => void): this;
- }
-
- // line.js
- type PointArrayAlias = number[] | ArrayXY[] | PointArray | string;
-
- class Line extends Shape {
- constructor(attr: LineAttr)
- constructor(node?: SVGLineElement);
-
- node: SVGLineElement;
-
- array(): PointArray;
- plot(): PointArray
- plot(points?: PointArrayAlias): this;
- plot(x1: number, y1: number, x2: number, y2: number): this;
- move(x: number, y: number): this;
- size(width?: number, height?: number): this;
- marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
- marker(position: string, marker: Marker): Marker;
- }
-
- // marker.js
- // TODO: check register method marker
- class Marker extends Container {
- constructor();
-
- node: SVGMarkerElement;
-
- ref(x: string | number, y: string | number): this;
- update(block: (marker: Marker) => void): this;
- toString(): string;
- orient(orientation: 'auto' | 'auto-start-reverse' | number | Number): this;
- orient(): string;
- }
- // mask.js
- class Mask extends Container {
- constructor(node?: SVGMaskElement);
- constructor(attr: object);
- node: SVGMaskElement;
- remove(): this
- targets(): List<Element>;
- }
-
- // path.js
- class Path extends Shape {
- constructor(attr: PathAttr)
- constructor(node?: SVGPathElement);
-
- node: SVGPathElement;
-
- morphArray: PathArray;
- array(): PathArray;
- plot(): PathArray;
- plot(d: PathArrayAlias): this;
- marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): this;
- marker(position: string, marker: Marker): this;
-
- // sugar.js
- length(): number;
- pointAt(length: number): { x: number, y: number };
- text(text: string): TextPath
- text(text: Text): TextPath
- targets(): List<Element>
-
- }
-
-
- // pattern.js
- class Pattern extends Container {
- url(): string;
- url(...rest: any[]): never;
- update(block: (pattern: Pattern) => void): this;
- toString(): string;
- }
-
- // poly.js
- interface poly {
- array(): PointArray;
- plot(): PointArray
- plot(p: PointArrayAlias): this;
- clear(): this;
- move(x: number, y: number): this;
- size(width: number, height?: number): this;
- }
-
- // pointed.js
- interface pointed {
- x(): number
- x(x: number): this
- y(): number
- y(y: number): this
- height(): number
- height(h: number): this
- width(): number
- width(w: number): this
- }
-
- class Polyline extends Shape implements poly, pointed {
- constructor(node?: SVGPolylineElement);
- constructor(attr: PolyAttr);
-
- node: SVGPolylineElement;
-
- array(): PointArray;
- plot(): PointArray
- plot(p: PointArrayAlias): this;
- x(): number;
- x(x: number): this
- y(): number;
- y(y: number): this
- height(): number
- height(h: number): this
- width(): number
- width(w: number): this
- move(x: number, y: number): this;
- size(width: number, height?: number): this;
- marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
- marker(position: string, marker: Marker): Marker;
- }
-
- class Polygon extends Shape implements poly, pointed {
- constructor(node?: SVGPolygonElement);
- constructor(attr: PolyAttr)
-
- node: SVGPolygonElement;
- array(): PointArray;
- plot(): PointArray;
- plot(p: PointArrayAlias): this;
- x(): number;
- x(x: number): this
- y(): number;
- y(y: number): this
- height(): number
- height(h: number): this
- width(): number
- width(w: number): this
- move(x: number, y: number): this;
- size(width: number, height?: number): this;
- marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
- marker(position: string, marker: Marker): Marker;
- }
-
- class Rect extends Shape {
- constructor(node?: SVGRectElement);
- constructor(attr: RectAttr)
- node: SVGRectElement;
- radius(x: number, y?: number): this;
- }
-
- // shape.js
- class Shape extends Element {
- }
-
- // sugar.js
- interface StrokeData {
- color?: string;
- width?: number;
- opacity?: number;
- linecap?: string;
- linejoin?: string;
- miterlimit?: number;
- dasharray?: string;
- dashoffset?: number;
- }
-
- interface FillData {
- color?: string
- opacity?: number
- rule?: string
- }
-
- interface FontData {
- family?: string;
- size?: NumberAlias;
- anchor?: string;
- leading?: NumberAlias;
- weight?: string;
- style?: string
- }
- // textable.js
- interface Textable {
- plain(text: string): this;
- length(): number;
- }
-
- // text.js
- class Text extends Shape implements Textable {
- constructor(node?: SVGElement);
- constructor(attr: TextAttr)
-
- clone(): this;
- text(): string;
- text(text: string): this;
- text(block: (text: this) => void): this;
- leading(): Number;
- leading(leading: NumberAlias): this;
- rebuild(enabled: boolean): this;
- build(enabled: boolean): this;
- clear(): this;
- plain(text: string): this;
- length(): number;
- get(i: number): Tspan;
- path(): TextPath
- path(d: PathArrayAlias | Path): TextPath;
- track(): Element;
- ax(): string
- ax(x: string): this
- ay(): string
- ay(y: string): this
- amove(x: number, y: number): this
- textPath(): TextPath
-
- // main.js, from extend/copy prototypes from Tspan
- tspan(text: string): Tspan;
- tspan(block: (tspan: Tspan) => void): this;
- }
-
- class Tspan extends Text implements Textable {
- constructor(node?: SVGElement);
- constructor(attr: TextAttr);
- dx(): number;
- dx(x: NumberAlias): this;
- dy(): number;
- dy(y: NumberAlias): this;
- newLine(): this;
- tspan(text: string): Tspan;
- tspan(block: (tspan: Tspan) => void): this;
- length(): number;
- text(): string;
- text(text: string): this;
- text(block: (text: this) => void): this;
- plain(text: string): this;
- }
-
- // textpath.js
- class TextPath extends Text {
- constructor();
- constructor(attr: TextPathAttr)
-
- array(): Array<any>
- plot(): PathArray
- plot(d: string): this
- track(): Path
- }
-
- // style.js
- class Style extends Element {
- constructor(node: SVGElement, attr?: StylingAttr);
- addText(text: string): this;
- font(a: object): this
- font(a: string, v: string | number): this
- font(a: string): string
- rule(selector: string, obj: any): this;
- }
-
- // use.js
- class Use extends Shape {
- use(element: string, file?: string): this;
- }
-
- // viewbox.js
- type ViewBoxAlias = ViewBoxLike | number[] | string | Element;
-
- interface ViewBox {
- x: number;
- y: number;
- width: number;
- height: number;
- toString(): string;
- at(pos: number): ViewBox;
- }
-}
+// Type definitions for @svgdotjs version 3.x +// Project: @svgdotjs/svg.js + +// trick to keep reference to Array build-in type +declare class BuiltInArray<T> extends Array<T> {} + +// trick to have nice attribute list for CSS +declare type CSSStyleName = Exclude< + keyof CSSStyleDeclaration, + 'parentRule' | 'length' +> + +declare module '@svgdotjs/svg.js' { + function SVG(): Svg + function SVG(selector: QuerySelector): Element + function SVG<T>(el: T): SVGTypeMapping<T> + function SVG(domElement: HTMLElement): Element + + function eid(name: string): string + function get(id: string): Element + + function create(name: string): any + function extend(parent: object, obj: object): void + function invent(config: object): any + function adopt(node: HTMLElement): Element + function prepare(element: HTMLElement): void + function getClass(name: string): Element + + function on( + el: Node | Window, + events: string, + cb: EventListener, + binbind?: any, + options?: AddEventListenerOptions + ): void + function on( + el: Node | Window, + events: Event[], + cb: EventListener, + binbind?: any, + options?: AddEventListenerOptions + ): void + + function off( + el: Node | Window, + events?: string, + cb?: EventListener | number, + options?: AddEventListenerOptions + ): void + function off( + el: Node | Window, + events?: Event[], + cb?: EventListener | number, + options?: AddEventListenerOptions + ): void + + function dispatch( + node: Node | Window, + event: Event, + data?: object, + options?: object + ): Event + + function find(query: QuerySelector): List<Element> + function findOne(query: QuerySelector): Element | null + + function getWindow(): Window + function registerWindow(win: Window, doc: Document): void + function restoreWindow(): void + function saveWindow(): void + function withWindow( + win: Window, + fn: (win: Window, doc: Document) => void + ): void + + let utils: { + map(array: any[], block: Function): any + filter(array: any[], block: Function): any + radians(d: number): number + degrees(r: number): number + camelCase(s: string): string + unCamelCase(s: string): string + capitalize(s: string): string + // proportionalSize + // getOrigin + } + + let defaults: { + attrs: { + 'fill-opacity': number + 'stroke-opacity': number + 'stroke-width': number + 'stroke-linejoin': string + 'stroke-linecap': string + fill: string + stroke: string + opacity: number + x: number + y: number + cx: number + cy: number + width: number + height: number + r: number + rx: number + ry: number + offset: number + 'stop-opacity': number + 'stop-color': string + 'font-size': number + 'font-family': string + 'text-anchor': string + } + timeline: { + duration: number + ease: string + delay: number + } + } + + // let easing: { + // '-'(pos: number): number; + // '<>'(pos: number): number; + // '>'(pos: number): number; + // '<'(pos: number): number; + // bezier(x1: number, y1: number, x2: number, y2: number): (t: number) => number; + // steps(steps: number, stepPosition?: "jump-start"|"jump-end"|"jump-none"|"jump-both"|"start"|"end"): (t: number, beforeFlag?: boolean) => number; + // } + + let regex: { + delimiter: RegExp + dots: RegExp + hex: RegExp + hyphen: RegExp + isBlank: RegExp + isHex: RegExp + isImage: RegExp + isNumber: RegExp + isPathLetter: RegExp + isRgb: RegExp + numberAndUnit: RegExp + numbersWithDots: RegExp + pathLetters: RegExp + reference: RegExp + rgb: RegExp + transforms: RegExp + whitespace: RegExp + } + + let namespaces: { + ns: string + xmlns: string + xlink: string + svgjs: string + } + + interface LinkedHTMLElement extends HTMLElement { + instance: Element + } + + // ************ Standard object/option/properties declaration ************ + + type AttrNumberValue = number | 'auto' + + /** + * The SVG core attributes are all the common attributes that can be specified on any SVG element. + * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core + */ + interface CoreAttr { + id?: string + lang?: string + tabindex?: number + 'xml:lang'?: string + } + + /** + * The SVG styling attributes are all the attributes that can be specified on any SVG element to apply CSS styling effects. + * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Styling + */ + interface StylingAttr { + /** + * a valid HTML class name + */ + class?: string + /** + * SVG css style string format. It all can be find here https://www.w3.org/TR/SVG/styling.html#StyleAttribute + */ + style?: string + } + + /** + * A global attribute that can be use with any svg element + */ + interface GlobalAttr extends CoreAttr, StylingAttr {} + + // TODO: implement SVG Presentation Attributes. See https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation + + interface PathBaseAttr { + pathLength?: number + } + + interface RadiusAxisAttr { + rx?: AttrNumberValue + ry?: AttrNumberValue + } + + /** + * SVG Rectangle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect + */ + interface RectAttr extends RadiusAxisAttr, PathBaseAttr, GlobalAttr { + x?: number + y?: number + width: AttrNumberValue + height: AttrNumberValue + } + + /** + * SVG Line attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line + */ + interface LineAttr extends PathBaseAttr, GlobalAttr { + x1?: number + y1?: number + x2?: number + y2?: number + } + + /** + * SVG Circle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle + */ + interface CircleAttr extends PathBaseAttr, GlobalAttr { + cx?: number | string + cy?: number | string + r?: number | string + } + + /** + * SVG Ellipse attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse + */ + interface EllipseAttr extends PathBaseAttr, GlobalAttr { + cx?: number | string + cy?: number | string + rx?: number | string + ry?: number | string + } + + /** + * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path + */ + interface PathAttr extends PathBaseAttr, GlobalAttr { + d?: string + } + + /** + * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon + * or https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline + */ + interface PolyAttr extends PathBaseAttr, GlobalAttr { + points?: string + } + + /** + * SVG Text attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text + */ + interface TextAttr extends GlobalAttr { + x?: number | string + y?: number | string + dx?: number | string + dy?: number | string + lengthAdjust?: 'spacing' | 'spacingAndGlyphs' + textLength?: number | string + // see https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList + // or https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#List-of-Ts + // TODO: tbd + // rotate?: string + } + + /** + * SVG TextPath attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath + */ + interface TextPathAttr extends GlobalAttr { + href?: string + lengthAdjust?: 'spacing' | 'spacingAndGlyphs' + method?: 'align' | 'stretch' + side?: 'left' | 'right' + spacing?: 'auto' | 'exact' + startOffset?: number | string + textLength?: number | string + // See https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath + // TODO: tbd as there is no reference to see the detail of how it would look like + // path?: string + } + + /** + * A generic Dom Box object. + * Notice: DOMRect is still in experiment state and document is not complete (Draft) + * See https://developer.mozilla.org/en-US/docs/Web/API/DOMRect + */ + interface DOMRect { + x?: number + y?: number + width?: number + height?: number + top?: number + right?: number + bottom?: number + left?: number + } + + // ************ SVG.JS generic Conditional Types declaration ************ + + type SVGTypeMapping<T> = T extends HTMLElement + ? Dom + : T extends SVGSVGElement + ? Svg + : T extends SVGRectElement + ? Rect + : T extends SVGCircleElement + ? Circle + : T extends SVGPathElement + ? Path + : T extends SVGTextElement + ? Text + : T extends SVGTextPathElement + ? TextPath + : T extends SVGGElement + ? G + : T extends SVGLineElement + ? Line + : T extends SVGPolylineElement + ? Polyline + : T extends SVGPolygonElement + ? Polygon + : T extends SVGGradientElement + ? Gradient + : T extends SVGImageElement + ? Image + : T extends SVGEllipseElement + ? Ellipse + : T extends SVGMaskElement + ? Mask + : T extends SVGMarkerElement + ? Marker + : T extends SVGClipPathElement + ? ClipPath + : T extends SVGTSpanElement + ? Tspan + : T extends SVGSymbolElement + ? Symbol + : T extends SVGUseElement + ? Use + : Element + + // element type as string + type SvgType = 'svg' + type ClipPathType = 'clipPath' + type TextType = 'text' + type GType = 'g' + type AType = 'a' + + type ParentElement = SvgType | GType | AType + + type AttrTypeMapping<T> = T extends Rect ? RectAttr : GlobalAttr + + type ElementAlias = + | Dom + | Svg + | Rect + | Line + | Polygon + | Polyline + | Ellipse + | ClipPath + | Use + | Text + | Path + | TextPath + | Circle + | G + | Gradient + | Image + | Element + + type ElementTypeAlias = + | typeof Dom + | typeof Svg + | typeof Rect + | typeof Line + | typeof Polygon + | typeof Polyline + | typeof Ellipse + | typeof ClipPath + | typeof Use + | typeof Text + | typeof Path + | typeof TextPath + | typeof Circle + | typeof G + | typeof Gradient + | typeof Image + | typeof Element + + type AttributeReference = + | 'href' + | 'marker-start' + | 'marker-mid' + | 'marker-end' + | 'mask' + | 'clip-path' + | 'filter' + | 'fill' + + // ************* SVG.JS Type Declaration ************* + // ********** Locate in directory src/types ********** + + // SVGArray.js + // Notice: below class is defined the name as `Array` rather than `SVGArray`. + // The purpose of giving the name as `Array` is to allow it to be aligned with SVG.JS export type + // as SVG.JS export it as `Array` (to be precise `SVG.Array`) so reading through JS documentation + // should be more straightforward. + /** + * Type alias to native array. + * + * **Caution**: If argument is a string, generic type must be a number or array of number and + * the string is format as a concatenate of number separate by comma. + * This is expensive to build runtime type check for such as case so please use it carefully. + */ + type ArrayAlias<T> = BuiltInArray<T> | T[] | string + + class Array<T> extends BuiltInArray<T> { + constructor(array?: ArrayAlias<T>) + + /** + * Return array of generic T however it's flatten array by 1 level as it using `apply` function. + * For example: if T is a `number[]` which is the number of 2 dimension `Array<number[]>` the result will be `number[]` + */ + toArray(): any[] + /** + * return a concatenated string of each element separated by space + */ + toString(): string + valueOf(): T[] + clone(): Array<T> + toSet(): Set<T> + parse(a?: ArrayAlias<T>): T[] + to(a: any): Morphable + } + + // point.js + class Point { + x: number + y: number + constructor() + constructor(position: CoordinateXY) + constructor(point: Point) + constructor(x: number, y?: number) + clone(): Point + transform(matrix: Matrix): this + transformO(matrix: Matrix): this + toArray(): ArrayXY + } + + // pointArray.js + class PointArray extends Array<ArrayXY> { + constructor() + constructor(array?: ArrayAlias<ArrayXY> | number[]) + + toLine(): LineAttr + transform(m: Matrix | MatrixLike): PointArray + move(x: number, y: number): this + size(width: number, height: number): this + bbox(): Box + to(a: any): Morphable + toString(): string + } + + // SVGNumber.js + type NumberUnit = [number, string] + + class Number { + constructor() + constructor(value: Number) + constructor(value: string) + constructor(value: number, unit?: any) + constructor(n: NumberUnit) + + value: number + unit: any + + toString(): string + toJSON(): object // same as toString + toArray(): NumberUnit + valueOf(): number + plus(number: NumberAlias): Number + minus(number: NumberAlias): Number + times(number: NumberAlias): Number + divide(number: NumberAlias): Number + convert(unit: string): Number + to(a: any): Morphable + } + + type NumberAlias = Number | number | string + + // PathArray.js + + type LineCommand = + | ['M' | 'm' | 'L' | 'l', number, number] + | ['H' | 'h' | 'V' | 'v', number] + | ['Z' | 'z'] + + type CurveCommand = + // Bezier Curves + | ['C' | 'c', number, number, number, number, number, number] + | ['S' | 's' | 'Q' | 'q', number, number, number, number] + | ['T' | 't', number, number] + // Arcs + | ['A' | 'a', number, number, number, number, number, number, number] + + type PathCommand = LineCommand | CurveCommand + + type PathArrayAlias = PathArray | PathCommand[] | (string | number)[] | string + + class PathArray extends Array<PathCommand> { + constructor() + constructor(d: ArrayAlias<PathCommand> | PathArrayAlias) + + move(x: number, y: number): this + size(width: number, height: number): this + equalCommands(other: PathArray): boolean + morph(pa: PathArray): this + parse(array?: ArrayAlias<PathCommand> | PathArrayAlias): PathCommand[] + bbox(): Box + to(a: any): Morphable + } + + // Matrix.js + interface TransformData { + origin?: number[] + scaleX?: number + scaleY?: number + shear?: number + rotate?: number + translateX?: number + translateY?: number + originX?: number + originY?: number + } + + interface MatrixLike { + a?: number + b?: number + c?: number + d?: number + e?: number + f?: number + } + + interface MatrixExtract extends TransformData, MatrixLike {} + + type FlipType = 'both' | 'x' | 'y' | boolean + type ArrayXY = [number, number] + type CoordinateXY = ArrayXY | { x: number; y: number } + + interface MatrixTransformParam { + rotate?: number + flip?: FlipType + skew?: ArrayXY | number + skewX?: number + skewY?: number + scale?: ArrayXY | number + scaleX?: number + scaleY?: number + shear?: number + theta?: number + origin?: CoordinateXY | string + around?: CoordinateXY + ox?: number + originX?: number + oy?: number + originY?: number + position?: CoordinateXY + px?: number + positionX?: number + py?: number + positionY?: number + translate?: CoordinateXY + tx?: number + translateX?: number + ty?: number + translateY?: number + relative?: CoordinateXY + rx?: number + relativeX?: number + ry?: number + relativeY?: number + } + + type MatrixAlias = + | MatrixLike + | TransformData + | MatrixTransformParam + | number[] + | Element + | string + + class Matrix implements MatrixLike { + constructor() + constructor(source: MatrixAlias) + constructor( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number + ) + + a: number + b: number + c: number + d: number + e: number + f: number; + + // *** To Be use by Test Only in restrict mode *** + [key: string]: any + + clone(): Matrix + transform(o: MatrixLike | MatrixTransformParam): Matrix + compose(o: MatrixExtract): Matrix + decompose(cx?: number, cy?: number): MatrixExtract + multiply(m: MatrixAlias | Matrix): Matrix + multiplyO(m: MatrixAlias | Matrix): this + lmultiply(m: MatrixAlias | Matrix): Matrix + lmultiplyO(m: MatrixAlias | Matrix): this + inverse(): Matrix + inverseO(): this + translate(x?: number, y?: number): Matrix + translateO(x?: number, y?: number): this + scale(x: number, y?: number, cx?: number, cy?: number): Matrix + scaleO(x: number, y?: number, cx?: number, cy?: number): this + rotate(r: number, cx?: number, cy?: number): Matrix + rotateO(r: number, cx?: number, cy?: number): this + flip(a: NumberAlias, offset?: number): Matrix + flipO(a: NumberAlias, offset?: number): this + flip(offset?: number): Matrix + shear(a: number, cx?: number, cy?: number): Matrix + shearO(a: number, cx?: number, cy?: number): this + skew(y?: number, cx?: number, cy?: number): Matrix + skewO(y?: number, cx?: number, cy?: number): this + skew(x: number, y?: number, cx?: number, cy?: number): Matrix + skewX(x: number, cx?: number, cy?: number): Matrix + skewY(y: number, cx?: number, cy?: number): Matrix + around(cx?: number, cy?: number, matrix?: Matrix): Matrix + aroundO(cx?: number, cy?: number, matrix?: Matrix): this + equals(m: Matrix): boolean + toString(): string + toArray(): number[] + valueOf(): MatrixLike + to(a: any): Morphable + } + + type ListEachCallback<T> = (el: T, index: number, list: List<T>) => any + + // List.js + class List<T> extends BuiltInArray<T> { + each(fn: ListEachCallback<T>): List<any> + each(name: string, ...args: any[]): List<any> + toArray(): T[] + } + + class Eventobject { + [key: string]: Eventobject + } + + // EventTarget.js + class EventTarget { + events: Eventobject + + addEventListener(): void + dispatch(event: Event | string, data?: object): Event + dispatchEvent(event: Event): boolean + fire(event: Event | string, data?: object): this + getEventHolder(): this | Node + getEventTarget(): this | Node + + on( + events: string | Event[], + cb: EventListener, + binbind?: any, + options?: AddEventListenerOptions + ): this + off( + events?: string | Event[], + cb?: EventListener | number, + options?: AddEventListenerOptions + ): this + + removeEventListener(): void + } + + // Color.js + interface ColorLike { + r: number + g: number + b: number + + x: number + y: number + z: number + + h: number + s: number + l: number + a: number + c: number + + m: number + k: number + + space: string + } + + type ColorAlias = string | ColorLike + + class Color implements ColorLike { + r: number + g: number + b: number + + x: number + y: number + z: number + + h: number + s: number + l: number + a: number + c: number + + m: number + k: number + + space: string + constructor() + constructor(color: ColorAlias, space?: string) + constructor(a: number, b: number, c: number, space?: string) + constructor(a: number, b: number, c: number, d: number, space?: string) + constructor(a: number[], space?: string) + + rgb(): Color + lab(): Color + xyz(): Color + lch(): Color + hsl(): Color + cmyk(): Color + toHex(): string + toString(): string + toRgb(): string + toArray(): any[] + + to(a: any): Morphable + fromArray(a: any): this + + static random(mode: 'sine', time?: number): Color + static random(mode?: string): Color + } + + // Box.js + interface BoxLike { + height: number + width: number + y: number + x: number + cx?: number + cy?: number + w?: number + h?: number + x2?: number + y2?: number + } + + class Box implements BoxLike { + height: number + width: number + y: number + x: number + cx: number + cy: number + w: number + h: number + x2: number + y2: number + + constructor() + constructor(source: string) + constructor(source: number[]) + constructor(source: DOMRect) + constructor(x: number, y: number, width: number, height: number) + + merge(box: BoxLike): Box + transform(m: Matrix): Box + addOffset(): this + toString(): string + toArray(): number[] + isNulled(): boolean + to(v: MorphValueLike): Morphable + } + + // Morphable.js + type MorphValueLike = + | string + | number + | objectBag + | NonMorphable + | MatrixExtract + | Array<any> + | any[] + + class Morphable { + constructor() + constructor(st: Stepper) + + from(): MorphValueLike + from(v: MorphValueLike): this + to(): MorphValueLike + to(v: MorphValueLike): this + type(): any + type(t: any): this + stepper(): Stepper + stepper(st: Stepper): this + done(): boolean + at(pos: number): any + } + + class objectBag { + constructor() + constructor(a: object) + valueOf(): object + toArray(): object[] + + to(a: object): Morphable + fromArray(a: any[]): this + } + + class NonMorphable { + constructor(a: object) + valueOf(): object + toArray(): object[] + + to(a: object): Morphable + fromArray(a: object): this + } + + class TransformBag { + constructor() + constructor(a: number[]) + constructor(a: TransformData) + defaults: TransformData + toArray(): number[] + to(t: TransformData): Morphable + fromArray(t: number[]): this + } + + interface Stepper { + done(c?: object): boolean + } + + class Ease implements Stepper { + constructor() + constructor(fn: string) + constructor(fn: Function) + + step(from: number, to: number, pos: number): number + done(): boolean + } + + class Controller implements Stepper { + constructor(fn?: Function) + step(current: number, target: number, dt: number, c: number): number + done(c?: object): boolean + } + + // Queue.js + interface QueueParam { + value: any + next?: any + prev?: any + } + + class Queue { + constructor() + + push(value: any): QueueParam + shift(): any + first(): number + last(): number + remove(item: QueueParam): void + } + + // Timeline.js + interface ScheduledRunnerInfo { + start: number + duration: number + end: number + runner: Runner + } + + class Timeline extends EventTarget { + constructor() + constructor(fn: Function) + + active(): boolean + schedule(runner: Runner, delay?: number, when?: string): this + schedule(): ScheduledRunnerInfo[] + unschedule(runner: Runner): this + getEndTime(): number + updateTime(): this + persist(dtOrForever?: number | boolean): this + play(): this + pause(): this + stop(): this + finish(): this + speed(speed: number): this + reverse(yes: boolean): this + seek(dt: number): this + time(): number + time(time: number): this + source(): Function + source(fn: Function): this + } + + // Runner.js + interface TimesParam { + duration: number + delay: number + when: number | string + swing: boolean + wait: number + times: number + } + + type TimeLike = number | TimesParam | Stepper + + type EasingCallback = (...any: any) => number + type EasingLiteral = '<>' | '-' | '<' | '>' + + class Runner { + constructor() + constructor(options: Function) + constructor(options: number) + constructor(options: Controller) + + static sanitise: ( + duration?: TimeLike, + delay?: number, + when?: string + ) => object + + element(): Element + element(el: Element): this + timeline(): Timeline + timeline(timeline: Timeline): this + animate(duration: TimeLike, delay?: number, when?: string): this + schedule(delay: number, when?: string): this + schedule(timeline: Timeline, delay?: number, when?: string): this + unschedule(): this + loop(times?: number, swing?: boolean, wait?: number): this + loop(times: TimesParam): this + delay(delay: number): this + + during(fn: Function): this + queue( + initFn: Function, + runFn: Function, + retargetFn?: boolean | Function, + isTransform?: boolean + ): this + after(fn: EventListener): this + time(): number + time(time: number): this + duration(): number + loops(): number + loops(p: number): this + persist(dtOrForever?: number | boolean): this + position(): number + position(p: number): this + progress(): number + progress(p: number): this + step(deta?: number): this + reset(): this + finish(): this + reverse(r?: boolean): this + ease(fn: EasingCallback): this + ease(kind: EasingLiteral): this + active(): boolean + active(a: boolean): this + addTransform(m: Matrix): this + clearTransform(): this + clearTransformsFromQueue(): void + + // extends prototypes + attr(a: string | object, v?: string): this + css(s: string | object, v?: string): this + styleAttr(type: string, name: string | object, val?: string): this + zoom(level: NumberAlias, point?: Point): this + transform( + transforms: MatrixTransformParam, + relative?: boolean, + affine?: boolean + ): this + x(x: number): this + y(y: number): this + dx(dx: number): this + dy(dy: number): this + cx(x: number): this + cy(y: number): this + dmove(dx: number, dy: number): this + move(x: number, y: number): this + center(x: number, y: number): this + size(width: number, height: number): this + width(width: number): this + height(height: number): this + plot(a: object): this + plot(a: number, b: number, c: number, d: number): this + leading(value: number): this + viewbox(x: number, y: number, width: number, height: number): this + update(offset: number, color: number, opacity: number): this + update(o: StopProperties): this + rx(): number + rx(rx: number): this + ry(): number + ry(ry: number): this + from(x: NumberAlias, y: NumberAlias): this + to(x: NumberAlias, y: NumberAlias): this + } + + // Animator.js + let Animator: { + nextDraw: any + frames: Queue + timeouts: Queue + immediates: Queue + + timer(): boolean + frame(fn: Function): object + timeout(fn: Function, delay?: number): object + immediate(fn: Function): object + cancelFrame(o: object): void + clearTimeout(o: object): void + cancelImmediate(o: object): void + } + + /** + * Just fancy type alias to refer to css query selector. + */ + type QuerySelector = string + + class Dom extends EventTarget { + node: HTMLElement | SVGElement + type: string + + constructor(node?: HTMLElement, attr?: object) + constructor(att: object) + add(element: Element, i?: number): this + addTo(parent: Dom | HTMLElement | string, i?: number): this + children(): List<Element> + clear(): this + clone(deep?: boolean, assignNewIds?: boolean): this + each( + block: (index: number, children: Element[]) => void, + deep?: boolean + ): this + element(element: string, inherit?: object): this + first(): Element + get(i: number): Element + getEventHolder(): LinkedHTMLElement + getEventTarget(): LinkedHTMLElement + has(element: Element): boolean + id(): string + id(id: string): this + index(element: Element): number + last(): Element + matches(selector: string): boolean + /** + * Finds the closest ancestor which matches the string or is of passed type. If nothing is passed, the parent is returned + * @param type can be either string, svg.js object or undefined. + */ + parent(type?: ElementTypeAlias | QuerySelector): Dom | null + put(element: Element, i?: number): Element + /** + * Put the element into the given parent element and returns the parent element + * @param parent The parent in which the current element is inserted + */ + putIn(parent: ElementAlias | Node | QuerySelector): Dom + + remove(): this + removeElement(element: Element): this + replace<T extends Dom>(element: T): T + round(precision?: number, map?: string[]): this + svg(): string + svg(a: string, outer: true): Element + svg(a: string, outer?: false): this + svg(a: boolean, outer?: boolean): string + svg(a: null | Function, outer?: boolean): string + + toString(): string + words(text: string): this + writeDataToDom(): this + + // prototype extend Attribute in attr.js + /** + * Get the attribute object of SVG Element. The return object will be vary based on + * the instance itself. For example, G element will only return GlobalAttr where Rect + * will return RectAttr instead. + */ + attr(): any + /** + * Add or update the attribute from the SVG Element. To remove the attribute from the element set value to null + * @param name name of attribute + * @param value value of attribute can be string or number or null + * @param namespace optional string that define namespace + */ + attr(name: string, value: any, namespace?: string): this + attr(name: string): any + attr(obj: object): this + attr(obj: string[]): object + + // prototype extend Selector in selector.js + find(query: string): List<Element> + findOne(query: string): Dom | null + + // prototype method register in data.js + data(a: string): object | string | number + data(a: string, v: object, substain?: boolean): this + data(a: object): this + + // prototype method register in arrange.js + siblings(): List<Element> + position(): number + next(): Element + prev(): Element + forward(): this + backward(): this + front(): this + back(): this + before(el: Element): Element + after(el: Element): Element + insertBefore(el: Element): this + insertAfter(el: Element): this + + // prototype method register in class.js + classes(): string[] + hasClass(name: string): boolean + addClass(name: string): this + removeClass(name: string): this + toggleClass(name: string): this + + // prototype method register in css.js + css(): Partial<CSSStyleDeclaration> + css<T extends CSSStyleName>(style: T): CSSStyleDeclaration[T] + css<T extends CSSStyleName[]>(style: T): Partial<CSSStyleDeclaration> + css<T extends CSSStyleName>(style: T, val: CSSStyleDeclaration[T]): this + css(style: Partial<CSSStyleDeclaration>): this + show(): this + hide(): this + visible(): boolean + + // memory.js + remember(name: string, value: any): this + remember(name: string): any + remember(obj: object): this + forget(...keys: string[]): this + forget(): this + memory(): object + + addEventListener(): void + dispatch(event: Event | string, data?: object): Event + dispatchEvent(event: Event): boolean + fire(event: Event | string, data?: object): this + getEventHolder(): this | Node + getEventTarget(): this | Node + + // on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this; + // off(events?: string | Event[], cb?: EventListener | number): this; + removeEventListener(): void + } + + // clip.js + class ClipPath extends Container { + constructor() + constructor(node?: SVGClipPathElement) + constructor(attr: object) + node: SVGClipPathElement + + targets(): List<Element> + remove(): this + } + + // container.js + interface ViewBoxLike { + x: number + y: number + width: number + height: number + } + + class Container extends Element { + circle(size?: NumberAlias): Circle + circle(size: number, unit: number): Circle + clip(): ClipPath + ellipse(width?: number, height?: number): Ellipse + flatten(parent: Dom, depth?: number): this + foreignObject(width: number, height: number): ForeignObject + gradient(type: string, block?: (stop: Gradient) => void): Gradient + group(): G + + image(): Image + image(href?: string, callback?: (e: Event) => void): Image + line(points?: PointArrayAlias): Line + line(x1: number, y1: number, x2: number, y2: number): Line + link(url: string): A + marker( + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + mask(): Mask + nested(): Svg + path(): Path + path(d: PathArrayAlias): Path + pattern( + width?: number, + height?: number, + block?: (pattern: Pattern) => void + ): Pattern + plain(text: string): Text + polygon(points?: PointArrayAlias): Polygon + polyline(points?: PointArrayAlias): Polyline + rect(width?: number, height?: number): Rect + style(): Style + text(block: (tspan: Tspan) => void): Text + text(text: string): Text + ungroup(parent: Dom, depth?: number): this + use(element: Element | string, file?: string): Use + viewbox(): Box + viewbox(viewbox: ViewBoxLike | string): this + viewbox(x: number, y: number, width: number, height: number): this + textPath(text: string | Text, path: string | Path): TextPath + symbol(): Symbol + zoom(): number + zoom(level: NumberAlias, point?: Point): this + } + + class Defs extends Container { + constructor(node?: SVGDefsElement) + node: SVGDefsElement + marker( + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + } + + class Svg extends Container { + constructor(svgElement?: SVGSVGElement) + constructor(id: string) + node: SVGSVGElement + namespace(): this + defs(): Defs + remove(): this + isRoot(): boolean + } + + interface Sugar { + fill(): any + fill(fill: FillData): this + fill(color: string): this + fill(pattern: Element): this + fill(image: Image): this + stroke(): any + stroke(stroke: StrokeData): this + stroke(color: string): this + matrix( + a?: number, + b?: number, + c?: number, + d?: number, + e?: number, + f?: number + ): this + matrix( + mat: MatrixAlias, + b?: number, + c?: number, + d?: number, + e?: number, + f?: number + ): this + rotate(degrees: number, cx?: number, cy?: number): this + skew(skewX?: number, skewY?: number, cx?: number, cy?: number): this + scale(scaleX?: number, scaleY?: number, cx?: number, cy?: number): this + translate(x: number, y: number): this + shear(lam: Matrix, cx: number, cy: number): this + relative(x: number, y: number): this + flip(direction?: string, around?: number): this + flip(around: number): this + opacity(): number + opacity(value: number): this + font(a: string): string + font(a: string, v: string | number): this + font(a: object): this + } + + // Symbol.js + class Symbol extends Container { + constructor(svgElement?: SVGSymbolElement) + constructor(attr: object) + node: SVGSymbolElement + } + + class Element extends Dom implements Sugar { + constructor(node?: SVGElement) + constructor(attr: object) + node: SVGElement + type: string + dom: any + + addClass(name: string): this + after(element: Element): Element + animate(duration?: TimeLike, delay?: number, when?: string): Runner + delay(by: number, when?: string): Runner + attr(): any + attr(name: string, value: any, namespace?: string): this + attr(name: string): any + attr(obj: string[]): object + attr(obj: object): this + back(): this + backward(): this + bbox(): Box + before(element: Element): Element + center(x: number, y: number): this + classes(): string[] + click(cb: Function | null): this + clipper(): ClipPath + clipWith(element: Element): this + clone(deep?: boolean, assignNewIds?: boolean): this + ctm(): Matrix + cx(): number + cx(x: number): this + cy(): number + cy(y: number): this + data(name: string, value: any, sustain?: boolean): this + data(name: string): any + data(val: object): this + dblclick(cb: Function | null): this + defs(): Defs + dmove(x: NumberAlias, y: NumberAlias): this + dx(x: NumberAlias): this + dy(y: NumberAlias): this + event(): Event | CustomEvent + fill(): any + fill(color: string): this + fill(color: Color | ColorLike): this + fill(color: FillData): this + fill(pattern: Element): this + fire(event: Event): this + fire(event: string, data?: any): this + flip(a: string, offset?: number): this + flip(offset?: number): this + font(a: object): this + font(a: string, v: string | number): this + font(a: string): string + forget(...keys: string[]): this + forget(): this + forward(): this + front(): this + hasClass(name: string): boolean + height(): NumberAlias + height(height: NumberAlias): this + hide(): this + hide(): this + id(): string + id(id: string): this + inside(x: number, y: number): boolean + is(cls: any): boolean + linkTo(url: (link: A) => void): A + linkTo(url: string): A + masker(): Mask + maskWith(element: Element): this + maskWith(mask: Mask): this + matches(selector: string): boolean + matrix(): Matrix + matrix( + a?: number, + b?: number, + c?: number, + d?: number, + e?: number, + f?: number + ): this + matrix( + mat: MatrixAlias, + b?: number, + c?: number, + d?: number, + e?: number, + f?: number + ): this + matrixify(): Matrix + memory(): object + mousedown(cb: Function | null): this + mousemove(cb: Function | null): this + mouseout(cb: Function | null): this + mouseover(cb: Function | null): this + mouseup(cb: Function | null): this + mouseenter(cb: Function | null): this + mouseleave(cb: Function | null): this + move(x: NumberAlias, y: NumberAlias): this + native(): LinkedHTMLElement + next(): Element + // off(events?: string | Event[], cb?: EventListener | number): this; + // on(event: string, cb: Function, context?: object): this; + opacity(): number + opacity(o: number): this + relative(x: number, y: number): this + shear(lam: Matrix, cx: number, cy: number): this + toRoot(): Svg + /** + * By default parents will return a list of elements up until the root svg. + */ + parents(): List<Element> + /** + * List the parent by hierarchy until the given parent type or matcher. If the given value is null + * then the result is only provided the list up until Svg root element which mean no Dom parent element is included. + * @param util a parent type + */ + parents<T extends Dom>(util: QuerySelector | T | null): List<Element> + /** + * Get reference svg element based on the given attribute. + * @param attr a svg attribute + */ + reference<R extends Dom>(attr: AttributeReference): R | null + + point(): Point + point(position: CoordinateXY): Point + point(point: Point): Point + point(x: number, y: number): Point + position(): number + prev(): Element + rbox(element?: Element): Box + reference(type: string): Element + remember(name: string, value: any): this + remember(name: string): any + remember(obj: object): this + remove(): this + removeClass(name: string): this + root(): Svg + rotate(d: number, cx?: number, cy?: number): this + scale(x?: number, y?: number, cx?: number, cy?: number): this + screenCTM(): Matrix + setData(data: object): this + show(): this + show(): this + size(width?: NumberAlias, height?: NumberAlias): this + skew(x?: number, y?: number, cx?: number, cy?: number): this + stop(jumpToEnd: boolean, clearQueue: boolean): Animation + stop( + offset?: NumberAlias | string, + color?: NumberAlias, + opacity?: NumberAlias + ): Stop + stop(val: { + offset?: NumberAlias | string + color?: NumberAlias + opacity?: NumberAlias + }): Stop + stroke(): any + stroke(color: string): this + stroke(stroke: StrokeData): this + timeline(): Timeline + timeline(tl: Timeline): this + toggleClass(name: string): this + toParent(parent: Dom): this + toParent(parent: Dom, i: number): this + toSvg(): this + touchcancel(cb: Function | null): this + touchend(cb: Function | null): this + touchleave(cb: Function | null): this + touchmove(cb: Function | null): this + touchstart(cb: Function | null): this + transform(): MatrixExtract + transform(t: MatrixAlias, relative?: boolean): this + translate(x: number, y: number): this + unclip(): this + unmask(): this + untransform(): this + visible(): boolean + width(): NumberAlias + width(width: NumberAlias): this + x(): NumberAlias + x(x: NumberAlias): this + y(): NumberAlias + y(y: NumberAlias): this + } + + // ellipse.js + interface CircleMethods extends Shape { + rx(rx: number): this + rx(): this + ry(ry: number): this + ry(): this + radius(x: number, y?: number): this + } + class Circle extends Shape implements CircleMethods { + constructor(node?: SVGCircleElement) + constructor(attr: CircleAttr) + + node: SVGCircleElement + + rx(rx: number): this + rx(): this + ry(ry: number): this + ry(): this + radius(x: number, y?: number): this + } + class Ellipse extends Shape implements CircleMethods { + node: SVGEllipseElement + constructor(attr: EllipseAttr) + constructor(node?: SVGEllipseElement) + + rx(rx: number): this + rx(): this + ry(ry: number): this + ry(): this + radius(x: number, y?: number): this + } + + interface StopProperties { + color?: ColorAlias + offset?: number | string + opacity?: number + } + + // gradient.js + class Stop extends Element { + update(offset?: number, color?: ColorAlias, opacity?: number): this + update(opts: StopProperties): this + } + class Gradient extends Container { + constructor(node?: SVGGradientElement) + constructor(attr: object) + constructor(type: string) + node: SVGGradientElement + + at(offset?: number, color?: ColorAlias, opacity?: number): Stop + at(opts: StopProperties): Stop + url(): string + toString(): string + targets(): List<Element> + bbox(): Box + + // gradiented.js + from(x: number, y: number): this + to(x: number, y: number): this + + // TODO: check with main.js + radius(x: number, y?: number): this + targets(): List<Element> + bbox(): Box + update(block?: (gradient: Gradient) => void): this + } + + // group.js + class G extends Container { + constructor(node?: SVGGElement) + constructor(attr: object) + node: SVGGElement + gbox(): Box + } + + // hyperlink.js + class A extends Container { + constructor(node?: SVGAElement) + constructor(attr: object) + node: SVGAElement + to(url: string): this + to(): string + target(target: string): this + target(): string + } + + // ForeignObject.js + class ForeignObject extends Element { + constructor(node?: SVGForeignObjectElement, attrs?: object) + constructor(attrs?: object) + add(element: Dom, i?: number): this + } + + // image.js + class Image extends Shape { + constructor(node?: SVGImageElement) + constructor(attr: object) + node: SVGImageElement + load(url?: string, callback?: (event: Event) => void): this + } + + // line.js + type PointArrayAlias = number[] | ArrayXY[] | PointArray | string + + class Line extends Shape { + constructor(attr: LineAttr) + constructor(node?: SVGLineElement) + + node: SVGLineElement + + array(): PointArray + plot(): PointArray + plot(points?: PointArrayAlias): this + plot(x1: number, y1: number, x2: number, y2: number): this + move(x: number, y: number): this + size(width?: number, height?: number): this + marker( + position: string, + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + marker(position: string, marker: Marker): Marker + } + + // marker.js + // TODO: check register method marker + class Marker extends Container { + constructor() + + node: SVGMarkerElement + + ref(x: string | number, y: string | number): this + update(block: (marker: Marker) => void): this + toString(): string + orient(orientation: 'auto' | 'auto-start-reverse' | number | Number): this + orient(): string + } + // mask.js + class Mask extends Container { + constructor(node?: SVGMaskElement) + constructor(attr: object) + node: SVGMaskElement + remove(): this + targets(): List<Element> + } + + // path.js + class Path extends Shape { + constructor(attr: PathAttr) + constructor(node?: SVGPathElement) + + node: SVGPathElement + + morphArray: PathArray + array(): PathArray + plot(): PathArray + plot(d: PathArrayAlias): this + marker( + position: string, + width?: number, + height?: number, + block?: (marker: Marker) => void + ): this + marker(position: string, marker: Marker): this + + // sugar.js + length(): number + pointAt(length: number): { x: number; y: number } + text(text: string): TextPath + text(text: Text): TextPath + targets(): List<Element> + } + + // pattern.js + class Pattern extends Container { + url(): string + url(...rest: any[]): never + update(block: (pattern: Pattern) => void): this + toString(): string + } + + // poly.js + interface poly { + array(): PointArray + plot(): PointArray + plot(p: PointArrayAlias): this + clear(): this + move(x: number, y: number): this + size(width: number, height?: number): this + } + + // pointed.js + interface pointed { + x(): number + x(x: number): this + y(): number + y(y: number): this + height(): number + height(h: number): this + width(): number + width(w: number): this + } + + class Polyline extends Shape implements poly, pointed { + constructor(node?: SVGPolylineElement) + constructor(attr: PolyAttr) + + node: SVGPolylineElement + + array(): PointArray + plot(): PointArray + plot(p: PointArrayAlias): this + x(): number + x(x: number): this + y(): number + y(y: number): this + height(): number + height(h: number): this + width(): number + width(w: number): this + move(x: number, y: number): this + size(width: number, height?: number): this + marker( + position: string, + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + marker(position: string, marker: Marker): Marker + } + + class Polygon extends Shape implements poly, pointed { + constructor(node?: SVGPolygonElement) + constructor(attr: PolyAttr) + + node: SVGPolygonElement + array(): PointArray + plot(): PointArray + plot(p: PointArrayAlias): this + x(): number + x(x: number): this + y(): number + y(y: number): this + height(): number + height(h: number): this + width(): number + width(w: number): this + move(x: number, y: number): this + size(width: number, height?: number): this + marker( + position: string, + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + marker(position: string, marker: Marker): Marker + } + + class Rect extends Shape { + constructor(node?: SVGRectElement) + constructor(attr: RectAttr) + node: SVGRectElement + radius(x: number, y?: number): this + } + + // shape.js + class Shape extends Element {} + + // sugar.js + interface StrokeData { + color?: string + width?: number + opacity?: number + linecap?: string + linejoin?: string + miterlimit?: number + dasharray?: string + dashoffset?: number + } + + interface FillData { + color?: string + opacity?: number + rule?: string + } + + interface FontData { + family?: string + size?: NumberAlias + anchor?: string + leading?: NumberAlias + weight?: string + style?: string + } + // textable.js + interface Textable { + plain(text: string): this + length(): number + } + + // text.js + class Text extends Shape implements Textable { + constructor(node?: SVGElement) + constructor(attr: TextAttr) + + clone(): this + text(): string + text(text: string): this + text(block: (text: this) => void): this + leading(): Number + leading(leading: NumberAlias): this + rebuild(enabled: boolean): this + build(enabled: boolean): this + clear(): this + plain(text: string): this + length(): number + get(i: number): Tspan + path(): TextPath + path(d: PathArrayAlias | Path): TextPath + track(): Element + ax(): string + ax(x: string): this + ay(): string + ay(y: string): this + amove(x: number, y: number): this + textPath(): TextPath + + // main.js, from extend/copy prototypes from Tspan + tspan(text: string): Tspan + tspan(block: (tspan: Tspan) => void): this + } + + class Tspan extends Text implements Textable { + constructor(node?: SVGElement) + constructor(attr: TextAttr) + dx(): number + dx(x: NumberAlias): this + dy(): number + dy(y: NumberAlias): this + newLine(): this + tspan(text: string): Tspan + tspan(block: (tspan: Tspan) => void): this + length(): number + text(): string + text(text: string): this + text(block: (text: this) => void): this + plain(text: string): this + } + + // textpath.js + class TextPath extends Text { + constructor() + constructor(attr: TextPathAttr) + + array(): Array<any> + plot(): PathArray + plot(d: string): this + track(): Path + } + + // style.js + class Style extends Element { + constructor(node: SVGElement, attr?: StylingAttr) + addText(text: string): this + font(a: object): this + font(a: string, v: string | number): this + font(a: string): string + rule(selector: string, obj: any): this + } + + // use.js + class Use extends Shape { + use(element: string, file?: string): this + } + + // viewbox.js + type ViewBoxAlias = ViewBoxLike | number[] | string | Element + + interface ViewBox { + x: number + y: number + width: number + height: number + toString(): string + at(pos: number): ViewBox + } +} |