From 1f6f90aa6cd2d473e6cacce12bceccd438f55387 Mon Sep 17 00:00:00 2001 From: Georg Date: Tue, 24 Sep 2024 16:53:08 +0200 Subject: [PATCH 01/26] chore: update webvisualizer tooling (#415) * add gitignore * run `npm install` > new lockfile version * run `npx browserslist@latest --update-db` * run `npm audit fix` * run `npm audit fix --force` * fix: exclude the node_modules folder from build --- fed/mosaic-output/pom.xml | 8 + .../src/main/resources/web/.gitignore | 1 + .../src/main/resources/web/package-lock.json | 3186 ++++++++++------- .../src/main/resources/web/package.json | 2 +- 4 files changed, 1980 insertions(+), 1217 deletions(-) create mode 100644 fed/mosaic-output/src/main/resources/web/.gitignore diff --git a/fed/mosaic-output/pom.xml b/fed/mosaic-output/pom.xml index a7696a185..75a2dd3d7 100644 --- a/fed/mosaic-output/pom.xml +++ b/fed/mosaic-output/pom.xml @@ -51,6 +51,14 @@ + + + src/main/resources + + web/node_modules/** + + + org.apache.maven.plugins diff --git a/fed/mosaic-output/src/main/resources/web/.gitignore b/fed/mosaic-output/src/main/resources/web/.gitignore new file mode 100644 index 000000000..b512c09d4 --- /dev/null +++ b/fed/mosaic-output/src/main/resources/web/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/fed/mosaic-output/src/main/resources/web/package-lock.json b/fed/mosaic-output/src/main/resources/web/package-lock.json index 87e8b28a1..fed2fd7b4 100644 --- a/fed/mosaic-output/src/main/resources/web/package-lock.json +++ b/fed/mosaic-output/src/main/resources/web/package-lock.json @@ -1,35 +1,54 @@ { "name": "ol-browserify", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "packages": { + "": { + "name": "ol-browserify", + "version": "1.0.0", + "dependencies": { + "ol": "^5.1.3" + }, + "devDependencies": { + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "babelify": "^9.0.0", + "browserify": "^16.5.2", + "eslint": "^5.15.3", + "uglifyify": "^5.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.12.0", "invariant": "^2.2.4", "semver": "^5.5.0" } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.0", "@babel/helper-module-transforms": "^7.11.0", @@ -47,185 +66,169 @@ "semver": "^5.4.1", "source-map": "^0.5.0" }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-explode-assignable-expression": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.10.4", "browserslist": "^4.12.0", "invariant": "^2.2.4", "levenary": "^1.1.1", "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-member-expression-to-functions": "^7.10.5", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", "regexpu-core": "^4.7.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-map": { + "node_modules/@babel/helper-define-map": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/types": "^7.10.5", "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, - "@babel/helper-explode-assignable-expression": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "dev": true, - "requires": { + "dependencies": { "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.11.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-simple-access": "^7.10.4", @@ -233,54 +236,38 @@ "@babel/template": "^7.10.4", "@babel/types": "^7.11.0", "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, - "@babel/helper-regex": { + "node_modules/@babel/helper-regex": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, - "requires": { - "lodash": "^4.17.19" - }, "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "lodash": "^4.17.19" } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", "@babel/template": "^7.10.4", @@ -288,377 +275,505 @@ "@babel/types": "^7.10.4" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-member-expression-to-functions": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.11.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.11.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", - "dev": true + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-remap-async-to-generator": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { + "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-transform-parameters": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { + "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-remap-async-to-generator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-define-map": "^7.10.4", "@babel/helper-function-name": "^7.10.4", @@ -667,275 +782,359 @@ "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-simple-access": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.10.4", "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "dev": true, - "requires": { + "dependencies": { "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-regex": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.11.0", "@babel/helper-compilation-targets": "^7.10.4", "@babel/helper-module-imports": "^7.10.4", @@ -1004,348 +1203,373 @@ "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.4" } }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "engines": { + "node": ">=6.0.0" } }, - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, - "acorn-jsx": { + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0" + } }, - "acorn-node": { + "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, - "dependencies": { - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "acorn-walk": { + "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", + "dependencies": { + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ansi-escapes": { + "node_modules/ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "ansi-styles": { + "node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "minimalistic-assert": "^1.0.0" } }, - "assert": { + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "requires": { + "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" - }, + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "inherits": "2.0.1" } }, - "astral-regex": { + "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "babel-plugin-dynamic-import-node": { + "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, - "requires": { + "dependencies": { "object.assign": "^4.1.0" } }, - "babelify": { + "node_modules/babelify": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-9.0.0.tgz", "integrity": "sha512-Q8rZxbkCo0BKQFp4JYWSt9lVYWDRyZPk5fsUr4PQguxGDN0XXVjHCr00WaKpdSUhGXSVYjIujXjtFzhwTGg8VA==", - "dev": true + "dev": true, + "peerDependencies": { + "@babel/core": "7 || ^7.0.0-alpha || ^7.0.0-beta || ^7.0.0-rc" + } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base64-js": { + "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "browser-pack": { + "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" } }, - "browser-resolve": { + "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.17.0" } }, - "browserify": { + "node_modules/browserify": { "version": "16.5.2", "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -1367,6 +1591,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -1393,14 +1618,20 @@ "util": "~0.10.1", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" } }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -1409,326 +1640,373 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/browserify-sign/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" }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "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 + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "browserify-zlib": { + "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "requires": { + "dependencies": { "pako": "~1.0.5" } }, - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "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.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer": { + "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-status-codes": { + "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "node_modules/cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "caniuse-lite": { - "version": "1.0.30001251", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", - "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "dev": true, + "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" + } + ] }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "chardet": { + "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "cipher-base": { + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "cli-cursor": { + "node_modules/cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, - "requires": { + "dependencies": { "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "cli-width": { + "node_modules/cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "combine-source-map": { + "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - } } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/combine-source-map/node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "node_modules/commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "dev": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "console-browserify": { + "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "constants-browserify": { + "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.1.1" } }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "create-ecdh": { + "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, - "create-hash": { + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -1736,12 +2014,12 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -1750,25 +2028,28 @@ "sha.js": "^2.4.8" } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "requires": { + "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -1780,173 +2061,211 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "dash-ast": { + "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "requires": { - "ms": "^2.1.1" + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { + "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==", "dev": true, - "requires": { + "dependencies": { "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "defined": { + "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "deps-sort": { + "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, - "requires": { + "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" } }, - "des.js": { + "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "detective": { + "node_modules/detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.6.1", "defined": "^1.0.0", "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" } }, - "diffie-hellman": { + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, - "doctrine": { + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "domain-browser": { + "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "duplexer2": { + "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "electron-to-chromium": { - "version": "1.3.539", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz", - "integrity": "sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==", + "node_modules/electron-to-chromium": { + "version": "1.5.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", + "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", "dev": true }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", - "dev": true + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "eslint": { + "node_modules/eslint": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "ajv": "^6.9.1", "chalk": "^2.1.0", @@ -1983,370 +2302,487 @@ "strip-json-comments": "^2.0.1", "table": "^5.2.3", "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" } }, - "eslint-scope": { + "node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, - "requires": { + "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "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" + } }, - "espree": { + "node_modules/espree": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, - "requires": { + "dependencies": { "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esquery": { + "node_modules/esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^4.0.0" + }, + "engines": { + "node": ">=0.6" } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^4.1.0" + }, + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "events": { + "node_modules/events": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "evp_bytestokey": { + "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "requires": { + "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "external-editor": { + "node_modules/extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha512-hT3PRBs1qm4P8g2keUBZ9bPaFHAcS78o5aCd9WhFTluHZZgBEkI08R+zYrpRpImyRTH+dw7IlqxrOp9iartTkw==", + "dev": true + }, + "node_modules/external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, - "requires": { + "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" } }, - "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=", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-safe-stringify": { + "node_modules/fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, - "figures": { + "node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" } }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, - "requires": { + "dependencies": { "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "engines": { + "node": ">=4" } }, - "flatted": { + "node_modules/flatted": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { + "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 }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-assigned-identifiers": { + "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "glob": { + "node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "globals": { + "node_modules/globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "hash-base": { + "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/hash-base/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==", + "dev": true, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/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" }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "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 + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "hash.js": { + "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "hmac-drbg": { + "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, - "requires": { + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "htmlescape": { + "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "https-browserify": { + "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, - "ignore": { + "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 + "dev": true, + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inline-source-map": { + "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, - "requires": { + "dependencies": { "source-map": "~0.5.3" } }, - "inquirer": { + "node_modules/inquirer": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, - "requires": { + "dependencies": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", "cli-cursor": "^2.1.0", @@ -2361,293 +2797,356 @@ "strip-ansi": "^5.1.0", "through": "^2.3.6" }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "insert-module-globals": { + "node_modules/insert-module-globals": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" } }, - "invariant": { + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "is-promise": { + "node_modules/is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify": { + "node_modules/json-stable-stringify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", "dev": true, - "requires": { + "dependencies": { "jsonify": "~0.0.0" } }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "requires": { - "minimist": "^1.2.5" + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "jsonify": { + "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "jsonparse": { + "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "labeled-stream-splicer": { + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, - "leven": { + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "levenary": { + "node_modules/levenary": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", "dev": true, - "requires": { + "dependencies": { "leven": "^3.1.0" + }, + "engines": { + "node": ">= 6" } }, - "levn": { + "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "md5.js": { + "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "miller-rabin": { + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "mimic-fn": { + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "node_modules/minimist": { + "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" + } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "requires": { - "minimist": "0.0.8" - }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "module-deps": { + "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -2655,6 +3154,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -2662,332 +3162,431 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "mute-stream": { + "node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nice-try": { + "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, - "requires": { + "dependencies": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", "has-symbols": "^1.0.0", "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" } }, - "ol": { + "node_modules/ol": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/ol/-/ol-5.3.3.tgz", "integrity": "sha512-7eU4x8YMduNcED1D5wI+AMWDRe7/1HmGfsbV+kFFROI9RNABU/6n4osj6Q3trZbxxKnK2DSRIjIRGwRHT/Z+Ww==", - "requires": { + "dependencies": { "pbf": "3.1.0", "pixelworks": "1.1.0", "rbush": "2.0.2" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "node_modules/onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, - "requires": { + "dependencies": { "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "optionator": { + "node_modules/optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, - "requires": { + "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "os-browserify": { + "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-tmpdir": { + "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pako": { + "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parents": { + "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, - "requires": { + "dependencies": { "path-platform": "~0.11.15" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, - "path-browserify": { + "node_modules/parse-asn1/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/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, - "path-key": { + "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-platform": { + "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "pbf": { + "node_modules/pbf": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", - "requires": { + "dependencies": { "ieee754": "^1.1.6", "resolve-protobuf-schema": "^2.0.0" + }, + "bin": { + "pbf": "bin/pbf" } }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "requires": { + "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "pixelworks": { + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/pixelworks": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "process": { + "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { + "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "protocol-buffers-schema": { + "node_modules/protocol-buffers-schema": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" }, - "public-encrypt": { + "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, - "punycode": { + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "querystring": { + "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "querystring-es3": { + "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "quickselect": { + "node_modules/quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "randomfill": { + "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "rbush": { + "node_modules/rbush": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "requires": { + "dependencies": { "quickselect": "^1.0.1" } }, - "read-only-stream": { + "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -2995,704 +3594,859 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "safe-buffer": "~5.1.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, - "regenerator-transform": { + "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==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexpp": { + "node_modules/regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.5.0" + } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.2.0", "regjsgen": "^0.5.1", "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" } }, - "regjsgen": { + "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 }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "bin": { + "regjsparser": "bin/parser" + } + }, + "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=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, - "resolve": { + "node_modules/resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "requires": { + "dependencies": { "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "resolve-protobuf-schema": { + "node_modules/resolve-protobuf-schema": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "requires": { + "dependencies": { "protocol-buffers-schema": "^3.3.1" } }, - "restore-cursor": { + "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, - "requires": { + "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "ripemd160": { + "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "run-async": { + "node_modules/run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, - "requires": { + "dependencies": { "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" } }, - "rxjs": { + "node_modules/rxjs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz", "integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "sha.js": { + "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "shasum": { + "node_modules/shasum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, - "requires": { + "dependencies": { "json-stable-stringify": "~0.0.0", "sha.js": "~2.4.4" } }, - "shasum-object": { + "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, - "requires": { + "dependencies": { "fast-safe-stringify": "^2.0.7" } }, - "shebang-command": { + "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=", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "shebang-regex": { + "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=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-concat": { + "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true + "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" + } + ] }, - "slice-ansi": { + "node_modules/slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "source-map": { + "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "stream-browserify": { + "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, - "requires": { + "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" } }, - "stream-combiner2": { + "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, - "requires": { + "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "stream-http": { + "node_modules/stream-http": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", "dev": true, - "requires": { + "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" - }, + } + }, + "node_modules/stream-http/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/stream-http/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==", + "dev": true, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "stream-splicer": { + "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, - "string-width": { + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/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/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "requires": { + "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" }, - "dependencies": { - "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 - } + "engines": { + "node": ">=4" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "subarg": { + "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.1.0" } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "syntax-error": { + "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.2.0" } }, - "table": { + "node_modules/table": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.9.1", "lodash": "^4.17.11", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" } }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "timers-browserify": { + "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, - "requires": { + "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "tmp": { + "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "requires": { + "dependencies": { "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "tslib": { + "node_modules/tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "tty-browserify": { + "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "type-check": { + "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "uglifyify": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-5.0.2.tgz", - "integrity": "sha512-NcSk6pgoC+IgwZZ2tVLVHq+VNKSvLPlLkF5oUiHPVOJI0s/OlSVYEGXG9PCAH0hcyFZLyvt4KBdPAQBRlVDn1Q==", + "node_modules/uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", + "dev": true, + "dependencies": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-es/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglifyify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-5.0.0.tgz", + "integrity": "sha512-B224f6F6CSGpdSXM54/76cKWyomlxwIoOespSywcFopFHeX10xqhjy1MlObgC0H7N/c74mfGinPEoZhO11OgPQ==", + "dev": true, + "dependencies": { "convert-source-map": "~1.1.0", + "extend": "^1.2.1", "minimatch": "^3.0.2", - "terser": "^3.7.5", "through": "~2.3.4", - "xtend": "^4.0.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - } + "uglify-es": "^3.0.15" } }, - "umd": { + "node_modules/uglifyify/node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "dev": true, + "bin": { + "umd": "bin/cli.js" + } }, - "undeclared-identifiers": { + "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, - "requires": { - "punycode": "^2.1.0" - }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" } }, - "url": { + "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, - "requires": { + "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } } }, - "util": { + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, - "requires": { + "dependencies": { "inherits": "2.0.3" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "vm-browserify": { + "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "which": { + "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { + "node_modules/write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, - "requires": { + "dependencies": { "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } } } } diff --git a/fed/mosaic-output/src/main/resources/web/package.json b/fed/mosaic-output/src/main/resources/web/package.json index 02fc35cca..556ddf4db 100644 --- a/fed/mosaic-output/src/main/resources/web/package.json +++ b/fed/mosaic-output/src/main/resources/web/package.json @@ -17,6 +17,6 @@ "babelify": "^9.0.0", "browserify": "^16.5.2", "eslint": "^5.15.3", - "uglifyify": "^5.0.2" + "uglifyify": "^5.0.0" } } From b7616c25cb37e083cff81b6995ff8a3cfecfb008 Mon Sep 17 00:00:00 2001 From: Georg Date: Tue, 24 Sep 2024 16:56:47 +0200 Subject: [PATCH 02/26] build: copy web-visualizer files to work with starter (#414) --- .gitignore | 1 - rti/mosaic-starter/.gitignore | 2 ++ rti/mosaic-starter/pom.xml | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 rti/mosaic-starter/.gitignore diff --git a/.gitignore b/.gitignore index dc36af0bd..a3de9fa95 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,6 @@ buildNumber.properties # MOSAIC -logs/ tmp/ *.log credentials.cached diff --git a/rti/mosaic-starter/.gitignore b/rti/mosaic-starter/.gitignore new file mode 100644 index 000000000..7e4a2069f --- /dev/null +++ b/rti/mosaic-starter/.gitignore @@ -0,0 +1,2 @@ +logs/ +tools/ diff --git a/rti/mosaic-starter/pom.xml b/rti/mosaic-starter/pom.xml index 7b69e5c8b..749d9397a 100644 --- a/rti/mosaic-starter/pom.xml +++ b/rti/mosaic-starter/pom.xml @@ -178,6 +178,22 @@ + + + copy-resources-web-visualizer + validate + + copy-resources + + + ${project.basedir}/tools/web + + + ${project.parent.basedir}/fed/mosaic-output/src/main/resources/web + + + + copy-resources-etc From b12b3e100c1a159bec073cbc6f9fb01ba64b1f33 Mon Sep 17 00:00:00 2001 From: Karl Schrab Date: Tue, 24 Sep 2024 17:05:46 +0200 Subject: [PATCH 03/26] build: migrate to Java 17 (#410) * feat: set Java 17 as source/target language level * refactor: use pattern matching for instanceof #java17 * ci: upgrade spotbugs-maven-plugin, don't execute analysis in parallel * refactor: use Stream.toList() #java17 * refactor: use switch expressions #java17 * refactor: use record for some inner classes #java17 * refactor: use text blocks #java17 * ci: update docker image for builds on eclipse CI * refactor: use pattern matching for instanceof and Stream.toList #java17 * build: use JDK 17 in github action * clean(sns): remove unnecessary default case --- .github/workflows/maven.yml | 4 +- Jenkinsfile | 4 +- README.md | 2 +- .../examples/commuter/SimpleCommuterApp.java | 4 +- .../cam/UserTaggedValueReadingApp.java | 4 +- .../VehicleConfigurationApp.java | 3 +- .../SpecificEventProcessingApp.java | 6 +- .../sampling/MultithreadSamplingApp.java | 4 +- .../AdditionalProcessingApp.java | 3 +- .../InterconnectApp.java | 3 +- .../AdditionalReceivingApp.java | 5 +- .../MosaicInteractionHandlingApp.java | 5 +- .../traci/SumoTraciInteractionApp.java | 14 +- .../app/tutorial/vehicle/PerceptionApp.java | 3 +- .../app/tutorial/EventProcessingApp.java | 3 +- .../mosaic/app/tutorial/TrafficLightApp.java | 8 +- .../app/tutorial/WeatherWarningApp.java | 3 +- .../ambassador/ApplicationAmbassador.java | 5 +- .../ambassador/SimulationKernel.java | 3 +- .../application/ambassador/UnitSimulator.java | 32 ++-- .../simulation/AbstractSimulationUnit.java | 23 ++- .../simulation/ChargingStationUnit.java | 4 +- .../simulation/ElectricVehicleUnit.java | 8 +- .../simulation/TrafficLightGroupUnit.java | 7 +- .../TrafficManagementCenterUnit.java | 7 +- .../ambassador/simulation/VehicleUnit.java | 9 +- .../simulation/communication/AdHocModule.java | 4 +- .../simulation/communication/CellModule.java | 26 ++- .../CentralPerceptionComponent.java | 9 +- .../perception/SumoPerceptionModule.java | 3 +- .../errormodels/BoundingBoxOcclusion.java | 3 +- .../index/providers/TrafficLightTree.java | 3 +- .../ambassador/util/UnitLoggerImpl.java | 12 +- .../fed/application/config/CPerception.java | 16 +- .../SimplePerceptionModuleTest.java | 5 +- .../fed/cell/ambassador/CellAmbassador.java | 7 +- .../config/gson/RegionsNamingStrategy.java | 23 +-- .../fed/cell/module/GeocasterModule.java | 4 +- .../streammodules/AbstractStreamModule.java | 7 +- .../streammodules/DownstreamModule.java | 22 +-- .../module/streammodules/UpstreamModule.java | 8 +- .../fed/cell/utility/CapacityUtility.java | 26 ++- .../mosaic/fed/cell/utility/DelayUtility.java | 20 +-- .../fed/cell/utility/RegionUtility.java | 17 +- .../mosaic/fed/cell/utility/RegionsIndex.java | 3 +- .../ambassador/EnvironmentAmbassador.java | 3 +- .../mapping/ambassador/SpawningFramework.java | 3 +- .../ambassador/VehicleFlowGenerator.java | 140 ++++++--------- .../spawning/ChargingStationSpawner.java | 3 +- .../ambassador/spawning/UnitSpawner.java | 5 +- .../weighting/FixedOrderSelector.java | 5 +- .../generator/file/FileOutputLoader.java | 22 +-- .../file/format/ExtendedMethodSet.java | 8 +- .../generator/file/format/MethodElement.java | 4 +- .../fed/sns/ambassador/SnsAmbassador.java | 13 +- .../sns/ambassador/TransmissionSimulator.java | 9 +- .../ambassador/AbstractSumoAmbassador.java | 27 ++- .../api/complex/SumoTrafficLightLogic.java | 19 +- .../sumo/bridge/facades/SimulationFacade.java | 30 ++-- .../bridge/facades/TrafficLightFacade.java | 4 +- .../SimulationGetDepartedVehicleIds.java | 3 +- .../libsumo/TrafficLightAddProgram.java | 2 +- .../libsumo/VehicleGetTeleportingList.java | 6 +- .../bridge/traci/TrafficLightGetPrograms.java | 4 +- .../traci/writer/TrafficLightPhaseWriter.java | 6 +- .../mosaic/fed/sumo/util/InductionLoop.java | 10 +- .../sumo/util/TrafficLightStateDecoder.java | 2 +- .../traci/TrafficLightGetProgramsTest.java | 4 +- .../eclipse/mosaic/lib/database/Database.java | 4 +- .../database/persistence/SQLiteAccess.java | 56 +++--- .../mosaic/lib/database/road/Restriction.java | 10 +- .../mosaic/lib/database/route/Route.java | 5 +- .../lib/database/spatial/NodeFinder.java | 3 +- .../mosaic/lib/geo/CartesianPolygon.java | 8 +- .../eclipse/mosaic/lib/geo/GeoPolygon.java | 16 +- .../mosaic/lib/spatial/PointCloud.java | 28 +-- .../mosaic/lib/spatial/QuickHull2d.java | 2 +- .../lib/spatial/SpatialItemAdapter.java | 3 - .../coupling/AbstractNetworkAmbassador.java | 10 +- .../lib/coupling/ClientServerChannel.java | 169 +++++------------- .../mosaic/lib/enums/VehicleStopMode.java | 21 +-- .../TrafficSignLaneAssignment.java | 3 +- .../objects/trafficsign/TrafficSignSpeed.java | 3 +- .../lib/objects/v2x/etsi/CamContent.java | 19 +- .../graphhopper/GraphHopperRouting.java | 4 +- .../mosaic/lib/routing/util/RouteFixer.java | 3 +- .../database/LazyLoadingRoadPositionTest.java | 6 +- .../eclipse/mosaic/lib/util/ClassUtils.java | 3 +- .../mosaic/lib/util/junit/TestUtils.java | 4 +- pom.xml | 6 +- test/ci/ci-image-mvn-sumo/Dockerfile | 2 +- test/ci/ci-image-mvn-sumo/README.md | 6 +- .../perceptionmodule/SimplePerceptionApp.java | 5 +- .../sendandreceive/AbstractReceiverApp.java | 6 +- .../sendandreceive/NackReceivingServer.java | 4 +- 95 files changed, 448 insertions(+), 687 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 682e7b3d5..380671cb2 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -16,9 +16,9 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 - name: Build with Maven run: mvn -B package --file pom.xml diff --git a/Jenkinsfile b/Jenkinsfile index 502886967..802d57c8f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,7 +8,7 @@ kind: Pod spec: containers: - name: maven-sumo - image: eclipsemosaic/mosaic-ci:jdk11-sumo-1.20.0 + image: eclipsemosaic/mosaic-ci:jdk17-sumo-1.20.0 command: - cat tty: true @@ -112,7 +112,7 @@ spec: stage('Analysis') { steps { container('maven-sumo') { - sh 'mvn site -T 4' + sh 'mvn site' } } diff --git a/README.md b/README.md index 6b253c108..6833a6501 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ For further questions we are available via mosaic@fokus.fraunhofer.de For a successful build you need the following software to be installed: * **Maven 3.1.x** or higher. -* **Java 11**, 17, or 21 - We recommend using the [Adoptium OpenJDK (aka Eclipse Temurin)](https://adoptium.net/?variant=openjdk11). +* **Java 17**, or 21 - We recommend using the [Adoptium OpenJDK (aka Eclipse Temurin)](https://adoptium.net/?variant=openjdk17). * **SUMO 1.20.0** - Older versions > 1.2.0 are most probably supported, but not tested. The environment variable `SUMO_HOME` should be configured properly. ## Build diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/examples/commuter/SimpleCommuterApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/examples/commuter/SimpleCommuterApp.java index 089a1eef0..7e722279c 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/examples/commuter/SimpleCommuterApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/examples/commuter/SimpleCommuterApp.java @@ -131,8 +131,8 @@ private void driveBack(DriveBackEvent event) { */ @Override public void processEvent(Event event) { - if (event instanceof DriveBackEvent) { - driveBack((DriveBackEvent) event); + if (event instanceof DriveBackEvent driveBackEvent) { + driveBack(driveBackEvent); } } diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/cam/UserTaggedValueReadingApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/cam/UserTaggedValueReadingApp.java index 5a667c6cb..9bfbc6aae 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/cam/UserTaggedValueReadingApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/cam/UserTaggedValueReadingApp.java @@ -55,11 +55,11 @@ public void onStartup() { public void onMessageReceived(ReceivedV2xMessage receivedV2xMessage) { V2xMessage msg = receivedV2xMessage.getMessage(); - if (msg instanceof Cam) { + if (msg instanceof Cam cam) { try { getLog().infoSimTime(this, "CAM message arrived, userTaggedValue: {}", CamSendingApp.DEFAULT_OBJECT_SERIALIZATION - .fromBytes(((Cam) msg).getUserTaggedValue(), this.getClass().getClassLoader()) + .fromBytes(cam.getUserTaggedValue(), this.getClass().getClassLoader()) ); } catch (IOException | ClassNotFoundException e) { getLog().error("An error occurred", e); diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/configurableapp/VehicleConfigurationApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/configurableapp/VehicleConfigurationApp.java index a233a0b19..c1ecb240d 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/configurableapp/VehicleConfigurationApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/configurableapp/VehicleConfigurationApp.java @@ -57,8 +57,7 @@ public void onShutdown() { @Override public void processEvent(Event event) throws Exception { Object resource = event.getResource(); - if (resource instanceof String) { - String message = (String) resource; + if (resource instanceof String message) { getLog().infoSimTime(this, "Received message: \"{}\"", message); } getLog().info("Wanted speed from config equals " + this.config.fooInteger); diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/SpecificEventProcessingApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/SpecificEventProcessingApp.java index 06b2ee97e..bdfce399c 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/SpecificEventProcessingApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/SpecificEventProcessingApp.java @@ -45,8 +45,7 @@ public void onStartup() { public void processEvent(final Event event) throws Exception { getLog().infoSimTime(this, "Event has been triggered and is being processed by the processEvent method that is declared in EventProcessor interface!"); - if (event.getResource() instanceof String) { - String message = (String)event.getResource(); + if (event.getResource() instanceof String message) { getLog().infoSimTime(this, "Received message: \"{}\"", message); } } @@ -59,8 +58,7 @@ public void onShutdown() { public void mySpecificMethod(Event event) { getLog().infoSimTime(this, "Event has been triggered and is being processed by a specific method!"); - if (event.getResource() instanceof String) { - String message = (String)event.getResource(); + if (event.getResource() instanceof String message) { getLog().infoSimTime(this, "Received message: \"{}\"", message); } } diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/sampling/MultithreadSamplingApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/sampling/MultithreadSamplingApp.java index 04605b578..ac6e75fc0 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/sampling/MultithreadSamplingApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/eventprocessing/sampling/MultithreadSamplingApp.java @@ -67,9 +67,7 @@ private void sample() { @Override public void processEvent(final Event event) throws Exception { Object resource = event.getResource(); - if (resource instanceof String) { - String command = (String) resource; - + if (resource instanceof String command) { switch (command) { case "start": startThread(); diff --git a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/interappcommunication/AdditionalProcessingApp.java b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/interappcommunication/AdditionalProcessingApp.java index 953f6db5b..771ffc168 100644 --- a/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/interappcommunication/AdditionalProcessingApp.java +++ b/app/tutorials/example-applications/src/main/java/org/eclipse/mosaic/app/tutorial/interappcommunication/AdditionalProcessingApp.java @@ -34,8 +34,7 @@ public class AdditionalProcessingApp extends AbstractApplication perceivedVehicles = getOs().getPerceptionModule().getPerceivedVehicles(); getLog().infoSimTime(this, "Perceived vehicles: {}", - perceivedVehicles.stream().map(VehicleObject::getId).collect(Collectors.toList())); + perceivedVehicles.stream().map(VehicleObject::getId).toList()); colorVehicles(perceivedVehicles, previouslyPerceivedVehicles, Color.GREEN); // set color to perceived colorVehicles(previouslyPerceivedVehicles, perceivedVehicles, Color.YELLOW); // reset color of no longer perceived diff --git a/app/tutorials/traffic-light-communication/src/main/java/org/eclipse/mosaic/app/tutorial/EventProcessingApp.java b/app/tutorials/traffic-light-communication/src/main/java/org/eclipse/mosaic/app/tutorial/EventProcessingApp.java index 9f2012ed3..bdc29c23f 100644 --- a/app/tutorials/traffic-light-communication/src/main/java/org/eclipse/mosaic/app/tutorial/EventProcessingApp.java +++ b/app/tutorials/traffic-light-communication/src/main/java/org/eclipse/mosaic/app/tutorial/EventProcessingApp.java @@ -29,8 +29,7 @@ public class EventProcessingApp extends AbstractApplication relevantInductionLoops = trafficDetectorUpdates.getUpdatedInductionLoops().stream() .filter(i -> tmc.getInductionLoopIds().contains(i.getName())) - .collect(Collectors.toList()); + .toList(); final List relevantLaneAreaDetectors = trafficDetectorUpdates.getUpdatedLaneAreaDetectors().stream() .filter(i -> tmc.getLaneAreaIds().contains(i.getName())) - .collect(Collectors.toList()); + .toList(); if (!relevantInductionLoops.isEmpty() || !relevantLaneAreaDetectors.isEmpty()) { // Create new TrafficDetectorUpdates interaction containing only relevant updates diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/SimulationKernel.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/SimulationKernel.java index 9a73fa1d4..7c1a1b852 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/SimulationKernel.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/SimulationKernel.java @@ -335,8 +335,7 @@ public Path getMainLogDirectory() { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); for (Logger logger : context.getLoggerList()) { Appender appender = logger.getAppender("ApplicationLog"); - if (appender instanceof FileAppender) { - FileAppender fileAppender = ((FileAppender) appender); + if (appender instanceof FileAppender fileAppender) { return new File(fileAppender.getFile()).toPath().getParent(); } } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/UnitSimulator.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/UnitSimulator.java index 1952b4b1a..33410aaf0 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/UnitSimulator.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/UnitSimulator.java @@ -174,18 +174,18 @@ private void addSimulationUnit(final AbstractSimulationUnit unit) { allUnits.put(unit.getId(), unit); // second, put the simulation unit in the specific map - if (unit instanceof ChargingStationUnit) { - chargingStations.put(unit.getId(), (ChargingStationUnit) unit); - } else if (unit instanceof RoadSideUnit) { - roadSideUnits.put(unit.getId(), (RoadSideUnit) unit); - } else if (unit instanceof TrafficLightGroupUnit) { - trafficLights.put(unit.getId(), (TrafficLightGroupUnit) unit); - } else if (unit instanceof TrafficManagementCenterUnit) { - tmcs.put(unit.getId(), (TrafficManagementCenterUnit) unit); - } else if (unit instanceof ServerUnit) { - servers.put(unit.getId(), (ServerUnit) unit); - } else if (unit instanceof VehicleUnit) { - vehicles.put(unit.getId(), (VehicleUnit) unit); + if (unit instanceof ChargingStationUnit chargingStation) { + chargingStations.put(unit.getId(), chargingStation); + } else if (unit instanceof RoadSideUnit roadSideUnit) { + roadSideUnits.put(unit.getId(), roadSideUnit); + } else if (unit instanceof TrafficLightGroupUnit trafficLightGroup) { + trafficLights.put(unit.getId(), trafficLightGroup); + } else if (unit instanceof TrafficManagementCenterUnit tmc) { + tmcs.put(unit.getId(), tmc); + } else if (unit instanceof ServerUnit server) { + servers.put(unit.getId(), server); + } else if (unit instanceof VehicleUnit vehicle) { + vehicles.put(unit.getId(), vehicle); } else { throw new RuntimeException(ErrorRegister.UNIT_SIMULATOR_UnknownSimulationUnitToPutInMap.toString()); } @@ -459,10 +459,10 @@ private void doSensorRegistration(final long time, final String id) { public void processEvent(Event event) { final Object resource = event.getResource(); - if (resource instanceof RemoveVehicles) { - removeVehicles((RemoveVehicles) resource); - } else if (resource instanceof StartApplications) { - startApplications((StartApplications) resource); + if (resource instanceof RemoveVehicles removeVehicles) { + removeVehicles(removeVehicles); + } else if (resource instanceof StartApplications startApplications) { + startApplications(startApplications); } } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/AbstractSimulationUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/AbstractSimulationUnit.java index 65f7cda5b..19802a3f3 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/AbstractSimulationUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/AbstractSimulationUnit.java @@ -165,12 +165,11 @@ public final boolean preProcessEvent(final Event event) { return false; } - if (event instanceof InterceptedEvent) { - /* - * This should be an intercepted event from an application of this simulation unit. - * The operating system intercept all events from the applications and can watch into the events and maybe forward the event. - */ - final InterceptedEvent interceptedEvent = (InterceptedEvent) event; + /* + * This should be an intercepted event from an application of this simulation unit. + * The operating system intercept all events from the applications and can watch into the events and maybe forward the event. + */ + if (event instanceof InterceptedEvent interceptedEvent) { // cast the resource of the intercepted event, it must be an event final Event originalEvent = interceptedEvent.getOriginalEvent(); if (osLog.isTraceEnabled()) { @@ -198,11 +197,11 @@ public final boolean preProcessEvent(final Event event) { return true; } else { - if (resource instanceof ReceivedV2xMessage) { - processReceivedV2xMessage((ReceivedV2xMessage) resource); + if (resource instanceof ReceivedV2xMessage receivedMessage) { + processReceivedV2xMessage(receivedMessage); return true; - } else if (resource instanceof V2xMessageAcknowledgement) { - processV2xMessageAcknowledgement((V2xMessageAcknowledgement) resource); + } else if (resource instanceof V2xMessageAcknowledgement v2xAck) { + processV2xMessageAcknowledgement(v2xAck); return true; } else { return false; @@ -284,8 +283,8 @@ public final void loadApplications(List applicationClassNames) { try { // check if defined operating system is matching Type mySuperclass = newApplication.getClass().getGenericSuperclass(); - if (mySuperclass instanceof ParameterizedType) { - Type[] typeArgs = ((ParameterizedType) mySuperclass).getActualTypeArguments(); + if (mySuperclass instanceof ParameterizedType parameterizedType) { + Type[] typeArgs = parameterizedType.getActualTypeArguments(); Type type = typeArgs[typeArgs.length - 1]; boolean typeAssignableFromOs = Class.forName(StringUtils.substringAfter(type.toString(), "interface").trim()) .isAssignableFrom(operatingSystemCheck); diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ChargingStationUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ChargingStationUnit.java index 8171683f9..d327e94c9 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ChargingStationUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ChargingStationUnit.java @@ -84,8 +84,8 @@ public void processEvent(@Nonnull final Event event) throws Exception { throw new RuntimeException(ErrorRegister.CHARGING_STATION_NoEventResource.toString()); } - if (resource instanceof ChargingStationData) { - updateChargingStation((ChargingStationData) resource); + if (resource instanceof ChargingStationData data) { + updateChargingStation(data); } else { getOsLog().error("Unknown event resource: {}", event); throw new RuntimeException(ErrorRegister.CHARGING_STATION_UnknownEvent.toString()); diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ElectricVehicleUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ElectricVehicleUnit.java index 314d88412..1a0c18bb7 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ElectricVehicleUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/ElectricVehicleUnit.java @@ -53,13 +53,13 @@ private void onVehicleChargingDenial(final VehicleChargingDenial vehicleCharging @Override protected boolean handleEventResource(Object resource, long eventType) { - if (resource instanceof BatteryData) { - updateBatteryData((BatteryData) resource); + if (resource instanceof BatteryData data) { + updateBatteryData(data); return true; } - if (resource instanceof VehicleChargingDenial) { - onVehicleChargingDenial((VehicleChargingDenial) resource); + if (resource instanceof VehicleChargingDenial chargingDenial) { + onVehicleChargingDenial(chargingDenial); return true; } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficLightGroupUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficLightGroupUnit.java index 84b50369c..c34e1f9d0 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficLightGroupUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficLightGroupUnit.java @@ -39,7 +39,6 @@ import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.Nonnull; /** @@ -102,8 +101,8 @@ public void processEvent(@Nonnull final Event event) throws Exception { throw new RuntimeException(ErrorRegister.TRAFFIC_LIGHT_NoEventResource.toString()); } - if (resource instanceof TrafficLightGroupInfo) { - onTrafficLightUpdate((TrafficLightGroupInfo) resource); + if (resource instanceof TrafficLightGroupInfo data) { + onTrafficLightUpdate(data); } else { getOsLog().error("Unknown event resource: {}", event); throw new RuntimeException(ErrorRegister.TRAFFIC_LIGHT_UnknownEvent.toString()); @@ -174,7 +173,7 @@ public void switchToProgramAndPhase(String newProgramId, int phaseId) { public Collection getSignalSequence(String trafficLightProgramId, int trafficLightId) { List result = getAllPrograms().stream() .filter(program -> program.getProgramId().equals(trafficLightProgramId)) - .collect(Collectors.toList()); + .toList(); if (!result.isEmpty()) { return result.get(0).getSignalSequence(trafficLightId); } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficManagementCenterUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficManagementCenterUnit.java index 3a3b85ce2..037a84614 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficManagementCenterUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/TrafficManagementCenterUnit.java @@ -16,8 +16,6 @@ package org.eclipse.mosaic.fed.application.ambassador.simulation; import org.eclipse.mosaic.fed.application.ambassador.ErrorRegister; -import org.eclipse.mosaic.fed.application.ambassador.simulation.communication.AdHocModule; -import org.eclipse.mosaic.fed.application.ambassador.simulation.communication.CamBuilder; import org.eclipse.mosaic.fed.application.ambassador.simulation.tmc.InductionLoop; import org.eclipse.mosaic.fed.application.ambassador.simulation.tmc.LaneAreaDetector; import org.eclipse.mosaic.fed.application.app.api.TrafficManagementCenterApplication; @@ -27,7 +25,6 @@ import org.eclipse.mosaic.interactions.traffic.LanePropertyChange; import org.eclipse.mosaic.interactions.traffic.TrafficDetectorUpdates; import org.eclipse.mosaic.lib.enums.VehicleClass; -import org.eclipse.mosaic.lib.geo.GeoPoint; import org.eclipse.mosaic.lib.objects.mapping.TmcMapping; import org.eclipse.mosaic.lib.objects.traffic.InductionLoopInfo; import org.eclipse.mosaic.lib.objects.traffic.LaneAreaDetectorInfo; @@ -140,9 +137,7 @@ public void processEvent(Event event) throws Exception { } private boolean handleEventResource(Object resource) { - if (resource instanceof TrafficDetectorUpdates) { - TrafficDetectorUpdates detectorUpdates = (TrafficDetectorUpdates) resource; - + if (resource instanceof TrafficDetectorUpdates detectorUpdates) { final List updatedInductionLoops = new ArrayList<>(detectorUpdates.getUpdatedInductionLoops().size()); for (InductionLoopInfo inductionLoopInfo : detectorUpdates.getUpdatedInductionLoops()) { InductionLoop inductionLoop = getInductionLoop(inductionLoopInfo.getName()); diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/VehicleUnit.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/VehicleUnit.java index 8844f47f8..54f06ee0e 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/VehicleUnit.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/VehicleUnit.java @@ -81,9 +81,8 @@ public VehicleUnit(String vehicleName, VehicleType vehicleType, final GeoPoint i navigationModule.setCurrentPosition(initialPosition); Database database = null; - if (SimulationKernel.SimulationKernel.getCentralNavigationComponent().getRouting() instanceof DatabaseRouting) { - database = ((DatabaseRouting) SimulationKernel.SimulationKernel - .getCentralNavigationComponent().getRouting()).getScenarioDatabase(); + if (SimulationKernel.SimulationKernel.getCentralNavigationComponent().getRouting() instanceof DatabaseRouting dbRouting) { + database = dbRouting.getScenarioDatabase(); } if (SimulationKernel.SimulationKernel.getCentralPerceptionComponent().getTrafficObjectIndex() != null) { @@ -149,8 +148,8 @@ public void processEvent(@Nonnull final Event event) throws Exception { } protected boolean handleEventResource(Object resource, long eventType) { - if (resource instanceof VehicleData) { - updateVehicleInfo((VehicleData) resource); + if (resource instanceof VehicleData data) { + updateVehicleInfo(data); return true; } if (resource instanceof BatteryData) { diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/AdHocModule.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/AdHocModule.java index 32c0cc322..daeef9c6c 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/AdHocModule.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/AdHocModule.java @@ -140,10 +140,10 @@ public void sendV2xMessage(V2xMessage msg) { * @return the created builder for further configuration */ public AdHocMessageRoutingBuilder createMessageRouting() { - if (!(getOwner() instanceof Locatable)) { + if (!(getOwner() instanceof Locatable locatable)) { throw new UnsupportedOperationException("Cannot send message from senders without a location."); } - GeoPoint position = ((Locatable) getOwner()).getPosition(); + GeoPoint position = locatable.getPosition(); return new AdHocMessageRoutingBuilder(getOwner().getId(), position); } } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/CellModule.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/CellModule.java index df6dada0d..0a55b687f 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/CellModule.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/communication/CellModule.java @@ -114,17 +114,15 @@ public Integer sendCam() { } CellModuleConfiguration.CellCamConfiguration camConfiguration = configuration.getCamConfiguration(); - switch (camConfiguration.getAddressingMode()) { - case CELL_TOPOCAST: - return sendCamViaTopocast(camConfiguration); - case CELL_GEOCAST: - return sendCamViaGeoBroadcast(camConfiguration); - case CELL_GEOCAST_MBMS: - return sendCamViaGeoBroadcastMbms(camConfiguration); - default: + return switch (camConfiguration.getAddressingMode()) { + case CELL_TOPOCAST -> sendCamViaTopocast(camConfiguration); + case CELL_GEOCAST -> sendCamViaGeoBroadcast(camConfiguration); + case CELL_GEOCAST_MBMS -> sendCamViaGeoBroadcastMbms(camConfiguration); + default -> { log.warn("sendCam: Unsupported addressing mode {}.", camConfiguration.getAddressingMode()); - return null; - } + yield null; + } + }; } private Integer sendCamViaTopocast(CellModuleConfiguration.CellCamConfiguration camConfiguration) { @@ -132,18 +130,18 @@ private Integer sendCamViaTopocast(CellModuleConfiguration.CellCamConfiguration } private Integer sendCamViaGeoBroadcast(CellModuleConfiguration.CellCamConfiguration camConfiguration) { - if (!(getOwner() instanceof Locatable)) { + if (!(getOwner() instanceof Locatable locatable)) { throw new UnsupportedOperationException("Cannot send CAM for entities without a location."); } - final GeoCircle destination = new GeoCircle(((Locatable) getOwner()).getPosition(), camConfiguration.getGeoRadius()); + final GeoCircle destination = new GeoCircle(locatable.getPosition(), camConfiguration.getGeoRadius()); return super.sendCam(createMessageRouting().geoBroadcastBasedOnUnicast(destination)); } private Integer sendCamViaGeoBroadcastMbms(CellModuleConfiguration.CellCamConfiguration camConfiguration) { - if (!(getOwner() instanceof Locatable)) { + if (!(getOwner() instanceof Locatable locatable)) { throw new UnsupportedOperationException("Cannot send CAM for entities without a location."); } - final GeoCircle destination = new GeoCircle(((Locatable) getOwner()).getPosition(), camConfiguration.getGeoRadius()); + final GeoCircle destination = new GeoCircle(locatable.getPosition(), camConfiguration.getGeoRadius()); return super.sendCam(createMessageRouting().geoBroadcastMbms(destination)); } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/CentralPerceptionComponent.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/CentralPerceptionComponent.java index 6807090c9..1ae5cc2a2 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/CentralPerceptionComponent.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/CentralPerceptionComponent.java @@ -25,6 +25,7 @@ import org.eclipse.mosaic.lib.objects.trafficlight.TrafficLightGroup; import org.eclipse.mosaic.lib.objects.vehicle.VehicleType; import org.eclipse.mosaic.lib.routing.Routing; +import org.eclipse.mosaic.lib.routing.database.DatabaseRouting; import org.eclipse.mosaic.rti.api.InternalFederateException; import com.google.common.collect.Iterables; @@ -94,10 +95,10 @@ public void initialize() throws InternalFederateException { if (configuration.trafficLightIndex != null) { indexBuilder.withTrafficLightIndex(configuration.trafficLightIndex.create()); } - if (routing instanceof Database) { - Database dbRouting = (Database) routing; - if (!dbRouting.getBuildings().isEmpty() && configuration.wallIndex != null) { - indexBuilder.withWallIndex(configuration.wallIndex.create(), (Database) routing); + if (routing instanceof DatabaseRouting dbRouting) { + Database database = dbRouting.getScenarioDatabase(); + if (!database.getBuildings().isEmpty() && configuration.wallIndex != null) { + indexBuilder.withWallIndex(configuration.wallIndex.create(), database); } } trafficObjectIndex = indexBuilder.build(); diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SumoPerceptionModule.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SumoPerceptionModule.java index 87078ebda..cebc0164c 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SumoPerceptionModule.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SumoPerceptionModule.java @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; public class SumoPerceptionModule extends AbstractPerceptionModule { @@ -56,7 +55,7 @@ List getVehiclesInRange() { .setSpeed(v.getSpeed()) .setHeading(v.getHeading()) .setDimensions(v.getLength(), v.getWidth(), v.getHeight()) - ).collect(Collectors.toList()); + ).toList(); } @Override diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/errormodels/BoundingBoxOcclusion.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/errormodels/BoundingBoxOcclusion.java index 52aab8c1f..cbe74bef4 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/errormodels/BoundingBoxOcclusion.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/errormodels/BoundingBoxOcclusion.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; public class BoundingBoxOcclusion implements PerceptionModifier { @@ -82,7 +81,7 @@ public List apply(PerceptionModuleOwner owner, List // the ego object cannot occlude vision List occludingObjects = spatialObjects.stream() .filter(object -> !object.getId().equals(owner.getId())) - .collect(Collectors.toList()); + .toList(); Vector3d egoPosition = owner.getVehicleData().getProjectedPosition().toVector3d(); for (T objectToEvaluate : spatialObjects) { if (objectToEvaluate instanceof TrafficLightObject) { // Traffic Lights are treated to not be occluded diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/index/providers/TrafficLightTree.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/index/providers/TrafficLightTree.java index e189b5146..d64426274 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/index/providers/TrafficLightTree.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/index/providers/TrafficLightTree.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * {@link TrafficLightIndex} using a KD-Tree to store traffic lights. @@ -50,7 +49,7 @@ public List getTrafficLightsInRange(PerceptionModel percepti treeTraverser.setup(perceptionModel.getBoundingBox().center, perceptionModel.getBoundingBox().center.distanceSqrTo(perceptionModel.getBoundingBox().min)); // overestimating distance treeTraverser.traverse(trafficLightTree); - return treeTraverser.getResult().stream().filter(perceptionModel::isInRange).collect(Collectors.toList()); + return treeTraverser.getResult().stream().filter(perceptionModel::isInRange).toList(); } @Override diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/util/UnitLoggerImpl.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/util/UnitLoggerImpl.java index d2441f27a..277944f99 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/util/UnitLoggerImpl.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/ambassador/util/UnitLoggerImpl.java @@ -416,22 +416,18 @@ private Object[] extendArgumentsWithTime(long simulationTime, Object... argument @Override @Nullable public Path getUnitLogDirectory() { - if (!(log instanceof ch.qos.logback.classic.Logger)) { + if (!(log instanceof ch.qos.logback.classic.Logger logbackLog)) { return null; } - ch.qos.logback.classic.Logger logbackLog = (ch.qos.logback.classic.Logger) log; Iterator> appenderIterator = logbackLog.iteratorForAppenders(); while (appenderIterator.hasNext()) { Appender appender = appenderIterator.next(); - if (appender instanceof FileAppender) { - FileAppender fileAppender = ((FileAppender) appender); + if (appender instanceof FileAppender fileAppender) { return new File(fileAppender.getFile()).getParentFile().toPath(); } - if (appender instanceof SiftingAppender) { - SiftingAppender siftingAppender = ((SiftingAppender) appender); + if (appender instanceof SiftingAppender siftingAppender) { Appender delegateAppender = siftingAppender.getAppenderTracker().find(mdcPath); - if (delegateAppender instanceof FileAppender) { - FileAppender fileAppender = ((FileAppender) delegateAppender); + if (delegateAppender instanceof FileAppender fileAppender) { return new File(fileAppender.getFile()).getParentFile().toPath(); } } diff --git a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/config/CPerception.java b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/config/CPerception.java index 49df682ad..9aa11decb 100644 --- a/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/config/CPerception.java +++ b/fed/mosaic-application/src/main/java/org/eclipse/mosaic/fed/application/config/CPerception.java @@ -163,16 +163,12 @@ protected Class fromTypeName(String type) { if (type == null) { return CVehicleIndex.Tree.class; } - switch (type.toLowerCase()) { - case "grid": - return CVehicleIndex.Grid.class; - case "sumo": - return CVehicleIndex.Sumo.class; - case "tree": - return CVehicleIndex.Tree.class; - default: - throw new IllegalArgumentException("Unknown index type " + type + ". Known types are: grid, tree, sumo."); - } + return switch (type.toLowerCase()) { + case "grid" -> CVehicleIndex.Grid.class; + case "sumo" -> CVehicleIndex.Sumo.class; + case "tree" -> CVehicleIndex.Tree.class; + default -> throw new IllegalArgumentException("Unknown index type " + type + ". Known types are: grid, tree, sumo."); + }; } @Override diff --git a/fed/mosaic-application/src/test/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SimplePerceptionModuleTest.java b/fed/mosaic-application/src/test/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SimplePerceptionModuleTest.java index 110eaf9f1..5b80f2779 100644 --- a/fed/mosaic-application/src/test/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SimplePerceptionModuleTest.java +++ b/fed/mosaic-application/src/test/java/org/eclipse/mosaic/fed/application/ambassador/simulation/perception/SimplePerceptionModuleTest.java @@ -63,7 +63,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @RunWith(Parameterized.class) public class SimplePerceptionModuleTest { @@ -217,10 +216,10 @@ public void vehicleCanBeRemoved() { .copyFrom(vehicleData) .movement(1d, 1d, 1d) // adjust vehicles .create()) - .collect(Collectors.toList()); + .toList(); trafficObjectIndex.updateVehicles(adjustedVehicles); // try to remove vehicles - trafficObjectIndex.removeVehicles(addedVehicles.stream().map(VehicleData::getName).collect(Collectors.toList())); + trafficObjectIndex.removeVehicles(addedVehicles.stream().map(VehicleData::getName).toList()); // assert vehicles have been properly removed assertEquals(0, trafficObjectIndex.getNumberOfVehicles()); assertTrue(simplePerceptionModule.getPerceivedVehicles().isEmpty()); diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/ambassador/CellAmbassador.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/ambassador/CellAmbassador.java index 6fe04d191..7f84fb007 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/ambassador/CellAmbassador.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/ambassador/CellAmbassador.java @@ -576,9 +576,10 @@ private void registerServer(String serverName, String serverGroup) { if (serverProperties != null) { registeredServers.put(serverName, serverProperties); } else { - log.warn( - "No server properties for server group \"{}\" found in \"{}\" config-file." - + " If you intend to use cell-communication with this unit please add a configuration.", + log.warn(""" + No server properties for server group "{}" found in "{}" config-file. + If you intend to use cell-communication with this unit please add a configuration. + """, serverGroup, ConfigurationData.INSTANCE.getCellConfig().networkConfigurationFile ); } diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/config/gson/RegionsNamingStrategy.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/config/gson/RegionsNamingStrategy.java index b565b1bd5..0a0580679 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/config/gson/RegionsNamingStrategy.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/config/gson/RegionsNamingStrategy.java @@ -29,20 +29,13 @@ public class RegionsNamingStrategy implements FieldNamingStrategy { @Override public String translateName(Field field) { - switch (field.getName()) { - case "a": - return "nw"; - case "b": - return "se"; - case "latitude": - return "lat"; - case "longitude": - return "lon"; - case "vertices": - return "coordinates"; - default: - return field.getName(); - } - + return switch (field.getName()) { + case "a" -> "nw"; + case "b" -> "se"; + case "latitude" -> "lat"; + case "longitude" -> "lon"; + case "vertices" -> "coordinates"; + default -> field.getName(); + }; } } diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/GeocasterModule.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/GeocasterModule.java index 0fa9545b3..08d80df6b 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/GeocasterModule.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/GeocasterModule.java @@ -72,8 +72,8 @@ public void processEvent(Event event) { Object resource = event.getResource(); if (resource == null) { throw new RuntimeException("No input message (event resource) for " + moduleName); - } else if (resource instanceof CellModuleMessage) { - processMessage((CellModuleMessage) resource, event.getTime()); + } else if (resource instanceof CellModuleMessage cellModuleMessage) { + processMessage(cellModuleMessage, event.getTime()); } else { throw new RuntimeException("Unsupported input message (event resource) for " + moduleName); } diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/AbstractStreamModule.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/AbstractStreamModule.java index 156c0ae9c..992cb7beb 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/AbstractStreamModule.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/AbstractStreamModule.java @@ -77,8 +77,8 @@ CellModuleMessage processResult(final StreamProcessor.Input input, final StreamP .startTime(input.getMessageStartTime()) .resource(streamResult); - if (input.getV2xMessage().getRouting() instanceof MessageStreamRouting) { - long streamDuration = ((MessageStreamRouting) input.getV2xMessage().getRouting()).getStreamingDuration(); + if (input.getV2xMessage().getRouting() instanceof MessageStreamRouting messageStreamRouting) { + long streamDuration = messageStreamRouting.getStreamingDuration(); notifyMessageBuilder.endTime(result.getMessageEndTime() + streamDuration); } else { notifyMessageBuilder.endTime(result.getMessageEndTime()); @@ -127,10 +127,9 @@ void freeBandwidth(CellModuleMessage result) { TIME.format(result.getEndTime()), result.getEmittingModule()); } - if (result.getResource() != null && !(result.getResource() instanceof StreamResult)) { + if (!(result.getResource() instanceof StreamResult streamResult)) { throw new RuntimeException("Tried to free bandwidth but the resource of the result message was not a StreamResultMessage"); } - StreamResult streamResult = result.getResource(); TransmissionMode mode = streamResult.getMode(); freeBandwidthForNode(streamResult.getInvolvedNode(), streamResult.getConsumedBandwidth(), mode); CNetworkProperties region = RegionUtility.getRegionByName(streamResult.getRegionId()); diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/DownstreamModule.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/DownstreamModule.java index 95b2db30a..d38fb22c7 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/DownstreamModule.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/DownstreamModule.java @@ -62,11 +62,11 @@ public void processEvent(Event event) throws Exception { Object resource = event.getResource(); if (resource == null) { throw new RuntimeException("No input message (event resource) for " + moduleName); - } else if (!(resource instanceof CellModuleMessage)) { + } + if (!(resource instanceof CellModuleMessage resultMessage)) { throw new RuntimeException("The resource of the event is not a CellModuleResultMessage"); } - CellModuleMessage resultMessage = (CellModuleMessage) resource; if (resultMessage.getResource() instanceof GeocasterResult) { // handle message transmission GeocasterResult geocasterResult = resultMessage.getResource(); @@ -90,14 +90,9 @@ private void processMessage(final GeocasterResult geocasterResult, final long me log.debug("t={}: Entering processMessage() of module {}", TIME.format(messageStartTime), getModuleName()); switch (geocasterResult.getDownstreamMode()) { - case DownlinkUnicast: - doUnicast(geocasterResult, messageStartTime); - break; - case DownlinkMulticast: - doMulticast(geocasterResult, messageStartTime); - break; - default: - throw new RuntimeException("Unsupported transmission mode " + geocasterResult.getDownstreamMode()); + case DownlinkUnicast -> doUnicast(geocasterResult, messageStartTime); + case DownlinkMulticast -> doMulticast(geocasterResult, messageStartTime); + default -> throw new RuntimeException("Unsupported transmission mode " + geocasterResult.getDownstreamMode()); } } @@ -202,12 +197,9 @@ private void notifyStreamListeners(StreamProcessor.Input parameters, StreamProce String senderRegion = RegionUtility.getRegionForNode(senderId).id; String applicationClass = "*"; - if (cellModuleMessage.getResource() instanceof StreamResult) { - StreamResult streamResult = cellModuleMessage.getResource(); - + if (cellModuleMessage.getResource() instanceof StreamResult streamResult) { long transmissionEndTime = result.getMessageEndTime(); - if (streamResult.getV2xMessage().getRouting() instanceof MessageStreamRouting) { - MessageStreamRouting streamRouting = (MessageStreamRouting) streamResult.getV2xMessage().getRouting(); + if (streamResult.getV2xMessage().getRouting() instanceof MessageStreamRouting streamRouting) { transmissionEndTime += streamRouting.getStreamingDuration(); } chainManager.notifyStreamListeners( diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/UpstreamModule.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/UpstreamModule.java index a9f57a774..878d7712b 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/UpstreamModule.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/module/streammodules/UpstreamModule.java @@ -51,12 +51,12 @@ public void processEvent(Event event) { Object resource = event.getResource(); if (resource == null) { throw new RuntimeException("No input message (event resource) for " + moduleName); - } else if (resource instanceof V2xMessage) { + } else if (resource instanceof V2xMessage v2xMessage) { // It can start with new V2XMessages to be introduced in the network - processMessage((V2xMessage) event.getResource(), event.getTime()); - } else if (resource instanceof CellModuleMessage) { + processMessage(v2xMessage, event.getTime()); + } else if (resource instanceof CellModuleMessage moduleMessage) { // or clean up pending messages (generated by itself) - freeBandwidth((CellModuleMessage) event.getResource()); + freeBandwidth(moduleMessage); } else { throw new RuntimeException("Unsupported input message (event resource) for " + moduleName); } diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/CapacityUtility.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/CapacityUtility.java index 3a6c4f0a5..cd4f53108 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/CapacityUtility.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/CapacityUtility.java @@ -149,19 +149,16 @@ public static long getMessageLengthWithHeaders(V2xMessage msg, String senderOrRe } else { linkLayerHeader = headerLengths.cellularHeader; } - switch (msg.getRouting().getDestination().getProtocolType()) { - case UDP: - return linkLayerHeader - + headerLengths.ipHeader - + headerLengths.udpHeader - + msg.getPayload().getEffectiveLength() * DATA.BYTE; - case TCP: - default: - return linkLayerHeader - + headerLengths.ipHeader - + headerLengths.tcpHeader - + msg.getPayload().getEffectiveLength() * DATA.BYTE; - } + return switch (msg.getRouting().getDestination().getProtocolType()) { + case UDP -> linkLayerHeader + + headerLengths.ipHeader + + headerLengths.udpHeader + + msg.getPayload().getEffectiveLength() * DATA.BYTE; + case TCP -> linkLayerHeader + + headerLengths.ipHeader + + headerLengths.tcpHeader + + msg.getPayload().getEffectiveLength() * DATA.BYTE; + }; } /** @@ -236,10 +233,9 @@ public static long availableCapacity(TransmissionMode mode, CNetworkProperties r * @return Bandwidth for the streaming in [bit/s]. */ public static long getStreamingBandwidth(V2xMessage v2xMessage) { - if (v2xMessage == null || !(v2xMessage.getRouting() instanceof MessageStreamRouting)) { + if (!(v2xMessage.getRouting() instanceof MessageStreamRouting routing)) { return 0; } - MessageStreamRouting routing = (MessageStreamRouting) v2xMessage.getRouting(); return routing.getStreamingBandwidth(); } } diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/DelayUtility.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/DelayUtility.java index f48eff57b..1bc31bcd1 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/DelayUtility.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/DelayUtility.java @@ -71,20 +71,12 @@ public static long calculateDelay(CNetworkProperties region, TransmissionMode mo } private static Delay determineDelayType(TransmissionMode mode, CNetworkProperties region) throws InternalFederateException { - Delay delay; - switch (mode) { - case UplinkUnicast: - delay = region.uplink.delay; - break; - case DownlinkUnicast: - delay = region.downlink.unicast.delay; - break; - case DownlinkMulticast: - delay = region.downlink.multicast.delay; - break; - default: - throw new InternalFederateException("Unknown TransmissionMode: " + mode); - } + Delay delay = switch (mode) { + case UplinkUnicast -> region.uplink.delay; + case DownlinkUnicast -> region.downlink.unicast.delay; + case DownlinkMulticast -> region.downlink.multicast.delay; + default -> throw new InternalFederateException("Unknown TransmissionMode: " + mode); + }; if (delay instanceof GammaSpeedDelay && mode.equals(TransmissionMode.DownlinkMulticast)) { throw new InternalFederateException("Impossible delay configuration for " + mode + " in region \"" + region.id + "\""); diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionUtility.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionUtility.java index 70d01a0df..c19117c67 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionUtility.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionUtility.java @@ -20,7 +20,14 @@ import org.eclipse.mosaic.fed.cell.config.model.CNetworkProperties; import org.eclipse.mosaic.fed.cell.data.ConfigurationData; import org.eclipse.mosaic.fed.cell.data.SimulationData; -import org.eclipse.mosaic.lib.geo.*; +import org.eclipse.mosaic.lib.geo.CartesianArea; +import org.eclipse.mosaic.lib.geo.CartesianCircle; +import org.eclipse.mosaic.lib.geo.CartesianPoint; +import org.eclipse.mosaic.lib.geo.CartesianPolygon; +import org.eclipse.mosaic.lib.geo.GeoArea; +import org.eclipse.mosaic.lib.geo.GeoCircle; +import org.eclipse.mosaic.lib.geo.GeoPolygon; +import org.eclipse.mosaic.lib.geo.GeoRectangle; import org.eclipse.mosaic.rti.api.InternalFederateException; import org.apache.commons.lang3.Validate; @@ -153,15 +160,15 @@ public static List getRegionsForDestinationArea(GeoArea geoA List regions = new ArrayList<>(); - if (geoArea instanceof GeoCircle) { + if (geoArea instanceof GeoCircle geoCircle) { for (CMobileNetworkProperties region : ConfigurationData.INSTANCE.getRegionConfig().regions) { - if (isCircleIntersectingPolygon(((GeoCircle) geoArea).toCartesian(), region.getCapoArea())){ + if (isCircleIntersectingPolygon(geoCircle.toCartesian(), region.getCapoArea())){ regions.add(region); } } } else { - if (geoArea instanceof GeoRectangle) { - geoArea = ((GeoRectangle) geoArea).toPolygon(); + if (geoArea instanceof GeoRectangle geoRectangle) { + geoArea = geoRectangle.toPolygon(); } CartesianPolygon destPolygon = ((GeoPolygon) geoArea).toCartesian(); for (CMobileNetworkProperties region : ConfigurationData.INSTANCE.getRegionConfig().regions) { diff --git a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionsIndex.java b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionsIndex.java index 100f6bda4..9705fbbc4 100644 --- a/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionsIndex.java +++ b/fed/mosaic-cell/src/main/java/org/eclipse/mosaic/fed/cell/utility/RegionsIndex.java @@ -30,7 +30,6 @@ import edu.umd.cs.findbugs.annotations.SuppressWarnings; import java.util.Collection; -import java.util.stream.Collectors; /** * Provides a spatial index for regions. This enables a fast lookup of all regions which @@ -52,7 +51,7 @@ public RegionsIndex(final Collection regions) { regions.stream() .filter(region -> region.getCapoArea() != null) .map(MobileNetworkPropertiesWrapper::new) - .collect(Collectors.toList()) + .toList() ); } diff --git a/fed/mosaic-environment/src/main/java/org/eclipse/mosaic/fed/environment/ambassador/EnvironmentAmbassador.java b/fed/mosaic-environment/src/main/java/org/eclipse/mosaic/fed/environment/ambassador/EnvironmentAmbassador.java index 2e24b2710..196e5743d 100644 --- a/fed/mosaic-environment/src/main/java/org/eclipse/mosaic/fed/environment/ambassador/EnvironmentAmbassador.java +++ b/fed/mosaic-environment/src/main/java/org/eclipse/mosaic/fed/environment/ambassador/EnvironmentAmbassador.java @@ -40,7 +40,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; /** * Main class for the environment simulator that emits events to vehicles that lie in their @@ -165,7 +164,7 @@ private void emitSensorData(VehicleUpdates vehicleUpdates) { final List events = config.events.stream() .filter(e -> isValidEvent(e, info)) .map(e -> new EnvironmentEvent(e.type.sensorType, e.type.value, startTime, endTime)) - .collect(Collectors.toList()); + .toList(); if (!events.isEmpty()) { try { diff --git a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/SpawningFramework.java b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/SpawningFramework.java index e8f4d9dcb..b0186e0d5 100644 --- a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/SpawningFramework.java +++ b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/SpawningFramework.java @@ -56,7 +56,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * Framework doing the actual work. @@ -484,7 +483,7 @@ void timeAdvance(long time, RtiAmbassador rti, RandomNumberGenerator rng) throws private void initTrafficLights(long time, RtiAmbassador rti, RandomNumberGenerator rng) throws InternalFederateException { WeightedSelector selector = null; - List itemsWithWeight = tls.values().stream().filter(tl -> tl.getWeight() != 0).collect(Collectors.toList()); + List itemsWithWeight = tls.values().stream().filter(tl -> tl.getWeight() != 0).toList(); if (!itemsWithWeight.isEmpty()) { selector = new StochasticSelector<>(itemsWithWeight, rng); } diff --git a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/VehicleFlowGenerator.java b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/VehicleFlowGenerator.java index b47936b2c..8dc43e4ad 100644 --- a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/VehicleFlowGenerator.java +++ b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/VehicleFlowGenerator.java @@ -119,7 +119,6 @@ public class VehicleFlowGenerator { * Constructor for {@link VehicleFlowGenerator} using one vehicle type configuration. * * @param vehicleConfiguration vehicle spawner configuration - * * @throws IllegalArgumentException if vehicleConfiguration does not provide any types to select from */ public VehicleFlowGenerator(CVehicle vehicleConfiguration, @Nonnull RandomNumberGenerator randomNumberGenerator, boolean flowNoise, boolean fixedOrder) { @@ -186,7 +185,6 @@ private List createPrototypes(CVehicle vehicleConfiguration) * @param vehicleConfiguration the vehicle configuration containing necessary information to determine the {@link SpawningMode} * @param randomNumberGenerator the {@link RandomNumberGenerator} to be used, for example to introduce flowNoise * @param flowNoise whether flow noise should be introduced - * * @return the created {@link SpawningMode} */ private SpawningMode createSpawningMode( @@ -203,76 +201,58 @@ private SpawningMode createSpawningMode( maxTime = vehicleConfiguration.maxTime.longValue() * TIME.SECOND; } double targetFlow = vehicleConfiguration.targetFlow; - SpawningMode newSpawningMode; - switch (spawningMode) { - case GROW: - newSpawningMode = new AbstractSpawningMode.IncreaseLinear( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime - ); - break; - case SHRINK: - newSpawningMode = new AbstractSpawningMode.DecreaseLinear( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime - ); - break; - case GROW_AND_SHRINK: - newSpawningMode = new GrowAndShrinkSpawningMode( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime, - false - ); - break; - case GROW_EXPONENTIAL: - newSpawningMode = new AbstractSpawningMode.IncreaseExponential( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime - ); - break; - case SHRINK_EXPONENTIAL: - newSpawningMode = new AbstractSpawningMode.DecreaseExponential( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime - ); - break; - case GROW_AND_SHRINK_EXPONENTIAL: - newSpawningMode = new GrowAndShrinkSpawningMode( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime, - true - ); - break; - case POISSON: - newSpawningMode = new PoissonSpawningMode( - randomNumberGenerator, - startingTime, - targetFlow, - maxTime - ); - break; - case CONSTANT: - default: - newSpawningMode = new ConstantSpawningMode( - flowNoise ? randomNumberGenerator : null, - startingTime, - targetFlow, - maxTime - ); - } - return newSpawningMode; + return switch (spawningMode) { + case GROW -> new AbstractSpawningMode.IncreaseLinear( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime + ); + case SHRINK -> new AbstractSpawningMode.DecreaseLinear( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime + ); + case GROW_AND_SHRINK -> new GrowAndShrinkSpawningMode( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime, + false + ); + case GROW_EXPONENTIAL -> new AbstractSpawningMode.IncreaseExponential( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime + ); + case SHRINK_EXPONENTIAL -> new AbstractSpawningMode.DecreaseExponential( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime + ); + case GROW_AND_SHRINK_EXPONENTIAL -> new GrowAndShrinkSpawningMode( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime, + true + ); + case POISSON -> new PoissonSpawningMode( + randomNumberGenerator, + startingTime, + targetFlow, + maxTime + ); + case CONSTANT -> new ConstantSpawningMode( + flowNoise ? randomNumberGenerator : null, + startingTime, + targetFlow, + maxTime + ); + }; } private WeightedSelector createSelector(RandomNumberGenerator randomNumberGenerator, boolean fixedOrder) { @@ -303,16 +283,13 @@ private List createLanes(CVehicle vehicleConfiguration) { } private LaneIndexSelector createLaneSelector(List lanes, VehicleDeparture.LaneSelectionMode laneSelectionMode) { - switch (laneSelectionMode) { - case DEFAULT: - case ROUNDROBIN: - return new RoundRobinLaneIndexSelector(lanes); - case ROUNDROBIN_HIGHWAY: - return new HighwaySpecificLaneIndexSelector(lanes); - default: + return switch (laneSelectionMode) { + case DEFAULT, ROUNDROBIN -> new RoundRobinLaneIndexSelector(lanes); + case ROUNDROBIN_HIGHWAY -> new HighwaySpecificLaneIndexSelector(lanes); + default -> // return invalid lane index -1 and let the traffic simulator decide based on traffic condition - return (type) -> -1; - } + (type) -> -1; + }; } void configure(CMappingConfiguration mappingParameterizationConfiguration) { @@ -355,7 +332,6 @@ void collectVehicleTypes(HashMap types) { * * @param framework the {@link SpawningFramework} handling the time advance * @return true if there is no more vehicles to spawn or max time reached, thus the vehicle spawner can be removed - * * @throws InternalFederateException thrown if time advance couldn't be completed successfully */ boolean timeAdvance(SpawningFramework framework) throws InternalFederateException { diff --git a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/ChargingStationSpawner.java b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/ChargingStationSpawner.java index f26f8cd20..a0cd82802 100644 --- a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/ChargingStationSpawner.java +++ b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/ChargingStationSpawner.java @@ -33,7 +33,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * Class responsible for configuring Charging Stations to be added to the simulation. @@ -106,7 +105,7 @@ public String toString() { chargingSpotConfigurations.stream() .map(chargingSpot -> "chargingSpot(" + chargingSpotConfigurations.indexOf(chargingSpot) + ")=" + chargingSpot.toString()) - .collect(Collectors.toList()) + .toList() ) .build(); } diff --git a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/UnitSpawner.java b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/UnitSpawner.java index 2c331dfbc..7989214f8 100644 --- a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/UnitSpawner.java +++ b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/spawning/UnitSpawner.java @@ -25,7 +25,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * This class is to be extended by all classes, that are supposed to @@ -56,7 +55,7 @@ abstract class UnitSpawner { UnitSpawner(List applications, String prototypeName, String group) { if (applications != null) { // add all applications, remove the ones that are null - this.applications.addAll(applications.stream().filter(Objects::nonNull).collect(Collectors.toList())); + this.applications.addAll(applications.stream().filter(Objects::nonNull).toList()); } this.prototypeName = prototypeName; this.group = group; @@ -94,7 +93,7 @@ public void fillInPrototype(CPrototype prototypeConfiguration) { if (applications.isEmpty() && prototypeConfiguration.applications != null) { // inherit applications from prototype, dismiss all applications set as null - applications.addAll(prototypeConfiguration.applications.stream().filter(Objects::nonNull).collect(Collectors.toList())); + applications.addAll(prototypeConfiguration.applications.stream().filter(Objects::nonNull).toList()); } // No group name given, try to use the CPrototype group name diff --git a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/weighting/FixedOrderSelector.java b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/weighting/FixedOrderSelector.java index a5e610162..fa744cad6 100644 --- a/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/weighting/FixedOrderSelector.java +++ b/fed/mosaic-mapping/src/main/java/org/eclipse/mosaic/fed/mapping/ambassador/weighting/FixedOrderSelector.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; /** * Helper class allowing the random and pseudo-random selection of multiple @@ -77,7 +76,7 @@ public FixedOrderSelector(List objects) { item.selections = 0; item.priority = objects.size(); return item; - }).collect(Collectors.toList()); + }).toList(); } /** @@ -122,7 +121,7 @@ private List> normalizeWeights(List> items) { // set normalized weights, if no weights have been set, apply same weight to all items items.forEach((item) -> item.normalizedWeight = sumWeights > 0 ? (item.object.getWeight() / sumWeights) : (1d / items.size())); - return items.stream().filter(item -> item.getWeight() > 0).collect(Collectors.toList()); + return items.stream().filter(item -> item.getWeight() > 0).toList(); } private Item selectFirstItem() { diff --git a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/FileOutputLoader.java b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/FileOutputLoader.java index 0a0b51181..2afaa2e08 100644 --- a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/FileOutputLoader.java +++ b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/FileOutputLoader.java @@ -36,7 +36,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; public class FileOutputLoader extends OutputGeneratorLoader { @@ -108,7 +107,7 @@ private InteractionFormatter createInteractionFormatter(HierarchicalConfiguratio } String interactionId = ConfigHelper.getId(interaction); - List entries = interaction.getList("entries.entry").stream().map(String::valueOf).collect(Collectors.toList()); + List entries = interaction.getList("entries.entry").stream().map(String::valueOf).toList(); interactionDefs .computeIfAbsent(interactionId, (k) -> new ArrayList<>()) @@ -140,19 +139,12 @@ private Write getWrite(HierarchicalConfiguration sub) throws IOEx File outputFile = new File(dir + File.separator + fileName); - switch (write) { - case WRITE_BY_LOG: - ret = new WriteByLog(outputFile, append); - break; - case WRITE_BY_FILE: - ret = new WriteByFile(outputFile, append); - break; - case WRITE_BY_FILE_COMPRESS: - ret = new WriteByFileCompress(outputFile, append); - break; - default: - throw new IllegalArgumentException("No such write method '" + write + "'"); - } + ret = switch (write) { + case WRITE_BY_LOG -> new WriteByLog(outputFile, append); + case WRITE_BY_FILE -> new WriteByFile(outputFile, append); + case WRITE_BY_FILE_COMPRESS -> new WriteByFileCompress(outputFile, append); + default -> throw new IllegalArgumentException("No such write method '" + write + "'"); + }; return ret; } diff --git a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/ExtendedMethodSet.java b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/ExtendedMethodSet.java index f94ec1fca..489a1c963 100644 --- a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/ExtendedMethodSet.java +++ b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/ExtendedMethodSet.java @@ -40,16 +40,16 @@ public static void putV2xMessage(V2xMessage message) { static public Object getType(V2xMessageTransmission interaction) { V2xMessage message = Objects.requireNonNull(V2X_MESSAGES.get(interaction.getMessageId())); - if (message instanceof GenericV2xMessage) { - return ((GenericV2xMessage) message).getMessageType(); + if (message instanceof GenericV2xMessage genericV2xMessage) { + return genericV2xMessage.getMessageType(); } return message.getSimpleClassName(); } static public Object getType(V2xMessageReception interaction) { V2xMessage message = Objects.requireNonNull(V2X_MESSAGES.get(interaction.getMessageId())); - if (message instanceof GenericV2xMessage) { - return ((GenericV2xMessage) message).getMessageType(); + if (message instanceof GenericV2xMessage genericV2xMessage) { + return genericV2xMessage.getMessageType(); } return message.getSimpleClassName(); } diff --git a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/MethodElement.java b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/MethodElement.java index 5fae08ec4..35022a630 100644 --- a/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/MethodElement.java +++ b/fed/mosaic-output/src/main/java/org/eclipse/mosaic/fed/output/generator/file/format/MethodElement.java @@ -185,8 +185,8 @@ public Class getIterationComponentClass() { Method m = methodList.get(metcnt - 1); Type retType = m.getGenericReturnType(); - if (retType instanceof ParameterizedType) { - Type[] type = ((ParameterizedType) retType).getActualTypeArguments(); + if (retType instanceof ParameterizedType parameterizedType) { + Type[] type = parameterizedType.getActualTypeArguments(); if (type.length == 1) { return (Class) type[0]; diff --git a/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/SnsAmbassador.java b/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/SnsAmbassador.java index dcc4a9074..faa2107b4 100644 --- a/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/SnsAmbassador.java +++ b/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/SnsAmbassador.java @@ -174,16 +174,14 @@ private void process(AdHocCommunicationConfiguration interaction) { // Switch the communication modules for simulated nodes on or off // (SNS only supports configurations with one radio). switch (configuration.getRadioMode()) { - case OFF: + case OFF -> { if (SimulationEntities.INSTANCE.isNodeSimulated(nodeId)) { disableNode(interaction.getTime(), nodeId); } else if (registeredVehicles.remove(nodeId) != null) { log.debug("Disabled Wifi of node, which was enabled before, but not yet moved."); } - break; - case DUAL: - log.warn("SNS only supports single radio configuration. Configure first, while ignoring second, radio for node {}.", nodeId); - case SINGLE: + } + case SINGLE -> { double communicationRadius = this.singlehopRadius; if (configuration.getConf0() != null && configuration.getConf0().getRadius() != null) { communicationRadius = configuration.getConf0().getRadius(); @@ -201,9 +199,8 @@ private void process(AdHocCommunicationConfiguration interaction) { } log.info("Radio configured in mode {} with communication radius {} for node id={} @time={}", configuration.getRadioMode(), communicationRadius, nodeId, TIME.format(interaction.getTime())); - break; - default: - log.warn("Unknown radio mode {} configured for node {}. Ignoring.", configuration.getRadioMode(), nodeId); + } + case DUAL ->log.warn("SNS only supports single radio configuration. Configure first, while ignoring second, radio for node {}.", nodeId); } } diff --git a/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/TransmissionSimulator.java b/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/TransmissionSimulator.java index 92e01eb7b..855972fab 100644 --- a/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/TransmissionSimulator.java +++ b/fed/mosaic-sns/src/main/java/org/eclipse/mosaic/fed/sns/ambassador/TransmissionSimulator.java @@ -90,7 +90,6 @@ Map preProcessInteraction(V2xMessageTransmission int } DestinationAddressContainer dac = interaction.getMessage().getRouting().getDestination(); - Map transmissionResults = null; switch (dac.getType()) { case AD_HOC_TOPOCAST: if (log.isDebugEnabled()) { @@ -99,8 +98,7 @@ Map preProcessInteraction(V2xMessageTransmission int interaction.getMessage().getId(), senderName, TIME.format(interaction.getTime()) ); } - transmissionResults = sendMessageAsTopocast(senderName, dac); - break; + return sendMessageAsTopocast(senderName, dac); case AD_HOC_GEOCAST: if (log.isDebugEnabled()) { log.debug( @@ -108,15 +106,14 @@ Map preProcessInteraction(V2xMessageTransmission int interaction.getMessage().getId(), senderName, TIME.format(interaction.getTime()) ); } - transmissionResults = sendMessageAsGeocast(senderName, dac); - break; + return sendMessageAsGeocast(senderName, dac); default: log.debug( "V2XMessage is not an ad hoc message. Skip this message. V2XMessage.id={}", interaction.getMessage().getId() ); + return null; } - return transmissionResults; } /** diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/ambassador/AbstractSumoAmbassador.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/ambassador/AbstractSumoAmbassador.java index 4e2436454..40e02ded6 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/ambassador/AbstractSumoAmbassador.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/ambassador/AbstractSumoAmbassador.java @@ -125,7 +125,6 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.concurrent.NotThreadSafe; @@ -648,7 +647,7 @@ private synchronized void receiveInteraction(VehicleResume vehicleResume) throws */ private synchronized void receiveInteraction(SumoTraciRequest sumoTraciRequest) throws InternalFederateException { try { - if (bridge instanceof TraciClientBridge) { + if (bridge instanceof TraciClientBridge traci) { log.info( "{} at simulation time {}: " + "length=\"{}\", id=\"{}\" data={}", SUMO_TRACI_BYTE_ARRAY_MESSAGE, @@ -658,8 +657,7 @@ private synchronized void receiveInteraction(SumoTraciRequest sumoTraciRequest) sumoTraciRequest.getCommand() ); - SumoTraciResult sumoTraciResult = - ((TraciClientBridge) bridge).writeByteArrayMessage(sumoTraciRequest.getRequestId(), sumoTraciRequest.getCommand()); + SumoTraciResult sumoTraciResult = traci.writeByteArrayMessage(sumoTraciRequest.getRequestId(), sumoTraciRequest.getCommand()); rti.triggerInteraction(new SumoTraciResponse(sumoTraciRequest.getTime(), sumoTraciResult)); } else { log.warn("SumoTraciRequests are not supported."); @@ -980,7 +978,7 @@ private synchronized void receiveInteraction(LanePropertyChange lanePropertyChan log.info("Change allowed vehicle classes of lane with ID={}", laneId); List allowedVehicleClasses = lanePropertyChange.getAllowedVehicleClasses().stream() - .map(SumoVehicleClassMapping::toSumo).collect(Collectors.toList()); + .map(SumoVehicleClassMapping::toSumo).toList(); bridge.getSimulationControl().setLaneAllowedVehicles(laneId, allowedVehicleClasses); } @@ -991,7 +989,7 @@ private synchronized void receiveInteraction(LanePropertyChange lanePropertyChan bridge.getSimulationControl().setLaneAllowedVehicles(laneId, Lists.newArrayList()); } else { List disallowedVehicleClasses = lanePropertyChange.getDisallowedVehicleClasses().stream() - .map(SumoVehicleClassMapping::toSumo).collect(Collectors.toList()); + .map(SumoVehicleClassMapping::toSumo).toList(); bridge.getSimulationControl().setLaneDisallowedVehicles(laneId, disallowedVehicleClasses); } } @@ -1091,10 +1089,10 @@ private void receiveInteraction(VehicleParametersChange vehicleParametersChange) } private void receiveInteraction(TrafficSignRegistration trafficSignRegistration) throws InternalFederateException { - if (trafficSignRegistration.getTrafficSign() instanceof TrafficSignSpeed) { - trafficSignManager.addSpeedSign((TrafficSignSpeed) trafficSignRegistration.getTrafficSign()); - } else if (trafficSignRegistration.getTrafficSign() instanceof TrafficSignLaneAssignment) { - trafficSignManager.addLaneAssignmentSign((TrafficSignLaneAssignment) trafficSignRegistration.getTrafficSign()); + if (trafficSignRegistration.getTrafficSign() instanceof TrafficSignSpeed trafficSign) { + trafficSignManager.addSpeedSign(trafficSign); + } else if (trafficSignRegistration.getTrafficSign() instanceof TrafficSignLaneAssignment trafficSign) { + trafficSignManager.addLaneAssignmentSign(trafficSign); } } @@ -1152,10 +1150,9 @@ static long adjustToSumoTimeStep(long changeSpeedStep, long sumoIntervalNs) { @Override public void processEvent(Event event) throws Exception { - if (event.getResource() instanceof VehicleSpeedChange) { - VehicleSpeedChange cs = (VehicleSpeedChange) event.getResource(); - log.debug("Change the speed of vehicle {} at {} ns ", cs.getVehicleId(), event.getTime()); - bridge.getVehicleControl().setSpeed(cs.getVehicleId(), cs.getSpeed()); + if (event.getResource() instanceof VehicleSpeedChange speedChange) { + log.debug("Change the speed of vehicle {} at {} ns ", speedChange.getVehicleId(), event.getTime()); + bridge.getVehicleControl().setSpeed(speedChange.getVehicleId(), speedChange.getSpeed()); } } @@ -1348,7 +1345,7 @@ private void propagateSumoVehiclesToRti(long time) throws InternalFederateExcept private List getRouteFileVehicles() throws InternalFederateException { return bridge.getSimulationControl().getDepartedVehicles().stream() .filter(v -> !vehiclesAddedViaRti.contains(v)) // all vehicles not added via MOSAIC are added by SUMO - .collect(Collectors.toList()); + .toList(); } /** diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/api/complex/SumoTrafficLightLogic.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/api/complex/SumoTrafficLightLogic.java index 2720de174..e06c620f1 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/api/complex/SumoTrafficLightLogic.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/api/complex/SumoTrafficLightLogic.java @@ -71,22 +71,5 @@ public int getCurrentPhase() { /** * A helper class represents the switch phases of the traffic light. */ - public static class Phase { - - private final int durationMs; - private final String phaseDef; - - public Phase(int durationMs, String phaseDef) { - this.durationMs = durationMs; - this.phaseDef = phaseDef; - } - - public int getDuration() { - return durationMs; - } - - public String getPhaseDef() { - return phaseDef; - } - } + public record Phase(int durationMs, String phaseDef) {} } diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/SimulationFacade.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/SimulationFacade.java index 24f4f8c1d..aacaa4153 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/SimulationFacade.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/SimulationFacade.java @@ -447,9 +447,9 @@ public TraciSimulationStepResult simulateUntil(long time) throws InternalFederat final Map trafficLightGroupInfos = new HashMap<>(); for (AbstractSubscriptionResult subscriptionResult : subscriptions) { - if (subscriptionResult instanceof VehicleSubscriptionResult) { + if (subscriptionResult instanceof VehicleSubscriptionResult result) { final SumoVehicleState sumoVehicle = processVehicleSubscriptionResult( - time, (VehicleSubscriptionResult) subscriptionResult, vehicleSegmentInfo + time, result, vehicleSegmentInfo ); if (sumoVehicle == null) { continue; @@ -459,28 +459,22 @@ public TraciSimulationStepResult simulateUntil(long time) throws InternalFederat } else if (sumoVehicle.isUpdated()) { updatedVehicles.add(sumoVehicle.currentVehicleData); } - } else if (subscriptionResult instanceof InductionLoopSubscriptionResult) { - final InductionLoopInfo inductionLoopInfo = processInductionLoopSubscriptionResult( - time, (InductionLoopSubscriptionResult) subscriptionResult - ); + } else if (subscriptionResult instanceof InductionLoopSubscriptionResult result) { + final InductionLoopInfo inductionLoopInfo = processInductionLoopSubscriptionResult(time, result); updatedInductionLoops.add(inductionLoopInfo); - } else if (subscriptionResult instanceof LaneAreaSubscriptionResult) { - final LaneAreaDetectorInfo laneAreaDetectorInfo = processLaneAreaSubscriptionResult( - time, (LaneAreaSubscriptionResult) subscriptionResult - ); + } else if (subscriptionResult instanceof LaneAreaSubscriptionResult result) { + final LaneAreaDetectorInfo laneAreaDetectorInfo = processLaneAreaSubscriptionResult(time, result); updatedLaneAreas.add(laneAreaDetectorInfo); - } else if (subscriptionResult instanceof TrafficLightSubscriptionResult) { - final TrafficLightGroupInfo trafficLightGroupInfo = processTrafficLightSubscriptionResult( - (TrafficLightSubscriptionResult) subscriptionResult - ); + } else if (subscriptionResult instanceof TrafficLightSubscriptionResult result) { + final TrafficLightGroupInfo trafficLightGroupInfo = processTrafficLightSubscriptionResult(result); trafficLightGroupInfos.put(trafficLightGroupInfo.getGroupId(), trafficLightGroupInfo); } } for (AbstractSubscriptionResult subscriptionResult : subscriptions) { - if (subscriptionResult instanceof VehicleContextSubscriptionResult) { + if (subscriptionResult instanceof VehicleContextSubscriptionResult result) { // needs to be done in a subsequent loop, as previously created VehicleData is updated here - processVehicleContextSubscriptionResult((VehicleContextSubscriptionResult) subscriptionResult); + processVehicleContextSubscriptionResult(result); } } @@ -734,10 +728,10 @@ private VehicleSensors createSensorData( private Map calculateVehicleSegmentInfo(List subscriptions) { Map vehicleToSegmentMap = new HashMap<>(); for (AbstractSubscriptionResult laneAreaDetector : subscriptions) { - if (!(laneAreaDetector instanceof LaneAreaSubscriptionResult)) { + if (!(laneAreaDetector instanceof LaneAreaSubscriptionResult result)) { continue; } - for (String vehicle : ((LaneAreaSubscriptionResult) laneAreaDetector).vehicles) { + for (String vehicle : result.vehicles) { vehicleToSegmentMap.putIfAbsent(vehicle, laneAreaDetector.id); } } diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/TrafficLightFacade.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/TrafficLightFacade.java index c637d2f74..45a74b24a 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/TrafficLightFacade.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/facades/TrafficLightFacade.java @@ -244,8 +244,8 @@ private Map transformDefinitionsIntoPrograms(List phases = new ArrayList<>(); for (SumoTrafficLightLogic.Phase phaseLogic : programDefinition.getPhases()) { - List states = TrafficLightStateDecoder.createStateListFromEncodedString(phaseLogic.getPhaseDef()); - phases.add(new TrafficLightProgramPhase(phaseId, (long) phaseLogic.getDuration() * 1000, states)); + List states = TrafficLightStateDecoder.createStateListFromEncodedString(phaseLogic.phaseDef()); + phases.add(new TrafficLightProgramPhase(phaseId, (long) phaseLogic.durationMs() * 1000, states)); phaseId++; } TrafficLightProgram program = diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/SimulationGetDepartedVehicleIds.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/SimulationGetDepartedVehicleIds.java index f93c1d228..9370f1ab0 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/SimulationGetDepartedVehicleIds.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/SimulationGetDepartedVehicleIds.java @@ -21,7 +21,6 @@ import org.eclipse.sumo.libsumo.StringVector; import java.util.List; -import java.util.stream.Collectors; public class SimulationGetDepartedVehicleIds implements org.eclipse.mosaic.fed.sumo.bridge.api.SimulationGetDepartedVehicleIds { @@ -30,7 +29,7 @@ public List execute(Bridge bridge) { try { return departedIds.stream() .map(Bridge.VEHICLE_ID_TRANSFORMER::fromExternalId) - .collect(Collectors.toList()); + .toList(); } finally { departedIds.delete(); } diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/TrafficLightAddProgram.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/TrafficLightAddProgram.java index e2bb73492..d3b2e1a1e 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/TrafficLightAddProgram.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/TrafficLightAddProgram.java @@ -30,7 +30,7 @@ public class TrafficLightAddProgram implements org.eclipse.mosaic.fed.sumo.bridg public void execute(Bridge bridge, String tlId, String programId, int phaseIndex, List phases) { TraCIPhaseVector traciPhases = new TraCIPhaseVector(); for (SumoTrafficLightLogic.Phase phase : phases) { - traciPhases.add(new TraCIPhase(phase.getDuration() / 1000d, phase.getPhaseDef())); + traciPhases.add(new TraCIPhase(phase.durationMs() / 1000d, phase.phaseDef())); } TraCILogic traciLogic = new TraCILogic(programId, 0, phaseIndex, traciPhases); TrafficLight.setProgramLogic(tlId, traciLogic); diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/VehicleGetTeleportingList.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/VehicleGetTeleportingList.java index a1e6a24c1..505a5344d 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/VehicleGetTeleportingList.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/libsumo/VehicleGetTeleportingList.java @@ -19,18 +19,14 @@ import org.eclipse.mosaic.fed.sumo.bridge.CommandException; import org.eclipse.mosaic.rti.api.InternalFederateException; -import com.google.common.collect.Lists; -import org.eclipse.sumo.libsumo.StringVector; import org.eclipse.sumo.libsumo.Vehicle; -import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; public class VehicleGetTeleportingList implements org.eclipse.mosaic.fed.sumo.bridge.api.VehicleGetTeleportingList { @Override public List execute(Bridge bridge) throws CommandException, InternalFederateException { return Vehicle.getTeleportingIDList().stream() - .map(Bridge.VEHICLE_ID_TRANSFORMER::fromExternalId).collect(Collectors.toList()); + .map(Bridge.VEHICLE_ID_TRANSFORMER::fromExternalId).toList(); } } diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetPrograms.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetPrograms.java index 3d3d6d228..77b409d29 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetPrograms.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetPrograms.java @@ -80,8 +80,8 @@ protected List constructResult(Status status, Object... o List result = new ArrayList<>(); for (Object element : intermediateResult) { // testing all elements for proper types - if (element instanceof SumoTrafficLightLogic) { - result.add((SumoTrafficLightLogic) element); + if (element instanceof SumoTrafficLightLogic trafficLightLogic) { + result.add(trafficLightLogic); } } return result; diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/writer/TrafficLightPhaseWriter.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/writer/TrafficLightPhaseWriter.java index da5edf5ac..a901c5278 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/writer/TrafficLightPhaseWriter.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/bridge/traci/writer/TrafficLightPhaseWriter.java @@ -31,7 +31,7 @@ public TrafficLightPhaseWriter() { @Override public int getVariableLength(SumoTrafficLightLogic.Phase argument) { - return getLength() + stringWriter.getVariableLength(argument.getPhaseDef()); + return getLength() + stringWriter.getVariableLength(argument.phaseDef()); } @Override @@ -45,10 +45,10 @@ public void writeVariableArgument(DataOutputStream out, SumoTrafficLightLogic.Ph out.writeInt(6); out.writeByte(TraciDatatypes.DOUBLE); - out.writeDouble(argument.getDuration() / 1000d); + out.writeDouble(argument.durationMs() / 1000d); out.writeByte(TraciDatatypes.STRING); - stringWriter.writeVariableArgument(out, argument.getPhaseDef()); + stringWriter.writeVariableArgument(out, argument.phaseDef()); out.writeByte(TraciDatatypes.DOUBLE); out.writeDouble(-1d); diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/InductionLoop.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/InductionLoop.java index 73dafb557..4a9b163b0 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/InductionLoop.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/InductionLoop.java @@ -110,13 +110,5 @@ private double calculateTrafficFlow(long currentTime) { return duration > 0 ? total / (duration / (double) TIME.SECOND) * 3600d : 0; } - private static class VehicleCount { - private final long time; - private final int counts; - - private VehicleCount(long time, int counts) { - this.time = time; - this.counts = counts; - } - } + private record VehicleCount(long time, int counts) {} } diff --git a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/TrafficLightStateDecoder.java b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/TrafficLightStateDecoder.java index 4b2881b7d..18008e54a 100644 --- a/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/TrafficLightStateDecoder.java +++ b/fed/mosaic-sumo/src/main/java/org/eclipse/mosaic/fed/sumo/util/TrafficLightStateDecoder.java @@ -29,7 +29,7 @@ public static List createStateListFromEncodedString(String en } return encoded.codePoints() .mapToObj(c -> createStateFromCharacter((char) c)) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/fed/mosaic-sumo/src/test/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetProgramsTest.java b/fed/mosaic-sumo/src/test/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetProgramsTest.java index e5db6bc03..000fa66a3 100644 --- a/fed/mosaic-sumo/src/test/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetProgramsTest.java +++ b/fed/mosaic-sumo/src/test/java/org/eclipse/mosaic/fed/sumo/bridge/traci/TrafficLightGetProgramsTest.java @@ -51,8 +51,8 @@ public void execute() throws Exception { assertEquals("0", tlProgram.getLogicId()); assertEquals(1, tlProgram.getCurrentPhase()); assertEquals(6, tlProgram.getPhases().size()); - assertEquals(4000, tlProgram.getPhases().get(tlProgram.getCurrentPhase()).getDuration()); - assertEquals("yyggrrryyyg", tlProgram.getPhases().get(tlProgram.getCurrentPhase()).getPhaseDef()); + assertEquals(4000, tlProgram.getPhases().get(tlProgram.getCurrentPhase()).durationMs()); + assertEquals("yyggrrryyyg", tlProgram.getPhases().get(tlProgram.getCurrentPhase()).phaseDef()); } @SinceTraci(TraciVersion.API_19) diff --git a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/Database.java b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/Database.java index 23321f4a7..7c7be0ee1 100644 --- a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/Database.java +++ b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/Database.java @@ -309,8 +309,8 @@ public Collection getNodes() { public Collection getTrafficLightNodes() { Collection trafficLightNodes = new ArrayList<>(); for (Node node : getNodes()) { - if (node instanceof TrafficLightNode) { - trafficLightNodes.add((TrafficLightNode) node); + if (node instanceof TrafficLightNode trafficLightNode) { + trafficLightNodes.add(trafficLightNode); } } return trafficLightNodes; diff --git a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/persistence/SQLiteAccess.java b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/persistence/SQLiteAccess.java index 8226dee78..627d20146 100644 --- a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/persistence/SQLiteAccess.java +++ b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/persistence/SQLiteAccess.java @@ -270,16 +270,16 @@ public ResultRow getFirstRow() { */ private static String getAsString(Object o) { - if (o instanceof Integer) { - return String.valueOf(o); - } else if (o instanceof Long) { - return String.valueOf(o); - } else if (o instanceof String) { - return ((String) o); - } else if (o instanceof Float) { - return String.valueOf(o); - } else if (o instanceof Double) { - return String.valueOf(o); + if (o instanceof Integer i) { + return String.valueOf(i); + } else if (o instanceof Long l) { + return String.valueOf(l); + } else if (o instanceof String s) { + return s; + } else if (o instanceof Float f) { + return String.valueOf(f); + } else if (o instanceof Double d) { + return String.valueOf(d); } throw new IllegalArgumentException("o unknown instanceof. o.getClass():" + o.getClass()); @@ -292,10 +292,10 @@ private static String getAsString(Object o) { * @return Representation of the object as Integer. */ private static Integer getAsInteger(Object o) { - if (o instanceof Integer) { - return (Integer) o; - } else if (o instanceof String) { - return Integer.parseInt((String) o); + if (o instanceof Integer i) { + return i; + } else if (o instanceof String s) { + return Integer.parseInt(s); } throw new IllegalArgumentException("o unknown instanceof. o.getClass():" + o.getClass()); @@ -308,14 +308,14 @@ private static Integer getAsInteger(Object o) { * @return Representation of the object as Double. */ private static Double getAsDouble(Object o) { - if (o instanceof Float) { - return ((Float) o).doubleValue(); - } else if (o instanceof Double) { - return ((Double) o); - } else if (o instanceof Integer) { - return ((Integer) o).doubleValue(); - } else if (o instanceof Long) { - return ((Long) o).doubleValue(); + if (o instanceof Float f) { + return f.doubleValue(); + } else if (o instanceof Double d) { + return d; + } else if (o instanceof Integer i) { + return i.doubleValue(); + } else if (o instanceof Long l) { + return l.doubleValue(); } throw new IllegalArgumentException("o unknown instanceof. o.getClass():" + o.getClass()); @@ -328,12 +328,12 @@ private static Double getAsDouble(Object o) { * @return Representation of the object as Boolean. */ private static Boolean getAsBoolean(Object o) { - if (o instanceof Boolean) { - return (Boolean) o; - } else if (o instanceof Integer) { - return (Integer) o >= 1; - } else if (o instanceof String) { - return ((String) o).toLowerCase().trim().equals("true"); + if (o instanceof Boolean b) { + return b; + } else if (o instanceof Integer i) { + return i >= 1; + } else if (o instanceof String s) { + return s.toLowerCase().trim().equals("true"); } else { throw new IllegalArgumentException("o is an instance of o.getClass():" + o.getClass()); } diff --git a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/road/Restriction.java b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/road/Restriction.java index b8d4a9ffc..e575fe7ca 100644 --- a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/road/Restriction.java +++ b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/road/Restriction.java @@ -113,10 +113,12 @@ public void applyRestriction() { if (found) { // way found in multiple incoming connections, // this means we do not end here (which is a requirement from OSM)! - String error = "the 'from' way ({}) referenced in this restriction does " - + "not seem to start or end at the 'via' node ({}), " - + "please check OSM input " - + "(see http://wiki.openstreetmap.org/wiki/Relation:restriction#cite_note-waysplit-2)"; + String error = """ + the 'from' way ({}) referenced in this restriction does + not seem to start or end at the 'via' node ({}), " + please check OSM input " + (see http://wiki.openstreetmap.org/wiki/Relation:restriction#cite_note-waysplit-2) + """; log.error(error, source.getId(), via.getId()); return; } else { diff --git a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/route/Route.java b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/route/Route.java index 32397a5fd..3c8b3ba87 100644 --- a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/route/Route.java +++ b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/route/Route.java @@ -24,7 +24,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import javax.annotation.Nonnull; /** @@ -107,7 +106,7 @@ public List getNodes() { */ @Nonnull public List getNodeIds() { - return Collections.unmodifiableList(getNodes().stream().map(Node::getId).collect(Collectors.toList())); + return getNodes().stream().map(Node::getId).toList(); } /** @@ -129,7 +128,7 @@ public List getConnections() { */ @Nonnull public List getConnectionIds() { - return Collections.unmodifiableList(getConnections().stream().map(Connection::getId).collect(Collectors.toList())); + return getConnections().stream().map(Connection::getId).toList(); } } diff --git a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/spatial/NodeFinder.java b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/spatial/NodeFinder.java index eb7ecef37..f5299d218 100644 --- a/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/spatial/NodeFinder.java +++ b/lib/mosaic-database/src/main/java/org/eclipse/mosaic/lib/database/spatial/NodeFinder.java @@ -26,7 +26,6 @@ import edu.umd.cs.findbugs.annotations.SuppressWarnings; import java.util.List; -import java.util.stream.Collectors; /** * A spatial index which searches for the closest node to a specified geo location. @@ -43,7 +42,7 @@ public class NodeFinder { */ public NodeFinder(Database database) { List items = database.getNodes().stream() - .map(NodeWrapper::new).collect(Collectors.toList()); + .map(NodeWrapper::new).toList(); nodeIndex = new KdTree<>(new SpatialItemAdapter.PointAdapter<>(), items); nodeSearch = new SpatialTreeTraverser.Nearest<>(); diff --git a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/CartesianPolygon.java b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/CartesianPolygon.java index 85a9b7fba..9fd21c748 100644 --- a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/CartesianPolygon.java +++ b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/CartesianPolygon.java @@ -17,8 +17,10 @@ import org.eclipse.mosaic.lib.math.MathUtils; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; public class CartesianPolygon implements Polygon, CartesianArea { @@ -89,7 +91,7 @@ public boolean contains(CartesianPoint point) { public GeoPolygon toGeo() { return new GeoPolygon( - getVertices().stream().map(CartesianPoint::toGeo).collect(Collectors.toList()) + getVertices().stream().map(CartesianPoint::toGeo).toList() ); } diff --git a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/GeoPolygon.java b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/GeoPolygon.java index 106616b84..66d1c1591 100644 --- a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/GeoPolygon.java +++ b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/geo/GeoPolygon.java @@ -17,14 +17,15 @@ import org.eclipse.mosaic.lib.math.MathUtils; +import java.io.Serial; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; public class GeoPolygon implements Polygon, GeoArea { + @Serial private static final long serialVersionUID = 1L; private final List vertices; @@ -40,15 +41,14 @@ public GeoPolygon(GeoPoint... coordinates) { * @param coordinates A list of lists of {@link GeoPoint}s */ public GeoPolygon(List coordinates) { - final List verticesTmp = new ArrayList<>(coordinates); - if (!verticesTmp.get(0).equals(verticesTmp.get(verticesTmp.size() - 1))) { - verticesTmp.add(verticesTmp.get(0)); + vertices = new ArrayList<>(coordinates); + if (!vertices.get(0).equals(vertices.get(vertices.size() - 1))) { + vertices.add(vertices.get(0)); } - if (verticesTmp.size() < 3) { + if (vertices.size() < 3) { throw new IllegalArgumentException("The polygon must consists of two different vertices at least."); } - vertices = Collections.unmodifiableList(verticesTmp); } private GeoRectangle calcBoundingBox(List vertices) { @@ -66,7 +66,7 @@ private GeoRectangle calcBoundingBox(List vertices) { } public List getVertices() { - return vertices; + return Collections.unmodifiableList(vertices); } @Override @@ -97,7 +97,7 @@ public boolean contains(GeoPoint point) { public CartesianPolygon toCartesian() { return new CartesianPolygon( - getVertices().stream().map(GeoPoint::toCartesian).collect(Collectors.toList()) + getVertices().stream().map(GeoPoint::toCartesian).toList() ); } diff --git a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/PointCloud.java b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/PointCloud.java index 57bcb37a3..b7d50968e 100644 --- a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/PointCloud.java +++ b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/PointCloud.java @@ -19,9 +19,9 @@ import org.eclipse.mosaic.lib.math.Vector3d; import java.io.Serializable; +import java.util.Collections; import java.util.List; import java.util.function.Predicate; -import java.util.stream.Collectors; /** * This class represents a point cloud based on the {@link Vector3d} coordinate system. @@ -59,8 +59,8 @@ public enum PointReference { private static final long serialVersionUID = 1L; - private final Vector3d origin; - private final RotationMatrix orientation; + private final Vector3d origin = new Vector3d(); + private final RotationMatrix orientation = new RotationMatrix(); private final long creationTime; private final PointReference pointsReference; @@ -76,16 +76,16 @@ public enum PointReference { * world coordinates, or relative coordinates compared to the given origin and orientation field. The reference frame of the points * in the given {@link Point} list must be declared by using {@link PointReference#ABSOLUTE} or {@link PointReference#RELATIVE}. * - * @param creationTime the creation time of the point cloud in nanoseconds - * @param origin the origin point of the point cloud in world coordinates - * @param orientation the orientation of the point cloud - * @param points a list of points, containing point coordinates in either absolute or relative format + * @param creationTime the creation time of the point cloud in nanoseconds + * @param origin the origin point of the point cloud in world coordinates + * @param orientation the orientation of the point cloud + * @param points a list of points, containing point coordinates in either absolute or relative format * @param pointsReference the reference format of the coordinates of the points (absolute world coordinates, relative coordinates) */ public PointCloud(long creationTime, Vector3d origin, RotationMatrix orientation, List points, PointReference pointsReference) { this.creationTime = creationTime; - this.origin = origin; - this.orientation = orientation; + this.origin.set(origin); + this.orientation.set(orientation); this.points = points; this.pointsReference = pointsReference; } @@ -281,7 +281,7 @@ private static List relativeToAbsolute(PointCloud pointCloud, Predicate

(Point) pointCloud.orientation.multiply(new Point(point, point.getDistance(), point.getHitType())).add(pointCloud.origin)) - .collect(Collectors.toList()); + .toList(); } private static List absoluteToRelative(PointCloud pointCloud, Predicate filter) { @@ -289,13 +289,15 @@ private static List absoluteToRelative(PointCloud pointCloud, Predicate

(Point) inv.multiply(point.subtract(pointCloud.origin, new Point(point, point.getDistance(), point.getHitType())))) - .collect(Collectors.toList()); + .toList(); } private static List noTransformation(PointCloud pointCloud, Predicate filter) { - return filter == POINTS_ALL ? pointCloud.points : pointCloud.points.stream() + return filter == POINTS_ALL + ? Collections.unmodifiableList(pointCloud.points) + : pointCloud.points.stream() .filter(filter) - .collect(Collectors.toList()); + .toList(); } } } diff --git a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/QuickHull2d.java b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/QuickHull2d.java index 8b30dc7af..39ca56404 100644 --- a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/QuickHull2d.java +++ b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/QuickHull2d.java @@ -207,6 +207,6 @@ private void computeConvexHull() { public static ArrayList computeConvexHull(ArrayList points) { QuickHull2d qh = new QuickHull2d(points); qh.computeConvexHull(); - return qh.hullPoints; + return new ArrayList<>(qh.hullPoints); } } \ No newline at end of file diff --git a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/SpatialItemAdapter.java b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/SpatialItemAdapter.java index e0831d1b7..5e1d77875 100644 --- a/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/SpatialItemAdapter.java +++ b/lib/mosaic-geomath/src/main/java/org/eclipse/mosaic/lib/spatial/SpatialItemAdapter.java @@ -66,9 +66,6 @@ default Vector3d getCenter(T item, Vector3d result) { return result.set(getCenterX(item), getCenterY(item), getCenterZ(item)); } - default void setNode(T item, SpatialTree.Node node) { - } - class PointAdapter implements SpatialItemAdapter { @Override diff --git a/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/AbstractNetworkAmbassador.java b/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/AbstractNetworkAmbassador.java index d1304b27f..ce46a438f 100644 --- a/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/AbstractNetworkAmbassador.java +++ b/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/AbstractNetworkAmbassador.java @@ -319,12 +319,12 @@ protected void processTimeAdvanceGrant(long time) throws InternalFederateExcepti ReceiveMessageContainer rcvMsgContainer = this.federateAmbassadorChannel.readMessage(simulatedNodes); // read message body // The receiver may have been removed from the simulation while message was on air - if (rcvMsgContainer.receiverName != null) { + if (rcvMsgContainer.receiverName() != null) { V2xMessageReception msg = new V2xMessageReception( - rcvMsgContainer.time, - rcvMsgContainer.receiverName, - rcvMsgContainer.msgId, - rcvMsgContainer.receiverInformation + rcvMsgContainer.time(), + rcvMsgContainer.receiverName(), + rcvMsgContainer.msgId(), + rcvMsgContainer.receiverInformation() ); log.debug("Receive V2XMessage : Id({}) on Node {} at Time={}", msg.getMessageId(), msg.getReceiverName(), TIME.format(msg.getTime())); this.rti.triggerInteraction(msg); // Hand the received message to the RTI and thus the other federates diff --git a/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/ClientServerChannel.java b/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/ClientServerChannel.java index 051da003c..d242e1c3b 100644 --- a/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/ClientServerChannel.java +++ b/lib/mosaic-network/src/main/java/org/eclipse/mosaic/lib/coupling/ClientServerChannel.java @@ -52,7 +52,6 @@ import java.net.Socket; import java.nio.ByteBuffer; import java.util.List; -import javax.annotation.Nonnull; /** * Abstraction of Ambassador->Federate Byte Protocol @@ -396,12 +395,12 @@ public int writeSendMessage(long time, int srcNodeId, buffer.position(0); if (dac.isGeocast()) { //Geocasts - if (dac.getGeoArea() instanceof GeoRectangle) { //Rectangular area + if (dac.getGeoArea() instanceof GeoRectangle geoRectangle) { //Rectangular area SendMessageMessage.GeoRectangleAddress.Builder rectangleAddress = SendMessageMessage.GeoRectangleAddress.newBuilder(); //builder for rectangular addresses rectangleAddress.setIpAddress(buffer.getInt()); //write the ip address as flat integer into the builder //convert coordinates etc. - CartesianRectangle projectedRectangle = ((GeoRectangle) dac.getGeoArea()).toCartesian(); + CartesianRectangle projectedRectangle = geoRectangle.toCartesian(); //write the coordinates of the area into the builder rectangleAddress.setAX(projectedRectangle.getA().getX()); rectangleAddress.setAY(projectedRectangle.getA().getY()); @@ -409,11 +408,11 @@ public int writeSendMessage(long time, int srcNodeId, rectangleAddress.setBY(projectedRectangle.getB().getY()); //add address to the message sendMess.setRectangleAddress(rectangleAddress); - } else if (dac.getGeoArea() instanceof GeoCircle) { + } else if (dac.getGeoArea() instanceof GeoCircle geoCircle) { SendMessageMessage.GeoCircleAddress.Builder circleAddress = SendMessageMessage.GeoCircleAddress.newBuilder(); circleAddress.setIpAddress(buffer.getInt()); - CartesianCircle projectedCircle = ((GeoCircle) dac.getGeoArea()).toCartesian(); + CartesianCircle projectedCircle = geoCircle.toCartesian(); //write area into the address object circleAddress.setCenterX(projectedCircle.getCenter().getX()); circleAddress.setCenterY(projectedCircle.getCenter().getY()); @@ -447,19 +446,12 @@ public int writeConfigMessage(long time, int msgID, int externalId, AdHocConfigu writeCommand(CMD.CONF_RADIO); ConfigureRadioMessage.Builder configRadio = ConfigureRadioMessage.newBuilder(); configRadio.setTime(time).setMessageId(msgID).setExternalId(externalId); - switch (configuration.getRadioMode()) { - case OFF: - configRadio.setRadioNumber(ConfigureRadioMessage.RadioNumber.NO_RADIO); - break; - case SINGLE: - configRadio.setRadioNumber(ConfigureRadioMessage.RadioNumber.SINGLE_RADIO); - break; - case DUAL: - configRadio.setRadioNumber(ConfigureRadioMessage.RadioNumber.DUAL_RADIO); - break; - default: - throw new RuntimeException("Illegal number of radios in configuration: " + configuration.getRadioMode().toString()); - } + configRadio.setRadioNumber(switch (configuration.getRadioMode()) { + case OFF -> ConfigureRadioMessage.RadioNumber.NO_RADIO; + case SINGLE -> ConfigureRadioMessage.RadioNumber.SINGLE_RADIO; + case DUAL -> ConfigureRadioMessage.RadioNumber.DUAL_RADIO; + default -> throw new RuntimeException("Illegal number of radios in configuration: " + configuration.getRadioMode().toString()); + }); if (configuration.getRadioMode() == AdHocConfiguration.RadioMode.SINGLE || configuration.getRadioMode() == AdHocConfiguration.RadioMode.DUAL) { ConfigureRadioMessage.RadioConfiguration.Builder radioConfig1 = ConfigureRadioMessage.RadioConfiguration.newBuilder(); @@ -542,69 +534,37 @@ private int inet4ToInt(Inet4Address ip) { } private int protobufCmdToCmd(CommandType protoCmd) { - switch (protoCmd) { - case INIT: - return CMD.INIT; - case SHUT_DOWN: - return CMD.SHUT_DOWN; - - case UPDATE_NODE: - return CMD.UPDATE_NODE; - case REMOVE_NODE: - return CMD.REMOVE_NODE; - - case ADVANCE_TIME: - return CMD.ADVANCE_TIME; - case NEXT_EVENT: - return CMD.NEXT_EVENT; - case MSG_RECV: - return CMD.MSG_RECV; - - case MSG_SEND: - return CMD.MSG_SEND; - case CONF_RADIO: - return CMD.CONF_RADIO; - - case END: - return CMD.END; - case SUCCESS: - return CMD.SUCCESS; - default: - return CMD.UNDEF; - } + return switch (protoCmd) { + case INIT -> CMD.INIT; + case SHUT_DOWN -> CMD.SHUT_DOWN; + case UPDATE_NODE -> CMD.UPDATE_NODE; + case REMOVE_NODE -> CMD.REMOVE_NODE; + case ADVANCE_TIME -> CMD.ADVANCE_TIME; + case NEXT_EVENT -> CMD.NEXT_EVENT; + case MSG_RECV -> CMD.MSG_RECV; + case MSG_SEND -> CMD.MSG_SEND; + case CONF_RADIO -> CMD.CONF_RADIO; + case END -> CMD.END; + case SUCCESS -> CMD.SUCCESS; + default -> CMD.UNDEF; + }; } private CommandType cmdToProtobufCmd(int cmd) { - switch (cmd) { - case CMD.INIT: - return CommandType.INIT; - case CMD.SHUT_DOWN: - return CommandType.SHUT_DOWN; - - case CMD.UPDATE_NODE: - return CommandType.UPDATE_NODE; - case CMD.REMOVE_NODE: - return CommandType.REMOVE_NODE; - - case CMD.ADVANCE_TIME: - return CommandType.ADVANCE_TIME; - case CMD.NEXT_EVENT: - return CommandType.NEXT_EVENT; - case CMD.MSG_RECV: - return CommandType.MSG_RECV; - - case CMD.MSG_SEND: - return CommandType.MSG_SEND; - case CMD.CONF_RADIO: - return CommandType.CONF_RADIO; - - case CMD.END: - return CommandType.END; - case CMD.SUCCESS: - return CommandType.SUCCESS; - default: - return CommandType.UNDEF; - } + return switch (cmd) { + case CMD.INIT -> CommandType.INIT; + case CMD.SHUT_DOWN -> CommandType.SHUT_DOWN; + case CMD.UPDATE_NODE -> CommandType.UPDATE_NODE; + case CMD.REMOVE_NODE -> CommandType.REMOVE_NODE; + case CMD.ADVANCE_TIME -> CommandType.ADVANCE_TIME; + case CMD.NEXT_EVENT -> CommandType.NEXT_EVENT; + case CMD.MSG_RECV -> CommandType.MSG_RECV; + case CMD.MSG_SEND -> CommandType.MSG_SEND; + case CMD.CONF_RADIO -> CommandType.CONF_RADIO; + case CMD.END -> CommandType.END; + case CMD.SUCCESS -> CommandType.SUCCESS; + default -> CommandType.UNDEF; + }; } /** @@ -614,50 +574,19 @@ private CommandType cmdToProtobufCmd(int cmd) { * @return the protobuf-channel object */ private ClientServerChannelProtos.RadioChannel translateChannel(AdHocChannel channel) { - switch (channel) { - case SCH1: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH1; - case SCH2: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH2; - case SCH3: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH3; - case CCH: - return ClientServerChannelProtos.RadioChannel.PROTO_CCH; - case SCH4: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH4; - case SCH5: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH5; - case SCH6: - return ClientServerChannelProtos.RadioChannel.PROTO_SCH6; - default: - throw new RuntimeException("Channel " + channel + " does not exist in MOSAIC"); - } + return switch (channel) { + case SCH1 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH1; + case SCH2 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH2; + case SCH3 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH3; + case CCH -> ClientServerChannelProtos.RadioChannel.PROTO_CCH; + case SCH4 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH4; + case SCH5 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH5; + case SCH6 -> ClientServerChannelProtos.RadioChannel.PROTO_SCH6; + }; } - public static class NodeDataContainer { - public final int id; - public final CartesianPoint pos; + record NodeDataContainer(int id, CartesianPoint pos) {} - public NodeDataContainer(int id, CartesianPoint pos) { - this.id = id; - this.pos = pos; - } - } + record ReceiveMessageContainer(long time, String receiverName, int msgId, V2xReceiverInformation receiverInformation) {} - public static class ReceiveMessageContainer { - - public final long time; - public final String receiverName; - public final int msgId; - public final V2xReceiverInformation receiverInformation; - - public ReceiveMessageContainer(final long time, @Nonnull final String receiverName, final int msgId, - @Nonnull final V2xReceiverInformation receiverInformation) { - - this.time = time; - this.receiverName = receiverName; - this.msgId = msgId; - this.receiverInformation = receiverInformation; - } - } } diff --git a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/enums/VehicleStopMode.java b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/enums/VehicleStopMode.java index 10d880e00..45af4f922 100644 --- a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/enums/VehicleStopMode.java +++ b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/enums/VehicleStopMode.java @@ -77,18 +77,13 @@ public static VehicleStopMode fromSumoInt(int stopFlag) { * @return the corresponding int to the stop mode */ public static int toSumoInt(VehicleStopMode stopMode) { - switch (stopMode) { - case STOP: - return 0; - case PARK_ON_ROADSIDE: - return 1; - case BUS_STOP: - return 8; - case PARK_IN_PARKING_AREA: // these flags are additive (see sumo docs) - return 64 + toSumoInt(VehicleStopMode.PARK_ON_ROADSIDE); - case NOT_STOPPED: - default: - return -1; - } + return switch (stopMode) { + case STOP -> 0; + case PARK_ON_ROADSIDE -> 1; + case BUS_STOP -> 8; + case PARK_IN_PARKING_AREA -> // these flags are additive (see sumo docs) + 64 + toSumoInt(VehicleStopMode.PARK_ON_ROADSIDE); + default -> -1; + }; } } diff --git a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignLaneAssignment.java b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignLaneAssignment.java index ce9f64e88..b3c3fb0f3 100644 --- a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignLaneAssignment.java +++ b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignLaneAssignment.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * Represents a traffic sign that assigns {@link VehicleClass}es to lanes. @@ -107,7 +106,7 @@ public List getLaneAssignments() { } }) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignSpeed.java b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignSpeed.java index ab31fcb4e..aa30c685e 100644 --- a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignSpeed.java +++ b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/trafficsign/TrafficSignSpeed.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * Represents a traffic speed sign. @@ -109,7 +108,7 @@ public List getSpeedLimits() { } }) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/v2x/etsi/CamContent.java b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/v2x/etsi/CamContent.java index 567cd0e12..393a3094b 100644 --- a/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/v2x/etsi/CamContent.java +++ b/lib/mosaic-objects/src/main/java/org/eclipse/mosaic/lib/objects/v2x/etsi/CamContent.java @@ -93,20 +93,11 @@ public CamContent(DataInput dIn) throws IOException { this.position = null; } - AwarenessType awarenessType = AwarenessType.fromId(dIn.readByte()); - switch (awarenessType) { - case VEHICLE: - this.awarenessData = new VehicleAwarenessData(dIn); - break; - case RSU: - this.awarenessData = new RsuAwarenessData(dIn); - break; - case TRAFFIC_LIGHT: - this.awarenessData = new TrafficLightAwarenessData(dIn); - break; - default: - this.awarenessData = null; - } + awarenessData = switch (AwarenessType.fromId(dIn.readByte())) { + case VEHICLE -> new VehicleAwarenessData(dIn); + case RSU -> new RsuAwarenessData(dIn); + case TRAFFIC_LIGHT -> new TrafficLightAwarenessData(dIn); + }; if (dIn.readBoolean()) { this.userTaggedValue = new byte[dIn.readInt()]; diff --git a/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/graphhopper/GraphHopperRouting.java b/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/graphhopper/GraphHopperRouting.java index bbc81632e..b52772819 100644 --- a/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/graphhopper/GraphHopperRouting.java +++ b/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/graphhopper/GraphHopperRouting.java @@ -399,8 +399,8 @@ private CandidateRoute convertPath(Graph graph, Path newPath, RoutingPosition so * (and artificial edges) is created in the QueryGraph. As a consequence, the first * and/or last edge of the route might be such virtual edge, which must be converted to its original edge. */ - if (currEdge instanceof VirtualEdgeIteratorState) { - currEdge = graph.getEdgeIteratorStateForKey(((VirtualEdgeIteratorState) origEdge).getOriginalEdgeKey()); + if (currEdge instanceof VirtualEdgeIteratorState virtualEdge) { + currEdge = graph.getEdgeIteratorStateForKey(virtualEdge.getOriginalEdgeKey()); } Connection con = graphMapper.toConnection(currEdge.getEdge()); diff --git a/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/util/RouteFixer.java b/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/util/RouteFixer.java index 8881c1110..f36d3a3b5 100644 --- a/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/util/RouteFixer.java +++ b/lib/mosaic-routing/src/main/java/org/eclipse/mosaic/lib/routing/util/RouteFixer.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * Provides methods to fix routes, e.g. by adding missing connections to unfinished routes. @@ -161,6 +160,6 @@ private static String getPreviousNodeId(String edgeId) { } private List convertConnectionsToIds(List fixedRoute) { - return fixedRoute.stream().map(Connection::getId).collect(Collectors.toList()); + return fixedRoute.stream().map(Connection::getId).toList(); } } diff --git a/lib/mosaic-routing/src/test/java/org/eclipse/mosaic/lib/routing/database/LazyLoadingRoadPositionTest.java b/lib/mosaic-routing/src/test/java/org/eclipse/mosaic/lib/routing/database/LazyLoadingRoadPositionTest.java index ba989ae45..6cc75f205 100644 --- a/lib/mosaic-routing/src/test/java/org/eclipse/mosaic/lib/routing/database/LazyLoadingRoadPositionTest.java +++ b/lib/mosaic-routing/src/test/java/org/eclipse/mosaic/lib/routing/database/LazyLoadingRoadPositionTest.java @@ -18,7 +18,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import org.eclipse.mosaic.lib.database.Database; @@ -39,7 +38,6 @@ import java.io.IOException; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; @RunWith(MockitoJUnitRunner.class) public class LazyLoadingRoadPositionTest { @@ -88,13 +86,13 @@ public void sumoAvailableValues_everythingAvailable() { assertEquals("4068038_251150126_428788319", refinedRoadPosition.getConnection().getId()); Collection outgoingConnections = refinedRoadPosition.getConnection().getOutgoingConnections(); assertFalse(outgoingConnections.isEmpty()); - List outgoingConnectionsIds = outgoingConnections.stream().map(IConnection::getId).collect(Collectors.toList()); + List outgoingConnectionsIds = outgoingConnections.stream().map(IConnection::getId).toList(); assertEquals("36878113_428788319_428788320", outgoingConnectionsIds.get(0)); assertEquals("4068038_428788319_408194194", outgoingConnectionsIds.get(1)); Collection incomingConnections = refinedRoadPosition.getConnection().getIncomingConnections(); assertFalse(incomingConnections.isEmpty()); - List incomingConnectionsIds = incomingConnections.stream().map(IConnection::getId).collect(Collectors.toList()); + List incomingConnectionsIds = incomingConnections.stream().map(IConnection::getId).toList(); assertEquals("4068038_21487168_251150126", incomingConnectionsIds.get(0)); assertEquals("36338285_415838100_251150126", incomingConnectionsIds.get(1)); } diff --git a/lib/mosaic-utils/src/main/java/org/eclipse/mosaic/lib/util/ClassUtils.java b/lib/mosaic-utils/src/main/java/org/eclipse/mosaic/lib/util/ClassUtils.java index 8464d55de..fe501630a 100644 --- a/lib/mosaic-utils/src/main/java/org/eclipse/mosaic/lib/util/ClassUtils.java +++ b/lib/mosaic-utils/src/main/java/org/eclipse/mosaic/lib/util/ClassUtils.java @@ -70,8 +70,7 @@ private static void setSysPathsToNull() throws NoSuchFieldException, SecurityExc */ public static void addUrlToClassloader(File jar) throws Exception { ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); - if (systemClassLoader instanceof URLClassLoader) { - URLClassLoader urlClassLoader = (URLClassLoader) (ClassLoader.getSystemClassLoader()); + if (systemClassLoader instanceof URLClassLoader urlClassLoader) { Method m = urlClassLoader.getClass().getDeclaredMethod("addURL", URL.class); m.setAccessible(true); m.invoke(urlClassLoader, jar.toURI().toURL()); diff --git a/lib/mosaic-utils/src/test/java/org/eclipse/mosaic/lib/util/junit/TestUtils.java b/lib/mosaic-utils/src/test/java/org/eclipse/mosaic/lib/util/junit/TestUtils.java index dd6884cfd..bd01cbbba 100644 --- a/lib/mosaic-utils/src/test/java/org/eclipse/mosaic/lib/util/junit/TestUtils.java +++ b/lib/mosaic-utils/src/test/java/org/eclipse/mosaic/lib/util/junit/TestUtils.java @@ -30,8 +30,8 @@ public class TestUtils { public static void setPrivateField(Object object, String fieldName, Object value) throws IllegalStateException { try { final Field field; - if (object instanceof Class) { - field = ((Class) object).getDeclaredField(fieldName); + if (object instanceof Class objectClass) { + field = objectClass.getDeclaredField(fieldName); } else { field = object.getClass().getDeclaredField(fieldName); } diff --git a/pom.xml b/pom.xml index 7ac91db55..ec6b35882 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 25.0-SNAPSHOT UTF-8 - 11 + 17 true true 1.6.0 @@ -562,7 +562,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.5.0 org.jacoco @@ -619,7 +619,7 @@ com.github.spotbugs spotbugs-maven-plugin - 3.1.12.2 + 4.2.3 ${parent.dir}/spotbugs-excludes.xml diff --git a/test/ci/ci-image-mvn-sumo/Dockerfile b/test/ci/ci-image-mvn-sumo/Dockerfile index c09decaac..3ab423666 100644 --- a/test/ci/ci-image-mvn-sumo/Dockerfile +++ b/test/ci/ci-image-mvn-sumo/Dockerfile @@ -1,4 +1,4 @@ -FROM maven:3.6.3-adoptopenjdk-11 +FROM maven:3.9.9-eclipse-temurin-17 ENV DEBIAN_FRONTEND=noninteractive ENV USER_NAME=jenkins diff --git a/test/ci/ci-image-mvn-sumo/README.md b/test/ci/ci-image-mvn-sumo/README.md index 0f7dca4a4..fec594112 100644 --- a/test/ci/ci-image-mvn-sumo/README.md +++ b/test/ci/ci-image-mvn-sumo/README.md @@ -5,14 +5,14 @@ builds and to provide a SUMO executable for integration tests. The `Dockerfile` is kept very simple, which is sufficient for now. SUMO devs push pre-compiled executable to https://launchpad.net/~sumo/+archive/ubuntu/stable . The dockerfile grabs the latest stable one and installs it on top -of the `maven:3.6.3-adoptopenjdk-8` image. As a consequence we cannot define a specific version to be installed, but rather +of the `maven:3.9.9-eclipse-temurin-17` image. As a consequence we cannot define a specific version to be installed, but rather build and tag the docker image with the latest SUMO version. This image should be built whenever a new major version of SUMO is released and available in the PPA. ```shell script -docker build . -t eclipsemosaic/mosaic-ci:jdk11-sumo-1.20.0 +docker build . -t eclipsemosaic/mosaic-ci:jdk17-sumo-1.20.0 docker login -docker push eclipsemosaic/mosaic-ci:jdk11-sumo-1.20.0 +docker push eclipsemosaic/mosaic-ci:jdk17-sumo-1.20.0 ``` Afterwards, the image should be available here: https://hub.docker.com/r/eclipsemosaic/mosaic-ci/tags diff --git a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/perceptionmodule/SimplePerceptionApp.java b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/perceptionmodule/SimplePerceptionApp.java index 11a20ccbc..32c7c3ac6 100644 --- a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/perceptionmodule/SimplePerceptionApp.java +++ b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/perceptionmodule/SimplePerceptionApp.java @@ -27,7 +27,6 @@ import org.eclipse.mosaic.rti.TIME; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -91,7 +90,7 @@ private void perceiveVehicles() { long vehiclesWithInvalidDimensions = perceivedVehicles.stream() .filter(v -> v.getLength() == 0 && v.getWidth() == 0 && v.getHeight() == 0).count(); getLog().infoSimTime(this, "Perceived all vehicles: {}, {} without dimensions.", - perceivedVehicles.stream().map(VehicleObject::getId).collect(Collectors.toList()), vehiclesWithInvalidDimensions); + perceivedVehicles.stream().map(VehicleObject::getId).toList(), vehiclesWithInvalidDimensions); perceivedNoVehicles = false; } } @@ -104,7 +103,7 @@ private void perceiveTrafficLights() { List perceivedTrafficLights = getOs().getPerceptionModule().getPerceivedTrafficLights(); // get traffic light controlling lane of ego vehicle List trafficLightsOnLane = perceivedTrafficLights.stream() - .filter(trafficLightObject -> trafficLightObject.getIncomingLane().equals(getLaneId())).collect(Collectors.toList()); + .filter(trafficLightObject -> trafficLightObject.getIncomingLane().equals(getLaneId())).toList(); if (trafficLightsOnLane.size() != 1) { return; } diff --git a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/AbstractReceiverApp.java b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/AbstractReceiverApp.java index 0623ab29b..8168072f7 100644 --- a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/AbstractReceiverApp.java +++ b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/AbstractReceiverApp.java @@ -61,8 +61,7 @@ public void onShutdown() { public void onMessageReceived(ReceivedV2xMessage receivedV2xMessage) { V2xMessage msg = receivedV2xMessage.getMessage(); - if (msg instanceof Cam) { - final Cam cam = (Cam) msg; + if (msg instanceof Cam cam) { final GeoPoint otherPos = cam.getPosition(); final GeoPoint myPos = getOs().getPosition(); double distance = myPos.distanceTo(otherPos); @@ -70,8 +69,7 @@ public void onMessageReceived(ReceivedV2xMessage receivedV2xMessage) { getLog().infoSimTime(this, "Received CAM from {}, over a distance of {} m", senderName, distance); - } else if (msg instanceof TestMessage) { - TestMessage testMsg = (TestMessage) msg; + } else if (msg instanceof TestMessage testMsg) { GeoPoint msgPos = testMsg.getSenderPosition(); GeoPoint myPos = getOs().getPosition(); diff --git a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/NackReceivingServer.java b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/NackReceivingServer.java index 520c42965..b8f6b35fd 100644 --- a/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/NackReceivingServer.java +++ b/test/mosaic-integration-tests/src/test/java/org/eclipse/mosaic/test/app/sendandreceive/NackReceivingServer.java @@ -64,8 +64,8 @@ public void onAcknowledgementReceived(ReceivedAcknowledgement acknowledgement) { @Override public void processEvent(Event event) { - if (event instanceof SendSimpleMessage) { - MessageRouting routing = getOs().getCellModule().createMessageRouting().tcp().topoCast(((SendSimpleMessage) event).receiver); + if (event instanceof SendSimpleMessage sendSimpleMessage) { + MessageRouting routing = getOs().getCellModule().createMessageRouting().tcp().topoCast(sendSimpleMessage.receiver); getOs().getCellModule().sendV2xMessage(new GenericV2xMessage(routing, 8)); getLog().infoSimTime(this, "Message sent at time {}", getOs().getSimulationTime()); } From 7e36565a7a74474caa4ca2731e82b914e3fdb49f Mon Sep 17 00:00:00 2001 From: Karl Schrab Date: Wed, 25 Sep 2024 10:04:04 +0200 Subject: [PATCH 04/26] ci: use jdk17 container for deploy --- Jenkinsfile | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 802d57c8f..f2553b398 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -13,18 +13,6 @@ spec: - cat tty: true volumeMounts: - - name: m2-repo - mountPath: /home/jenkins/.m2/repository - resources: - limits: - memory: "2Gi" - cpu: "1" - requests: - memory: "2Gi" - cpu: "1" - - name: jnlp - image: 'eclipsecbijenkins/basic-agent:3107.v665000b_51092' - volumeMounts: - mountPath: "/home/jenkins/.m2/settings-security.xml" name: "settings-security-xml" readOnly: true @@ -44,7 +32,7 @@ spec: cpu: "1" requests: memory: "2Gi" - cpu: "1" + cpu: "1" volumes: - name: "settings-security-xml" secret: @@ -134,17 +122,10 @@ spec: branch 'main' } steps { - container('jnlp') { + container('maven-sumo') { // sometimes this fails for unknown reason, so lets try it three times retry(3) { - // it's not possible to deploy from the maven-sumo container, as there's something wrong in - // finding .m2/settings.xml and .m2/repository even if mounted. executing mvn -X prints - // some weird paths: - // > [DEBUG] Reading user settings from ?/.m2/settings.xml - // which makes it impossible to mount the correct settings.xml - // Therefore we are using a second container which is able to read the mounted settings.xml and is able to - // deploy the artifacts. The only drawback is, that this step again builds all artifacts. - sh '/opt/tools/apache-maven/3.6.3/bin/mvn install -DskipTests' + // requires the correct tool finding secrets sh '/opt/tools/apache-maven/3.6.3/bin/mvn deploy -DskipTests' } } From 3a2c959a1cda5d0a94d0a837d3d0ac43e6a4120b Mon Sep 17 00:00:00 2001 From: Karl Schrab Date: Wed, 25 Sep 2024 10:06:19 +0200 Subject: [PATCH 05/26] ci: use custom codeql action for jdk17 --- .github/workflows/codeql.yml | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000..4215a0622 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,56 @@ +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] +# schedule: +# - cron: '16 15 * * 1' + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} + permissions: + # required for all workflows + security-events: write + + # required to fetch internal or private CodeQL packs + packages: read + + # only required for workflows in private repositories + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + # Analyzes Java code directly from the codebase without a build + - language: java-kotlin + build-mode: none # analyzes Java only + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Setup java 17. + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: maven + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" \ No newline at end of file From e9a86ee7e1ee6d635e8ae4da7338c81e47247005 Mon Sep 17 00:00:00 2001 From: Karl Schrab Date: Wed, 25 Sep 2024 13:22:53 +0200 Subject: [PATCH 06/26] docs: add JDK17 alert to README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6833a6501..b4e7d46fa 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Additional simulators and assessment features are provided by [Fraunhofer FOKUS] * The coupling to [OMNeT++](https://omnetpp.org) is implemented in a very similar manner. The corresponding federate implementation can be found [in our MOSAIC Addons repository](https://github.com/mosaic-addons/omnetpp-federate). We currently support OMNeT++ version `5.5` in combination with the INET framework in version `4.1`. * We created the [Berlin SUMO Traffic (BeST) scenario](https://github.com/mosaic-addons/best-scenario) which provides 2.2 million vehicle trips in 24h for Berlin, Germany. The scenario is fully compatible with the latest release of MOSAIC. +* In our research, we currently use Eclipse MOSAIC and the BeST scenario to evaluate traffic state estimation algorithms. For that, we provide [application models and tools for Traffic State Estimation](https://github.com/mosaic-addons/traffic-state-estimation) compatible with MOSAIC. ## Contact @@ -65,6 +66,9 @@ For further questions we are available via mosaic@fokus.fraunhofer.de ## Prerequisites +> [!IMPORTANT] +> **In contrast to previous versions, Eclipse MOSAIC now requires at least Java 17 SDK.** + For a successful build you need the following software to be installed: * **Maven 3.1.x** or higher. From 8d16c3650446feb34ada8cb6d06597ba2dc70a8e Mon Sep 17 00:00:00 2001 From: Georg Date: Mon, 30 Sep 2024 14:53:05 +0200 Subject: [PATCH 07/26] feat(visualizer): add icons for bicycles and busses in WebVisualizer (#419) * chore: `npm run-script debug` output is now spanning multiple lines * fix: remove double bookkeeping (equippedVehicles) and directly add vehicles to the map, although there's no position yet * fix: take into account the vehicleClass, show 'unknown' if not a car * swap icons * feat: add bicycle and bus icons * refactor: remove line that has no effect * refactor: change tab size from 2 to 4 * fix: only display equipped traffic lights * fix: replace non-existing link --- .../Tiergarten/output/output_config.xml | 1 + .../src/main/resources/web/README.md | 22 +- .../web/markers/bicycle-equipped.png | Bin 0 -> 1366 bytes .../web/markers/bicycle-receiving.png | Bin 0 -> 1435 bytes .../resources/web/markers/bicycle-sending.png | Bin 0 -> 1436 bytes .../main/resources/web/markers/bicycle.png | Bin 0 -> 1454 bytes .../resources/web/markers/bus-equipped.png | Bin 0 -> 1147 bytes .../resources/web/markers/bus-receiving.png | Bin 0 -> 1192 bytes .../resources/web/markers/bus-sending.png | Bin 0 -> 1197 bytes .../src/main/resources/web/markers/bus.png | Bin 0 -> 1173 bytes ...{vehicle-charging.png => car-charging.png} | Bin ...{vehicle-equipped.png => car-equipped.png} | Bin .../markers/{vehicle.png => car-parking.png} | Bin ...ehicle-receiving.png => car-receiving.png} | Bin .../{vehicle-sending.png => car-sending.png} | Bin .../markers/{vehicle-parking.png => car.png} | Bin .../main/resources/web/markers/unknown.png | Bin 0 -> 1011 bytes .../src/main/resources/web/visualizer-dev.js | 1264 +++++++++-------- .../src/main/resources/web/visualizer.html | 2 +- .../src/main/resources/web/visualizer.js | 80 +- .../mosaic/lib/enums/VehicleClass.java | 22 +- 21 files changed, 712 insertions(+), 679 deletions(-) create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bicycle-equipped.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bicycle-receiving.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bicycle-sending.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bicycle.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bus-equipped.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bus-receiving.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bus-sending.png create mode 100644 fed/mosaic-output/src/main/resources/web/markers/bus.png rename fed/mosaic-output/src/main/resources/web/markers/{vehicle-charging.png => car-charging.png} (100%) rename fed/mosaic-output/src/main/resources/web/markers/{vehicle-equipped.png => car-equipped.png} (100%) rename fed/mosaic-output/src/main/resources/web/markers/{vehicle.png => car-parking.png} (100%) rename fed/mosaic-output/src/main/resources/web/markers/{vehicle-receiving.png => car-receiving.png} (100%) rename fed/mosaic-output/src/main/resources/web/markers/{vehicle-sending.png => car-sending.png} (100%) rename fed/mosaic-output/src/main/resources/web/markers/{vehicle-parking.png => car.png} (100%) create mode 100644 fed/mosaic-output/src/main/resources/web/markers/unknown.png diff --git a/bundle/src/assembly/resources/scenarios/Tiergarten/output/output_config.xml b/bundle/src/assembly/resources/scenarios/Tiergarten/output/output_config.xml index bf5166bf1..bd90db069 100644 --- a/bundle/src/assembly/resources/scenarios/Tiergarten/output/output_config.xml +++ b/bundle/src/assembly/resources/scenarios/Tiergarten/output/output_config.xml @@ -82,6 +82,7 @@ + diff --git a/fed/mosaic-output/src/main/resources/web/README.md b/fed/mosaic-output/src/main/resources/web/README.md index b257c3596..845490a14 100644 --- a/fed/mosaic-output/src/main/resources/web/README.md +++ b/fed/mosaic-output/src/main/resources/web/README.md @@ -6,7 +6,7 @@ Only NodeJS (https://nodejs.org/en/download/) ## Install Development Requirements -Change to the visualizr directory: +Change to the visualizer directory: `cd /fed/mosaic-output/src/main/resources/web` Install required modules for development and deployment (defined in package.json): @@ -20,12 +20,24 @@ It is recommended to use VSCode (https://code.visualstudio.com/download) for the If you want to make changes you need to make them in the `visualizer-dev.js`. You can install eslint (https://eslint.org/) globally with `npm i -g eslint` to support you to write correct code. +### Markers / Icons + +Icons are form [https://mapicons.mapsmarker.com/](https://mapicons.mapsmarker.com/). \ +Please use the 3rd icon, which has a slight color gradient in the background.\ +Please use following colors: \ +grey `6d6d6d` \ +black `080808` \ +green `23ff23` \ +red `ff1c1c` + + ## Building visualizer.js -To deploy your changes you have two possibilites: +To deploy your changes you have three possibilities: 1. Creating a readable version with `npm run-script build`. -2. Creating a non-readable version with `npm run-script buildUgly`. This version is loaded faster by the browser. - -To debug your changes create `visualizer.js` with the command `npm run-script debug`. +2. Creating a non-readable version with `npm run-script buildUgly`. This version is loaded faster by the browser. Use this command for the final version of your MR, otherwise the compiled files will be blown-up in size. +3. To debug your changes create `visualizer.js` with the command `npm run-script debug`. This will add debugging information to `visualizer.js` which will be parsed by a modern browser, such that you backtrack error to individual javascript files using the browser's developer tools. + +Given that you develop with the IntelliJ IDE you have to run `mvn validate` in the "Eclipse MOSAIC Starter" so that the files are copied to the `target` folder. \ No newline at end of file diff --git a/fed/mosaic-output/src/main/resources/web/markers/bicycle-equipped.png b/fed/mosaic-output/src/main/resources/web/markers/bicycle-equipped.png new file mode 100644 index 0000000000000000000000000000000000000000..737811f2480cc6532a01b4225ed7b6eb2a830d94 GIT binary patch literal 1366 zcmV-c1*!UpP)Pk1emUtVzHPdbX}L=A)wd&YWzPDFo8Ufala)wOU(rzGz=rY!@w1y>-wbIv;oT> z`jBB5@t&R@6h%Q%b~XT(WnozshGE2YT|a@l4F1H^05nb8ac}@dQLrqFY&Hvj^DLmS zz1C9EG_51Yxm=EPI*qETlu9MS;V}LE{S8UTrc{~b0l!fvnog&=e*HSdVvz?A9iYUR z`Fx(&uV3Rh4tMU{K?s2mqNR_T3D=82Gg(_(?$;AEs%tzP^sCs!jd)rR8mBnx?1aa+%w=Z*%3!6#$~qD30TB=FAyj`w)vp zqm;|#igEu;Kn`{s$J4pFIi5Xxh7f|cZ{Gs&=FJ-bgb>`nf4{=s@24XIe(+Q(MI;j8 z!i5Xmx^;`i#YF&b=Fgu$2f(&%zJLEtFc>5fiI7UAT9RnG=N!i&o6RybGz7rQmoE`Q zcur+L%+AiTwzfv0P~hCTa|j_YO_QOaAu^c^nM{V>-rn{IRPW*8;b8#6;V=MOTU)HI zuJYu`6OJE04#4W_D*N~EXV0EJ0E9vz&vtltn2n8%y1t>#5~!+Lu@w&=K3vn^-``JP zUmp__6Ln|hx0T~%f3?&^p!zyqSXe*^K{}oG`UVFFxpe6gv$M0_cKh+;2kCUW#&%(0 z!HYn>tG*@znx=V%@@#h;hpDM4=H}*b9EW5w3BaRAkNEK61A#z*0|yRxwkJ=XWNK>4 z%awtF0Rn+QT>=dwFfua2%E}5t2;RMW=WV%b*RJvS@ncj~^&TF3_wMy?Rja!)H@zn*k`;&1E zPEc8z1po}gnD6T9;?SW(O~Jo@{YpF@N7wcL+%B14)uovU*zFXj-W%R9jK%5c>6%QJ zl1wIv#bW5XK0#$}H7-tDl;`s6FW(Z;Xq1tWkqYpYl@(sSdWEj*WBw3V5vX6DHxrkb z26Vd`G7Mws;>C*`J9Z3!<>h5wym*1G>!U7s&Q((aHIkMD8j$EV3?p&*@?~KAJ>bqf zM+e|-6R1O?*CnwC$TiQgom_2$cSN9yM95Wnzn0hzeZCX$jtTfk$fT58Rc^6TC*S~o Y0E%E#;`!eb8~^|S07*qoM6N<$g3s-t00000 literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/bicycle-receiving.png b/fed/mosaic-output/src/main/resources/web/markers/bicycle-receiving.png new file mode 100644 index 0000000000000000000000000000000000000000..65ee455e61b042acd68ad46e287753915749a619 GIT binary patch literal 1435 zcmV;M1!Ve(P)Cw@!_fy4*y zbU}=XOB30eXbdh)Tq<$pBqnZLYIK1KJCl}#kbny`f*&Cejm;}|Tg}%Ni?JRh& z(=VW%Fz4mwe!O$f|9{Ut_q}@znM?+NzP>&)U<3rMHgm9&0@8pAr2T$>3c!%bWOQ%= z5Vay`1dIm+p4JGcfT9)E@Asz+k|gQi)j*wAi~K(xP=GBUrq!yxN>KxE4h#q09x!m8 zNJG-^S~Cr#a$R2?7!JJk`n*`Ht%#y{pumcvkl0EP7!JIZhNNH6wjnq0L;zd0?ZCkS zYQ!2$nDnk5XGSwSd#x92qOBsstMOGr(GWG38a9)gG};>RI=m%yb8KfZ^(fCqyQ#t_ z6b*5`<~nQ6HJ&s)Arg=5sh=apJmCLIpw3dq)5fO&+^D^=uZ=<}I%?)JPv57dPsEZj z03OF4bF=Pd#WqS3sG@4$NncjK5KG4JH~Z-kdvGo~xwC$!A{)CB*pL1E+B_>;D?D#} zPLJ3Fz>;T)hHwL$sZDx4y%l+&q8NxKqJ;hm@yPy&D>YXDNM%yYs57j&*RUJyj4zIp z+D?@n14RU?_IP5+82w^@cE6+BQL01Loc(#0SUSeCXBn5##rTi$U2POfk*_}TaaVUG zED5>{UD^J$I-PAFT0BJja2(kq)3VvJr=2|s6pAd%dHws`XI7o%Wz$P8S}&q{Riq_} ziR1*fkd1z^pNJA65{YEzc)g`ROt8=IR+eQL~8hrmt*E*MdJ;|2JA*Vr-jocSEcJ_ zGMVgreSBXJSg_>vCtZ^WvcQ78kR59>HZia|z}>pLyi?x+u$Wq8_qg|c;ZOfx(8b-kb}D)nN0C5FnD4P`@bW--nDn=UB; z@vS%_B6iV!py2DuI`OTz-c>Zrv_X<20k8pf_DD?ne0>~u94`xOA-aG+=r8$BOH7u5 zbs(;LKw&3cLQ5KQQ!^ugf7m~1#!S1TeNXVY=p6o_A8AO^|J!bM!N#!BM0k={NFYYxm@IpY&X>bJMpE1HJ(|9i4gLv(Z^bf+I*n z(y!Vo^?lAIP&z%|OEh94J8@#uNX%aKUFDSH6aX{P8D0fnAq`2L8hBhQiVn1!>`P!5 z61Ko_;KMcFH2_`&U+623QvrC{1WJ&o(@4Ar^gWNW6I^A3S45zIM734~?Ul-o>$fTa pub4m%2|XzFqpBYCGY>B>E+7B^002ovPDHLkV1oIti|zmb literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/bicycle-sending.png b/fed/mosaic-output/src/main/resources/web/markers/bicycle-sending.png new file mode 100644 index 0000000000000000000000000000000000000000..939a1a81657601c063cf07bed1bda9c4cc1bbc70 GIT binary patch literal 1436 zcmV;N1!MY&P)`mqba}7&kO1iSmNMfDw(L3v8$LiIzfzGA*U^7M&@y zw55%_lbqa{+k4OVd(V&QJ%XyL0GvL3+5{K?i#D3rUP%FIAPJ<0hK5oAf~u-IxCIb3 zwP*wk+XSB02qXbT)8x?5P)d*_Ne8zBHQFfh|9C(F;y_Frllmz|4ZN|>@Be3;fpers zlK#{l(?Cj)B*~$HyZZe8_r8`E?4pQhwQei0l1LC&6lTADqeqes0P{d>W8#Sbc86oz z!2v{*2~63j>Um}`k%_ggh<1BLhL<7{=4BbH-A*DN$Ki6}YHKS@V%>HYQ_u4CY}c8V zsq?Z-)s-tWEiY5|-~mhX^QHH!iy;?S7o)KvwN_VC|L`FI)mN`>Z6i-Mmzt@(>ia%5 zMIsghAa?H_HP^3KY@;v%vw6!+KRF zP~YE=*wF!iClVoCRYfWu$8+*zMINXq2Uem{eg%U#@7|^A;za<|)m4%c6S$X`F*u#b zBO|P(QooS{7E4jKiC7G=yE_~2wMc|eLqo<33k!InQDnE9(8vhhvuDflz-9uIlSLO> z6$Rn=@$7r@&717A>~zwmD0sqQmR+urc1jb-lYlJePTaaha&nR#PoH8ta|W-f^1Y*j z#LJfiMG>*P8zmYg5{+iJcs-t?_DlZV24oqd!GKp)vs!oO4l4r#1Ox$PWCVbw7cT%X zo6XeSzn`<-XfSL(L^%WkvWy@Iw63j@3WbpC>zVueZ>n$J#62+qz}%@*0K^9e0cc4k zSqlUR*lfu4^`t@}TG!SP1c6{ER1l|R2-?zV(!YKY_INM|0?PB}1Ox%Ec8hXcy9U5Q zZ!d0HMqOE9uCo)1#X@Rffw0GeCl;f1aS^$urc45Pr4sh}0PuLd8P9zEN@{u<*W<@n z_U{KE_30C))>eXbbpSNCv;Ytc1PJ?lcp{O4wxLi6%;uagnQ7x!o^2@P0jo8mKtK=x@Tw}-_I8}NZ{t-}(i(vE$rG$oQy7d!!di&Ds*3s0A*}7~ z*<1-VG+;0qvvx~+KwIQJc8tL2C;>sB>D4Qmw33^@e3_+3k1*M6*cuzL0ku9~c5Tbd z3@uufBwoMfyY}Jo96h=TsxSeYE&J&0>f+z=@vISDTzmK8aJzHnyj@*{M@RX#dw0&f zrM8ylBS#8?ZzPZ|L;#@q#EGJt^TplORrXpP(?sUJt}DvwDq@kE{asPC3(Q7L6YK4g z0uWzb22n(;t=(Sm#l?(m?N!4}3z8&R00-ctL}TLX?8LQeS6N{5pFcA@JY4WMtudJc z7Jwz)0}7dTNpBi9wq^!^KEMApW;3omdrE^(Pcu6_Ophe}rA_JimEW2vK)RgfG<%2d z^ZVcW&Ys1!Z(m{X4m5-&Av{UMF-bkQudtOR3Vj`J5acCso`7T_*b?{&Y{M|cd2L|Yoq=OpxlBS9dR7|!c zP=th|&+nh`UAhFoY=6Ig@+B$&FPlIC5;Yo$w}2k=B{IoXHh4t@@<`Y<)vwS=GOmwT q0$wqJ4J7oW)Js(_v1BFS0RI6k-!Qz=%?Sbk0000L~tP@h`OrMMHg-aSAKxjE=n*ciV!zhlnN4SK`jy^7(ZIDeYI^mH-?zJ zMdr@SXPZDhaG1F_C+Gja_nvd^93`900^s#}9e@p}GoKDtR?U z7`Q-GRsGw1%>e2At#1%QjJCD4;c~fXXlPhbV8bw2TwEj?jgG3S>cKpQ{J^URSiO4n zih~1anug70g_Mjln}gh0OGVSPnjFv0&N4YUiK?myAy~6!4b9EX6-k(4VMC^o9@ncE*Jh2r3OR?MSHL0d)oH=s_fW3S7F6*OMN(fZD@>nd! z`1m-9M1n_;9#!q5SW0re9Lr*f#bP893Hti_@OV70Bbb|;V`^%O6DLlvd-rYte*OBz$B!Qw8XCgoauJC{ zNT<_PA3@2C!{Ml?i;IhNbaZg=;6VTu78dB~>EYbDa~Ouf;NT!@*RCZJiB$Aaf>%88 z>C>kYBPq#b61UrJjib@1^?u~Y5r&6{xpU_Ze!qW7Kl!3`b#<)+{s7hqAx3xX*im2* zkH<^?v}@NcE?l@^jW1um%$qlF0O;uGU~Fuxz`muW#d?4B>Xp0?{spF&yz%1kICi_8 zKps-5bjrR6-u3o*0uIo6RPEMUV#m0>rE&HCH9^&zM0f~I6c;Cn4 zaTG-%5C||cGlS3PqpzI zq9}a+{JAy)01qENL({TGJ$n|f*K3W}uV2scTf zr3FP%=T z>pHPm%$jRzYNEftpF@WZ@!`V<0H&v>85|reu^ku~U}0gQtnacrkY6x#T?cZJ?{>R6 zcI+6zV34V)DF9x+e95}>5oIH8bvTbc`#qD+z3dh{rEyS;27DyakVTmdVe z`}_OZzI{6YH*VbE`Sa(jTD7X6C`sF!H*Z?oJ~1)D#fuk#Tzvotg+c{&poGBw{rd|T zzJ2?aL?Tfzw`I!~Hf-2XvYOYgU-R?l&w@Ek(`avRx5iJNJSkg2%W6)U=}Db8~Z6Hkeo` zAmhjbH&j*qdt_v!Y-6%#&z_2TUo5d$jBq$y_BZqV4f6Vej5(M$4LlUKW;TFuI6Pvr z*=TEPTM|4PjS>!rQC0OHb4tcnachb{FVtn7eeO4iQ z_wF4}pFTxZ)xS*egsDjhR7sX4P=SOdgcv(;-~a%RA3v5WPf!DR)db3rXf#Pg0D0yK za=}$KcufR~NHmx#%Vvt))*H2e*GwRfgbYfVsxrk=wSWWs2iguh^Xq}uF#rGn07*qo IM6N<$g1knvxc~qF literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/bus-equipped.png b/fed/mosaic-output/src/main/resources/web/markers/bus-equipped.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa4552ce628893ee0907014fccdea4ed466c549 GIT binary patch literal 1147 zcmV->1cdvEP)SSZ-} zF9_BaHpWJRMG6}g{{cG-3yVy94T^_@iYSVb!a@QzNi?r<&n+@LC+}pqxp%>09@$yH zZ|}YK-m?_jwgCu-!y2FhUgxUOTeAQG6af*B$1MQGwrwfy1$4)~4uIMtap3?IfxP3z zcsyijn&kOw}2v~w-WUh0l`&@|0NkA-W@FpPQURsdG@(ECl(OauY} zG)+U(dOHA?WnozsrfDV&!}yLf4b_RK1L(Tmb8!Go)37XyOeO=r^Gww!&$V=PUGKSg zHH5sCF5jq48a0@0+oVz{ip3(9WmVoQih`zTcsw40!61sFbi<=cl2()e6bc3M`8=sq zs`C5s@iF7$;|vZC0`UI+&cnk4tE;OdlSu%EhKBI@eDwGCx25O^@bvV=^z<~#%gY=c z9RV;mH-``cRV@#k5CVWwsRY2<+8XEQ=iJ=fFflRV4#4B_G&H)tzOH$`xVUH=bbo&z zC{InZcx?gN<$%ZI!LqDM&+APHfu?Ddk?0i9HGpMV%+AiDC<^inktW|=U0rn@uPK1n z>uvi7x68Csyas^!9@N|A<)tftPVroAd0wx#lJPAAy4*!wwJsD2u7Y=Cy*lszAAs%c zZ9YCeC=?1Pic;gbT#j5W$JW*srBbP8DYmnQDd_9#YbhRyM0kCDWp{VCVHtjXeX+j2 z&cVR}s;aWJwbeFWOMv=i^YQUPsZ?TPV}rN1HzJV;nx-`zIO%kny}dnz5NvF0kjv#- z#%l}EY@N$}Uv9BL!w5(_JUpz3w~FT)U~_Ymot+(^d^o+lyfh6K3WXRO8zY;|5{*Vt z6y@Io1cO0hu^7>46oAReNxr_m8qNbD1buydlu9L3RV5aS5ex?11NeNtn&;u+VN$77 z%?30xGt-a*wrz8JdrLZ<2Fl4dJUrZ1yc(bq-S77|G^!s;zu(^!z_x7$2M4ij8%0r? z#;P(Q0jw%V2*JR>KuybVINY%(01FEXZGX>Zv+}m0sqwp9%0qd()peafAkdX)x0cCd zs<-mIqbam1@lV4r=35me^YinBLZPn2lF1~AMDzN_DNH`8stbhkkaik;r?xax0Zh~U z+vD*tGBVOu{Q3ErL?VG<7=JmhWPa6`W_dt#Q=C@5;Z4*084iaT9UW~d{`mMvJRZj| zj33nIR_o%lLwPQ*)#cl-#l^*juig9md(O_zFbw0*>LIQJXkMPTGY3ou1|0XBrg^=z zw8YfZ6aaU3cbuM{Vi?9Bj(FDbycB9>9RXTE449_*Yh`5xfRmFG+4C$e#JdJ)0`bj( z_zB24&r(jVuEkve)Is}5qAwx1tF7CE>*e2if+UK{sCdX;37MM=imSU N002ovPDHLkV1oTB7qI{U literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/bus-receiving.png b/fed/mosaic-output/src/main/resources/web/markers/bus-receiving.png new file mode 100644 index 0000000000000000000000000000000000000000..990c883ba92e225b26113557654c0928c28335dd GIT binary patch literal 1192 zcmV;Z1XufsP)8N1EL+etU?~(Vb=lL>lQ2Dt zCk=nU{I_eLwSizc=swgi;EC$;n9*Fo0xmHR-JRfCM~1777I)Kq#fOcoMLJmJ9%l z4vEVEzysW%d4)p37q)F{@f6S(TrK{a2)IB6*blCreoHG5|Ft+*T-y3KCRoj!*U zq8%PXlQh_IfQnba@fgyEC+sgpt2lAZiK1C{- ziljIJU>^Hv?eiLAi7~GCUgya#PXL(sJb^@F1c8%C01k2o0Ng0uV98lxZFh}{+(bNp z1c?)amIs#``is9UMml|zeFQ*qD;er965x0Q>aAz1ha-*}dFc+Km`Kdi`=$menW#oBNZ zB-r`56FH_;$bSmpTkcyd=j~Xh_WS<_V0Leoimc!%kK|Uep}ES%RW5hSckz{vul%-r zw!I8z_hy;ho8^=Li3bA@@N!g*TkFoiv=JM z+$!JVUgjPE@4mld!`}#XHe?Plk{H2}4iEPqA`m|hFq9c$zC6$U%zXgHcE*rMx{SuT zl}aL%;2?K^fx-Mg^W-!6_y9fhH1vo2hWSwbP}_0=E}p%JAsQEuRFaq5FWHy-RmXUmu^JlCV&>Tei% zHFve;n;_uw*~^hb_S`*vThlc8Q7*XvPQ}5(B4cG*i^j0BTgIt4y6Xm-QrNbg1kyl; zh{9wtKgmdTq%E zr?6STp0V{|Q0Le2(#!>9JH=`33}2ipE?>%D;(YdesQ8=G8(wU_z@D-HpfR_a7pE=C zbA7EZ-(FqGUtv5u-XOkOTIKoXbL<)W_uwt{Jl6w+m*-IyfLT=YBppDkUdvzOLiPdx zE2R~lZ9c=EvBv{(Cupt~YGy3~nn0wBbH!Iv`6&PvHW&1pJH!xg8z2OtFMwDE^qf0X zldEmaZ9W2lxlOfU47z_yp$z&F0oQ=`T z&J76*{s1>7t|4&)Yz%e5!i^gL0Tw21+)>$>apJ-cL`@6{X@Crb7=%tKw;!B4i+fJ# z=WXkB=1op+@9n+s?>X;z&&MlV*9BmFeB1;KAgHb;owXt$fjl6WmzRqG!gXCO9t14a zf(pRskhoL;dB9OEzr4I$6t-<^@h}ikSBw890uGP`((0Pmy|k40Pl;sm&khS$*oXqrr3J>7J$CN zK|*KG5^NIDT7aqu?0)=6;PPdDxOIykpFHuNUAY2Mf}sK@B>=HP0f7D6x5>PE#kUV1 zh+VzfCO{xi^Jrjowc`Hg*ROq@Mjt)|U{i>?{`>)aa$qwMfMW5q=hY@9m}V&w&HU8| zsLFu~D;7C-;|9Vo(0hnBAq1|JY`=KXy1%*r!JzL4Mpu_7Sm(dGx!=TJEx`Ntz8^@H z$)Y8tvHCw#kehs>i#2*aRfcGlNlV}Lp< zms=y>}0Q!umSJjg9)w;&B4Q!^ljA^uhuNQR}Z=fZkY)gT+O9 z7Zw2685x0-6O5{{b*02L3~wJW4E|nRq<3)eI{?&Dt1U7##KGofY0CvTf9)EgYD03R zWb5TiWI7FiVVXpShJ3}#0ZzSF0chJQAIq+;+8t3!1n^gXKd$R~r=kYF$~8^A^SW+0 zg#uP2Qt@VNa zadFzDJl9tZ7fvLT@8S~^L`O#}#n;wIJ$uHCZU3TrsmHk-pniGoX9~>1%ad*eu^OM8 zBswmX>tSGqfSzGC&=Oh=O literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/bus.png b/fed/mosaic-output/src/main/resources/web/markers/bus.png new file mode 100644 index 0000000000000000000000000000000000000000..d62c8b707effb6b11f5519ccc6f495b7eceeebb5 GIT binary patch literal 1173 zcmV;G1Zw+-tWKg)>Z5)$i7+0lYgyAJBDu zr=_KZU@%A^5GbjzrfIyszH)MMvZJc%H>_=NCSD~#RaI5V#Q{R05Q<`_l*}{5$LC(l zK`0a|xwsR;GFww7nvLe5{9>kQa(Q`4DwX2x?G5<~3nB3P{Zv#`(9qC;5TY0!MUrG# zSy@@ewXW-En#R@Dl?^yMJ4<6@Bf(%0fY;YoE-o&Zo10^Qe;6{%nSgtv$L3{X+NoqL_8h`U}0f_!^1<4kB{l-=krP(&O8AW^5^M;T7Y-o=OG`_Pjg0|t zdwa{>-Ca&+wY9Z`!(mdX6e}w$2qC-|qHN;2x;oa^*O{1@0AOZj#;*BJlTnJt;|L*G zUtcF24ttM4cB!qeujl&u8pAN`{p{@Q{PICEO_RO7Jv2=NKKH)9zTQ>b31H*{fX{7k zzIJ}UKPP|?g7NWj`@Fz+!;k>)j)AW0R99DLtnBIODflD+-QC@;^G{Dt^3>M!@o&47 z0(gFYro6nInwpxTM2oe@$48!@pXFuB(lmSyaZOd#@7vqkIUAGi?rxf!n~M@VJv}9v zOy-=k8WRmiUtm}lPu7BOWVU7sKr)%!RuqMnmKIm>lamvY$t0?({$<^g`IX(8r2wOt z=G6WVuj~5HNF+jQYimyNqoX4di3F;u{z+zTduaB#rp<|eAD{$Yu~SR*Bc@>xNE zJP;vW*MAKR3;?jPu_2%Q1rOpy1LT0Hwjh22a?fA*Os=BEJpp7v1gs%TU7F9(YhJ`X n12`aLQp#6VzG7)F;sE~u5NpGFOvwvw00000NkvXXu0mjfzT+!R literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle-charging.png b/fed/mosaic-output/src/main/resources/web/markers/car-charging.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle-charging.png rename to fed/mosaic-output/src/main/resources/web/markers/car-charging.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle-equipped.png b/fed/mosaic-output/src/main/resources/web/markers/car-equipped.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle-equipped.png rename to fed/mosaic-output/src/main/resources/web/markers/car-equipped.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle.png b/fed/mosaic-output/src/main/resources/web/markers/car-parking.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle.png rename to fed/mosaic-output/src/main/resources/web/markers/car-parking.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle-receiving.png b/fed/mosaic-output/src/main/resources/web/markers/car-receiving.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle-receiving.png rename to fed/mosaic-output/src/main/resources/web/markers/car-receiving.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle-sending.png b/fed/mosaic-output/src/main/resources/web/markers/car-sending.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle-sending.png rename to fed/mosaic-output/src/main/resources/web/markers/car-sending.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/vehicle-parking.png b/fed/mosaic-output/src/main/resources/web/markers/car.png similarity index 100% rename from fed/mosaic-output/src/main/resources/web/markers/vehicle-parking.png rename to fed/mosaic-output/src/main/resources/web/markers/car.png diff --git a/fed/mosaic-output/src/main/resources/web/markers/unknown.png b/fed/mosaic-output/src/main/resources/web/markers/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..f116d4730ee093740c183b0413fe7e390d820906 GIT binary patch literal 1011 zcmV3j6#CqX&CmRNbul655bFeOtnqAvj@AgiIbQgo6J6VRHu{T z`>FR{RplwQS`C0yDis7&K=;NVgS9H)0yg00a=9viQmfT`aUB@(T=xLf0g1aFfDKrl z+qqn>s;sT8`Qjm9)Eh?_P6RBV0=#&m?XPmg6OT(NuLdmKWI~8<-lGdt8$%zGQeGK` zK{y;H6bcPgxKgR``ua+-SiBNKe8EdYW8sYeM5EDxivvU=5mdEaQhuGOLEdxiJCR6a z;Np!Cp4Bz|LaU=SP!8KvpQOnGfxzzqpe4X>j6iFEb`hvnt2{nFVwxtFW#ONoilQKd zU}9o|csxElfVa0dDwPV`+uJ0QN#gN1fk1$VhX>Bi&d6r7IF3Uik@#-_?NZ>nE>lxe zEH5u}baX_aP+)0kiT(Y348tH6i;>A>NG6j#0sNvC3MD-ow4LvJ#|Yft-?t>SZ5!LRDHIBfkB?I>m(g{da5xOSr^s=fw)5Lr z*B6ei>*%_UloHc4ab1_ay*-2w0Gywn_qBt1zVR%}Vt#&}t*tE*i3E=0kjZ2?IXNK~ ziwz&3TCK9Mus|Y_z_x96cXuh3N<^bkqS5H^0U8U*aU4pe5|fjYEeotKfKGXoQj$)m zNvG5GcZ#C)eS-FU7igNs!NCEGi;Dp4?ChYbYTtLrF94dReLA7lN;OUEIInAfPPtSR zg~P+crgw&646X(`t;8^lzJ$64&~<&F0^I_*{{w*Q15_IvDJ7$$qeD@Ad3o_4>zYCS zZI>(n(=^dEt*>MCGkbo1#xza;qvdJ3!3Ob)5aQeAspWMyTA>FMdN#P06y$mjDd zzw;WC3JraM>wS3fe(;6n)=UM+=ku4Us&?E3#bS|sK93OMFYlFKUmsgD3vjz>PV4{S zrIbHXsT4CaGcCn$Z*R%vatI;*q`9`*H>VxibAN1X-+r#IuQNM4+a!K-b3-|VqH{sErKfLaP}$}Ru^002ovPDHLkV1l%f*#7_k literal 0 HcmV?d00001 diff --git a/fed/mosaic-output/src/main/resources/web/visualizer-dev.js b/fed/mosaic-output/src/main/resources/web/visualizer-dev.js index 254f4500e..0cdd71cce 100644 --- a/fed/mosaic-output/src/main/resources/web/visualizer-dev.js +++ b/fed/mosaic-output/src/main/resources/web/visualizer-dev.js @@ -11,279 +11,304 @@ import {Icon, Style} from 'ol/style' * Represents an RSU. */ const Rsu = { - name: 'unnamed_rsu', - latitude: 0, - longitude: 0, - marker: null, - timeStateChange: 0, - state: {}, - - init(name, latitude, longitude) { - this.name = name - this.latitude = latitude - this.longitude = longitude - this.marker = new Feature({ - type: 'rsu', - geometry: new Point(fromLonLat([ longitude, latitude ])) - }) - this.marker.setProperties(['name']) - this.marker.set('name', name) - this.state = { - sending: false, - receiving: false, - }; - }, - - getMarker() { - return this.marker - }, - - setIsEquipped(isEquipped) { - this.state.equipped = isEquipped - }, - - setLocation(latitude, longitude) { - this.latitude = latitude - this.longitude = longitude - }, - - setState(stateName) { - if (this.state[stateName] !== undefined) { - this.state[stateName] = true - this.timeStateChange = Date.now(); - } - }, - - /** - * Updates the marker of the RSU. - */ - updateView() { - // Location - this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) - - // Update style - const style = this.createStyle() - this.marker.setStyle(style) - - if ((Date.now() - this.timeStateChange) > 500) { - // Clear sending/receiving states - this.state.sending = false - this.state.receiving = false - this.timeStateChange = 0 - } + name: 'unnamed_rsu', + latitude: 0, + longitude: 0, + marker: null, + timeStateChange: 0, + state: {}, + + init(name, latitude, longitude) { + this.name = name + this.latitude = latitude + this.longitude = longitude + this.marker = new Feature({ + type: 'rsu', + geometry: new Point(fromLonLat([ longitude, latitude ])) + }) + this.marker.setProperties(['name']) + this.marker.set('name', name) + this.state = { + sending: false, + receiving: false, + }; + }, + + getMarker() { + return this.marker + }, + + setIsEquipped(isEquipped) { + this.state.equipped = isEquipped + }, + + setLocation(latitude, longitude) { + this.latitude = latitude + this.longitude = longitude + }, + + setState(stateName) { + if (this.state[stateName] !== undefined) { + this.state[stateName] = true + this.timeStateChange = Date.now(); + } + }, + + /** + * Updates the marker of the RSU. + */ + updateView() { + // Location + this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) + + // Update style + const style = this.createStyle() + this.marker.setStyle(style) + + if ((Date.now() - this.timeStateChange) > 500) { + // Clear sending/receiving states + this.state.sending = false + this.state.receiving = false + } - }, + }, - /** - * Creates the style of the RSU marker based on the RSUs state. - */ - createStyle() { - let style = 'roadside-unit' - if (this.state.equipped) { - style = 'roadside-unit-equipped' - } - if (this.state.sending) { - style = 'roadside-unit-sending' - } - if (this.state.receiving) { - style = 'roadside-unit-receiving' + /** + * Creates the style of the RSU marker based on the RSUs state. + */ + createStyle() { + let style = 'roadside-unit' + if (this.state.equipped) { + style = 'roadside-unit-equipped' + } + if (this.state.sending) { + style = 'roadside-unit-sending' + } + if (this.state.receiving) { + style = 'roadside-unit-receiving' + } + return new Style({ + image: new Icon({ + anchor: [0.5, 1], + src: `markers/${ style }.png` + }) + }) } - return new Style({ - image: new Icon({ - anchor: [0.5, 1], - src: `markers/${ style }.png` - }) - }) - } } /** * Represents a vehicle. */ const Vehicle = { - name: 'unnamed_vehicle', - latitude: 0, - longitude: 0, - marker: null, - timeStateChange: 0, - state: {}, - - init(name, latitude, longitude) { - this.name = name - this.latitude = latitude - this.longitude = longitude - this.marker = new Feature({ - type: 'vehicle', - geometry: new Point(fromLonLat([ longitude, latitude ])) - }) - this.marker.setProperties(['name', 'unit']) - this.marker.set('name', name) - this.marker.set('unit', this) - this.state = { - equipped: false, - sending: false, - receiving: false, - parking: false, - charging: false, - }; - }, - - getMarker() { - return this.marker - }, - - setIsEquipped(isEquipped) { - this.state.equipped = isEquipped - }, - - setLocation(latitude, longitude) { - this.latitude = latitude - this.longitude = longitude - }, - - setState(stateName) { - if (this.state[stateName] !== undefined) { - this.state[stateName] = true - this.timeStateChange = Date.now(); - } - }, - - /** - * Updates the marker of the vehicle. - */ - updateView() { - // Location - this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) - - // Update style - const style = this.createStyle() - this.marker.setStyle(style) - - if ((Date.now() - this.timeStateChange) > 500) { - // Clear sending/receiving states - this.state.sending = false - this.state.receiving = false - this.timeStateChange = 0 - } + name: 'unnamed_vehicle', + latitude: 0, + longitude: 0, + marker: null, + timeStateChange: 0, + vehicleClass: null, + state: {}, + + init(name, vClass) { + this.name = name + this.marker = new Feature({ + type: 'vehicle', + geometry: undefined + }) + this.marker.setProperties(['name', 'unit']) + this.marker.set('name', name) + this.marker.set('unit', this) + this.vehicleClass = vClass + this.state = { + equipped: false, + sending: false, + receiving: false, + parking: false, + charging: false, + }; + }, + + getMarker() { + return this.marker + }, + + setIsEquipped(isEquipped) { + this.state.equipped = isEquipped + }, + + setLocation(latitude, longitude) { + this.latitude = latitude + this.longitude = longitude + }, + + setState(stateName) { + if (this.state[stateName] !== undefined) { + this.state[stateName] = true + this.timeStateChange = Date.now(); + } + }, + + /** + * Updates the marker of the vehicle. + */ + updateView() { + // Location + if (this.latitude !== undefined && this.longitude !== undefined) { + this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) + } - }, + // Update style + const style = this.createStyle() + this.marker.setStyle(style) - /** - * Creates the style of the vehicle marker based on the vehicles state. - */ - createStyle() { - let style = 'vehicle' - if (this.state.equipped) { - style = 'vehicle-equipped' - } - if (this.state.parking) { - style = 'vehicle-parking' - } - if (this.state.charging) { - style = 'vehicle-charging' - } - if (this.state.sending) { - style = 'vehicle-sending' - } - if (this.state.receiving) { - style = 'vehicle-receiving' + if ((Date.now() - this.timeStateChange) > 500) { + // Clear sending/receiving states + this.state.sending = false + this.state.receiving = false + } + + }, + + /** + * Creates the style of the vehicle marker based on the vehicles state. + */ + createStyle() { + let style = 'unknown' + if (this.vehicleClass === 'Car') { + style = 'car' + if (this.state.equipped) { + style = 'car-equipped' + } + if (this.state.parking) { + style = 'car-parking' + } + if (this.state.charging) { + style = 'car-charging' + } + if (this.state.sending) { + style = 'car-sending' + } + if (this.state.receiving) { + style = 'car-receiving' + } + } + else if (this.vehicleClass === 'PublicTransportVehicle') { + style = 'bus' + if (this.state.equipped) { + style = 'bus-equipped' + } + if (this.state.sending) { + style = 'bus-sending' + } + if (this.state.receiving) { + style = 'bus-receiving' + } + } else if (this.vehicleClass === 'Bicycle') { + style = 'bicycle' + if (this.state.equipped) { + style = 'bicycle-equipped' + } + if (this.state.sending) { + style = 'bicycle-sending' + } + if (this.state.receiving) { + style = 'bicycle-receiving' + } + } + return new Style({ + image: new Icon({ + anchor: [0.5, 1], + src: `markers/${ style }.png` + }) + }) } - return new Style({ - image: new Icon({ - anchor: [0.5, 1], - src: `markers/${ style }.png` - }) - }) - } } /** * Represents a traffic light. */ const TrafficLight = { - name: 'unnamed_traffic_light', - latitude: 0, - longitude: 0, - marker: null, - timeStateChange: 0, - state: {}, - - init(name, latitude, longitude) { - this.name = name - this.latitude = latitude - this.longitude = longitude - this.marker = new Feature({ - type: 'trafficLight', - geometry: new Point(fromLonLat([ longitude, latitude ])) - }) - this.marker.setProperties(['name']) - this.marker.set('name', name) - this.state = { - sending: false, - receiving: false, - }; - }, - - getMarker() { - return this.marker - }, - - setIsEquipped(isEquipped) { - this.state.equipped = isEquipped - }, - - setLocation(latitude, longitude) { - this.latitude = latitude - this.longitude = longitude - }, - - setState(stateName) { - if (this.state[stateName] !== undefined) { - this.state[stateName] = true - this.timeStateChange = Date.now(); - } - }, - - /** - * Updates the marker of the RSU. - */ - updateView() { - // Location - this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) - - // Update style - const style = this.createStyle() - this.marker.setStyle(style) - - if ((Date.now() - this.timeStateChange) > 500) { - // Clear sending/receiving states - this.state.sending = false - this.state.receiving = false - this.timeStateChange = 0 - } - }, - - /** - * Creates the style of the RSU marker based on the RSUs state. - */ - createStyle() { - let style = 'traffic-light' - if (this.state.equipped) { - style = 'traffic-light-equipped' - } - if (this.state.sending) { - style = 'traffic-light-sending' - } - if (this.state.receiving) { - style = 'traffic-light-receiving' + name: 'unnamed_traffic_light', + latitude: 0, + longitude: 0, + marker: null, + timeStateChange: 0, + state: {}, + + init(name, latitude, longitude) { + this.name = name + this.latitude = latitude + this.longitude = longitude + this.marker = new Feature({ + type: 'trafficLight', + geometry: new Point(fromLonLat([ longitude, latitude ])) + }) + this.marker.setProperties(['name']) + this.marker.set('name', name) + this.state = { + sending: false, + receiving: false, + }; + }, + + getMarker() { + return this.marker + }, + + setIsEquipped(isEquipped) { + this.state.equipped = isEquipped + }, + + setLocation(latitude, longitude) { + this.latitude = latitude + this.longitude = longitude + }, + + setState(stateName) { + if (this.state[stateName] !== undefined) { + this.state[stateName] = true + this.timeStateChange = Date.now(); + } + }, + + /** + * Updates the marker of the RSU. + */ + updateView() { + // Location + this.marker.setGeometry(new Point(fromLonLat([ this.longitude, this.latitude ]))) + + // Update style + const style = this.createStyle() + this.marker.setStyle(style) + + if ((Date.now() - this.timeStateChange) > 500) { + // Clear sending/receiving states + this.state.sending = false + this.state.receiving = false + } + }, + + /** + * Creates the style of the RSU marker based on the RSUs state. + */ + createStyle() { + let style = 'traffic-light' + if (this.state.equipped) { + style = 'traffic-light-equipped' + } + if (this.state.sending) { + style = 'traffic-light-sending' + } + if (this.state.receiving) { + style = 'traffic-light-receiving' + } + return new Style({ + image: new Icon({ + anchor: [0.5, 1], + src: `markers/${ style }.png` + }) + }) } - return new Style({ - image: new Icon({ - anchor: [0.5, 1], - src: `markers/${ style }.png` - }) - }) - } } @@ -292,407 +317,390 @@ const TrafficLight = { */ const map = (function() { - var isCentered = new Boolean(false); - /** - * Stores all vehicles. - * Map - */ - let vehicles = {} - - /** - * Stores wheather a vehicle is equipped with an application. - * Map - */ - let equippedVehicles = {} - - /** - * Stores all RSUs. - * Map - */ - let rsus = {} - - /** - * Stores all traffic lights (equipped) - * Map' - ] + var isCentered = new Boolean(false); + /** + * Stores all vehicles. + * Map + */ + let vehicles = {} + + /** + * Stores all RSUs. + * Map + */ + let rsus = {} + + /** + * Stores all traffic lights (equipped) + * Map' + ] + }) }) - }) - - /** - * The OpenLayers Map itself. - */ - const ol_map = new Map({ - target: 'map', - loadTilesWhileAnimating: true, - layers: [ - new TileLayer({ - source: new OSM() - }), - vectorLayer - ], - view: new View({ - center: fromLonLat([ - window.centerLocation.longitude, - window.centerLocation.latitude - ]), - zoom: window.zoomLevel + + /** + * The OpenLayers Map itself. + */ + const ol_map = new Map({ + target: 'map', + loadTilesWhileAnimating: true, + layers: [ + new TileLayer({ + source: new OSM() + }), + vectorLayer + ], + view: new View({ + center: fromLonLat([ + window.centerLocation.longitude, + window.centerLocation.latitude + ]), + zoom: window.zoomLevel + }) }) - }) - - - /** - * Adds a new marker to the map. - * @param {Feature} marker The marker to be added. - */ - function addMarker(marker) { - vectorLayer.getSource().addFeature(marker) - } - - /** - * Creates a vehicle and adds its marker to the map. - * @param {string} vehicleName The name of the vehicle - * @param {number} latitude Latitude value of the geo position - * @param {number} longitude Longitude value of the geo position - */ - function createVehicle(vehicleName, latitude, longitude) { - if (!vehicles[vehicleName]) { - vehicles[vehicleName] = Object.assign({}, Vehicle) - vehicles[vehicleName].init(vehicleName, latitude, longitude) - vehicles[vehicleName].setIsEquipped(equippedVehicles[vehicleName] ? true : false) - addMarker(vehicles[vehicleName].getMarker()) - if (isCentered == false){ - ol_map.getView().setCenter(fromLonLat([ longitude, latitude ])); - ol_map.getView().setZoom(18); - isCentered = true; - } + + + /** + * Adds a new marker to the map. + * @param {Feature} marker The marker to be added. + */ + function addMarker(marker) { + vectorLayer.getSource().addFeature(marker) + } + + /** + * Creates a vehicle and adds its marker to the map. + * @param {string} vehicleName The name of the vehicle + * @param {number} latitude Latitude value of the geo position + * @param {number} longitude Longitude value of the geo position + */ + function addVehicle(vehicleName, vehicleClass, equipped) { + if (!vehicles[vehicleName]) { + vehicles[vehicleName] = Object.assign({}, Vehicle) + vehicles[vehicleName].init(vehicleName, vehicleClass) + vehicles[vehicleName].setIsEquipped(equipped) + addMarker(vehicles[vehicleName].getMarker()) + } } - } - - /** - * Creates an RSU and adds it to the map. - * @param {string} rsuName Name of the RSU - * @param {number} latitude Latitude value of the geo position - * @param {number} longitude Longitude value of the geo position - * @param {boolean} equipped true if vehicle is equipped with an application - */ - function addRsu(rsuName, latitude, longitude, equipped) { - if (!rsus[rsuName]) { - rsus[rsuName] = Object.assign({}, Rsu) - rsus[rsuName].init(rsuName, latitude, longitude) - rsus[rsuName].setIsEquipped(equipped) - addMarker(rsus[rsuName].getMarker()) + + /** + * Creates an RSU and adds it to the map. + * @param {string} rsuName Name of the RSU + * @param {number} latitude Latitude value of the geo position + * @param {number} longitude Longitude value of the geo position + * @param {boolean} equipped true if vehicle is equipped with an application + */ + function addRsu(rsuName, latitude, longitude, equipped) { + if (!rsus[rsuName]) { + rsus[rsuName] = Object.assign({}, Rsu) + rsus[rsuName].init(rsuName, latitude, longitude) + rsus[rsuName].setIsEquipped(equipped) + addMarker(rsus[rsuName].getMarker()) + } } - } - - /** - * Creates an traffic light and adds it to the map. - * @param {string} name Name of the traffic light - * @param {number} latitude Latitude value of the geo position - * @param {number} longitude Longitude value of the geo position - * @param {boolean} equipped true if vehicle is equipped with an application - */ - function addTrafficLight(name, latitude, longitude, equipped) { - if (!trafficLights[name]) { - trafficLights[name] = Object.assign({}, TrafficLight) - trafficLights[name].init(name, latitude, longitude) - trafficLights[name].setIsEquipped(equipped) - addMarker(trafficLights[name].getMarker()) + + /** + * Creates an traffic light and adds it to the map. + * @param {string} name Name of the traffic light + * @param {number} latitude Latitude value of the geo position + * @param {number} longitude Longitude value of the geo position + * @param {boolean} equipped true if vehicle is equipped with an application + */ + function addTrafficLight(name, latitude, longitude, equipped) { + if (!trafficLights[name]) { + trafficLights[name] = Object.assign({}, TrafficLight) + trafficLights[name].init(name, latitude, longitude) + trafficLights[name].setIsEquipped(equipped) + addMarker(trafficLights[name].getMarker()) + } } - } - - /** - * Registers a vehicle. - * @param {string} vehicleName Name of the vehicle - * @param {boolean} equipped true if vehicle is equipped with an application - */ - function registerVehicle(vehicleName, equipped) { - equippedVehicles[vehicleName] = equipped - if (vehicles[vehicleName]) { - vehicles[vehicleName].setIsEquipped(equipped) + + /** + * Updates the state of a unit. + * @param {string} unitName Name of the unit to update + * @param {string} state Name of the state + */ + function setUnitState(unitName, state) { + if (vehicles[unitName]) { + vehicles[unitName].setState(state) + } else if (rsus[unitName]) { + rsus[unitName].setState(state) + } else if (trafficLights[unitName]) { + trafficLights[unitName].setState(state); + } } - } - - /** - * Updates the state of a unit. - * @param {string} unitName Name of the unit to update - * @param {string} state Name of the state - */ - function setUnitState(unitName, state) { - if (vehicles[unitName]) { - vehicles[unitName].setState(state) - } else if (rsus[unitName]) { - rsus[unitName].setState(state) - } else if (trafficLights[unitName]) { - trafficLights[unitName].setState(state); + + /** + * Updates the position of a vehicle. + * If the vehicle doesn't exist yet, it is created and added to the map. + * @param {string} vehicleName Name of the vehicle + * @param {number} latitude Latitude value of the geo position + * @param {number} longitude Longitude value of the geo position + */ + function setVehiclePosition(vehicleName, latitude, longitude) { + if (vehicles[vehicleName]) { + vehicles[vehicleName].setLocation(latitude, longitude) + } else { + console.error("Try to set location for non-existing vehicle", vehicleName) + } + if (isCentered == false){ + ol_map.getView().setCenter(fromLonLat([ longitude, latitude ])); + ol_map.getView().setZoom(18); + isCentered = true; + } } - } - - /** - * Updates the position of a vehicle. - * If the vehicle doesn't exist yet, it is created and added to the map. - * @param {string} vehicleName Name of the vehicle - * @param {number} latitude Latitude value of the geo position - * @param {number} longitude Longitude value of the geo position - */ - function setVehiclePosition(vehicleName, latitude, longitude) { - if (vehicles[vehicleName]) { - vehicles[vehicleName].setLocation(latitude, longitude) - } else { - createVehicle(vehicleName, latitude, longitude) + + /** + * Updates all unit markers on the map with the given names. + * @param {string[]} unitNames Names of units to update. + */ + function updateViews(unitNames) { + for (const unitName of unitNames) { + if (vehicles[unitName]) { + vehicles[unitName].updateView() + } else if (rsus[unitName]) { + rsus[unitName].updateView() + } else if (trafficLights[unitName]) { + trafficLights[unitName].updateView() + } + } } - } - - /** - * Updates all unit markers on the map with the given names. - * @param {string[]} unitNames Names of units to update. - */ - function updateViews(unitNames) { - for (const unitName of unitNames) { - if (vehicles[unitName]) { - vehicles[unitName].updateView() - } else if (rsus[unitName]) { - rsus[unitName].updateView() - } else if (trafficLights[unitName]) { - trafficLights[unitName].updateView() - } + + /** + * Removes a unit from the map. + * @param {string} unitName Name of the unit to delete. + */ + function removeUnit(unitName) { + var marker + if (vehicles[unitName]) { + marker = vehicles[unitName].getMarker() + vectorLayer.getSource().removeFeature(marker) + delete vehicles[unitName] + } else if (rsus[unitName]) { + marker = rsus[unitName].getMarker() + vectorLayer.getSource().removeFeature(marker) + delete rsus[unitName] + } else if (trafficLights[unitName]) { + marker = trafficLights[unitName].getMarker() + vectorLayer.getSource().removeFeature(marker) + delete trafficLights[unitName] + } } - } - - /** - * Removes a unit from the map. - * @param {string} unitName Name of the unit to delete. - */ - function removeUnit(unitName) { - var marker - if (vehicles[unitName]) { - marker = vehicles[unitName].getMarker() - vectorLayer.getSource().removeFeature(marker) - delete vehicles[unitName] - } else if (rsus[unitName]) { - marker = rsus[unitName].getMarker() - vectorLayer.getSource().removeFeature(marker) - delete rsus[unitName] - } else if (trafficLights[unitName]) { - marker = trafficLights[unitName].getMarker() - vectorLayer.getSource().removeFeature(marker) - delete trafficLights[unitName] + + /** + * Deletes all markers from the map. + */ + function removeAllUnits() { + vehicles = {} + rsus = {} + vectorLayer.getSource().clear() + } + + // Public functions + return { + setUnitState, + setVehiclePosition, + addVehicle, + addRsu, + addTrafficLight, + updateViews, + removeUnit, + removeAllUnits, } - } - - /** - * Deletes all markers from the map. - */ - function removeAllUnits() { - vehicles = {} - equippedVehicles = {} - rsus = {} - vectorLayer.getSource().clear() - } - - // Public functions - return { - setUnitState, - setVehiclePosition, - addRsu, - addTrafficLight, - registerVehicle, - updateViews, - removeUnit, - removeAllUnits, - } })() /** * Websocket */ const WebSocketClient = (function() { - let websocketEstablishedConnection = false - let webSocket - let tries = 0 - const maxRetries = 30 - let simulated = false - // eslint-disable-next-line no-undef - const $status = $('#status') - - /** - * Sets the current state. - * @param {string} status Status name - */ - function setStatus(status) { - $status.removeClass() - $status.addClass(status) - $status.children('#tries').text(tries + "/" + maxRetries) - } - - /** - * Connection establishment to VSimRTI - */ - function createWebSocket() { - if (websocketEstablishedConnection) { - return - } - if (simulated) { - setStatus('closed') - return - } - - simulated = false - tries++ - setStatus('connecting') - - webSocket = new WebSocket("ws://localhost:" + window.port) - webSocket.onopen = socketOnOpen - webSocket.onmessage = socketOnMessage - webSocket.onclose = socketOnClose - //webSocket.onerror = socketOnError + let websocketEstablishedConnection = false + let webSocket + let tries = 0 + const maxRetries = 30 + let simulated = false + // eslint-disable-next-line no-undef + const $status = $('#status') + + /** + * Sets the current state. + * @param {string} status Status name + */ + function setStatus(status) { + $status.removeClass() + $status.addClass(status) + $status.children('#tries').text(tries + "/" + maxRetries) + } + + /** + * Connection establishment to VSimRTI + */ + function createWebSocket() { + if (websocketEstablishedConnection) { + return + } + if (simulated) { + setStatus('closed') + return + } - if (tries <= maxRetries) { - setTimeout(() => { - if (!websocketEstablishedConnection) { - createWebSocket() + simulated = false + tries++ + setStatus('connecting') + + webSocket = new WebSocket("ws://localhost:" + window.port) + webSocket.onopen = socketOnOpen + webSocket.onmessage = socketOnMessage + webSocket.onclose = socketOnClose + //webSocket.onerror = socketOnError + + if (tries <= maxRetries) { + setTimeout(() => { + if (!websocketEstablishedConnection) { + createWebSocket() + } + }, 3000) + } else { + setStatus('error') + alert("ERROR: Stopped trying to connect to VSimRTI due to timeout.") } - }, 3000) - } else { - setStatus('error') - alert("ERROR: Stopped trying to connect to VSimRTI due to timeout.") } - } - - /** - * Called as soon as an error occurred. - * @param {...any} args All parameters delivered by the error call. - */ - function socketOnError(...args) { - if (websocketEstablishedConnection) { - // eslint-disable-next-line no-console - console.error('WebSocket Error:', ...args) - websocketEstablishedConnection = false - setStatus('error') - alert("ERROR: An WebSocket error occured.\n(more info in console output)") + + /** + * Called as soon as an error occurred. + * @param {...any} args All parameters delivered by the error call. + */ + function socketOnError(...args) { + if (websocketEstablishedConnection) { + // eslint-disable-next-line no-console + console.error('WebSocket Error:', ...args) + websocketEstablishedConnection = false + setStatus('error') + alert("ERROR: An WebSocket error occured.\n(more info in console output)") + } } - } - - /** - * Called as soon as the connection has been established. - */ - function socketOnOpen() { - setStatus('connected') - websocketEstablishedConnection = true - setInterval(function() { - if (websocketEstablishedConnection) { - webSocket.send("pull") - } - }, window.updateInterval) - } - - /** - * Called after receiving a new message. - * @param evt Event containing received data. - */ - function socketOnMessage(evt) { - websocketEstablishedConnection = true - simulated = true - const data = JSON.parse(evt.data) - if (data != null) { - const updatedUnits = [] - var unitName - - if (data.VehicleUpdates) { - if (data.VehicleUpdates.updated) { - // Update vehicle locations - data.VehicleUpdates.updated.forEach(vehicle => { - map.setVehiclePosition(vehicle.name, vehicle.position.latitude, vehicle.position.longitude) - updatedUnits.push(vehicle.name) - }) + + /** + * Called as soon as the connection has been established. + */ + function socketOnOpen() { + setStatus('connected') + websocketEstablishedConnection = true + setInterval(function() { + if (websocketEstablishedConnection) { + webSocket.send("pull") + } + }, window.updateInterval) + } + + /** + * Called after receiving a new message. + * @param evt Event containing received data. + */ + function socketOnMessage(evt) { + websocketEstablishedConnection = true + simulated = true + const data = JSON.parse(evt.data) + if (data != null) { + const updatedUnits = [] + var unitName + + if (data.VehicleUpdates) { + if (data.VehicleUpdates.updated) { + // Update vehicle locations + data.VehicleUpdates.updated.forEach(vehicle => { + map.setVehiclePosition(vehicle.name, vehicle.position.latitude, vehicle.position.longitude) + updatedUnits.push(vehicle.name) + }) + } + } else if (data.VehiclesRemove) { + data.VehiclesRemove.forEach(map.removeUnit) + } else if (data.VehicleRegistration) { + // determine if vehicle is equipped with an application + let equipped = data.VehicleRegistration.vehicleMapping.applications.length > 0; + let vClass = data.VehicleRegistration.vehicleMapping.vehicleType.vehicleClass; + map.addVehicle(data.VehicleRegistration.vehicleMapping.name, vClass, equipped) + } else if (data.V2xMessageTransmission) { + // Mark vehicles that are sending right now + unitName = data.V2xMessageTransmission.message.routing.source.sourceName + map.setUnitState(unitName, 'sending') + updatedUnits.push(unitName) + } else if (data.V2xMessageReception) { + // Mark vehicles that are receiving right now + unitName = data.V2xMessageReception.receiverName + map.setUnitState(unitName, 'receiving') + updatedUnits.push(unitName) + } else if (data.RsuRegistration) { + // Add RSU to map + unitName = data.RsuRegistration.rsuMapping.name + var position = data.RsuRegistration.rsuMapping.position + let equipped = data.RsuRegistration.rsuMapping.applications.length > 0; + map.addRsu(unitName, position.latitude, position.longitude, equipped) + updatedUnits.push(unitName) + } else if (data.TrafficLightRegistration) { + // Add traffic light to map + unitName = data.TrafficLightRegistration.trafficLightMapping.name + let position = data.TrafficLightRegistration.trafficLightMapping.position + let equipped = data.TrafficLightRegistration.trafficLightMapping.applications.length > 0; + if (equipped) { + map.addTrafficLight(unitName, position.latitude, position.longitude, equipped) + updatedUnits.push(unitName) + } + } + + // Update markers of updated units + map.updateViews(updatedUnits) } - } else if (data.VehiclesRemove) { - data.VehiclesRemove.forEach(map.removeUnit) - } else if (data.VehicleRegistration) { - // determine if vehicle is equipped with an application - let equipped = data.VehicleRegistration.vehicleMapping.applications.length > 0; - - map.registerVehicle(data.VehicleRegistration.vehicleMapping.name, equipped) - } else if (data.V2xMessageTransmission) { - // Mark vehicles that are sending right now - unitName = data.V2xMessageTransmission.message.routing.source.sourceName - map.setUnitState(unitName, 'sending') - updatedUnits.push(unitName) - } else if (data.V2xMessageReception) { - // Mark vehicles that are receiving right now - unitName = data.V2xMessageReception.receiverName - map.setUnitState(unitName, 'receiving') - updatedUnits.push(unitName) - } else if (data.RsuRegistration) { - // Add RSU to map - unitName = data.RsuRegistration.rsuMapping.name - var position = data.RsuRegistration.rsuMapping.position - let equipped = data.RsuRegistration.rsuMapping.applications.length > 0; - map.addRsu(unitName, position.latitude, position.longitude, equipped) - updatedUnits.push(unitName) - } else if (data.TrafficLightRegistration) { - // Add traffic light to map - unitName = data.TrafficLightRegistration.trafficLightMapping.name - let position = data.TrafficLightRegistration.trafficLightMapping.position - let equipped = data.TrafficLightRegistration.trafficLightMapping.applications.length > 0; - map.addTrafficLight(unitName, position.latitude, position.longitude, equipped) - updatedUnits.push(unitName) - } - - // Update markers of updated units - map.updateViews(updatedUnits) } - } - - /** - * Called as soon as the socket was closed. - */ - function socketOnClose() { - if (websocketEstablishedConnection) { - websocketEstablishedConnection = false - map.removeAllUnits() - setStatus('closed') + + /** + * Called as soon as the socket was closed. + */ + function socketOnClose() { + if (websocketEstablishedConnection) { + websocketEstablishedConnection = false + map.removeAllUnits() + setStatus('closed') + } } - } - - /** - * Initializes the WebSocket. - */ - function initialize() { - if (!("WebSocket" in window)) { - var error = "Sorry, your Browser does not support WebSocket" - alert(error) - throw new Error(error) - } else { - $status.children('button#reconnect').on('click', () => { - simulated = false - websocketEstablishedConnection = false - tries = 0 - createWebSocket() - }) - createWebSocket() + + /** + * Initializes the WebSocket. + */ + function initialize() { + if (!("WebSocket" in window)) { + var error = "Sorry, your Browser does not support WebSocket" + alert(error) + throw new Error(error) + } else { + $status.children('button#reconnect').on('click', () => { + simulated = false + websocketEstablishedConnection = false + tries = 0 + createWebSocket() + }) + createWebSocket() + } } - } - return { - initialize - } + return { + initialize + } })() // eslint-disable-next-line no-undef $(function(){ - // At this point all necessary data of the whole page has been loaded. - // Now the WebSocket can be initialized. - WebSocketClient.initialize() + // At this point all necessary data of the whole page has been loaded. + // Now the WebSocket can be initialized. + WebSocketClient.initialize() }) diff --git a/fed/mosaic-output/src/main/resources/web/visualizer.html b/fed/mosaic-output/src/main/resources/web/visualizer.html index f6d1cab2b..121e491d7 100644 --- a/fed/mosaic-output/src/main/resources/web/visualizer.html +++ b/fed/mosaic-output/src/main/resources/web/visualizer.html @@ -4,7 +4,7 @@ Eclipse MOSAIC WebSocket Visualizer - +