diff --git a/.classpath b/.classpath index 6e0021feb305ffa1cda191a1eb3c4d28089b9cf0..268dab35dd7ad9758c8ceb5521d9371447cd0c3e 100644 --- a/.classpath +++ b/.classpath @@ -13,15 +13,15 @@ </classpathentry> <classpathentry kind="src" output="target/test-classes" path="src/test/java"> <attributes> + <attribute name="test" value="true"/> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> - <attribute name="test" value="true"/> </attributes> </classpathentry> <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> <attributes> - <attribute name="maven.pomderived" value="true"/> <attribute name="test" value="true"/> + <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> @@ -34,21 +34,19 @@ <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> - <classpathentry kind="src" path="target/generated-sources/annotations"> + <classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> <attributes> + <attribute name="test" value="true"/> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> <attribute name="ignore_optional_problems" value="true"/> <attribute name="m2e-apt" value="true"/> </attributes> </classpathentry> - <classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> + <classpathentry combineaccessrules="false" kind="src" path="/SharingPluginPlattform"/> + <classpathentry kind="src" path="target/generated-sources/annotations"> <attributes> <attribute name="optional" value="true"/> - <attribute name="maven.pomderived" value="true"/> - <attribute name="ignore_optional_problems" value="true"/> - <attribute name="m2e-apt" value="true"/> - <attribute name="test" value="true"/> </attributes> </classpathentry> <classpathentry kind="output" path="target/classes"/> diff --git a/.jhipster/Likes.json b/.jhipster/Likes.json new file mode 100644 index 0000000000000000000000000000000000000000..4b584ed87faace079cde214637fd10589244bedc --- /dev/null +++ b/.jhipster/Likes.json @@ -0,0 +1,31 @@ +{ + "fluentMethods": true, + "clientRootFolder": "", + "relationships": [], + "fields": [ + { + "fieldName": "date", + "fieldType": "LocalDate", + "fieldValidateRules": ["required"] + }, + { + "fieldName": "userID", + "fieldType": "Integer", + "fieldValidateRules": ["required"] + }, + { + "fieldName": "projectID", + "fieldType": "String", + "fieldValidateRules": ["required"] + } + ], + "changelogDate": "20210701160634", + "dto": "no", + "searchEngine": "elasticsearch", + "service": "serviceClass", + "entityTableName": "likes", + "databaseType": "sql", + "readOnly": false, + "jpaMetamodelFiltering": true, + "pagination": "no" +} diff --git a/.jhipster/UserWatchList.json b/.jhipster/UserWatchList.json index a754814c96711c952c1b53be082e486ca02abaa8..1ded8df2bb84b68c75df5750077904e6d2f7e3af 100644 --- a/.jhipster/UserWatchList.json +++ b/.jhipster/UserWatchList.json @@ -18,6 +18,12 @@ "fieldType": "String", "fieldValidateRules": ["required", "minlength"], "fieldValidateRulesMinlength": "1" + }, + { + "fieldName": "checkFrequency", + "fieldType": "CheckFrequency", + "fieldValues": "NEVER,DAILY,WEEKLY,MONTHLY", + "fieldValidateRules": ["required"] } ], "changelogDate": "20210414140546", diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 3c4883f5d06b1570cebd7fc2eb5239079409cd01..e78c8bcdfe9b6704db97dd8491003bd8cc6f086e 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,6 +1,8 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 +encoding//src/main/resources/i18n/messages_de.properties=UTF-8 +encoding//src/main/webapp/i18n/de/checkFrequency.json=UTF-8 encoding//src/main/webapp/i18n/de/exercise.json=UTF-8 encoding//src/main/webapp/i18n/de/global.json=UTF-8 encoding//src/main/webapp/i18n/de/search.json=UTF-8 @@ -8,7 +10,4 @@ encoding//src/main/webapp/i18n/de/userWatchList.json=UTF-8 encoding//src/main/webapp/i18n/de/watchListEntry.json=UTF-8 encoding//src/test/java=UTF-8 encoding//src/test/resources=UTF-8 -encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json=UTF-8 -encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json=UTF-8 -encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json=UTF-8 encoding/<project>=UTF-8 diff --git a/.yo-rc.json b/.yo-rc.json index 44120c15705ba6129d5a1635b89dc1c6088b2475..622ee30efe312aea692244b5bcda3f6f34fc6d23 100644 --- a/.yo-rc.json +++ b/.yo-rc.json @@ -39,6 +39,6 @@ "nativeLanguage": "en", "languages": ["en", "de"], "blueprints": [], - "lastLiquibaseTimestamp": 1618412995000 + "lastLiquibaseTimestamp": 1624029069000 } } diff --git a/Jenkinsfile b/Jenkinsfile index 1b717ea90d1d4774ac4ebd86ad4a84a536a89959..6023fca551c701be5ec4237b0fddf134661fae82 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -56,7 +56,7 @@ pipeline { } void notifyByEmail(String reason) { - def mailRecipients = "michael.breu@arctis.at" + def mailRecipients = "michael.breu@uibk.ac.at" emailext ( subject: reason + ": Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", body: '''${SCRIPT, template="groovy-html.template"}''', diff --git a/package-lock.json b/package-lock.json index 3633b5e58f65ecbb49dbb7ea7340d563af343af4..20a6d78bfcd9676e3b64120efb753ba1dc22dea1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,13 +5,61 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.1000.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1000.0.tgz", - "integrity": "sha512-luzBYe7t994ebq6xIfYJudxOkMBO0bywafk6sQqb+bOaBQAran4orF1R/zEx6f8TJzEoXELjUvxm/ePSqZdpKg==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz", + "integrity": "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==", "dev": true, "requires": { - "@angular-devkit/core": "10.0.0", - "rxjs": "6.5.5" + "@angular-devkit/core": "10.2.3", + "rxjs": "6.6.2" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular-devkit/core": { @@ -36,55 +84,224 @@ } }, "@angular-devkit/schematics": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.0.0.tgz", - "integrity": "sha512-FJ/dY18M+cnAT9RkVjVRJ0PMFZci3ok0WoOosW25Fk68jwNSbGCeF8k8NcD6YE60+CfF4/0LxQWgFagr/wdEhw==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-uCNeq5qH4QEiftgOud+EhTVvdriYQVBrYmX4f4BjVHkjnFhm73h30nfAgs6YuStIp8oxSI8jUGE9DAy331xvmA==", "dev": true, "requires": { - "@angular-devkit/core": "10.0.0", - "ora": "4.0.4", - "rxjs": "6.5.5" + "@angular-devkit/core": "10.2.3", + "ora": "5.0.0", + "rxjs": "6.6.2" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "ora": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", + "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular/cli": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.0.0.tgz", - "integrity": "sha512-I+2cltQCmThgrnHwsG5AX0hQ9z6rK/8ysRWWeiJXHtEtqupW9eNzXX1QfXWxWB3o6oIKgijvnLlp04BUlWCyXA==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.2.3.tgz", + "integrity": "sha512-LLt0AUgLpmaoWA1R7tnUxbJDNs37+WogjNCbNLfvf4YHI04PwKx3OXgx0d8IYNtjHEaGmGp9AQRynvQ2qfXkaA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1000.0", - "@angular-devkit/core": "10.0.0", - "@angular-devkit/schematics": "10.0.0", - "@schematics/angular": "10.0.0", - "@schematics/update": "0.1000.0", + "@angular-devkit/architect": "0.1002.3", + "@angular-devkit/core": "10.2.3", + "@angular-devkit/schematics": "10.2.3", + "@schematics/angular": "10.2.3", + "@schematics/update": "0.1002.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.1.1", - "ini": "1.3.5", - "inquirer": "7.1.0", + "ini": "1.3.6", + "inquirer": "7.3.3", "npm-package-arg": "8.0.1", "npm-pick-manifest": "6.1.0", - "open": "7.0.4", + "open": "7.2.0", "pacote": "9.5.12", "read-package-tree": "5.3.1", "rimraf": "3.0.2", "semver": "7.3.2", "symbol-observable": "1.2.0", - "universal-analytics": "0.4.20", - "uuid": "8.1.0" + "universal-analytics": "0.4.23", + "uuid": "8.3.0" }, "dependencies": { + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.6.tgz", + "integrity": "sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg==", "dev": true }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -140,9 +357,9 @@ } }, "@angular/core": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.0.tgz", - "integrity": "sha512-N1m6op428ktgcsnXqqspb1xGZ9gp664Jmb4JoVajCD3JXucRfidw+vt3kPOldbWA6M4pIu5ZtZY3IZc2GrK5UQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.2.5.tgz", + "integrity": "sha512-krhOKNTj5XE92Rk9ASX5KmgTF72j7qT2PLVxrGEVjuUKjBY2XaK3TV0Kotq9zI3qa9WgeCrP/Njn6jlKQCCAEQ==", "requires": { "tslib": "^2.0.0" } @@ -1184,9 +1401,14 @@ "integrity": "sha512-ARQjtRuT+ZskzJDJKPwuiGO3+7nS0iyNLU/uHVJHfG4LwGJxwVIGldwg1SU957sra0Z0OtWEajHMhiS4vB9LwQ==" }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.29", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.29.tgz", - "integrity": "sha512-cY+QfDTbZ7XVxzx7jxbC98Oxr/zc7R2QpTLqTxqlfyXDrAJjzi/xUIqAUsygELB62JIrbsWxtSRhayKFkGI7MA==" + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", + "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + }, + "@fortawesome/fontawesome-free": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", + "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" }, "@fortawesome/fontawesome-svg-core": { "version": "1.2.29", @@ -1196,6 +1418,14 @@ "@fortawesome/fontawesome-common-types": "^0.2.29" } }, + "@fortawesome/free-regular-svg-icons": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.3.tgz", + "integrity": "sha512-q4/p8Xehy9qiVTdDWHL4Z+o5PCLRChePGZRTXkl+/Z7erDVL8VcZUuqzJjs6gUz6czss4VIPBRdCz6wP37/zMQ==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.35" + } + }, "@fortawesome/free-solid-svg-icons": { "version": "5.13.1", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.1.tgz", @@ -2080,36 +2310,27 @@ } }, "@ng-select/ng-select": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-4.0.1.tgz", - "integrity": "sha512-f5NzrKRvswOvxa8BzBgAUOpzl0B8SrlVQHQLB2zPymuZlzC2dWUi9mUhgu6s2igwdClmrZ8bysNBBNpgqHskyA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-4.0.4.tgz", + "integrity": "sha512-KaVlVdt7DWZBfmL6nc16i80l1dDx0cO3eGjW+grQPnhZ9KurapioQUYVf6dSmYyWyBXihvt4I3SWkCzqSWFJbQ==", "requires": { "tslib": "^1.10.0" }, "dependencies": { "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@ngqp/core": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@ngqp/core/-/core-1.0.2.tgz", - "integrity": "sha512-NJ5ktrQwv7mRsmcOlA2ueTceI+vThSKhiQEzSJIlLtcHCLE26S7Zb8h4Gn40KlPYxC58fROGRAHqHKW6wdbcYw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ngqp/core/-/core-1.2.0.tgz", + "integrity": "sha512-OzluBu8wLbQPyoJNEHjQcCLWNJYMDmD3+X5Gv38VYdslN4n/FxSES3TkxThjJFiBWjwQkEsn7Ph3OaxFk2C2qg==", "dev": true, "requires": { - "schematics-utilities": "^1.1.2", - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - } + "tslib": "^2.0.0" } }, "@ngtools/webpack": { @@ -2240,43 +2461,137 @@ "integrity": "sha512-Fx6atDc7JM1r0WkPCDhNetVZNp+DO21q/HGlomAKBG+k8vb1B8fg8Yige4oCf1P9OWTZWm5tM5i3jlXhrSbNOg==" }, "@schematics/angular": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.0.0.tgz", - "integrity": "sha512-m7Pxz4guAMbe7NASKCPUNxvUX/LeieDjGsXwIt09tVE4dEi9yqJP5zq8kOnZEiLKKflP7GoB65RNex4dTxsydw==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.2.3.tgz", + "integrity": "sha512-xcnfH5XMmGcs33VHm2cu0+4g3rkfSD+qpiKFjfg7KGC4lLoOKSED4ZnjzIYwcQ6QN4gTpAvlZKxI8zO7NkKv0A==", "dev": true, "requires": { - "@angular-devkit/core": "10.0.0", - "@angular-devkit/schematics": "10.0.0" + "@angular-devkit/core": "10.2.3", + "@angular-devkit/schematics": "10.2.3", + "jsonc-parser": "2.3.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@schematics/update": { - "version": "0.1000.0", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1000.0.tgz", - "integrity": "sha512-snjz7sQCOn4Xi66XQREXZx9K6R/vAnUfdyO5nXekls8+E+MIowlP+gqHM0whi8qJDwCLd9maYmeVsD6XZaGImQ==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1002.3.tgz", + "integrity": "sha512-UnuMgRQtAOp/Pk9rSYW12medajXe9s5mW4a6foixC/B2UCFFlIAVbFBTiFpr69xbalfLlFcFx1MD+8/8njWtbQ==", "dev": true, "requires": { - "@angular-devkit/core": "10.0.0", - "@angular-devkit/schematics": "10.0.0", + "@angular-devkit/core": "10.2.3", + "@angular-devkit/schematics": "10.2.3", "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", + "ini": "1.3.6", "npm-package-arg": "^8.0.0", "pacote": "9.5.12", - "rxjs": "6.5.5", "semver": "7.3.2", "semver-intersect": "1.4.0" }, "dependencies": { + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.6.tgz", + "integrity": "sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg==", "dev": true }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -2480,9 +2795,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "version": "4.14.170", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", + "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", "dev": true }, "@types/marked": { @@ -2509,9 +2824,9 @@ "dev": true }, "@types/node": { - "version": "13.13.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.41.tgz", - "integrity": "sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g==", + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", "dev": true }, "@types/normalize-package-data": { @@ -2533,9 +2848,9 @@ "dev": true }, "@types/prismjs": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.9.0.tgz", - "integrity": "sha512-zeh+xd2pcCvWm1XtWLR4v5pzZMybKeq6X8Q4cIZMMx8GmyKDUfJaOtw+JaONHUQt5ncKFXezl8QGIDQsSF5YfA==", + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.5.tgz", + "integrity": "sha512-nSU7U6FQDJJCraFNwaHmH5YDsd/VA9rTnJ7B7AGFdn+m+VSt3FjLWN7+AbqxZ67dbFazqtrDFUto3HK4ljrHIg==", "dev": true }, "@types/q": { @@ -3923,9 +4238,9 @@ "dev": true }, "bootstrap": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", - "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", + "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" }, "brace-expansion": { "version": "1.1.11", @@ -4211,15 +4526,16 @@ } }, "browserslist": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.2.tgz", - "integrity": "sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001088", - "electron-to-chromium": "^1.3.483", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "browserstack": { @@ -4379,6 +4695,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -4464,9 +4790,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001185", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz", - "integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==", + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true }, "canonical-path": { @@ -4688,9 +5014,9 @@ } }, "cli-spinners": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", - "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", "dev": true }, "cli-table": { @@ -4920,9 +5246,9 @@ } }, "colorette": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz", - "integrity": "sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "colornames": { @@ -5313,9 +5639,9 @@ "dev": true }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -5564,31 +5890,25 @@ } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" }, "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.2.0" } } } @@ -5628,9 +5948,9 @@ } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true }, "cssauron": { @@ -5649,13 +5969,13 @@ "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, @@ -5701,9 +6021,9 @@ } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -5734,7 +6054,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" } }, @@ -5766,28 +6086,28 @@ "dev": true }, "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.39" + "css-tree": "^1.1.2" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "mdn-data": "2.0.6", + "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "source-map": { @@ -6286,9 +6606,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -6323,13 +6643,25 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } } }, "domain-browser": { @@ -6339,9 +6671,9 @@ "dev": true }, "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domexception": { @@ -6371,14 +6703,25 @@ } }, "domutils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", - "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "dom-serializer": "^0.2.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } } }, "dot-case": { @@ -6511,9 +6854,9 @@ } }, "electron-to-chromium": { - "version": "1.3.483", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz", - "integrity": "sha512-+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg==", + "version": "1.3.755", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz", + "integrity": "sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==", "dev": true }, "elegant-spinner": { @@ -6586,9 +6929,9 @@ }, "dependencies": { "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6620,17 +6963,17 @@ }, "dependencies": { "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true } } }, "engine.io-client": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", - "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", "dev": true, "requires": { "component-emitter": "~1.3.0", @@ -6642,7 +6985,7 @@ "parseqs": "0.0.6", "parseuri": "0.0.6", "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", + "xmlhttprequest-ssl": "~1.6.2", "yeast": "0.1.2" }, "dependencies": { @@ -6668,9 +7011,9 @@ "dev": true }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true } } @@ -6766,22 +7109,27 @@ } }, "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { @@ -6811,9 +7159,9 @@ } }, "escalade": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", - "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-html": { @@ -8288,6 +8636,17 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -8363,9 +8722,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -8530,9 +8889,9 @@ "dev": true }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -8598,6 +8957,12 @@ } } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", @@ -8627,9 +8992,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-unicode": { @@ -8769,9 +9134,9 @@ "dev": true }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -8818,12 +9183,6 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -9223,9 +9582,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -9340,46 +9699,51 @@ "dev": true }, "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "mute-stream": "0.0.8", "run-async": "^2.4.0", - "rxjs": "^6.5.3", + "rxjs": "^6.6.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -9401,14 +9765,29 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -9788,6 +10167,12 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -9797,6 +10182,15 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -9804,9 +10198,9 @@ "dev": true }, "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-ci": { @@ -9933,6 +10327,12 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9948,6 +10348,12 @@ "lodash.isfinite": "^3.3.2" } }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -10021,12 +10427,13 @@ "dev": true }, "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, "is-regexp": { @@ -10062,14 +10469,11 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true }, "is-symbol": { "version": "1.0.3", @@ -10086,6 +10490,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -10293,6 +10703,12 @@ "regexp-to-ast": "0.4.0" } }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "regexp-to-ast": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz", @@ -12648,9 +13064,9 @@ "dev": true }, "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, "js-object-pretty-print": { "version": "0.3.0", @@ -12725,9 +13141,9 @@ } }, "ws": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", - "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", + "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", "dev": true } } @@ -12793,6 +13209,12 @@ "minimist": "^1.2.5" } }, + "jsonc-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", + "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", + "dev": true + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -13287,12 +13709,6 @@ "ms": "2.1.2" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -13342,9 +13758,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -14398,44 +14814,38 @@ } }, "mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.14.0", + "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", + "ms": "2.1.3", + "nanoid": "3.1.20", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", + "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", "yargs-unparser": "2.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 - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14445,41 +14855,42 @@ "color-convert": "^2.0.1" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -14498,24 +14909,26 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "escape-string-regexp": { @@ -14554,11 +14967,14 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "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 + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, "locate-path": { "version": "6.0.0", @@ -14578,13 +14994,19 @@ "chalk": "^4.0.0" } }, + "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 + }, "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { @@ -14605,26 +15027,6 @@ "randombytes": "^2.1.0" } }, - "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" - } - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -14632,9 +15034,9 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -14650,114 +15052,42 @@ } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "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": { - "color-convert": "^1.9.0" - } - }, - "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": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -14862,9 +15192,9 @@ "optional": true }, "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "nanomatch": { @@ -14913,9 +15243,19 @@ } }, "ngx-cookie-service": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-3.0.4.tgz", - "integrity": "sha512-g4KHpCWL2EtKatWqn8lz/DdyMQO8sDS7BNwCSvxF1ETTW5DPJnbdEwCjSdm84MmfqBh6JdgvoQd//rOxH5EbgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-3.1.3.tgz", + "integrity": "sha512-7bKSmpoUzfz9y7KSw83UqNnFGXnssMu5hFHyXvKKeqMBnhMqrpX1caZwNjvPW/61q71fGEdS/ZLZKvEedn2Wug==", + "requires": { + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } }, "ngx-infinite-scroll": { "version": "9.0.0", @@ -15096,9 +15436,9 @@ } }, "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "normalize-package-data": { @@ -15114,9 +15454,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true } } @@ -15160,9 +15500,9 @@ } }, "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -15303,55 +15643,6 @@ } } }, - "npm-registry-client": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", - "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", - "dev": true, - "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, "npm-registry-fetch": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", @@ -15368,9 +15659,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "npm-package-arg": { @@ -15425,12 +15716,12 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "num2fraction": { @@ -15501,9 +15792,9 @@ "dev": true }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-is": { @@ -15532,15 +15823,15 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.getownpropertydescriptors": { @@ -15563,15 +15854,14 @@ } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "obuf": { @@ -15619,9 +15909,9 @@ } }, "open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", + "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -16012,9 +16302,9 @@ }, "dependencies": { "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -16026,9 +16316,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "npm-package-arg": { @@ -16506,9 +16796,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -17119,12 +17409,11 @@ } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -17184,6 +17473,12 @@ "prettier": "2.1.1" }, "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "prettier": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", @@ -17877,16 +18172,16 @@ "dev": true }, "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -17895,61 +18190,32 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "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" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "strip-ansi": { "version": "3.0.1", @@ -18322,343 +18588,29 @@ }, "sane": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "sass": { - "version": "1.26.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", - "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "dev": true, - "requires": { - "https-proxy-agent": "^2.2.1" - } - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "schematics-utilities": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/schematics-utilities/-/schematics-utilities-1.1.3.tgz", - "integrity": "sha512-5HnrH+MJkUmK7KfRpA457FY0BZatX2oxNts54P1347xlICCC7KjAh0r2Tue20Xfruw1mS3X5woTxa8od+JsqUA==", - "dev": true, - "requires": { - "@angular-devkit/core": "^7.3.6", - "@angular-devkit/schematics": "^7.3.6", - "npm-registry-client": "^8.5.1", - "parse5": "^5.0.0", - "rxjs": "^6.4.0", - "typescript": "^3.3.3333" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "7.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.10.tgz", - "integrity": "sha512-h8Yj2+UfBsPI7jZ8X88tImO/7RPgNWUcKF8Uq/J5eUSN6z0FMO0lluD4sM7X8aikb7RK8MwkwrqB/xfxvvkOow==", - "dev": true, - "requires": { - "ajv": "6.9.1", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - } - } - }, - "@angular-devkit/schematics": { - "version": "7.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.10.tgz", - "integrity": "sha512-LMTGQ8kJb80LjTttu0ZqWXddzYtDwjKtMKY9X0A60Iz8/wbGl0j+wYG7KAVoRF0JeieYXs8Dl9KWdjyJyvJ/RA==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.3.10", - "rxjs": "6.3.3" - }, - "dependencies": { - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - } - } - }, - "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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=", - "dev": true - }, - "fast-json-stable-stringify": { + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { "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 - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "normalize-path": { @@ -18669,42 +18621,94 @@ "requires": { "remove-trailing-separator": "^1.0.1" } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + } + } + }, + "sass": { + "version": "1.26.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", + "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "minimist": "^1.2.0" } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, "scoped-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", @@ -18984,9 +18988,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", "dev": true, "requires": { "to-object-path": "^0.3.0" @@ -19180,12 +19184,6 @@ } } }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, "smart-buffer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", @@ -19674,9 +19672,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -19866,23 +19864,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string_decoder": { @@ -20089,16 +20087,20 @@ } }, "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } }, "domutils": { "version": "1.7.0", @@ -20108,6 +20110,23 @@ "requires": { "dom-serializer": "0", "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" } }, "sax": { @@ -20636,9 +20655,9 @@ "dev": true }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -21023,9 +21042,9 @@ } }, "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "triple-beam": { @@ -21299,9 +21318,9 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "dev": true }, "uglify-js": { @@ -21311,6 +21330,18 @@ "dev": true, "optional": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "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", @@ -21391,25 +21422,16 @@ } }, "universal-analytics": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", - "integrity": "sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", "dev": true, "requires": { - "debug": "^3.0.0", - "request": "^2.88.0", + "debug": "^4.1.1", + "request": "^2.88.2", "uuid": "^3.0.0" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -21528,9 +21550,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -21607,9 +21629,9 @@ "dev": true }, "uuid": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz", - "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", "dev": true }, "v8-compile-cache": { @@ -21760,9 +21782,9 @@ } }, "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "requires": { @@ -23133,15 +23155,6 @@ } } }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", @@ -23328,6 +23341,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -23898,9 +23924,9 @@ } }, "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { @@ -24001,9 +24027,9 @@ } }, "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -24044,9 +24070,9 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", "dev": true }, "xtend": { @@ -24665,6 +24691,12 @@ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, "yup": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", diff --git a/package.json b/package.json index c3a1997d2f53dae120ac8332bbb958cc348ed353..525816fa9135a068742e540eeda76d17b39816b6 100644 --- a/package.json +++ b/package.json @@ -11,28 +11,31 @@ "@angular/animations": "^12.0.4", "@angular/common": "10.0.0", "@angular/compiler": "10.0.0", - "@angular/core": "^10.0.0", + "@angular/core": "^10.2.5", "@angular/forms": "10.0.0", "@angular/localize": "10.0.0", "@angular/platform-browser": "10.0.0", "@angular/platform-browser-dynamic": "10.0.0", "@angular/router": "10.0.0", "@fortawesome/angular-fontawesome": "0.6.1", - "@fortawesome/fontawesome-svg-core": "1.2.29", + "@fortawesome/fontawesome-common-types": "^0.2.35", + "@fortawesome/fontawesome-free": "^5.15.3", + "@fortawesome/fontawesome-svg-core": "^1.2.29", + "@fortawesome/free-regular-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "5.13.1", "@ng-bootstrap/ng-bootstrap": "^7.0.0", - "@ng-select/ng-select": "^4.0.1", + "@ng-select/ng-select": "^4.0.4", "@ngx-translate/core": "12.1.2", "@ngx-translate/http-loader": "5.0.0", "angular-tag-cloud-module": "^5.3.0", "anymatch": "^3.1.2", - "bootstrap": "^4.5.2", - "jquery": "^3.5.1", + "bootstrap": "^4.6.0", + "jquery": "^3.6.0", "lodash": "^4.17.21", "moment": "2.27.0", "ng-jhipster": "0.14.0", "ngx-chips": "^2.2.2", - "ngx-cookie-service": "^3.0.4", + "ngx-cookie-service": "^3.1.3", "ngx-infinite-scroll": "9.0.0", "ngx-markdown": "^10.1.1", "ngx-webstorage": "5.0.0", @@ -44,18 +47,18 @@ "zone.js": "0.10.3" }, "devDependencies": { - "@angular/cli": "^10.0.0", + "@angular/cli": "^10.2.3", "@angular/compiler-cli": "10.0.0", - "@ngqp/core": "^1.0.2", + "@ngqp/core": "^1.2.0", "@ngtools/webpack": "10.0.0", "@openapitools/openapi-generator-cli": "1.0.13-4.3.1", "@types/chai": "4.2.11", "@types/chai-string": "1.4.2", "@types/jest": "26.0.3", - "@types/lodash": "^4.14.168", + "@types/lodash": "^4.14.170", "@types/mocha": "7.0.2", "@types/node": "^13.13.52", - "@types/prismjs": "^1.9.0", + "@types/prismjs": "^1.16.5", "@types/selenium-webdriver": "4.0.9", "@typescript-eslint/eslint-plugin": "2.30.0", "@typescript-eslint/eslint-plugin-tslint": "2.30.0", @@ -87,7 +90,7 @@ "lint-staged": "8.2.1", "merge-jsons-webpack-plugin": "1.0.21", "mini-css-extract-plugin": "0.9.0", - "mocha": "^8.2.1", + "mocha": "^8.4.0", "moment-locales-webpack-plugin": "1.2.0", "optimize-css-assets-webpack-plugin": "5.0.3", "postcss-loader": "3.0.0", diff --git a/pom.xml b/pom.xml index 4e2136570db72b90551f0c05ae34f24569988d96..1baf984bdc98737131da97d250a14cfd3adf0ace 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ <dependency> <groupId>org.codeability.sharing</groupId> <artifactId>SharingPluginPlatformAPI</artifactId> - <version>0.1.2</version> + <version>0.1.8</version> </dependency> <dependency> <groupId>com.h2database</groupId> diff --git a/src/main/java/at/ac/uibk/gitsearch/GitsearchApp.java b/src/main/java/at/ac/uibk/gitsearch/GitsearchApp.java index 7320d14473230a63d872dbfde1fd8737236269e6..cc24ac789519f0c6fde4fafe5ae952a9adb61486 100644 --- a/src/main/java/at/ac/uibk/gitsearch/GitsearchApp.java +++ b/src/main/java/at/ac/uibk/gitsearch/GitsearchApp.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.core.env.Environment; @@ -20,7 +21,7 @@ import java.net.UnknownHostException; import java.util.Arrays; import java.util.Collection; -@SpringBootApplication +@SpringBootApplication(exclude = JmxAutoConfiguration.class) @EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class}) public class GitsearchApp { diff --git a/src/main/java/at/ac/uibk/gitsearch/config/CacheConfiguration.java b/src/main/java/at/ac/uibk/gitsearch/config/CacheConfiguration.java index bca39dd25929c1566aa5402e8ec3251ea90329b3..ea1d0280c26e1045e519320d565b329e36af762c 100644 --- a/src/main/java/at/ac/uibk/gitsearch/config/CacheConfiguration.java +++ b/src/main/java/at/ac/uibk/gitsearch/config/CacheConfiguration.java @@ -52,6 +52,7 @@ public class CacheConfiguration { createCache(cm, at.ac.uibk.gitsearch.domain.UserWatchList.class.getName()); createCache(cm, at.ac.uibk.gitsearch.domain.WatchListEntry.class.getName()); createCache(cm, at.ac.uibk.gitsearch.domain.SavedSearches.class.getName()); + createCache(cm, at.ac.uibk.gitsearch.domain.Likes.class.getName()); // jhipster-needle-ehcache-add-entry }; } diff --git a/src/main/java/at/ac/uibk/gitsearch/config/SecurityConfiguration.java b/src/main/java/at/ac/uibk/gitsearch/config/SecurityConfiguration.java index 6a06679a02bb8f7ae1bf6aaffc4d61a01d618c45..eef3ee72e28f893c3e0b31cf6a06b511cb7543ae 100644 --- a/src/main/java/at/ac/uibk/gitsearch/config/SecurityConfiguration.java +++ b/src/main/java/at/ac/uibk/gitsearch/config/SecurityConfiguration.java @@ -158,12 +158,16 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { .antMatchers("/api/pluginIF/**").permitAll() // plugins calls are always allowed, security by tokens .antMatchers("/api/applicationInfo/**").permitAll() // everybody may retrieve deployment infos .antMatchers("/api/authenticate").permitAll() + .antMatchers("/api/exerciseFile/**").permitAll() .antMatchers("/api/exercise/**").permitAll() + .antMatchers("/api/exerciseFile/**").permitAll() .antMatchers("/api/refreshToken").permitAll() .antMatchers("/api/register").denyAll() .antMatchers("/api/activate").permitAll() .antMatchers("/api/account/reset-password/init").permitAll() .antMatchers("/api/account/reset-password/finish").permitAll() + .antMatchers("/api/numberOfLikes/**").permitAll() + .antMatchers("/api/hasLiked/**").permitAll() .antMatchers("/api/**").authenticated() .antMatchers("/management/health").permitAll() .antMatchers("/management/info").permitAll() diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/Authority.java b/src/main/java/at/ac/uibk/gitsearch/domain/Authority.java index fdaa67e7b528477ce37e077fa938e39148aab6f8..7df972d5f17a909244dfbb7da029999fc70dec86 100644 --- a/src/main/java/at/ac/uibk/gitsearch/domain/Authority.java +++ b/src/main/java/at/ac/uibk/gitsearch/domain/Authority.java @@ -20,6 +20,15 @@ import java.util.Objects; public class Authority implements Serializable { private static final long serialVersionUID = 1L; + + public Authority(@NotNull @Size(max = 50) String name) { + super(); + this.name = name; + } + + public Authority() { + // For JPA + } @NotNull @Size(max = 50) diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/Likes.java b/src/main/java/at/ac/uibk/gitsearch/domain/Likes.java new file mode 100644 index 0000000000000000000000000000000000000000..7a9aa2a54d4fb433099d636614155e43f8b49406 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/domain/Likes.java @@ -0,0 +1,115 @@ +package at.ac.uibk.gitsearch.domain; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +import javax.persistence.*; +import javax.validation.constraints.*; + +import org.springframework.data.elasticsearch.annotations.FieldType; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * A Likes. + */ +@Entity +@Table(name = "likes") +@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) +@org.springframework.data.elasticsearch.annotations.Document(indexName = "likes") +public class Likes implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @Column(name = "date", nullable = false) + private LocalDate date; + + @NotNull + @Column(name = "user_id", nullable = false) + private Integer userID; + + @NotNull + @Column(name = "exercise_id", nullable = false) + private String exerciseID; + + // jhipster-needle-entity-add-field - JHipster will add fields here + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getDate() { + return date; + } + + public Likes date(LocalDate date) { + this.date = date; + return this; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public Integer getUserID() { + return userID; + } + + public Likes userID(Integer userID) { + this.userID = userID; + return this; + } + + public void setUserID(Integer userID) { + this.userID = userID; + } + + public String getExerciseID() { + return exerciseID; + } + + public Likes exerciseID(String exerciseID) { + this.exerciseID = exerciseID; + return this; + } + + public void setExerciseID(String exerciseID) { + this.exerciseID = exerciseID; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Likes)) { + return false; + } + return id != null && id.equals(((Likes) o).id); + } + + @Override + public int hashCode() { + return 31; + } + + // prettier-ignore + @Override + public String toString() { + return "Likes{" + + "id=" + getId() + + ", date='" + getDate() + "'" + + ", userID=" + getUserID() + + ", exerciseID=" + getExerciseID() + + "}"; + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/SavedSearches.java b/src/main/java/at/ac/uibk/gitsearch/domain/SavedSearches.java index cd0e2735a0ec00f46d231be3ffea9eec900ad7aa..4a3c11f267327c2cd0b17e4955666a2c7e6f759d 100644 --- a/src/main/java/at/ac/uibk/gitsearch/domain/SavedSearches.java +++ b/src/main/java/at/ac/uibk/gitsearch/domain/SavedSearches.java @@ -7,7 +7,6 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import javax.persistence.*; import javax.validation.constraints.*; -import org.springframework.data.elasticsearch.annotations.FieldType; import java.io.Serializable; /** @@ -35,9 +34,10 @@ public class SavedSearches implements Serializable { private String jsonQuery; @ManyToOne(optional = false) + @JoinColumn(name = "userId") @NotNull @JsonIgnoreProperties(value = "savedSearches", allowSetters = true) - private User userId; + private User user; // jhipster-needle-entity-add-field - JHipster will add fields here public Long getId() { @@ -74,17 +74,12 @@ public class SavedSearches implements Serializable { this.jsonQuery = jsonQuery; } - public User getUserId() { - return userId; + public User getUser() { + return user; } - public SavedSearches userId(User user) { - this.userId = user; - return this; - } - - public void setUserId(User user) { - this.userId = user; + public void setUser(User user) { + this.user = user; } // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/Statistics.java b/src/main/java/at/ac/uibk/gitsearch/domain/Statistics.java index 35e5e91cdb25c521b94a1e23b40b0e63b0ee6991..3c1ece460cd05aab3c7bb7c333c7678f8ffa014c 100644 --- a/src/main/java/at/ac/uibk/gitsearch/domain/Statistics.java +++ b/src/main/java/at/ac/uibk/gitsearch/domain/Statistics.java @@ -6,14 +6,13 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import javax.persistence.*; import javax.validation.constraints.*; -import org.springframework.data.elasticsearch.annotations.FieldType; import java.io.Serializable; /** * A Statistics. */ @Entity -@Table(name = "statistics") +@Table(name = "statistics", indexes = @Index(columnList = "exercise_id")) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.springframework.data.elasticsearch.annotations.Document(indexName = "statistics") public class Statistics implements Serializable { @@ -32,7 +31,7 @@ public class Statistics implements Serializable { private Integer downloads; @Column(name = "exercise_id") - private Long exerciseID; + private String exerciseID; // jhipster-needle-entity-add-field - JHipster will add fields here public Long getId() { @@ -69,16 +68,16 @@ public class Statistics implements Serializable { this.downloads = downloads; } - public Long getExerciseID() { + public String getExerciseID() { return exerciseID; } - public Statistics exerciseID(Long exerciseID) { + public Statistics exerciseID(String exerciseID) { this.exerciseID = exerciseID; return this; } - public void setExerciseID(Long exerciseID) { + public void setExerciseID(String exerciseID) { this.exerciseID = exerciseID; } // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/User.java b/src/main/java/at/ac/uibk/gitsearch/domain/User.java index 424b279a1691425417a1a7b5e8d43c1db6637b01..ceab1e74e8026f551c0035a80d024a753104d684 100644 --- a/src/main/java/at/ac/uibk/gitsearch/domain/User.java +++ b/src/main/java/at/ac/uibk/gitsearch/domain/User.java @@ -94,6 +94,13 @@ public class User extends AbstractAuditingEntity implements Serializable { @Column(name = "reset_date") private Instant resetDate = null; + + @Column(name = "last_login", nullable = true) + private Instant lastLogin; + + @Column(name = "last_mail_sent", nullable = true) + private Instant lastMailSent; + @JsonIgnore @ManyToMany @JoinTable( @@ -209,6 +216,23 @@ public class User extends AbstractAuditingEntity implements Serializable { public void setAuthorities(Set<Authority> authorities) { this.authorities = authorities; } + + public Instant getLastLogin() { + return lastLogin; + } + + public void setLastLogin(Instant lastLogin) { + this.lastLogin = lastLogin; + } + + public Instant getLastMailSent() { + return lastMailSent; + } + + public void setLastMailSent(Instant lastMailSent) { + this.lastMailSent = lastMailSent; + } + @Override public boolean equals(Object o) { diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/UserWatchList.java b/src/main/java/at/ac/uibk/gitsearch/domain/UserWatchList.java index 697184244dcb88f16be3d53ffeefe66750afe99a..dcdc724c98c148fa75144661af1df90e4d72927a 100644 --- a/src/main/java/at/ac/uibk/gitsearch/domain/UserWatchList.java +++ b/src/main/java/at/ac/uibk/gitsearch/domain/UserWatchList.java @@ -1,14 +1,17 @@ package at.ac.uibk.gitsearch.domain; import java.io.Serializable; +import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -20,6 +23,8 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; + /** * A UserWatchList. */ @@ -29,7 +34,19 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @org.springframework.data.elasticsearch.annotations.Document(indexName = "userwatchlist") public class UserWatchList implements Serializable { - private static final long serialVersionUID = 1L; + public UserWatchList(@NotNull @Size(min = 1) String name, @NotNull CheckFrequency checkFrequency, + @NotNull User user) { + super(); + this.name = name; + this.checkFrequency = checkFrequency; + this.user = user; + this.watchListEntries = new HashSet<>(); + } + + public UserWatchList() { + // JPA + } + private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -40,10 +57,16 @@ public class UserWatchList implements Serializable { @Column(name = "name", nullable = false) private String name; + @NotNull + @Enumerated(EnumType.ORDINAL) + @Column(name = "check_frequency", nullable = false) + private CheckFrequency checkFrequency; + @ManyToOne(optional = false) + @JoinColumn(name = "userId") @NotNull @JsonIgnoreProperties(value = "userWatchLists", allowSetters = true) - private User userId; + private User user; @OneToMany(mappedBy = "watchlist", orphanRemoval = true) private Set<WatchListEntry> watchListEntries; @@ -70,17 +93,25 @@ public class UserWatchList implements Serializable { this.name = name; } - public User getUserId() { - return userId; + public CheckFrequency getCheckFrequency() { + return checkFrequency; } - public UserWatchList userId(User user) { - this.userId = user; + public UserWatchList checkFrequency(CheckFrequency checkFrequency) { + this.checkFrequency = checkFrequency; return this; } - public void setUserId(User user) { - this.userId = user; + public void setCheckFrequency(CheckFrequency checkFrequency) { + this.checkFrequency = checkFrequency; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; } // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here @@ -98,7 +129,7 @@ public class UserWatchList implements Serializable { this.watchListEntries = watchListEntries; } - @Override + @Override public boolean equals(Object o) { if (this == o) { return true; @@ -120,6 +151,7 @@ public class UserWatchList implements Serializable { return "UserWatchList{" + "id=" + getId() + ", name='" + getName() + "'" + + ", checkFrequency='" + getCheckFrequency() + "'" + "}"; } } diff --git a/src/main/java/at/ac/uibk/gitsearch/domain/enumeration/CheckFrequency.java b/src/main/java/at/ac/uibk/gitsearch/domain/enumeration/CheckFrequency.java new file mode 100644 index 0000000000000000000000000000000000000000..1296cc32c0abd51fc25c7f4f61aa3ea457fa0000 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/domain/enumeration/CheckFrequency.java @@ -0,0 +1,23 @@ +package at.ac.uibk.gitsearch.domain.enumeration; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +/** + * The CheckFrequency enumeration. + */ +public enum CheckFrequency { + NEVER, DAILY, WEEKLY, MONTHLY; + + public Instant getChangedBefore() { + Instant now = Instant.now(); + switch(this) { + case NEVER: return now; + case DAILY: return now.minus(1, ChronoUnit.DAYS); + case WEEKLY: return now.minus(7, ChronoUnit.DAYS); + case MONTHLY: return now.minus(30, ChronoUnit.DAYS); + default: // should never happen + return now; + } + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/AuthorityRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/AuthorityRepository.java index 00c7f12877d99c970aece2232ccc87e67ebe4fac..7ff5e1e648a963eb617d9d2d5d4362bf6e8e4541 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/AuthorityRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/AuthorityRepository.java @@ -1,11 +1,27 @@ package at.ac.uibk.gitsearch.repository; -import at.ac.uibk.gitsearch.domain.Authority; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import at.ac.uibk.gitsearch.domain.Authority; /** * Spring Data JPA repository for the {@link Authority} entity. */ public interface AuthorityRepository extends JpaRepository<Authority, String> { + + @Query("DELETE FROM Authority auth WHERE not exists (SELECT u FROM User u WHERE auth member u.authorities)") + @Modifying + void deleteUnusedAuthorities(); + + /** + * mainly for test purposes only. Returns all authentications that are used by some user + * @return + */ + @Query("SELECT DISTINCT u.authorities FROM User u ") + List<Authority> getUsedAuthorities(); + } diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/LikesRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/LikesRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..8d6e9cd667d89644fd235164e91bdab64a2e67f3 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/repository/LikesRepository.java @@ -0,0 +1,20 @@ +package at.ac.uibk.gitsearch.repository; + +import at.ac.uibk.gitsearch.domain.Likes; + +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + +/** + * Spring Data repository for the Likes entity. + */ +@SuppressWarnings("unused") +@Repository +public interface LikesRepository extends JpaRepository<Likes, Long>, JpaSpecificationExecutor<Likes> { + + @Query(value = "SELECT * FROM LIKES u where u.user_id = ?1 and exercise_id = ?2", nativeQuery = true) + Likes findLikesByUserIDandExerciseID(Integer userID, String ExerciseID); + + @Query(value = "SELECT COUNT(u.exercise_id) FROM LIKES u where exercise_id = ?1", nativeQuery = true) + Integer findNumberOfLikesByExerciseID(String ExerciseID); +} diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/SavedSearchesRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/SavedSearchesRepository.java index b083b8c7ef3f9cf62f9671abc3a4b4c48a5bfc83..efa86a177479794c8eb6a45e5f5977a2464efb77 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/SavedSearchesRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/SavedSearchesRepository.java @@ -14,6 +14,6 @@ import java.util.List; @Repository public interface SavedSearchesRepository extends JpaRepository<SavedSearches, Long> { - @Query("select savedSearches from SavedSearches savedSearches where savedSearches.userId.login = ?#{principal.username}") - List<SavedSearches> findByUserIdIsCurrentUser(); + @Query("select savedSearches from SavedSearches savedSearches where savedSearches.user.login = ?#{principal.username}") + List<SavedSearches> findByUserIsCurrentUser(); } diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/StatisticsRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/StatisticsRepository.java index d654a0c5ab2005bd7c090b7091deb4f6d8c66478..3a1fc4b3cd1aa070d5aaf888128329cb8c6524cf 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/StatisticsRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/StatisticsRepository.java @@ -13,5 +13,5 @@ import at.ac.uibk.gitsearch.domain.Statistics; @Repository public interface StatisticsRepository extends JpaRepository<Statistics, Long> { - Optional<Statistics> findByExerciseID(Long id); + Optional<Statistics> findByExerciseID(String id); } diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/UserWatchListRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/UserWatchListRepository.java index 336983358b21c5ad06db94a497118e3c92f639d2..13524c09ee70ebd82082c850755705275de45148 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/UserWatchListRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/UserWatchListRepository.java @@ -1,6 +1,7 @@ package at.ac.uibk.gitsearch.repository; -import java.util.List; +import at.ac.uibk.gitsearch.domain.User; +import at.ac.uibk.gitsearch.domain.UserWatchList; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,16 +11,16 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import at.ac.uibk.gitsearch.domain.UserWatchList; - +import java.util.List; /** * Spring Data repository for the UserWatchList entity. */ +@SuppressWarnings("unused") @Repository public interface UserWatchListRepository extends JpaRepository<UserWatchList, Long>, JpaSpecificationExecutor<UserWatchList> { - @Query("select userWatchList from UserWatchList userWatchList where userWatchList.userId.login = ?#{principal.username}") - List<UserWatchList> findByUserIdIsCurrentUser(); + @Query("select userWatchList from UserWatchList userWatchList where userWatchList.user.login = ?#{principal.username}") + List<UserWatchList> findByUserIsCurrentUser(); @Query("select uwl from UserWatchList uwl where uwl.name LIKE CONCAT('%',:query,'%')") Page<UserWatchList> search(@Param("query") String query, Pageable pageable); @@ -27,12 +28,12 @@ public interface UserWatchListRepository extends JpaRepository<UserWatchList, Lo /** * Returns all watchlists of the current user. * - * @param userId the id of the user + * @param user the user * @return the list of watchlists */ - List<UserWatchList> findByUserId(long UserId); + List<UserWatchList> findByUser(User user); - @Query("select uwl from UserWatchList uwl where uwl.userId.login = ?#{principal.username} AND uwl.name LIKE CONCAT('%',:query,'%')") + @Query("select uwl from UserWatchList uwl where uwl.user.login = ?#{principal.username} AND uwl.name LIKE CONCAT('%',:query,'%')") Page<UserWatchList> searchForCurrentUser(@Param("query") String query, Pageable pageable); diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepository.java index 662c29ef3dbdcc8ec30679db782cca488cf7a3bb..750df7fbb672c613f4a5b90eb06169bc8475baf6 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepository.java @@ -2,13 +2,14 @@ package at.ac.uibk.gitsearch.repository.search; import java.io.IOException; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; + import at.ac.uibk.gitsearch.service.dto.GitFilesAggregationDTO; import at.ac.uibk.gitsearch.service.dto.GitFilesPageDetailsDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; public interface GitFilesRepository { - GitFilesPageDetailsDTO pageDetails(SearchInputDTO searchInputDTO, int pageSize) throws IOException; + GitFilesPageDetailsDTO pageDetails(SearchInputDTO searchInputDTO) throws IOException; GitFilesAggregationDTO aggregation(String query) throws IOException; } diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImpl.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImpl.java index 195b9eb22f4ab86318118657cbe2f22859da73d8..f15ba7a3c8c3247b0b74858e9ac0f8aea96b45c7 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImpl.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImpl.java @@ -1,14 +1,11 @@ package at.ac.uibk.gitsearch.repository.search; -import at.ac.uibk.gitsearch.config.ApplicationProperties; -import at.ac.uibk.gitsearch.es.model.DocumentInfo; -import at.ac.uibk.gitsearch.service.dto.GitFilesAggregationDTO; -import at.ac.uibk.gitsearch.service.dto.GitFilesDTO; -import at.ac.uibk.gitsearch.service.dto.GitFilesPageDetailsDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.codeability.sharing.plugins.api.search.SearchInputDTO; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; @@ -22,10 +19,15 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.springframework.stereotype.Repository; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import at.ac.uibk.gitsearch.config.ApplicationProperties; +import at.ac.uibk.gitsearch.es.model.DocumentInfo; +import at.ac.uibk.gitsearch.service.dto.GitFilesAggregationDTO; +import at.ac.uibk.gitsearch.service.dto.GitFilesDTO; +import at.ac.uibk.gitsearch.service.dto.GitFilesPageDetailsDTO; @Repository public class GitFilesRepositoryImpl implements GitFilesRepository { @@ -41,8 +43,9 @@ public class GitFilesRepositoryImpl implements GitFilesRepository { this.properties = properties; } - @Override - public GitFilesPageDetailsDTO pageDetails(SearchInputDTO searchInputDTO, int pageSize) throws IOException { + @SuppressWarnings("deprecation") + @Override + public GitFilesPageDetailsDTO pageDetails(SearchInputDTO searchInputDTO) throws IOException { Collection<String> projectIDs = searchProjectsIDsMetadata(searchInputDTO); SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_FULLTEXT); @@ -77,8 +80,8 @@ public class GitFilesRepositoryImpl implements GitFilesRepository { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(queryBuilder) .highlighter(highlightBuilder) - .size(pageSize) - .from((searchInputDTO.getPage() - 1) * pageSize); + .size(searchInputDTO.getPageSize()) + .from((searchInputDTO.getPage() - 1) * searchInputDTO.getPageSize()); //.fetchSource(includes, excludes); searchRequest.source(sourceBuilder); diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..2c2dc39abb2b8d6a8bf368fd3472a9824aad3881 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepository.java @@ -0,0 +1,11 @@ +package at.ac.uibk.gitsearch.repository.search; + +import at.ac.uibk.gitsearch.domain.Likes; +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; + + +/** + * Spring Data Elasticsearch repository for the {@link Likes} entity. + */ +public interface LikesSearchRepository extends ElasticsearchRepository<Likes, Long> { +} diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java index bd8182de62f02fcf15a772fe92f6d0316befdd1b..2a21de546f6b9ba2a595fc1aa937b0cb4b69cee5 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java @@ -1,6 +1,7 @@ package at.ac.uibk.gitsearch.repository.search; import java.io.IOException; +import java.time.Instant; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -20,8 +21,13 @@ import java.util.stream.Stream; import javax.annotation.PostConstruct; import javax.ws.rs.NotFoundException; +import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO.Person; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; @@ -48,10 +54,6 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import at.ac.uibk.gitsearch.config.ApplicationProperties; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.Person; @Repository public class MetaDataRepository { @@ -77,8 +79,6 @@ public class MetaDataRepository { */ private Map<String, Map<String, Map<String, Integer>>> cachedCompletions = null; - private static final int MAX_AUTO_COMPLETION_RESULTS = 10; - /** * returns all keyword autocompletes for keyWord * @@ -86,8 +86,8 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getKeywordsAutoComplete(String keyWordPrefix) throws IOException { - return getFieldAutoCompletion(keyWordPrefix, SearchRepositoryConstants.METADATA_KEYWORDS); + public List<AutoCompleteEntry> getKeywordsAutoComplete(String keyWordPrefix, int max) throws IOException { + return getFieldAutoCompletion(keyWordPrefix, SearchRepositoryConstants.METADATA_KEYWORDS, max); } /** @@ -97,8 +97,8 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getFormatsAutoComplete(String formatPrefix) throws IOException { - return getFieldAutoCompletion(formatPrefix, SearchRepositoryConstants.METADATA_FORMATS); + public List<AutoCompleteEntry> getFormatsAutoComplete(String formatPrefix, int max) throws IOException { + return getFieldAutoCompletion(formatPrefix, SearchRepositoryConstants.METADATA_FORMATS, max); } /** @@ -108,10 +108,10 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(String progammingLanguagePrefix) + public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(String progammingLanguagePrefix, int max) throws IOException { return getFieldAutoCompletion(progammingLanguagePrefix, - SearchRepositoryConstants.METADATA_PROGRAMMING_LANGUAGES); + SearchRepositoryConstants.METADATA_PROGRAMMING_LANGUAGES, max); } /** @@ -121,8 +121,8 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getCreatorAutoComplete(String creatorPrefix) throws IOException { - return getFieldAutoCompletion(creatorPrefix, SearchRepositoryConstants.METADATA_CREATOR); + public List<AutoCompleteEntry> getCreatorAutoComplete(String creatorPrefix, int max) throws IOException { + return getFieldAutoCompletion(creatorPrefix, SearchRepositoryConstants.METADATA_CREATOR, max); } /** @@ -132,8 +132,8 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getContributorAutoComplete(String contributorPrefix) throws IOException { - return getFieldAutoCompletion(contributorPrefix, SearchRepositoryConstants.METADATA_CONTRIBUTOR); + public List<AutoCompleteEntry> getContributorAutoComplete(String contributorPrefix, int max) throws IOException { + return getFieldAutoCompletion(contributorPrefix, SearchRepositoryConstants.METADATA_CONTRIBUTOR, max); } /** @@ -143,9 +143,9 @@ public class MetaDataRepository { * @return * @throws IOException */ - public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix) throws IOException { - final List<AutoCompleteEntry> contributors = getContributorAutoComplete(contributorPrefix); - final List<AutoCompleteEntry> creatorAutoComplete = getCreatorAutoComplete(contributorPrefix); + public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix, int max) throws IOException { + final List<AutoCompleteEntry> contributors = getContributorAutoComplete(contributorPrefix, max); + final List<AutoCompleteEntry> creatorAutoComplete = getCreatorAutoComplete(contributorPrefix, max); // merging for (AutoCompleteEntry creator : creatorAutoComplete) { contributors.stream().filter(entry -> entry.getTarget().equals(creator.getTarget())).findAny() @@ -161,18 +161,19 @@ public class MetaDataRepository { /** * returns a list of hits together with the number of occurences * - * @param keyWordPrefix - * @param metaDataField + * @param prefix the prefix + * @param metaDataField the meta data field + * @param maxCount the maximum of hits, returned * @return * @throws IOException * @throws JsonProcessingException * @throws JsonMappingException */ - private List<AutoCompleteEntry> getFieldAutoCompletion(String keyWordPrefix, final String metaDataField) + private List<AutoCompleteEntry> getFieldAutoCompletion(String prefix, final String metaDataField, int maxCount) throws IOException, JsonProcessingException, JsonMappingException { fillAutoCompletion(); - String lcKeyWordPrefix = keyWordPrefix.toLowerCase(); + String lcKeyWordPrefix = prefix.toLowerCase(); // höllisch kompliziert und höllisch unverständlich mit Streams :-) // idea // 1. Filtern nach Prefix @@ -188,7 +189,7 @@ public class MetaDataRepository { .flatMap(e -> e.getValue().entrySet().stream()) // Stream< Map<String, Integer>> with duplicates .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Integer::max)); return combinedHits.entrySet().stream().sorted((e1, e2) -> e2.getValue() - e1.getValue()) - .limit(MAX_AUTO_COMPLETION_RESULTS).map(s -> new AutoCompleteEntry(s.getKey(), s.getValue())) + .limit(maxCount).map(s -> new AutoCompleteEntry(s.getKey(), s.getValue())) .collect(Collectors.toList()); // Map.Entry<String, // Map<String, // Integer>> @@ -252,9 +253,7 @@ public class MetaDataRepository { SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + ObjectMapper objectMapper = getSearchResultObjectMapper(); tryNextPage = searchResponse.getHits().getHits().length > 0; @@ -286,6 +285,17 @@ public class MetaDataRepository { cachedCompletions = reloadedCachedCompletions; } + /** + * returns a preconfigured object mapper + * @return + */ + public static ObjectMapper getSearchResultObjectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return objectMapper; + } + private static void addTo(Map<String, Map<String, Integer>> completionMap, List<String> tokenList, String target) { tokenList.forEach(token -> { String lowercaseToken = token.toLowerCase(); @@ -314,6 +324,8 @@ public class MetaDataRepository { } return result; } + + /** * returns the hits from the meta data search index for the input query @@ -326,7 +338,7 @@ public class MetaDataRepository { * @return the search hits. * @throws IOException when search index is not available. */ - public SearchResultsDTO pageDetails(SearchInputDTO searchInputDTO, int pageSize, Optional<User> user) + public SearchResultsDTO pageDetails(org.codeability.sharing.plugins.api.search.SearchInputDTO searchInputDTO, Optional<User> user) throws IOException { fillAutoCompletion(); @@ -360,6 +372,10 @@ public class MetaDataRepository { .should(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_FORMATS, term))); if (formatBuilder.hasClauses()) queryBuilder.must(formatBuilder); + + if(!StringUtils.isEmpty(searchInputDTO.getMetadata().getParentId())) { + queryBuilder.must(QueryBuilders.matchQuery(SearchRepositoryConstants.FILE_PARENTID, searchInputDTO.getMetadata().getParentId())); + } BoolQueryBuilder authorBuilder = QueryBuilders.boolQuery(); if (searchInputDTO.getMetadata().getAuthor() != null) @@ -401,8 +417,8 @@ public class MetaDataRepository { .boundaryScannerType(HighlightBuilder.BoundaryScannerType.SENTENCE).fragmentSize(FRAGMENT_SIZE); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); - sourceBuilder.query(queryBuilder).highlighter(highlightBuilder).size(pageSize) - .from((searchInputDTO.getPage()) * pageSize); + sourceBuilder.query(queryBuilder).highlighter(highlightBuilder).size(searchInputDTO.getPageSize()) + .from((searchInputDTO.getPage()) * searchInputDTO.getPageSize()); searchRequest.source(sourceBuilder); @@ -477,8 +493,22 @@ public class MetaDataRepository { exec.accept(st.nextToken()); } } - + public SearchResultsDTO getExercisesById(Stream<String> exerciseIds, Optional<User> user, int page, int pageSize) { + return getExercisesById(exerciseIds, user, page, pageSize, null); + } + + + /** + * returns all exercises, referred by their ids, changed after since (if not null) + * @param exerciseIds a stream of exercise ids + * @param user the user: needed for authorization + * @param page the page + * @param pageSize the page size + * @param since an instant since when the exercise was last changed (or null, if not relevant) + * @return + */ + public SearchResultsDTO getExercisesById(Stream<String> exerciseIds, Optional<User> user, int page, int pageSize, Instant since) { SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_METADATA); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); @@ -495,6 +525,9 @@ public class MetaDataRepository { } queryBuilder.must(idQueryBuilder); + if(since != null) { + queryBuilder.must(QueryBuilders.rangeQuery(SearchRepositoryConstants.PROJECT_LASTACTIVITYAT).gte(since) /*.lte(Instant.now()) */); + } addAuthorizationQuery(user, queryBuilder); @@ -506,10 +539,6 @@ public class MetaDataRepository { try { SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - return parseSearchResponse(searchResponse); } catch (JsonProcessingException e) { @@ -519,7 +548,19 @@ public class MetaDataRepository { } } - public SearchResultDTO getExerciseById(String exerciseId) throws NotFoundException { + /** + * just a convenience method + * @param exerciseId the parsed exercise id + * @param user the user (if authenticated) + * @return search result + * @throws NotFoundException if not found + */ + public SearchResultDTO getExerciseById(ExerciseId exerciseId, Optional<User> user) throws NotFoundException { + return getExerciseById(exerciseId.toString(), user); + } + + + public SearchResultDTO getExerciseById(String exerciseId, Optional<User> user) throws NotFoundException { SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_METADATA); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); @@ -528,6 +569,7 @@ public class MetaDataRepository { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(queryBuilder).size(10); + addAuthorizationQuery(user, queryBuilder); searchRequest.source(sourceBuilder); diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java index fe458ad6554892d56b9c898455fecc715e9995fa..ec565280af927f98085a6a68bf62294de4a9146b 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java @@ -29,9 +29,11 @@ public final class SearchRepositoryConstants { public static final String METADATA_TYPE = "metadata.type"; public static final String METADATA_LANGUAGE = "metadata.language"; + public static final String FILE_PARENTID = "file.parentId"; public static final String PROJECT_VISIBILITY = "project.visibility"; public static final String PROJECT_NAMESPACE = "project.namespace"; + public static final String PROJECT_LASTACTIVITYAT = "project.last_activity_at"; private SearchRepositoryConstants() { // just a list of constants diff --git a/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java b/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java index 70460aabf53784b52388f0eae4da8b79ace61c9e..4609737bdf4762c44e5dd0d7ffc392c945873f06 100644 --- a/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java +++ b/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java @@ -1,6 +1,9 @@ package at.ac.uibk.gitsearch.security.oauth2; import java.time.Instant; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.function.Consumer; import org.apache.logging.log4j.LogManager; @@ -46,10 +49,21 @@ public class UserDetailsFetcher { boolean modified = false; gitLabApi.enableRequestResponseLogging(); // List<Project> memberProjects = gitLabApi.getProjectApi().getMemberProjects(); + final Set<String> authorities = new HashSet<>(); + authorities.addAll(u.getAuthorities()); + @SuppressWarnings("unchecked") + final List<String> gitLabGroups = (List<String>)oidcUser.getAttribute("groups"); + authorities.addAll(gitLabGroups); + User gitUser = gitLabApi.getUserApi().getCurrentUser(); + modified |= updateAttribute(gitUser.getAvatarUrl(),u.getImageUrl(), u::setImageUrl); modified |= updateAttribute(gitUser.getEmail(), u.getEmail(), u::setEmail); modified |= updateAttribute(gitUser.getName(),u.getLastName(), u::setLastName); + if(!u.getAuthorities().equals(authorities)) { + u.setAuthorities(authorities); + modified = true; + } // modified |= updateAttribute(gitUser.getUsername(),u.getLogin(), u::setLogin); diff --git a/src/main/java/at/ac/uibk/gitsearch/service/GitlabService.java b/src/main/java/at/ac/uibk/gitsearch/service/GitlabService.java index 43da23e0dfa9dee02194591bf4bfc3f384ada225..2e2570cc955564bafb5c7955c4f6bc8dc8ecf440 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/GitlabService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/GitlabService.java @@ -11,6 +11,11 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; +import org.gitlab4j.api.GitLabApi; +import org.gitlab4j.api.GitLabApiException; +import org.gitlab4j.api.ProjectApi; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Repository; @@ -37,7 +42,6 @@ import org.apache.commons.io.FileUtils; import at.ac.uibk.gitsearch.repository.gitlab.GitLabRepository; import at.ac.uibk.gitsearch.repository.search.MetaDataRepository; import at.ac.uibk.gitsearch.security.jwt.TokenProvider; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; import javax.naming.AuthenticationException; @@ -164,11 +168,15 @@ public class GitlabService { } - public InputStream getRepositoryFile(String projectId, String filePath) throws GitLabApiException, IOException { - final SearchResultDTO exercise = metaDataRepository.getExerciseById(projectId); - final GitLabApi gitLabApi = gitLabRepository.getGitLabApi(tokenProvider.getGitLabAccessInfo()); - RepositoryFile file = gitLabApi.getRepositoryFileApi().getFile(exercise.getProject().getProjectId(), filePath, "master"); - return new ByteArrayInputStream(file.getDecodedContentAsBytes()); + public InputStream getRepositoryFile(ExerciseId exerciseId, String filePath) + throws GitLabApiException, IOException { + + final SearchResultDTO exercise = metaDataRepository.getExerciseById(exerciseId, tokenProvider.getCurrentPrincipal()); + final GitLabApi gitLabApi = gitLabRepository.getGitLabApi(tokenProvider.getGitLabAccessInfo()); + RepositoryFile file; + file = gitLabApi.getRepositoryFileApi().getFile(exercise.getProject().getProjectId(), + exerciseId.extendPath(filePath), "master"); + return new ByteArrayInputStream(file.getDecodedContentAsBytes()); } /** diff --git a/src/main/java/at/ac/uibk/gitsearch/service/LikesQueryService.java b/src/main/java/at/ac/uibk/gitsearch/service/LikesQueryService.java new file mode 100644 index 0000000000000000000000000000000000000000..ece5f1bce5b04fccd0503be718afe9cd755a194d --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/service/LikesQueryService.java @@ -0,0 +1,104 @@ +package at.ac.uibk.gitsearch.service; + +import java.util.List; + +import javax.persistence.criteria.JoinType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import io.github.jhipster.service.QueryService; + +import at.ac.uibk.gitsearch.domain.Likes; +import at.ac.uibk.gitsearch.domain.*; // for static metamodels +import at.ac.uibk.gitsearch.repository.LikesRepository; +import at.ac.uibk.gitsearch.repository.search.LikesSearchRepository; +import at.ac.uibk.gitsearch.service.dto.LikesCriteria; + +/** + * Service for executing complex queries for {@link Likes} entities in the database. + * The main input is a {@link LikesCriteria} which gets converted to {@link Specification}, + * in a way that all the filters must apply. + * It returns a {@link List} of {@link Likes} or a {@link Page} of {@link Likes} which fulfills the criteria. + */ +@Service +@Transactional(readOnly = true) +public class LikesQueryService extends QueryService<Likes> { + + private final Logger log = LoggerFactory.getLogger(LikesQueryService.class); + + private final LikesRepository likesRepository; + + private final LikesSearchRepository likesSearchRepository; + + public LikesQueryService(LikesRepository likesRepository, LikesSearchRepository likesSearchRepository) { + this.likesRepository = likesRepository; + this.likesSearchRepository = likesSearchRepository; + } + + /** + * Return a {@link List} of {@link Likes} which matches the criteria from the database. + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public List<Likes> findByCriteria(LikesCriteria criteria) { + log.debug("find by criteria : {}", criteria); + final Specification<Likes> specification = createSpecification(criteria); + return likesRepository.findAll(specification); + } + + /** + * Return a {@link Page} of {@link Likes} which matches the criteria from the database. + * @param criteria The object which holds all the filters, which the entities should match. + * @param page The page, which should be returned. + * @return the matching entities. + */ + @Transactional(readOnly = true) + public Page<Likes> findByCriteria(LikesCriteria criteria, Pageable page) { + log.debug("find by criteria : {}, page: {}", criteria, page); + final Specification<Likes> specification = createSpecification(criteria); + return likesRepository.findAll(specification, page); + } + + /** + * Return the number of matching entities in the database. + * @param criteria The object which holds all the filters, which the entities should match. + * @return the number of matching entities. + */ + @Transactional(readOnly = true) + public long countByCriteria(LikesCriteria criteria) { + log.debug("count by criteria : {}", criteria); + final Specification<Likes> specification = createSpecification(criteria); + return likesRepository.count(specification); + } + + /** + * Function to convert {@link LikesCriteria} to a {@link Specification} + * @param criteria The object which holds all the filters, which the entities should match. + * @return the matching {@link Specification} of the entity. + */ + protected Specification<Likes> createSpecification(LikesCriteria criteria) { + Specification<Likes> specification = Specification.where(null); + if (criteria != null) { + if (criteria.getId() != null) { + specification = specification.and(buildRangeSpecification(criteria.getId(), Likes_.id)); + } + if (criteria.getDate() != null) { + specification = specification.and(buildRangeSpecification(criteria.getDate(), Likes_.date)); + } + if (criteria.getUserID() != null) { + specification = specification.and(buildRangeSpecification(criteria.getUserID(), Likes_.userID)); + } + // if (criteria.getProjectID() != null) { + // specification = specification.and(buildRangeSpecification(criteria.getProjectID(), Likes_.projectID)); + // } + } + return specification; + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/LikesService.java b/src/main/java/at/ac/uibk/gitsearch/service/LikesService.java new file mode 100644 index 0000000000000000000000000000000000000000..608b20f909514e21c6e478db1b71240bbb6b75d8 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/service/LikesService.java @@ -0,0 +1,117 @@ +package at.ac.uibk.gitsearch.service; + +import at.ac.uibk.gitsearch.domain.Likes; +import at.ac.uibk.gitsearch.repository.LikesRepository; +import at.ac.uibk.gitsearch.repository.search.LikesSearchRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import static org.elasticsearch.index.query.QueryBuilders.*; + +/** + * Service Implementation for managing {@link Likes}. + */ +@Service +@Transactional +public class LikesService { + + private final Logger log = LoggerFactory.getLogger(LikesService.class); + + private final LikesRepository likesRepository; + + private final LikesSearchRepository likesSearchRepository; + + public LikesService(LikesRepository likesRepository, LikesSearchRepository likesSearchRepository) { + this.likesRepository = likesRepository; + this.likesSearchRepository = likesSearchRepository; + } + + /** + * Save a likes. + * + * @param likes the entity to save. + * @return the persisted entity. + */ + public Likes save(Likes likes) { + log.debug("Request to save Likes : {}", likes); + Likes result = likesRepository.save(likes); + likesSearchRepository.save(result); + return result; + } + + /** + * Get all the likes. + * + * @return the list of entities. + */ + @Transactional(readOnly = true) + public List<Likes> findAll() { + log.debug("Request to get all Likes"); + return likesRepository.findAll(); + } + + + /** + * Get one likes by id. + * + * @param id the id of the entity. + * @return the entity. + */ + @Transactional(readOnly = true) + public Optional<Likes> findOne(Long id) { + log.debug("Request to get Likes : {}", id); + return likesRepository.findById(id); + } + + /** + * Delete the likes by id. + * + * @param id the id of the entity. + */ + public void delete(Long id) { + log.debug("Request to delete Likes : {}", id); + likesRepository.deleteById(id); + likesSearchRepository.deleteById(id); + } + + public void deleteByUserIDandExerciseID(Integer userID, String exerciseID) { + Likes like = findLikesByUserIDandExerciseID(userID, exerciseID); + if (like.getId() != null){ + delete(like.getId()); + } + } + + /** + * Search for the likes corresponding to the query. + * + * @param query the query of the search. + * @return the list of entities. + */ + @Transactional(readOnly = true) + public List<Likes> search(String query) { + log.debug("Request to search Likes for query {}", query); + return StreamSupport + .stream(likesSearchRepository.search(queryStringQuery(query)).spliterator(), false) + .collect(Collectors.toList()); + } + + @Transactional(readOnly = true) + public Likes findLikesByUserIDandExerciseID(Integer userID, String exerciseID) { + log.debug("Request to get Likes by User id and project id : {} {}", userID, exerciseID); + return likesRepository.findLikesByUserIDandExerciseID(userID, exerciseID); + } + + @Transactional(readOnly = true) + public Integer findNumberOfLikesByExerciseID(String exerciseID) { + log.debug("Request to get number of Likes by project id : {}", exerciseID); + return likesRepository.findNumberOfLikesByExerciseID(exerciseID); + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/MailService.java b/src/main/java/at/ac/uibk/gitsearch/service/MailService.java index a173c3e1fa3d052b49dc13db323293479ac3e92a..7b39f444f598c9283748dd50767c3f294b0db479 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/MailService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/MailService.java @@ -1,14 +1,23 @@ package at.ac.uibk.gitsearch.service; import at.ac.uibk.gitsearch.domain.User; - +import at.ac.uibk.gitsearch.domain.UserWatchList; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; +import at.ac.uibk.gitsearch.repository.UserRepository; import io.github.jhipster.config.JHipsterProperties; import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.MessageSource; @@ -16,6 +25,7 @@ import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.thymeleaf.context.Context; import org.thymeleaf.spring5.SpringTemplateEngine; @@ -41,18 +51,34 @@ public class MailService { private final MessageSource messageSource; private final SpringTemplateEngine templateEngine; + + private final UserRepository userRepository; + + private final UserWatchListService userWatchListService; public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender, - MessageSource messageSource, SpringTemplateEngine templateEngine) { + MessageSource messageSource, SpringTemplateEngine templateEngine, + UserRepository userRepository, UserWatchListService userWatchListService) { this.jHipsterProperties = jHipsterProperties; this.javaMailSender = javaMailSender; this.messageSource = messageSource; this.templateEngine = templateEngine; + this.userRepository = userRepository; + this.userWatchListService = userWatchListService; } + /** + * send email + * @param to + * @param subject + * @param content + * @param isMultipart + * @param isHtml + * @return true if mail was successfully sent. + */ @Async - public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { + public boolean sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", isMultipart, isHtml, to, subject, content); @@ -66,8 +92,10 @@ public class MailService { message.setText(content, isHtml); javaMailSender.send(mimeMessage); log.debug("Sent email to User '{}'", to); + return true; } catch (MailException | MessagingException e) { log.warn("Email could not be sent to user '{}'", to, e); + return false; } } @@ -85,6 +113,74 @@ public class MailService { String subject = messageSource.getMessage(titleKey, null, locale); sendEmail(user.getEmail(), subject, content, false, true); } + + /** + * Send info mails to every user, iff he/she was scheduled for sending. + * This is scheduled to get fired everyday, at 05:00 (am). + */ + @Scheduled(cron = "0 0 5 * * ?") + public void sendInfoMails() { + + for(User user: userRepository.findAll()) { + sendInfoMail(user, false /* only if content */); + } + } + + /** + * send an info mail to user, if relevant. + * For test purposes mainly. + * @param user the user + * @param force force mail sending, even if mail is empty. + * @return true if mail was sent. + */ + public boolean sendInfoMail(User user, boolean force) { + boolean hasContent = force; + Locale locale = Locale.forLanguageTag(user.getLangKey()); + Context context = new Context(locale); + context.setVariable(USER, user); + context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); + Instant lastMailSending = user.getLastMailSent(); + if (lastMailSending == null) { + lastMailSending = user.getLastLogin(); + if (lastMailSending == null) { + lastMailSending = Instant.ofEpochMilli(0); // should only happen during testing + } + user.setLastMailSent(lastMailSending); + user = userRepository.save(user); + } + Map<SearchResultDTO, UserWatchList> findChangesSince = null; + + findChangesSince = userWatchListService.findChangesSince(lastMailSending, user); + + + boolean dailyRelevant = findChangesSince.entrySet().stream().anyMatch(entry -> entry.getValue().getCheckFrequency() == CheckFrequency.DAILY); + boolean weeklyRelevant = findChangesSince.entrySet().stream().anyMatch(entry -> entry.getValue().getCheckFrequency() == CheckFrequency.WEEKLY); + boolean monthlyRelevant = findChangesSince.entrySet().stream().anyMatch(entry -> entry.getValue().getCheckFrequency() == CheckFrequency.MONTHLY); + + boolean shouldSend = + (dailyRelevant && lastMailSending.isBefore(CheckFrequency.DAILY.getChangedBefore())) || + (weeklyRelevant && lastMailSending.isBefore(CheckFrequency.WEEKLY.getChangedBefore())) || + (monthlyRelevant && lastMailSending.isBefore(CheckFrequency.MONTHLY.getChangedBefore())); + + + + hasContent = hasContent || shouldSend; + + if(hasContent) { + final List<Entry<SearchResultDTO, UserWatchList>> changedExercises = findChangesSince.entrySet().stream().collect(Collectors.toList()); + context.setVariable("watchListUpdates", changedExercises); + String content = templateEngine.process("mail/info/infoEmail", context); + String subject = messageSource.getMessage("email.info.title", null, locale); + boolean success = sendEmail(user.getEmail(), subject, content, false, true); + if(success) { + user.setLastMailSent(Instant.now()); + userRepository.save(user); + return true; + } + } + return false; + } + @Async public void sendActivationEmail(User user) { diff --git a/src/main/java/at/ac/uibk/gitsearch/service/PluginManagementService.java b/src/main/java/at/ac/uibk/gitsearch/service/PluginManagementService.java index b9a41c03c2d27ab0af47c33329d149c735c496b8..11ba91a582b5a3b29732d092a242781cffbfda45 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/PluginManagementService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/PluginManagementService.java @@ -2,7 +2,6 @@ package at.ac.uibk.gitsearch.service; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.Charset; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -28,6 +27,8 @@ import javax.ws.rs.core.MediaType; import org.apache.commons.lang3.StringUtils; import org.codeability.sharing.plugins.api.SharingPluginConfig; import org.codeability.sharing.plugins.api.SharingPluginConfig.Action; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO.PluginActionInfo; import org.glassfish.jersey.client.ClientConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,8 +40,6 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import at.ac.uibk.gitsearch.config.ApplicationProperties; import at.ac.uibk.gitsearch.config.ApplicationProperties.RegisteredConnector; import at.ac.uibk.gitsearch.service.PluginManagementService.ConnectorConfigWrapper.ActionWrapper; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO.PluginActionInfo; /** * management services for plugins. @@ -107,8 +106,6 @@ public class PluginManagementService { } } - private final Charset UTF8_CS = Charset.forName("UTF-8"); - /** * this is just a wrapper, to provide a more efficient access to the original diff --git a/src/main/java/at/ac/uibk/gitsearch/service/SearchService.java b/src/main/java/at/ac/uibk/gitsearch/service/SearchService.java index 1dad90510fd53001e48256b0c0ba2a6939023ef3..14bc90c8c0a33e3dcfaf81a23a00354b5bead59f 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/SearchService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/SearchService.java @@ -12,6 +12,10 @@ import java.util.Optional; import java.util.stream.Stream; import java.util.zip.ZipInputStream; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.gitlab4j.api.GitLabApi; import org.gitlab4j.api.GitLabApiException; import org.slf4j.Logger; @@ -25,9 +29,6 @@ import at.ac.uibk.gitsearch.repository.gitlab.GitLabRepository; import at.ac.uibk.gitsearch.repository.search.MetaDataRepository; import at.ac.uibk.gitsearch.security.jwt.TokenProvider; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; /** * Service for exercise/course search results @@ -60,8 +61,8 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getKeywordsAutoComplete(String keyWordPrefix) throws IOException { - return metaDataRepository.getKeywordsAutoComplete(keyWordPrefix); + public List<AutoCompleteEntry> getKeywordsAutoComplete(String keyWordPrefix, int max) throws IOException { + return metaDataRepository.getKeywordsAutoComplete(keyWordPrefix, max); } /** @@ -71,8 +72,8 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getFormatsAutoComplete(String formatPrefix) throws IOException { - return metaDataRepository.getFormatsAutoComplete(formatPrefix); + public List<AutoCompleteEntry> getFormatsAutoComplete(String formatPrefix, int max) throws IOException { + return metaDataRepository.getFormatsAutoComplete(formatPrefix, max); } /** @@ -82,8 +83,8 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getCreatorAutoComplete(String creatorPrefix) throws IOException { - return metaDataRepository.getCreatorAutoComplete(creatorPrefix); + public List<AutoCompleteEntry> getCreatorAutoComplete(String creatorPrefix, int max) throws IOException { + return metaDataRepository.getCreatorAutoComplete(creatorPrefix, max); } /** @@ -93,8 +94,8 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getContributorAutoComplete(String contributorPrefix) throws IOException { - return metaDataRepository.getContributorAutoComplete(contributorPrefix); + public List<AutoCompleteEntry> getContributorAutoComplete(String contributorPrefix, int max) throws IOException { + return metaDataRepository.getContributorAutoComplete(contributorPrefix, max); } /** @@ -104,8 +105,8 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix) throws IOException { - return metaDataRepository.getContributorCreatorAutoComplete(contributorPrefix); + public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix, int max) throws IOException { + return metaDataRepository.getContributorCreatorAutoComplete(contributorPrefix, max); } /** @@ -115,9 +116,9 @@ public class SearchService { * @return * @throws IOException */ - public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(String programmingLanguagePrefix) + public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(String programmingLanguagePrefix, int max) throws IOException { - return metaDataRepository.getProgrammingLanguageAutoComplete(programmingLanguagePrefix); + return metaDataRepository.getProgrammingLanguageAutoComplete(programmingLanguagePrefix, max); } /** @@ -127,11 +128,11 @@ public class SearchService { * @param first the index of the first record to be returned * @param pageLength the number of records on each page */ - public SearchResultsDTO searchResultPage(SearchInputDTO searchInput, int pageLength) throws IOException { + public SearchResultsDTO searchResultPage(SearchInputDTO searchInput) throws IOException { final Optional<User> principal = tokenProvider.getCurrentPrincipal(); log.debug("Searchrequest for {} ", searchInput); - final SearchResultsDTO pageDetails = metaDataRepository.pageDetails(searchInput, pageLength, + final SearchResultsDTO pageDetails = metaDataRepository.pageDetails(searchInput, principal); pageDetails.getSearchResult().stream() @@ -212,18 +213,18 @@ public class SearchService { } - public File exportExercise(long projectId) throws IOException { - // TODO projectId and exercise Id are mixed up here! + public File exportExercise(String exerciseId) throws IOException { try{ - final GitLabApi gitLabApi = gitLabRepository.getGitLabApi(tokenProvider.getGitLabAccessInfo()); - InputStream inputFile = shoppingBasketService.rePackageGitLabProjectZip(new ZipInputStream(gitLabApi.getRepositoryApi().getRepositoryArchive((int)projectId, "HEAD", "zip")), "from project " + projectId); - File file = new File("exercise" + projectId + ".zip"); - - return copyInputStreamToFile(inputFile, file);} - catch(GitLabApiException exception){ - log.error(exception.getMessage()); - return null; - } + final SearchResultDTO exercise = metaDataRepository.getExerciseById(exerciseId, tokenProvider.getCurrentPrincipal()); + final GitLabApi gitLabApi = gitLabRepository.getGitLabApi(tokenProvider.getGitLabAccessInfo()); + InputStream inputFile = shoppingBasketService.rePackageGitLabProjectZip(new ZipInputStream(gitLabApi.getRepositoryApi().getRepositoryArchive(exercise.getProject().getProject_id(), "HEAD", "zip")), "from project " + exerciseId); + File file = new File("exercise" + exerciseId + ".zip"); + + return copyInputStreamToFile(inputFile, file);} + catch(GitLabApiException exception){ + log.error(exception.getMessage()); + return null; + } } private File copyInputStreamToFile(InputStream inputStream, File file) throws IOException { @@ -238,5 +239,15 @@ public class SearchService { return file; } } + + public Optional<SearchResultDTO> findExerciseById(ExerciseId exerciseId) { + try { + SearchResultDTO result = metaDataRepository.getExerciseById(exerciseId.toString(), tokenProvider.getCurrentPrincipal()); + return Optional.ofNullable(result); + } catch (javax.ws.rs.NotFoundException e) { + log.error("exercise with id {} not found?", exerciseId, e); + return Optional.empty(); + } + } } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java b/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java index 1ab304243c41408f82da6e77ab1f80913206e2f3..7965405e89635716d38b93016a0db4eec51dddc6 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java @@ -16,6 +16,7 @@ import java.util.zip.ZipOutputStream; import org.checkerframework.checker.nullness.qual.Nullable; import org.codeability.sharing.plugins.api.ShoppingBasket; import org.codeability.sharing.plugins.api.ShoppingBasket.UserInfo; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; import org.gitlab4j.api.GitLabApi; import org.gitlab4j.api.GitLabApiException; import org.slf4j.Logger; @@ -36,7 +37,6 @@ import com.google.common.cache.LoadingCache; import at.ac.uibk.gitsearch.repository.gitlab.GitLabRepository; import at.ac.uibk.gitsearch.security.jwt.TokenProvider.GitLabAccessInfo; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; /** * Service for exercise/course search results diff --git a/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java b/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java index eac85d46461d86eb97eec6e2614a0af10b895319..0d74db43a9c6a912da515ca34d2170bd2bb7a81a 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java @@ -54,5 +54,5 @@ public interface StatisticsService { */ Page<StatisticsDTO> search(String query, Pageable pageable); - Optional<StatisticsDTO> findOneByExerciseID(Long id); + Optional<StatisticsDTO> findOneByExerciseID(String id); } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/UserService.java b/src/main/java/at/ac/uibk/gitsearch/service/UserService.java index 53812dfe261b38d5d0c16430aba07c2f670c8c52..399a637758e0e3eff22d4955282924af0de07a4d 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/UserService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/UserService.java @@ -1,16 +1,13 @@ package at.ac.uibk.gitsearch.service; -import at.ac.uibk.gitsearch.config.Constants; -import at.ac.uibk.gitsearch.domain.Authority; -import at.ac.uibk.gitsearch.domain.User; -import at.ac.uibk.gitsearch.repository.AuthorityRepository; -import at.ac.uibk.gitsearch.repository.UserRepository; -import at.ac.uibk.gitsearch.repository.search.UserSearchRepository; -import at.ac.uibk.gitsearch.security.AuthoritiesConstants; -import at.ac.uibk.gitsearch.security.SecurityUtils; -import at.ac.uibk.gitsearch.service.dto.UserDTO; - -import io.github.jhipster.security.RandomUtil; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,14 +15,21 @@ import org.springframework.cache.CacheManager; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; +import at.ac.uibk.gitsearch.config.Constants; +import at.ac.uibk.gitsearch.domain.Authority; +import at.ac.uibk.gitsearch.domain.User; +import at.ac.uibk.gitsearch.repository.AuthorityRepository; +import at.ac.uibk.gitsearch.repository.UserRepository; +import at.ac.uibk.gitsearch.repository.search.UserSearchRepository; +import at.ac.uibk.gitsearch.security.AuthoritiesConstants; +import at.ac.uibk.gitsearch.security.SecurityUtils; +import at.ac.uibk.gitsearch.service.dto.UserDTO; +import io.github.jhipster.security.RandomUtil; /** * Service class for managing users. @@ -161,19 +165,30 @@ public class UserService { user.setResetDate(Instant.now()); user.setActivated(true); if (userDTO.getAuthorities() != null) { - Set<Authority> authorities = userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toSet()); - user.setAuthorities(authorities); + final List<Authority> allAuthorities = authorityRepository.findAll(); + + final Set<Authority> userAuthorities = userDTO.getAuthorities().stream().map(Authority::new).collect(Collectors.toSet()); + // insert new authorities into managedAuthoritiesTable + userAuthorities.stream().filter(auth -> !allAuthorities.contains(auth)) + .forEach(authorityRepository::save); + user.setAuthorities(userAuthorities); } + userRepository.save(user); userSearchRepository.save(user); this.clearUserCaches(user); log.debug("Created Information for User: {}", user); return user; } + + + /** + * cleans up unused authorities every day at 4:30 + */ + @Scheduled(cron = "0 30 4 * * ?") + public void cleanUpUnusedAuthorities() { + authorityRepository.deleteUnusedAuthorities(); + } /** * Update all information for a specific user, and return the modified user. @@ -197,13 +212,13 @@ public class UserService { user.setImageUrl(userDTO.getImageUrl()); user.setActivated(userDTO.isActivated()); user.setLangKey(userDTO.getLangKey()); - Set<Authority> managedAuthorities = user.getAuthorities(); - managedAuthorities.clear(); - userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .forEach(managedAuthorities::add); + final List<Authority> allAuthorities = authorityRepository.findAll(); + + final Set<Authority> userAuthorities = userDTO.getAuthorities().stream().map(authString -> new Authority(authString)).collect(Collectors.toSet()); + // insert new authorities into managedAuthoritiesTable + userAuthorities.stream().filter(auth -> !allAuthorities.contains(auth)) + .forEach(auth -> authorityRepository.save(auth)); + user.setAuthorities(userAuthorities); userSearchRepository.save(user); this.clearUserCaches(user); log.debug("Changed Information for User: {}", user); @@ -309,7 +324,20 @@ public class UserService { public List<String> getAuthorities() { return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList()); } + + public void updateLastLogin(Long userId) { + final User user = userRepository.getOne(userId); + user.setLastLogin(Instant.now()); + userRepository.save(user); + } + public void updateLastLogin(String userName) { + final Optional<User> userO = userRepository.findOneByLogin(userName); + userO.ifPresent(user -> { + user.setLastLogin(Instant.now()); + userRepository.save(user); + }); + } private void clearUserCaches(User user) { Objects.requireNonNull(cacheManager.getCache(UserRepository.USERS_BY_LOGIN_CACHE)).evict(user.getLogin()); @@ -317,4 +345,16 @@ public class UserService { Objects.requireNonNull(cacheManager.getCache(UserRepository.USERS_BY_EMAIL_CACHE)).evict(user.getEmail()); } } + + public org.springframework.security.core.userdetails.User convertToSecurityUser(User u) { + return new org.springframework.security.core.userdetails.User(u.getLogin(), "unusedPassword", + u.getAuthorities().stream().map(auth -> new SimpleGrantedAuthority(auth.getName())). + collect(Collectors.toList()) + ); + } + + public Optional<org.springframework.security.core.userdetails.User> convertToSecurityUser(Optional<User> u) { + return u.map(this::convertToSecurityUser); + } + } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListQueryService.java b/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListQueryService.java index f03c499e02cec2ae76a11ea362ff4bf321a56bd6..4462091776b9ca689825a719b9f655d5452351e6 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListQueryService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListQueryService.java @@ -94,9 +94,12 @@ public class UserWatchListQueryService extends QueryService<UserWatchList> { if (criteria.getName() != null) { specification = specification.and(buildStringSpecification(criteria.getName(), UserWatchList_.name)); } - if (criteria.getUserIdId() != null) { - specification = specification.and(buildSpecification(criteria.getUserIdId(), - root -> root.join(UserWatchList_.userId, JoinType.LEFT).get(User_.id))); + if (criteria.getCheckFrequency() != null) { + specification = specification.and(buildSpecification(criteria.getCheckFrequency(), UserWatchList_.checkFrequency)); + } + if (criteria.getUserId() != null) { + specification = specification.and(buildSpecification(criteria.getUserId(), + root -> root.join(UserWatchList_.user, JoinType.LEFT).get(User_.id))); } } return specification; diff --git a/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListService.java b/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListService.java index fe3e1f7cd4e59e34faa998c32c0c762540ff5778..74588573941746bef334ea8046d2b2e986d5b9bc 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/UserWatchListService.java @@ -1,9 +1,13 @@ package at.ac.uibk.gitsearch.service; +import java.time.Instant; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; @@ -15,7 +19,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import at.ac.uibk.gitsearch.domain.UserWatchList; +import at.ac.uibk.gitsearch.domain.WatchListEntry; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; import at.ac.uibk.gitsearch.repository.UserWatchListRepository; +import at.ac.uibk.gitsearch.repository.search.MetaDataRepository; import at.ac.uibk.gitsearch.security.AuthoritiesConstants.AuthoritiesConstantEnum; import at.ac.uibk.gitsearch.security.jwt.TokenProvider; import at.ac.uibk.gitsearch.service.dto.UserWatchListDTO; @@ -36,11 +43,19 @@ public class UserWatchListService { private final UserWatchListMapper userWatchListMapper; private final TokenProvider tokenProvider; - - public UserWatchListService(UserWatchListRepository userWatchListRepository, UserWatchListMapper userWatchListMapper, TokenProvider tokenProvider) { + + private final UserService userService; + + private final MetaDataRepository metaDataRepository; + + public UserWatchListService(UserWatchListRepository userWatchListRepository, UserWatchListMapper userWatchListMapper, + TokenProvider tokenProvider, MetaDataRepository metaDataRepository, + UserService userService) { this.userWatchListRepository = userWatchListRepository; this.userWatchListMapper = userWatchListMapper; this.tokenProvider = tokenProvider; + this.metaDataRepository = metaDataRepository; + this.userService = userService; } /** @@ -66,7 +81,7 @@ public class UserWatchListService { } if(!mustExist) return Optional.empty(); - final boolean isAccessible = watchListO.get().getUserIdLogin().equals(currentPrincipal.get().getUsername()); + final boolean isAccessible = watchListO.get().getUserLogin().equals(currentPrincipal.get().getUsername()); if(!isAccessible) { log.warn("watchlist {} does not belong to current user", watchListO.get().getName()); throw new IllegalAccessError("watchlist does not belong to current User"); @@ -115,7 +130,7 @@ public class UserWatchListService { @Transactional(readOnly = true) public List<UserWatchListDTO> findByUserIdIsCurrentUser() { log.debug("Request to get all UserWatchLists"); - return userWatchListRepository.findByUserIdIsCurrentUser().stream() + return userWatchListRepository.findByUserIsCurrentUser().stream() .map(userWatchListMapper::toDto).collect(Collectors.toList()); } @@ -174,5 +189,48 @@ public class UserWatchListService { return userWatchListRepository.searchForCurrentUser(query, cleanedPageRequest) .map(userWatchListMapper::toDto); } - + + public List<UserWatchList> findByUser(at.ac.uibk.gitsearch.domain.User user) { + return userWatchListRepository.findByUser(user); + } + + /** + * find all SearchResultDTO that are watched by some stored Watchlist, and + * @param since + * @param user + * @return + */ + public Map<SearchResultDTO, UserWatchList> findChangesSince(Instant since, at.ac.uibk.gitsearch.domain.User user) { + Map<SearchResultDTO, UserWatchList> result = new HashMap<>(); + findByUser(user).stream() + .filter(wl -> wl.getCheckFrequency() != CheckFrequency.NEVER) + .forEach(wl -> + metaDataRepository.getExercisesById(wl.getWatchListEntries().stream().map( WatchListEntry::getExerciseId ) , + userService.convertToSecurityUser(Optional.of(user)), 0, 100, since). + getSearchResult().forEach( + sr -> { + UserWatchList previousWatchList = result.get(sr); + if( previousWatchList == null || // none found or + previousWatchList.getCheckFrequency().ordinal() > wl.getCheckFrequency().ordinal()) { // earlier + result.put(sr, wl); + } + } + )); + return result; + } + + /** + * not really useful. + * @param checkFrequency + * @param user + * @return + */ + public Map<SearchResultDTO, UserWatchList> findChangesSince(CheckFrequency checkFrequency, at.ac.uibk.gitsearch.domain.User user) { + Map<SearchResultDTO, UserWatchList> changesSince = findChangesSince(checkFrequency.getChangedBefore(), user); + return changesSince.entrySet().stream(). + filter(entry -> entry.getValue().getCheckFrequency().ordinal() <= checkFrequency.ordinal()) + .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); + + } + } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/WatchListEntryService.java b/src/main/java/at/ac/uibk/gitsearch/service/WatchListEntryService.java index 84a6233055a20e42fadb80e4a758614d1642cac8..61b84f9c4abe533a911b79572591a67cfc48ffbf 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/WatchListEntryService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/WatchListEntryService.java @@ -16,8 +16,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; - import static org.elasticsearch.index.query.QueryBuilders.*; /** @@ -30,7 +28,8 @@ public class WatchListEntryService { private final Logger log = LoggerFactory.getLogger(WatchListEntryService.class); private final WatchListEntryRepository watchListEntryRepository; - private final UserWatchListRepository userWatchListRepository; + @SuppressWarnings("unused") + private final UserWatchListRepository userWatchListRepository; private final WatchListEntryMapper watchListEntryMapper; diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/LikesCriteria.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/LikesCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..38b561900b49b4501e19fdc345dfd46e9fdad866 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/LikesCriteria.java @@ -0,0 +1,121 @@ +package at.ac.uibk.gitsearch.service.dto; + +import java.io.Serializable; +import java.util.Objects; +import io.github.jhipster.service.Criteria; +import io.github.jhipster.service.filter.BooleanFilter; +import io.github.jhipster.service.filter.DoubleFilter; +import io.github.jhipster.service.filter.Filter; +import io.github.jhipster.service.filter.FloatFilter; +import io.github.jhipster.service.filter.IntegerFilter; +import io.github.jhipster.service.filter.LongFilter; +import io.github.jhipster.service.filter.StringFilter; +import io.github.jhipster.service.filter.LocalDateFilter; + +/** + * Criteria class for the {@link at.ac.uibk.gitsearch.domain.Likes} entity. This class is used + * in {@link at.ac.uibk.gitsearch.web.rest.LikesResource} to receive all the possible filtering options from + * the Http GET request parameters. + * For example the following could be a valid request: + * {@code /likes?id.greaterThan=5&attr1.contains=something&attr2.specified=false} + * As Spring is unable to properly convert the types, unless specific {@link Filter} class are used, we need to use + * fix type specific filters. + */ +public class LikesCriteria implements Serializable, Criteria { + + private static final long serialVersionUID = 1L; + + private LongFilter id; + + private LocalDateFilter date; + + private IntegerFilter userID; + + private StringFilter ExerciseID; + + public LikesCriteria() { + } + + public LikesCriteria(LikesCriteria other) { + this.id = other.id == null ? null : other.id.copy(); + this.date = other.date == null ? null : other.date.copy(); + this.userID = other.userID == null ? null : other.userID.copy(); + this.ExerciseID = other.ExerciseID == null ? null : other.ExerciseID.copy(); + } + + @Override + public LikesCriteria copy() { + return new LikesCriteria(this); + } + + public LongFilter getId() { + return id; + } + + public void setId(LongFilter id) { + this.id = id; + } + + public LocalDateFilter getDate() { + return date; + } + + public void setDate(LocalDateFilter date) { + this.date = date; + } + + public IntegerFilter getUserID() { + return userID; + } + + public void setUserID(IntegerFilter userID) { + this.userID = userID; + } + + public StringFilter getExerciseID() { + return ExerciseID; + } + + public void setExerciseID(StringFilter ExerciseID) { + this.ExerciseID = ExerciseID; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final LikesCriteria that = (LikesCriteria) o; + return + Objects.equals(id, that.id) && + Objects.equals(date, that.date) && + Objects.equals(userID, that.userID) && + Objects.equals(ExerciseID, that.ExerciseID); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + date, + userID, + ExerciseID + ); + } + + // prettier-ignore + @Override + public String toString() { + return "LikesCriteria{" + + (id != null ? "id=" + id + ", " : "") + + (date != null ? "date=" + date + ", " : "") + + (userID != null ? "userID=" + userID + ", " : "") + + (ExerciseID != null ? "ExerciseID=" + ExerciseID + ", " : "") + + "}"; + } + +} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/MessageDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/MessageDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..6151dc38da36af469d38b123c56ed62e5691d842 --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/MessageDTO.java @@ -0,0 +1,36 @@ +package at.ac.uibk.gitsearch.service.dto; + +/** + * just a very simple DTO to transfer a message. + * @author Michael Breu + * + */ +public class MessageDTO { + + public MessageDTO() { + } + + public MessageDTO(String message) { + super(); + this.message = message; + } + + + private String message; + + + + /** + * @return the message + */ + public String getMessage() { + return message; + } + + /** + * @param message the message to set + */ + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/SavedSearchesDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/SavedSearchesDTO.java index 1cc915e03708df0b96c6d9b9327330a3f4a7c08e..c0479e643b840270db2eeb80f926c8166dac64ce 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/SavedSearchesDTO.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/SavedSearchesDTO.java @@ -8,7 +8,12 @@ import java.io.Serializable; */ public class SavedSearchesDTO implements Serializable { - private Long id; + /** + * + */ + private static final long serialVersionUID = 2832300167164526635L; + + private Long id; @NotNull @Size(min = 1) @@ -18,9 +23,9 @@ public class SavedSearchesDTO implements Serializable { private String jsonQuery; - private Long userIdId; + private Long userId; - private String userIdLogin; + private String userLogin; public Long getId() { return id; @@ -46,20 +51,20 @@ public class SavedSearchesDTO implements Serializable { this.jsonQuery = jsonQuery; } - public Long getUserIdId() { - return userIdId; + public Long getUserId() { + return userId; } - public void setUserIdId(Long userId) { - this.userIdId = userId; + public void setUserId(Long userId) { + this.userId = userId; } - public String getUserIdLogin() { - return userIdLogin; + public String getUserLogin() { + return userLogin; } - public void setUserIdLogin(String userLogin) { - this.userIdLogin = userLogin; + public void setUserLogin(String userLogin) { + this.userLogin = userLogin; } @Override @@ -86,8 +91,8 @@ public class SavedSearchesDTO implements Serializable { "id=" + getId() + ", name='" + getName() + "'" + ", jsonQuery='" + getJsonQuery() + "'" + - ", userIdId=" + getUserIdId() + - ", userIdLogin='" + getUserIdLogin() + "'" + + ", userId=" + getUserId() + + ", userIdLogin='" + getUserLogin() + "'" + "}"; } } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputDTO.java deleted file mode 100644 index ee9b1f016212ac740542433d68552799dedd9fdc..0000000000000000000000000000000000000000 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputDTO.java +++ /dev/null @@ -1,90 +0,0 @@ -package at.ac.uibk.gitsearch.service.dto; - -import java.util.List; - -public class SearchInputDTO { - private String fulltextQuery; - private SearchInputMetadataDTO metadata; - private List<String> selectedRepository; - private List<String> selectedUniversity; - private List<String> selectedFileFormat; - - private int page; - public static final int PAGE_SIZE = 10; - - public SearchInputDTO() { - // empty for jackson - } - public SearchInputDTO(String fulltextQuery, SearchInputMetadataDTO metadata, - List<String> selectedRepository, List<String> selectedUniversity, - List<String> selectedFileFormat, int page) { - this.fulltextQuery = fulltextQuery; - this.metadata = metadata; - this.selectedRepository = selectedRepository; - this.selectedUniversity = selectedUniversity; - this.selectedFileFormat = selectedFileFormat; - this.page = page; - } - - public String getFulltextQuery() { - return fulltextQuery; - } - - public void setFulltextQuery(String fulltextQuery) { - this.fulltextQuery = fulltextQuery; - } - - public SearchInputMetadataDTO getMetadata() { - return metadata; - } - - /** - * @param metadata the metadata to set - */ - public void setMetadata(SearchInputMetadataDTO metadata) { - this.metadata = metadata; - } - public List<String> getSelectedRepository() { - return selectedRepository; - } - - public void setSelectedRepository(List<String> selectedRepository) { - this.selectedRepository = selectedRepository; - } - - public List<String> getSelectedUniversity() { - return selectedUniversity; - } - - public void setSelectedUniversity(List<String> selectedUniversity) { - this.selectedUniversity = selectedUniversity; - } - - public List<String> getSelectedFileFormat() { - return selectedFileFormat; - } - - public void setSelectedFileFormat(List<String> selectedFileFormat) { - this.selectedFileFormat = selectedFileFormat; - } - - public int getPage() { - return page; - } - - public void setPage(int page) { - this.page = page; - } - - public boolean hasMetadataInput() { - return this.metadata.hasMetadataInput(); - } - - @Override - public String toString() { - return "SearchInputDTO [fulltextQuery=" + fulltextQuery + ", selectedRepository=" + selectedRepository + ", selectedUniversity=" - + selectedUniversity + ", selectedFileFormat=" + selectedFileFormat + ", page=" + page + ", metadata: {" + metadata + "}]"; - } - - -} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputMetadataDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputMetadataDTO.java deleted file mode 100644 index 1a9395364a39a2c8065dc64984d3a7e05b42786f..0000000000000000000000000000000000000000 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchInputMetadataDTO.java +++ /dev/null @@ -1,127 +0,0 @@ -package at.ac.uibk.gitsearch.service.dto; - -import java.util.List; -import java.util.stream.Collectors; - -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.ExerciseType; - -public class SearchInputMetadataDTO { - private String programmingLanguage; - private String keyword; - private List<String> naturalLanguage; - private String license; - private String author; - private List<ExerciseType> types; - private String format; - - public SearchInputMetadataDTO() { - } - - - public SearchInputMetadataDTO(String programmingLanguage, - String keyword, - List<String> naturalLanguage, - String license, - String author, - String format) { - this.programmingLanguage = mapEmptyString(programmingLanguage); - this.keyword = mapEmptyString(keyword); - this.license = mapEmptyString(license); - this.author = mapEmptyString(author); - this.naturalLanguage = naturalLanguage; - this.format = mapEmptyString(format); - } - - private static List<String> mapEmptyString(List<String> str) { - if(str==null) return null; - return str.stream().map(s -> "".equals(s) ? null : s).collect(Collectors.toList()); - } - - private static String mapEmptyString(String str) { - return "".equals(str) ? null : str; - } - - public String getFormat() { - return format; - } - - public void setFormat(String format) { - this.format = format; - } - - public boolean hasMetadataInput() { - return !(programmingLanguage == null - && keyword == null - && author == null - && license == null); - } - - public String getProgrammingLanguage() { - return programmingLanguage; - } - - public void setProgrammingLanguage(String programmingLanguage) { - this.programmingLanguage = mapEmptyString(programmingLanguage); - } - - public String getKeyword() { - return keyword; - } - - public void setKeyword(String keyword) { - this.keyword = mapEmptyString(keyword); - } - - public List<String> getNaturalLanguage() { - return naturalLanguage; - } - - public String getNaturalLanguagesAsString() { - return naturalLanguage==null?"null": - naturalLanguage.stream().collect(Collectors.joining(", ")); - } - - public void setNaturalLanguage(List<String> naturalLanguage) { - this.naturalLanguage = mapEmptyString(naturalLanguage); - } - - public String getLicense() { - return license; - } - - public void setLicense(String license) { - this.license = mapEmptyString(license); - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = mapEmptyString(author); - } - - /** - * @return the types - */ - public List<ExerciseType> getTypes() { - return types; - } - - /** - * @param types the types to set - */ - public void setTypes(List<ExerciseType> types) { - this.types = types; - } - - @Override - public String toString() { - return "programmingLanguage: " + this.programmingLanguage - + ", keyword: " + this.keyword - + ", naturalLanguage: " + getNaturalLanguagesAsString() - + ", license: " + this.license - + ", author: " + this.author - + ", format: " + this.format; - } -} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTO.java deleted file mode 100644 index 32e955988a8e81dd03ea32da4b1db9566e89cc95..0000000000000000000000000000000000000000 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTO.java +++ /dev/null @@ -1,380 +0,0 @@ -package at.ac.uibk.gitsearch.service.dto; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -public class SearchResultDTO { - - public static class PluginActionInfo { - String plugin; - String action; - String commandName; - - public PluginActionInfo(String plugin, String action, String commandName) { - super(); - this.plugin = plugin; - this.action = action; - this.commandName = commandName; - } - - public PluginActionInfo() { - // JSON - } - /** - * @return the plugin - */ - public String getPlugin() { - return plugin; - } - /** - * @param plugin the plugin to set - */ - public void setPlugin(String plugin) { - this.plugin = plugin; - } - /** - * @return the action - */ - public String getAction() { - return action; - } - /** - * @param action the action to set - */ - public void setAction(String action) { - this.action = action; - } - /** - * @return the commandName - */ - public String getCommandName() { - return commandName; - } - /** - * @param commandName the commandName to set - */ - public void setCommandName(String commandName) { - this.commandName = commandName; - } - - - } - - - private GitProject project; - private MetadataFile file; - private UserProvidedMetadataDTO metadata; - - private String exerciseId; - - private int ranking5; - private List<PluginActionInfo> supportedActions = new ArrayList<>(2); - - public SearchResultDTO() { - // default constructor - } - - /** - * clone constructor - * - * @param toClone - */ - public SearchResultDTO(SearchResultDTO toClone) { - super(); - this.project = toClone.project; - this.file = toClone.file; - this.metadata = toClone.metadata; - } - - public GitProject getProject() { - return project; - } - - public void setProject(GitProject project) { - this.project = project; - } - - public MetadataFile getFile() { - return file; - } - - public void setFile(MetadataFile file) { - this.file = file; - } - - public UserProvidedMetadataDTO getMetadata() { - return metadata; - } - - public void setMetadata(UserProvidedMetadataDTO metadata) { - this.metadata = metadata; - } - - @Override - public String toString() { - return "SearchResultDTO : { project: " + this.project - + ", file: " + this.file - + ", metadata: " + this.metadata - + " }"; - } - - @Override - public final int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((exerciseId == null) ? 0 : exerciseId.hashCode()); - result = prime * result + ((file == null) ? 0 : file.hashCode()); - result = prime * result + ((metadata == null) ? 0 : metadata.hashCode()); - result = prime * result + ((project == null) ? 0 : project.hashCode()); - return result; - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof SearchResultDTO)) - return false; - SearchResultDTO other = (SearchResultDTO) obj; - if (exerciseId == null) { - if (other.exerciseId != null) - return false; - } else if (!exerciseId.equals(other.exerciseId)) - return false; - if (file == null) { - if (other.file != null) - return false; - } else if (!file.equals(other.file)) - return false; - if (metadata == null) { - if (other.metadata != null) - return false; - } else if (!metadata.equals(other.metadata)) - return false; - if (project == null) { - if (other.project != null) - return false; - } else if (!project.equals(other.project)) - return false; - return true; - } - - - - public static class GitProject { - private int project_id; - private String project_name; - private String namespace; - private String main_group; - private String sub_group; - private String url; - private Date last_activity_at; - - public int getProject_id() { - return project_id; - } - - public Date getLast_activity_at() { - return last_activity_at; - } - - public void setLast_activity_at(Date last_activity_at) { - this.last_activity_at = last_activity_at; - } - - public void setProject_id(int project_id) { - this.project_id = project_id; - } - - public String getProject_name() { - return project_name; - } - - public void setProject_name(String project_name) { - this.project_name = project_name; - } - - public String getNamespace() { - return namespace; - } - - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - public String getMain_group() { - return main_group; - } - - public void setMain_group(String main_group) { - this.main_group = main_group; - } - - public String getSub_group() { - return sub_group; - } - - public void setSub_group(String sub_group) { - this.sub_group = sub_group; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getProjectId() { - return project_id; - } - - public void setProjectId(int project_id) { - this.project_id = project_id; - } - - @Override - public final int hashCode() { - return Integer.hashCode(project_id); - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof GitProject)) { - return false; - } - GitProject other = (GitProject) obj; - return this.project_id == other.project_id; - } - - @Override - public String toString() { - return "Project: { project_id: " + project_id - + ", project_name: " + project_name - + ", namespace: " + namespace - + ", main_group: " + main_group - + ", sub_group: " + sub_group - + ", url: " + url - + " }"; - } - } - - /** - * @return the exerciseId - */ - public String getExerciseId() { - return exerciseId; - } - - /** - * @param exerciseId the exerciseId to set - */ - public void setExerciseId(String exerciseId) { - this.exerciseId = exerciseId; - } - - /** - * @return the ranking5 - */ - public int getRanking5() { - return ranking5; - } - - /** - * @param ranking5 the ranking5 to set - */ - public void setRanking5(int ranking5) { - this.ranking5 = ranking5; - } - - /** - * @return the supportedActions - */ - public List<PluginActionInfo> getSupportedActions() { - return supportedActions; - } - - /** - * @param supportedActions the supportedActions to set - */ - public void setSupportedActions(List<PluginActionInfo> supportedActions) { - this.supportedActions = supportedActions; - } - - public static class MetadataFile { - private String filename; - private String path; - private String commit_id; - private Date indexing_date; - - public String getFilename() { - return filename; - } - - public void setFilename(String filename) { - this.filename = filename; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getCommit_id() { - return commit_id; - } - - public void setCommit_id(String commit_id) { - this.commit_id = commit_id; - } - - public Date getIndexing_date() { - return indexing_date; - } - - public void setIndexing_date(Date indexing_date) { - this.indexing_date = indexing_date; - } - - @Override - public final int hashCode() { - final int prime = 31; - int result = this.path.hashCode(); - result = prime * result + this.commit_id.hashCode(); - return result; - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof MetadataFile)) { - return false; - } - MetadataFile other = (MetadataFile) obj; - return Objects.equals(this.path, other.path) - && Objects.equals(this.commit_id, other.commit_id); - } - - @Override - public String toString() { - return "MetadataFile: { filename: " + this.filename - + ", path: " + this.path - + ", commit_id: " + this.commit_id - + ", indexing_date: " + this.indexing_date - + " }"; - } - } -} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultsDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultsDTO.java deleted file mode 100644 index 1ec620a774d4f66e08ee322edefb3699c43af8b3..0000000000000000000000000000000000000000 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/SearchResultsDTO.java +++ /dev/null @@ -1,91 +0,0 @@ -package at.ac.uibk.gitsearch.service.dto; - -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonValue; - -public class SearchResultsDTO { - - public enum GitProjectVisibility { - PRIVATE("private"), PUBLIC("public"), INTERNAL("internal"); - - private final String externalName; - - private GitProjectVisibility(String externalName) { - this.externalName = externalName; - } - - @JsonValue - public String getExternalName() { - return externalName; - } - - } - - - private List<SearchResultDTO> searchResult; - - /** - * - * @return the list of search results on this page, starting with pageStartIndex - */ - public List<SearchResultDTO> getSearchResult() { - return searchResult; - } - - public void setSearchResult(List<SearchResultDTO> searchResult) { - this.searchResult = searchResult; - } - - long hitCount; - - long pageStartIndex; - - public long getPageStartIndex() { - return pageStartIndex; - } - - public SearchResultsDTO(List<SearchResultDTO> searchResult, long hitCount, long pageStartIndex) { - this.searchResult = searchResult; - this.hitCount = hitCount; - this.pageStartIndex = pageStartIndex; - } - - public SearchResultsDTO() { - - } - - /** - * returns the number of all hits. - * - * @return - */ - public long getHitCount() { - return hitCount; - } - - public void setHitCount(long hitCount) { - this.hitCount = hitCount; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("SearchResultsDTO:"); - sb.append(System.lineSeparator()); - sb.append("hit count: "); - sb.append(this.hitCount); - sb.append(System.lineSeparator()); - sb.append("page start index: "); - sb.append(this.pageStartIndex); - sb.append(System.lineSeparator()); - sb.append("list of SearchResultsDTOs:"); - sb.append(System.lineSeparator()); - for (SearchResultDTO result : this.searchResult) { - sb.append(result); - sb.append(System.lineSeparator()); - sb.append(System.lineSeparator()); - } - return sb.toString(); - } -} diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/StatisticsDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/StatisticsDTO.java index c75f66f92216fce0cd45dadfc1706cbaa1817137..cc46ef0e9cb8004985451afe6b922c11bb02c5b5 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/StatisticsDTO.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/StatisticsDTO.java @@ -1,6 +1,5 @@ package at.ac.uibk.gitsearch.service.dto; -import javax.validation.constraints.*; import java.io.Serializable; /** @@ -8,13 +7,18 @@ import java.io.Serializable; */ public class StatisticsDTO implements Serializable { - private Long id; + /** + * + */ + private static final long serialVersionUID = 1L; + + private Long id; private Integer views; private Integer downloads; - private Long exerciseID; + private String exerciseID; public Long getId() { @@ -41,11 +45,11 @@ public class StatisticsDTO implements Serializable { this.downloads = downloads; } - public Long getExerciseID() { + public String getExerciseID() { return exerciseID; } - public void setExerciseID(Long exerciseID) { + public void setExerciseID(String exerciseID) { this.exerciseID = exerciseID; } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserDTO.java index abeae40665cce04880f324dde4422878a6b73a46..4fb28dcef58cefd87567e3275c76c2f4244bca71 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserDTO.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserDTO.java @@ -50,6 +50,11 @@ public class UserDTO { private Set<String> authorities; + private Instant lastLogin; + + private Instant lastMailSent; + + public UserDTO() { // Empty constructor needed for Jackson. } @@ -70,6 +75,8 @@ public class UserDTO { this.authorities = user.getAuthorities().stream() .map(Authority::getName) .collect(Collectors.toSet()); + this.lastLogin = user.getLastLogin(); + this.lastMailSent = user.getLastMailSent(); } public Long getId() { @@ -175,6 +182,23 @@ public class UserDTO { public void setAuthorities(Set<String> authorities) { this.authorities = authorities; } + + public Instant getLastLogin() { + return lastLogin; + } + + public void setLastLogin(Instant lastLogin) { + this.lastLogin = lastLogin; + } + + public Instant getLastMailSent() { + return lastMailSent; + } + + public void setLastMailSent(Instant lastMailSent) { + this.lastMailSent = lastMailSent; + } + // prettier-ignore @Override diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserProvidedMetadataDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserProvidedMetadataDTO.java deleted file mode 100644 index fe1820b06c7c58660a857bbe71d4029fb6eab996..0000000000000000000000000000000000000000 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserProvidedMetadataDTO.java +++ /dev/null @@ -1,471 +0,0 @@ -package at.ac.uibk.gitsearch.service.dto; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonValue; - -import java.util.Arrays; -import java.util.Objects; - -public class UserProvidedMetadataDTO { - - public UserProvidedMetadataDTO() { - // default constructor - } - - private String metadataVersion; // just for YAML test data reader - private String title; - private String identifier; - private String version; - private String structure; - - private String description; - private ExerciseType type; - private String license; - private String[] keyword; - - private String[] format; - private String[] programmingLanguage; - private String[] language; - private String status; - - private String educationLevel; - - @JsonIgnore - private String audience; - - private String timeRequired; - - @JsonIgnore - private String[] collectionContent; - - private Person[] creator; - private Person[] publisher; - private Person[] contributor; - - private boolean deprecated; - - private String difficulty; - private String[] source; - - private String[] requires; - private String image; - - public String getIdentifier() { - return identifier; - } - - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public ExerciseType getType() { - return type; - } - - public void setType(ExerciseType type) { - this.type = type; - } - - public String[] getLanguage() { - return language; - } - - public void setLanguage(String[] language) { - this.language = language; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getEducationLevel() { - return educationLevel; - } - - public void setEducationLevel(String educationLevel) { - this.educationLevel = educationLevel; - } - - public String getAudience() { - return audience; - } - - public void setAudience(String audience) { - this.audience = audience; - } - - public String getTimeRequired() { - return timeRequired; - } - - public void setTimeRequired(String timeRequired) { - this.timeRequired = timeRequired; - } - - public Person[] getCreator() { - return creator; - } - - public void setCreator(Person[] creator) { - this.creator = creator; - } - - public Person[] getPublisher() { - return publisher; - } - - public void setPublisher(Person[] publisher) { - this.publisher = publisher; - } - - public Person[] getContributor() { - return contributor; - } - - public void setContributor(Person[] contributor) { - this.contributor = contributor; - } - - public boolean isDeprecated() { - return deprecated; - } - - public void setDeprecated(boolean deprecated) { - this.deprecated = deprecated; - } - - public String getDifficulty() { - return difficulty; - } - - public void setDifficulty(String difficulty) { - this.difficulty = difficulty; - } - - public String[] getSource() { - return source; - } - - public void setSource(String[] source) { - this.source = source; - } - - public String[] getRequires() { - return requires; - } - - public void setRequires(String[] requires) { - this.requires = requires; - } - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - private String repositoryURL; - - public String getMetadataVersion() { - return metadataVersion; - } - - public void setMetadataVersion(String metadataVersion) { - this.metadataVersion = metadataVersion; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getLicense() { - return license; - } - - public void setLicense(String license) { - this.license = license; - } - - public String[] getKeyword() { - return keyword; - } - - public void setKeyword(String[] keyword) { - this.keyword = keyword; - } - - public String[] getFormat() { - return format; - } - - public void setFormat(String[] format) { - this.format = format; - } - - public String[] getProgrammingLanguage() { - return programmingLanguage; - } - - public void setProgrammingLanguage(String[] programmingLanguage) { - this.programmingLanguage = programmingLanguage; - } - - public String getRepositoryURL() { - return repositoryURL; - } - - public void setRepositoryURL(String repositoryURL) { - this.repositoryURL = repositoryURL; - } - - public String getStructure() { - return structure; - } - - public void setStructure(String structure) { - this.structure = structure; - } - - /** - * clone constructor - * - * @param toClone - */ - public UserProvidedMetadataDTO(UserProvidedMetadataDTO toClone) { - super(); - this.metadataVersion = toClone.metadataVersion; - this.title = toClone.title; - this.identifier = toClone.identifier; - this.version = toClone.version; - this.structure = toClone.structure; - this.description = toClone.description; - this.type = toClone.type; - this.license = toClone.license; - this.keyword = toClone.keyword; - this.format = toClone.format; - this.programmingLanguage = toClone.programmingLanguage; - this.language = toClone.language; - this.status = toClone.status; - this.educationLevel = toClone.educationLevel; - this.audience = toClone.audience; - this.timeRequired = toClone.timeRequired; - this.collectionContent = toClone.collectionContent; - this.creator = toClone.creator; - this.publisher = toClone.publisher; - this.contributor = toClone.contributor; - this.deprecated = toClone.deprecated; - this.difficulty = toClone.difficulty; - this.source = toClone.source; - this.requires = toClone.requires; - this.image = toClone.image; - this.repositoryURL = toClone.repositoryURL; - } - - @Override - public String toString() { - return "UserProvidedMetadataDTO { audience: " + audience - + ", collectionContent: " + Arrays.toString(collectionContent) - + ", contributor: " + Arrays.toString(contributor) - + ", creator: " + Arrays.toString(creator) - + ", deprecated: " + deprecated - + ", description: " + description - + ", difficulty: " + difficulty - + ", educationLevel: " + educationLevel - + ", format: " + Arrays.toString(format) - + ", identifier:" + identifier - + ", image: " + image - + ", keyword: " + Arrays.toString(keyword) - + ", language: " + Arrays.toString(language) - + ", license: " + license - + ", metadataVersion: " + metadataVersion - + ", programmingLanguage: " + Arrays.toString(programmingLanguage) - + ", publisher: " + Arrays.toString(publisher) - + ", repositoryURL: " + repositoryURL - + ", requires: " + Arrays.toString(requires) - + ", source: " + Arrays.toString(source) - + ", status: " + status - + ", structure: " + structure - + ", timeRequired: " + timeRequired - + ", title: " + title - + ", type: " + type - + ", version: " + version - + " }"; - } - - @Override - public final int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((audience == null) ? 0 : audience.hashCode()); - result = prime * result + Arrays.hashCode(collectionContent); - result = prime * result + Arrays.hashCode(contributor); - result = prime * result + Arrays.hashCode(creator); - result = prime * result + (deprecated ? 1231 : 1237); - result = prime * result + ((description == null) ? 0 : description.hashCode()); - result = prime * result + ((difficulty == null) ? 0 : difficulty.hashCode()); - result = prime * result + ((educationLevel == null) ? 0 : educationLevel.hashCode()); - result = prime * result + Arrays.hashCode(format); - result = prime * result + ((identifier == null) ? 0 : identifier.hashCode()); - result = prime * result + ((image == null) ? 0 : image.hashCode()); - result = prime * result + Arrays.hashCode(keyword); - result = prime * result + Arrays.hashCode(language); - result = prime * result + ((license == null) ? 0 : license.hashCode()); - result = prime * result + ((metadataVersion == null) ? 0 : metadataVersion.hashCode()); - result = prime * result + Arrays.hashCode(programmingLanguage); - result = prime * result + Arrays.hashCode(publisher); - result = prime * result + ((repositoryURL == null) ? 0 : repositoryURL.hashCode()); - result = prime * result + Arrays.hashCode(requires); - result = prime * result + Arrays.hashCode(source); - result = prime * result + ((status == null) ? 0 : status.hashCode()); - result = prime * result + ((structure == null) ? 0 : structure.hashCode()); - result = prime * result + ((timeRequired == null) ? 0 : timeRequired.hashCode()); - result = prime * result + ((title == null) ? 0 : title.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - result = prime * result + ((version == null) ? 0 : version.hashCode()); - return result; - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof UserProvidedMetadataDTO)) { - return false; - } - UserProvidedMetadataDTO other = (UserProvidedMetadataDTO) obj; - return Objects.equals(this.audience, other.audience) - && Arrays.equals(this.collectionContent, other.collectionContent) - && Arrays.equals(this.contributor, other.contributor) - && Arrays.equals(this.creator, other.creator) - && this.deprecated == other.deprecated - && Objects.equals(this.description, other.description) - && Objects.equals(this.difficulty, other.difficulty) - && Objects.equals(this.educationLevel, other.educationLevel) - && Arrays.equals(this.format, other.format) - && Objects.equals(this.identifier, other.identifier) - && Objects.equals(this.image, other.image) - && Arrays.equals(this.keyword, other.keyword) - && Arrays.equals(this.language, other.language) - && Objects.equals(this.license, other.license) - && Objects.equals(this.metadataVersion, other.metadataVersion) - && Arrays.equals(this.programmingLanguage, other.programmingLanguage) - && Arrays.equals(this.publisher, other.publisher) - && Objects.equals(this.repositoryURL, other.repositoryURL) - && Arrays.equals(this.requires, other.requires) - && Arrays.equals(this.source, other.source) - && Objects.equals(this.status, other.status) - && Objects.equals(this.structure, other.structure) - && Objects.equals(this.timeRequired, other.timeRequired) - && Objects.equals(this.title, other.title) - && this.type == other.type - && Objects.equals(this.version, other.version); - } - - - @JsonFormat(shape = JsonFormat.Shape.OBJECT) - public enum ExerciseType { - PROGRAMMING_EXERCISE("programming exercise"), EXERCISE("exercise"), COLLECTION("collection"), OTHER("other"); - - ExerciseType(String externalName) { - this.externalName = externalName; - } - - private final String externalName; - - @JsonValue - public String getExternalName() { - return externalName; - } - } - - public static class Person { - private String name; - private String affiliation; - private String email; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAffiliation() { - return affiliation; - } - - public void setAffiliation(String affiliation) { - this.affiliation = affiliation; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public String toString() { - return "Person: { name: " + this.name - + ", affiliation: " + this.affiliation - + ", email: " + this.email - + " }"; - } - - @Override - public final int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((affiliation == null) ? 0 : affiliation.hashCode()); - result = prime * result + ((email == null) ? 0 : email.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof Person)) { - return false; - } - Person other = (Person) obj; - return Objects.equals(this.affiliation, other.affiliation) - && Objects.equals(this.email, other.email) - && Objects.equals(this.name, other.name); - } - } -} - diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListCriteria.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListCriteria.java index 74b9fdc6a01c84e20ec971ead75c25457133ab21..149c96e623943d83e8098b7fea82991cddc43e59 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListCriteria.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListCriteria.java @@ -3,6 +3,7 @@ package at.ac.uibk.gitsearch.service.dto; import java.io.Serializable; import java.util.Objects; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; import io.github.jhipster.service.Criteria; import io.github.jhipster.service.filter.Filter; import io.github.jhipster.service.filter.LongFilter; @@ -18,6 +19,29 @@ import io.github.jhipster.service.filter.StringFilter; * fix type specific filters. */ public class UserWatchListCriteria implements Serializable, Criteria { + /** + * Class for filtering CheckFrequency + */ + public static class CheckFrequencyFilter extends Filter<CheckFrequency> { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public CheckFrequencyFilter() { + } + + public CheckFrequencyFilter(CheckFrequencyFilter filter) { + super(filter); + } + + @Override + public CheckFrequencyFilter copy() { + return new CheckFrequencyFilter(this); + } + + } private static final long serialVersionUID = 1L; @@ -25,7 +49,9 @@ public class UserWatchListCriteria implements Serializable, Criteria { private StringFilter name; - private LongFilter userIdId; + private CheckFrequencyFilter checkFrequency; + + private LongFilter userId; public UserWatchListCriteria() { } @@ -33,7 +59,8 @@ public class UserWatchListCriteria implements Serializable, Criteria { public UserWatchListCriteria(UserWatchListCriteria other) { this.id = other.id == null ? null : other.id.copy(); this.name = other.name == null ? null : other.name.copy(); - this.userIdId = other.userIdId == null ? null : other.userIdId.copy(); + this.checkFrequency = other.checkFrequency == null ? null : other.checkFrequency.copy(); + this.userId = other.userId == null ? null : other.userId.copy(); } @Override @@ -57,12 +84,20 @@ public class UserWatchListCriteria implements Serializable, Criteria { this.name = name; } - public LongFilter getUserIdId() { - return userIdId; + public CheckFrequencyFilter getCheckFrequency() { + return checkFrequency; + } + + public void setCheckFrequency(CheckFrequencyFilter checkFrequency) { + this.checkFrequency = checkFrequency; + } + + public LongFilter getUserId() { + return userId; } - public void setUserIdId(LongFilter userIdId) { - this.userIdId = userIdId; + public void setUserId(LongFilter userId) { + this.userId = userId; } @@ -78,7 +113,8 @@ public class UserWatchListCriteria implements Serializable, Criteria { return Objects.equals(id, that.id) && Objects.equals(name, that.name) && - Objects.equals(userIdId, that.userIdId); + Objects.equals(checkFrequency, that.checkFrequency) && + Objects.equals(userId, that.userId); } @Override @@ -86,7 +122,8 @@ public class UserWatchListCriteria implements Serializable, Criteria { return Objects.hash( id, name, - userIdId + checkFrequency, + userId ); } @@ -96,7 +133,8 @@ public class UserWatchListCriteria implements Serializable, Criteria { return "UserWatchListCriteria{" + (id != null ? "id=" + id + ", " : "") + (name != null ? "name=" + name + ", " : "") + - (userIdId != null ? "userIdId=" + userIdId + ", " : "") + + (checkFrequency != null ? "checkFrequency=" + checkFrequency + ", " : "") + + (userId != null ? "userId=" + userId + ", " : "") + "}"; } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListDTO.java index 0aaaf0dc7b0fd0ffa7f387c0f6f50c955c016488..bbd65a6557c7e898d5c143c550d1a3d65e61569d 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListDTO.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/UserWatchListDTO.java @@ -2,22 +2,31 @@ package at.ac.uibk.gitsearch.service.dto; import javax.validation.constraints.*; import java.io.Serializable; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; /** * A DTO for the {@link at.ac.uibk.gitsearch.domain.UserWatchList} entity. */ public class UserWatchListDTO implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + private Long id; @NotNull @Size(min = 1) private String name; + @NotNull + private CheckFrequency checkFrequency; + - private Long userIdId; + private Long userId; - private String userIdLogin; + private String userLogin; public Long getId() { return id; @@ -35,20 +44,28 @@ public class UserWatchListDTO implements Serializable { this.name = name; } - public Long getUserIdId() { - return userIdId; + public CheckFrequency getCheckFrequency() { + return checkFrequency; + } + + public void setCheckFrequency(CheckFrequency checkFrequency) { + this.checkFrequency = checkFrequency; + } + + public Long getUserId() { + return userId; } - public void setUserIdId(Long userId) { - this.userIdId = userId; + public void setUserId(Long userId) { + this.userId = userId; } - public String getUserIdLogin() { - return userIdLogin; + public String getUserLogin() { + return userLogin; } - public void setUserIdLogin(String userLogin) { - this.userIdLogin = userLogin; + public void setUserLogin(String userLogin) { + this.userLogin = userLogin; } @Override @@ -74,8 +91,9 @@ public class UserWatchListDTO implements Serializable { return "UserWatchListDTO{" + "id=" + getId() + ", name='" + getName() + "'" + - ", userIdId=" + getUserIdId() + - ", userIdLogin='" + getUserIdLogin() + "'" + + ", checkFrequency='" + getCheckFrequency() + "'" + + ", userId=" + getUserId() + + ", userIdLogin='" + getUserLogin() + "'" + "}"; } } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/dto/WatchListEntryDTO.java b/src/main/java/at/ac/uibk/gitsearch/service/dto/WatchListEntryDTO.java index d1e168fa8a8756e3a3dfeb387e8c02e00f113cc3..1e15b7526897f7a087711172cb988ac5cad91390 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/dto/WatchListEntryDTO.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/dto/WatchListEntryDTO.java @@ -8,7 +8,12 @@ import java.io.Serializable; */ public class WatchListEntryDTO implements Serializable { - private Long id; + /** + * + */ + private static final long serialVersionUID = 1L; + + private Long id; @NotNull private String exerciseId; diff --git a/src/main/java/at/ac/uibk/gitsearch/service/impl/StatisticsServiceImpl.java b/src/main/java/at/ac/uibk/gitsearch/service/impl/StatisticsServiceImpl.java index 36d5adfb9173abb0106c8c380c66f7c5eccd4cee..4cb3c332ebf66e768582bc8c67810ba36e399b07 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/impl/StatisticsServiceImpl.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/impl/StatisticsServiceImpl.java @@ -45,7 +45,12 @@ public class StatisticsServiceImpl implements StatisticsService { Statistics statistics = statisticsMapper.toEntity(statisticsDTO); statistics = statisticsRepository.save(statistics); StatisticsDTO result = statisticsMapper.toDto(statistics); - statisticsSearchRepository.save(statistics); + // TODO temporary fix: statistics has a problem with complex exercise ids (e.g. 10:if1/exercise1) :-) + try { + statisticsSearchRepository.save(statistics); + } catch (Exception e) { + log.error("Please fix this problem! ExerciseIds are not numeric any more!", e); + } return result; } @@ -67,7 +72,7 @@ public class StatisticsServiceImpl implements StatisticsService { } @Override - public Optional<StatisticsDTO> findOneByExerciseID(Long id) { + public Optional<StatisticsDTO> findOneByExerciseID(String id) { log.debug("Request to get Statistics by ExerciseId : {}", id); return statisticsRepository.findByExerciseID(id) .map(statisticsMapper::toDto); diff --git a/src/main/java/at/ac/uibk/gitsearch/service/mapper/SavedSearchesMapper.java b/src/main/java/at/ac/uibk/gitsearch/service/mapper/SavedSearchesMapper.java index dcca17a1601b7f18cd776d03e90737d155b326e5..c1f7e9a18a89485f61c4ce2a7f1ec06da186e29d 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/mapper/SavedSearchesMapper.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/mapper/SavedSearchesMapper.java @@ -12,11 +12,11 @@ import org.mapstruct.*; @Mapper(componentModel = "spring", uses = {UserMapper.class}) public interface SavedSearchesMapper extends EntityMapper<SavedSearchesDTO, SavedSearches> { - @Mapping(source = "userId.id", target = "userIdId") - @Mapping(source = "userId.login", target = "userIdLogin") + @Mapping(source = "user.id", target = "userId") + @Mapping(source = "user.login", target = "userLogin") SavedSearchesDTO toDto(SavedSearches savedSearches); - @Mapping(source = "userIdId", target = "userId") + @Mapping(source = "userId", target = "user") SavedSearches toEntity(SavedSearchesDTO savedSearchesDTO); default SavedSearches fromId(Long id) { diff --git a/src/main/java/at/ac/uibk/gitsearch/service/mapper/UserWatchListMapper.java b/src/main/java/at/ac/uibk/gitsearch/service/mapper/UserWatchListMapper.java index 86233d6ac5c475eb6ff63d5199085ddc0ee3500b..531e5595aa7c4355994d3f7ef13d45ad3a5e13a8 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/mapper/UserWatchListMapper.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/mapper/UserWatchListMapper.java @@ -12,11 +12,11 @@ import org.mapstruct.*; @Mapper(componentModel = "spring", uses = {UserMapper.class}) public interface UserWatchListMapper extends EntityMapper<UserWatchListDTO, UserWatchList> { - @Mapping(source = "userId.id", target = "userIdId") - @Mapping(source = "userId.login", target = "userIdLogin") + @Mapping(source = "user.id", target = "userId") + @Mapping(source = "user.login", target = "userLogin") UserWatchListDTO toDto(UserWatchList userWatchList); - @Mapping(source = "userIdId", target = "userId") + @Mapping(source = "userId", target = "user") UserWatchList toEntity(UserWatchListDTO userWatchListDTO); default UserWatchList fromId(Long id) { diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/AccountResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/AccountResource.java index 94fef9aebda0a4318ea04b1270eaf87094bf6b1a..41d3142a6b29f82f7693238e530a526ab8921e36 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/AccountResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/AccountResource.java @@ -37,13 +37,13 @@ import at.ac.uibk.gitsearch.web.rest.vm.ManagedUserVM; @RequestMapping("/api") public class AccountResource { - private static class AccountResourceException extends RuntimeException { + public static class AccountResourceException extends RuntimeException { /** * */ private static final long serialVersionUID = -4660672207242510582L; - private AccountResourceException(String message) { + public AccountResourceException(String message) { super(message); } } diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/CheckResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/CheckResource.java new file mode 100644 index 0000000000000000000000000000000000000000..2c37cf0ffbb682deb123cd24cfc571f11ba3c3ae --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/CheckResource.java @@ -0,0 +1,55 @@ +package at.ac.uibk.gitsearch.web.rest; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import at.ac.uibk.gitsearch.security.jwt.TokenProvider; +import at.ac.uibk.gitsearch.service.MailService; +import at.ac.uibk.gitsearch.service.UserService; +import at.ac.uibk.gitsearch.service.dto.MessageDTO; + +/** + * REST controller for various tests that can be initiated by the user. + */ +@RestController +@RequestMapping("/api") +public class CheckResource { + + private final Logger log = LoggerFactory.getLogger(CheckResource.class); + + private final MailService mailService; + @SuppressWarnings("unused") + private final TokenProvider tokenProvider; + private final UserService userService; + + public CheckResource(MailService mailService, + TokenProvider tokenProvider, UserService userService + ) { + this.mailService = mailService; + this.tokenProvider = tokenProvider; + this.userService = userService; + } + + /** + * {@code Get /triggerInfoMail} : Triggers the info mail for the current user. + */ + @GetMapping("/triggerInfoMail") + public MessageDTO triggerInfoMail() { + + Optional<at.ac.uibk.gitsearch.domain.User> uo = userService.getUserWithAuthorities(); + + if(uo.isEmpty()) { + log.debug("unknown user for triggerInfoMail"); + throw new AccountResource.AccountResourceException("User could not be found"); + } + boolean wasSent = mailService.sendInfoMail(uo.get(), true /* even if no content */); + return new MessageDTO(wasSent?"Mail successfully sent to " + uo.get().getEmail():"no relevant content found (or potential mailing problems). No Mail sent to " + uo.get().getEmail()); + } + + +} diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/ExerciseResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/ExerciseResource.java index fde06679e6d52b37ada7a3a5c99832ab59428498..4ed031bbb869ee6a904b6ce837a9d42d1fbcc6d6 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/ExerciseResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/ExerciseResource.java @@ -7,12 +7,18 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Optional; +import java.text.ParseException; +import java.util.Optional; import at.ac.uibk.gitsearch.es.model.ArtemisExerciseInfo; import at.ac.uibk.gitsearch.security.SecurityUtils; import at.ac.uibk.gitsearch.service.ArtemisImportError; import at.ac.uibk.gitsearch.service.ExerciseService; import org.eclipse.jgit.api.errors.GitAPIException; +import javax.servlet.http.HttpServletRequest; + +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.gitlab4j.api.GitLabApiException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,8 +29,15 @@ import org.springframework.core.io.Resource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.HandlerMapping; import at.ac.uibk.gitsearch.service.GitlabService; +import at.ac.uibk.gitsearch.service.SearchService; import at.ac.uibk.gitsearch.web.util.HeaderUtil; import javax.servlet.http.HttpServletRequest; @@ -39,7 +52,11 @@ import javax.ws.rs.core.Response; @RequestMapping("/api") public class ExerciseResource { - private final Logger log = LoggerFactory.getLogger(ExerciseResource.class); + private static final String NOT_FOUND = "not found"; + + private static final String REPOSITORYFILE = "RepositoryFile"; + + private final Logger log = LoggerFactory.getLogger(ExerciseResource.class); @Value("${application.registeredConnectorsCallBackURL}") String baseApiUrl; @@ -50,24 +67,39 @@ public class ExerciseResource { @Autowired private ExerciseService exerciseService; + @Autowired + private SearchService searchService; + @Value("${jhipster.clientApp.name}") private String applicationName; /** - * GET readMe : get problem statement. + * GET some file of an exercise. * - * @param basketToken the basket - * @return the ResponseEntity with status 200 (OK) and with body the exercise, or with status 404 (Not Found) + * @param filePath the file path + * @return the ResponseEntity with status 200 (OK) and with body the exercise file, or with status 404 (Not Found) */ - @GetMapping("/exercise/{exerciseId}") - public ResponseEntity<Resource> getRepositoryFile(@PathVariable("exerciseId") String exerciseId, @RequestParam("filePath") String filePath) throws IOException { + @GetMapping("/exerciseFile/**") + public ResponseEntity<Resource> getRepositoryFile(HttpServletRequest request, @RequestParam("filePath") String filePath) throws IOException { + String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + + String exerciseId = new AntPathMatcher().extractPathWithinPattern(pattern, request.getRequestURI()); + + ExerciseId parsedId; + try { + parsedId = ExerciseId.fromString(exerciseId); + } catch (ParseException e) { + return ResponseEntity.notFound().headers(HeaderUtil.createFailureAlert(applicationName, true, REPOSITORYFILE, NOT_FOUND, + "There was an error finding your exercise " + exerciseId + ".")).build(); + } + InputStream repositoryStream = null; try { - repositoryStream = gitLabService.getRepositoryFile(exerciseId, filePath); + repositoryStream = gitLabService.getRepositoryFile(parsedId, filePath); } catch (IOException | GitLabApiException e) { - log.error("Cannot read file for exercise {} and path {}", exerciseId, filePath, e); - return ResponseEntity.notFound().headers(HeaderUtil.createFailureAlert(applicationName, true, "RepositoryFile", "not found", + log.warn("Cannot read file for exercise {} and path {}: {}", exerciseId, filePath, e.getMessage()); + return ResponseEntity.notFound().headers(HeaderUtil.createFailureAlert(applicationName, true, REPOSITORYFILE, NOT_FOUND, "There was an error on the server and the resource file could not be created.")).build(); } InputStreamResource resource = new InputStreamResource(repositoryStream); @@ -75,6 +107,36 @@ public class ExerciseResource { return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM).header("filename", filePath).body(resource); } + /** + * GET the exercise by Id + * + * @param request the complete request, in order to parse the exerciseId + * @return the ResponseEntity with status 200 (OK) and with the searchresult, or with status 404 (Not Found) + */ + @GetMapping("/exercise/**") + public ResponseEntity<SearchResultDTO> getExerciseById(HttpServletRequest request) throws IOException { + String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + + String exerciseId = new AntPathMatcher().extractPathWithinPattern(pattern, request.getRequestURI()); + + ExerciseId parsedId; + try { + parsedId = ExerciseId.fromString(exerciseId); + } catch (ParseException e) { + return ResponseEntity.notFound().headers(HeaderUtil.createFailureAlert(applicationName, true, REPOSITORYFILE, NOT_FOUND, + "There was an error with your requested id " + exerciseId + ".")).build(); + } + + final Optional<SearchResultDTO> result = searchService.findExerciseById(parsedId); + + + if(result.isPresent()) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(result.get()); + } else { + return ResponseEntity.notFound().headers(HeaderUtil.createFailureAlert(applicationName, true, REPOSITORYFILE, NOT_FOUND, + "There was an error finding your exercise " + exerciseId + ".")).build(); + } + } /** * GET /exercise/import : Endpoint listening for request to import exercises. * Ex. ArTEMiS calls this endpoint and provides an URL where the exercise can be retrieved diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/LikesResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/LikesResource.java new file mode 100644 index 0000000000000000000000000000000000000000..02765c60069ab6435f569b8ffe4fe8f69a3c487f --- /dev/null +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/LikesResource.java @@ -0,0 +1,220 @@ +package at.ac.uibk.gitsearch.web.rest; + +import at.ac.uibk.gitsearch.domain.Likes; +import at.ac.uibk.gitsearch.service.LikesService; +import at.ac.uibk.gitsearch.service.UserService; +import at.ac.uibk.gitsearch.web.rest.errors.BadRequestAlertException; +import at.ac.uibk.gitsearch.service.dto.LikesCriteria; +import at.ac.uibk.gitsearch.service.LikesQueryService; + +import io.github.jhipster.web.util.HeaderUtil; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.StreamSupport; + +import static org.elasticsearch.index.query.QueryBuilders.*; + +/** + * REST controller for managing {@link at.ac.uibk.gitsearch.domain.Likes}. + */ +@RestController +@RequestMapping("/api") +public class LikesResource { + + private final Logger log = LoggerFactory.getLogger(LikesResource.class); + + private static final String ENTITY_NAME = "likes"; + + @Value("${jhipster.clientApp.name}") + private String applicationName; + + private final LikesService likesService; + private final UserService userService; + + private final LikesQueryService likesQueryService; + + public LikesResource(LikesService likesService, LikesQueryService likesQueryService, UserService userService) { + this.likesService = likesService; + this.likesQueryService = likesQueryService; + this.userService = userService; + } + + /** + * {@code POST /likes} : Create a new likes. + * + * @param likes the likes to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new likes, or with status {@code 400 (Bad Request)} if the + * likes has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping("/likes") + public ResponseEntity<Likes> createLikes(@Valid @RequestBody Likes likes) throws URISyntaxException { + log.debug("REST request to save Likes : {}", likes); + if (likes.getId() != null) { + throw new BadRequestAlertException("A new likes cannot already have an ID", ENTITY_NAME, "idexists"); + } + Likes result = likesService.save(likes); + return ResponseEntity + .created(new URI("/api/likes/" + result.getId())).headers(HeaderUtil + .createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * {@code PUT /likes} : Updates an existing likes. + * + * @param likes the likes to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated likes, or with status {@code 400 (Bad Request)} if the + * likes is not valid, or with status + * {@code 500 (Internal Server Error)} if the likes couldn't be updated. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PutMapping("/likes") + public ResponseEntity<Likes> updateLikes(@Valid @RequestBody Likes likes) throws URISyntaxException { + log.debug("REST request to update Likes : {}", likes); + if (likes.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + Likes result = likesService.save(likes); + return ResponseEntity.ok().headers( + HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, likes.getId().toString())) + .body(result); + } + + @PutMapping("/likeExercise") + public ResponseEntity<Likes> updateLikeWithExerciseID(@RequestBody Likes likes) { + + if (likes.getExerciseID() != null) { + Likes like = likesService.findLikesByUserIDandExerciseID(userService.getUserWithAuthorities().get().getId().intValue(), likes.getExerciseID()); + + if(like == null){ + log.debug("Like not known atm creating new one"); + like = new Likes(); + like.setUserID(userService.getUserWithAuthorities().get().getId().intValue()); + like.setExerciseID(likes.getExerciseID()); + } + like.date(LocalDate.now()); + log.debug("REST request to update Like by exercise id : {}", likes.getExerciseID()); + + Likes result = likesService.save(like); + + return ResponseEntity.ok().headers( + HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, like.getId().toString())) + .body(result); + } + return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(applicationName,true,ENTITY_NAME,"internalServerError","The ExerciseID was not set")).body(null); + + } + + @DeleteMapping("/unlikeExercise/{ExerciseID}") + public ResponseEntity<Void> deleteLikeWithExerciseID(@PathVariable String ExerciseID) { + log.debug("REST request to delete Likes for project : {}", ExerciseID); + likesService.deleteByUserIDandExerciseID(userService.getUserWithAuthorities().get().getId().intValue(), ExerciseID);; + return ResponseEntity.noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, ExerciseID.toString())) + .build(); + } + + @GetMapping("/numberOfLikes/{ExerciseID}") + public ResponseEntity<Integer> getNumberOfLikesForExerciseID(@PathVariable String ExerciseID) { + log.debug("REST request to get number of likes for project {}", ExerciseID); + Integer n = likesService.findNumberOfLikesByExerciseID(ExerciseID); + return ResponseEntity.ok().body(n); + } + + @GetMapping("/hasLiked/{ExerciseID}") + public ResponseEntity<Boolean> hasLikedProject(@PathVariable String ExerciseID) { + log.debug("REST request to see if user has liked project {}", ExerciseID); + Boolean bool = false; + if(userService.getUserWithAuthorities().isPresent()){ + Likes like = likesService.findLikesByUserIDandExerciseID(userService.getUserWithAuthorities().get().getId().intValue(), ExerciseID); + if(like != null){ + log.debug("User has liked this project yet"); + bool = true; + }} + return ResponseEntity.ok().body(bool); + } + + /** + * {@code GET /likes} : get all the likes. + * + * @param criteria the criteria which the requested entities should match. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and the list + * of likes in body. + */ + @GetMapping("/likes") + public ResponseEntity<List<Likes>> getAllLikes(LikesCriteria criteria) { + log.debug("REST request to get Likes by criteria: {}", criteria); + List<Likes> entityList = likesQueryService.findByCriteria(criteria); + return ResponseEntity.ok().body(entityList); + } + + /** + * {@code GET /likes/count} : count all the likes. + * + * @param criteria the criteria which the requested entities should match. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and the count + * in body. + */ + @GetMapping("/likes/count") + public ResponseEntity<Long> countLikes(LikesCriteria criteria) { + log.debug("REST request to count Likes by criteria: {}", criteria); + return ResponseEntity.ok().body(likesQueryService.countByCriteria(criteria)); + } + + /** + * {@code GET /likes/:id} : get the "id" likes. + * + * @param id the id of the likes to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the likes, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/likes/{id}") + public ResponseEntity<Likes> getLikes(@PathVariable Long id) { + log.debug("REST request to get Likes : {}", id); + Optional<Likes> likes = likesService.findOne(id); + return ResponseUtil.wrapOrNotFound(likes); + } + + /** + * {@code DELETE /likes/:id} : delete the "id" likes. + * + * @param id the id of the likes to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/likes/{id}") + public ResponseEntity<Void> deleteLikes(@PathVariable Long id) { + log.debug("REST request to delete Likes : {}", id); + likesService.delete(id); + return ResponseEntity.noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) + .build(); + } + + /** + * {@code SEARCH /_search/likes?query=:query} : search for the likes + * corresponding to the query. + * + * @param query the query of the likes search. + * @return the result of the search. + */ + @GetMapping("/_search/likes") + public List<Likes> searchLikes(@RequestParam String query) { + log.debug("REST request to search Likes for query {}", query); + return likesService.search(query); + } +} diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/OAuth2ConfigResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/OAuth2ConfigResource.java index 889c6d73281dbd74ae93cac7b960b9f63d9ec96a..84bbe0bd2ce334dfc3a8bc45eeaf70a21012f227 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/OAuth2ConfigResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/OAuth2ConfigResource.java @@ -1,7 +1,5 @@ package at.ac.uibk.gitsearch.web.rest; -import java.util.List; - import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -13,7 +11,7 @@ import at.ac.uibk.gitsearch.service.dto.OAuth2ConfigDTO; import at.ac.uibk.gitsearch.service.oauth2.OAuth2ConfigService; /** - * Controller to authenticate users. + * Controller to to provide OAuth2 configurations. */ @RestController @RequestMapping("/oauth2Config") diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResource.java index d585cb9551d42fbcf1835517743e7d8939d6c144..a03a511513250891a7d4a2cf19e99a7829a82c8b 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResource.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.InputStream; import org.codeability.sharing.plugins.api.ShoppingBasket; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; import org.gitlab4j.api.GitLabApiException; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -30,8 +31,6 @@ import at.ac.uibk.gitsearch.service.SearchService; import at.ac.uibk.gitsearch.service.ShoppingBasketService; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketInfoDTO; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketRedirectInfoDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; /** * REST controller for managing {@link DocumentInfo}. @@ -76,26 +75,16 @@ public class PluginInterfaceResource { * @return the result of the search. */ @PostMapping("/pluginIF/v0.1/page-details") - public org.codeability.sharing.plugins.api.search.SearchResultsDTO + public SearchResultsDTO searchPageDetails(@RequestBody org.codeability.sharing.plugins.api.search.SearchRequestDTO searchRequest) throws IOException { final Authentication gitLabAuthentication = gitlabService.getGitLabAuthentication(searchRequest.getUserPrincipal().getName(), searchRequest.getUserPrincipal().getGitLabAccessToken()); SecurityContext sc = SecurityContextHolder.getContext(); sc.setAuthentication(gitLabAuthentication); log.debug("REST request to search {}", searchRequest.getQuery()); - return SearchResultsDTOMapper.INSTANCE.searchResultsToPlugin( - searchService.searchResultPage(PluginSearchInputDTOMapper.INSTANCE.searchInputFromPlugin(searchRequest.getQuery()), SearchInputDTO.PAGE_SIZE) - ); + return searchService.searchResultPage(searchRequest.getQuery()); } - @Mapper - public static interface PluginSearchInputDTOMapper { - - PluginSearchInputDTOMapper INSTANCE = Mappers.getMapper( PluginSearchInputDTOMapper.class ); - - SearchInputDTO searchInputFromPlugin(org.codeability.sharing.plugins.api.search.SearchInputDTO searchInput); - } - @Mapper public static interface SearchResultsDTOMapper { diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java index d698fd3db3333bf891e7e6dd22cad139bb436120..6c57646c38460d8286b35d1739ccb1912aacdbb8 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.List; import java.util.Optional; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.InputStreamResource; @@ -17,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -26,8 +28,6 @@ import at.ac.uibk.gitsearch.es.model.DocumentInfo; import at.ac.uibk.gitsearch.service.SearchService; import at.ac.uibk.gitsearch.service.StatisticsService; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; import at.ac.uibk.gitsearch.service.dto.StatisticsDTO; import at.ac.uibk.gitsearch.web.util.HeaderUtil; @@ -65,96 +65,102 @@ public class SearchResource { */ @PostMapping("/search/page-details") public SearchResultsDTO - searchPageDetails(@RequestBody SearchInputDTO query) throws IOException { + searchPageDetails(@RequestBody org.codeability.sharing.plugins.api.search.SearchInputDTO query) throws IOException { log.debug("REST request to search {}", query); - return searchService.searchResultPage(query, SearchInputDTO.PAGE_SIZE); + return searchService.searchResultPage(query); } /** * returns all keyword autocompletes for keyWord * * @param keyWordPrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/keywordsAutoComplete") - public List<AutoCompleteEntry> getKeywordsAutoComplete(@RequestParam String keyWordPrefix) throws IOException { - return searchService.getKeywordsAutoComplete(keyWordPrefix); + public List<AutoCompleteEntry> getKeywordsAutoComplete(@RequestParam String keyWordPrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getKeywordsAutoComplete(keyWordPrefix, max); } /** * returns all keyword autocompletes for keyWord * * @param formatPrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/formatsAutoComplete") - public List<AutoCompleteEntry> getFormatsAutoComplete(@RequestParam String formatPrefix) throws IOException { - return searchService.getFormatsAutoComplete(formatPrefix); + public List<AutoCompleteEntry> getFormatsAutoComplete(@RequestParam String formatPrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getFormatsAutoComplete(formatPrefix, max); } /** * returns all creator autocompletes * * @param creatorPrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/creatorAutoComplete") - public List<AutoCompleteEntry> getCreatorAutoComplete(@RequestParam String creatorPrefix) throws IOException { - return searchService.getCreatorAutoComplete(creatorPrefix); + public List<AutoCompleteEntry> getCreatorAutoComplete(@RequestParam String creatorPrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getCreatorAutoComplete(creatorPrefix, max); } /** * returns all contributor autocompletes * * @param contributorPrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/contributorAutoComplete") - public List<AutoCompleteEntry> getContributorAutoComplete(@RequestParam String contributorPrefix) throws IOException { - return searchService.getContributorAutoComplete(contributorPrefix); + public List<AutoCompleteEntry> getContributorAutoComplete(@RequestParam String contributorPrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getContributorAutoComplete(contributorPrefix, max); } /** * returns all contributor and author autocompletes * * @param contributorPrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/contributorCreatorAutoComplete") - public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix) throws IOException { - return searchService.getContributorCreatorAutoComplete(contributorPrefix); + public List<AutoCompleteEntry> getContributorCreatorAutoComplete(String contributorPrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getContributorCreatorAutoComplete(contributorPrefix, max); } /** * returns all programmingLanguage autocompletes for keyWord * * @param programmingLanguagePrefix + * @param max the maximum number of hits returned * @return * @throws IOException */ @GetMapping("/search/programmingLanguageAutoComplete") - public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(@RequestParam String programmingLanguagePrefix) throws IOException { - return searchService.getProgrammingLanguageAutoComplete(programmingLanguagePrefix); + public List<AutoCompleteEntry> getProgrammingLanguageAutoComplete(@RequestParam String programmingLanguagePrefix, @RequestParam(defaultValue = "10") int max) throws IOException { + return searchService.getProgrammingLanguageAutoComplete(programmingLanguagePrefix, max); } /** * POST /programming-exercises/:exerciseId/export-programmingExercise : sends all repositories and details of the programming exercise as zip - * TODO projectId and ExerciseId are mixed up here. Please clarify! + * TODO move to Exercise Resource, and export is not only for programming-exercises! * - * @param projectId the id of the exercise to get the repos from + * @param exerciseId the id of the exercise to get the repos from * ResponseEntity with status * @throws IOException if something during the zip process went wrong */ - @PostMapping("/programming-exercises/{projectId}/export-programming-exercise") - public ResponseEntity<Resource> exportProgrammingExercise(@PathVariable long projectId) throws IOException { + @PostMapping("/programming-exercises/{exerciseId}/export-programming-exercise") + public ResponseEntity<Resource> exportProgrammingExercise(@PathVariable String exerciseId) throws IOException { - File zipFile = searchService.exportExercise(projectId); + File zipFile = searchService.exportExercise(exerciseId); if (zipFile == null) { return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(applicationName, true, ENTITY_NAME, "internalServerError", @@ -183,21 +189,21 @@ public class SearchResource { } InputStreamResource resource = new InputStreamResource(new NewFileInputStream(zipFile)); - log.debug("REST request to get Statistics for ExerciseID : {}", projectId); - Optional<StatisticsDTO> statisticsDTO = statisticsService.findOneByExerciseID(projectId); + log.debug("REST request to get Statistics for ExerciseID : {}", exerciseId); + Optional<StatisticsDTO> statisticsDTO = statisticsService.findOneByExerciseID(exerciseId); if(statisticsDTO.isPresent()){ StatisticsDTO newStats = statisticsDTO.get(); newStats.setDownloads(newStats.getDownloads() + 1); statisticsService.save(newStats); - log.debug("REST increased number of downloads for ExerciseID : {}", projectId); + log.debug("REST increased number of downloads for ExerciseID : {}", exerciseId); } if(!statisticsDTO.isPresent()){ StatisticsDTO newStats = new StatisticsDTO(); newStats.setDownloads(1); newStats.setViews(1); - newStats.setExerciseID(projectId); + newStats.setExerciseID(exerciseId); statisticsService.save(newStats); - log.debug("Created new statistics entry for exerciseID: {}", projectId); + log.debug("Created new statistics entry for exerciseID: {}", exerciseId); } return ResponseEntity.ok().contentLength(zipFile.length()).contentType(MediaType.APPLICATION_OCTET_STREAM).header("filename", zipFile.getName()).body(resource); diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/StatisticsResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/StatisticsResource.java index 5ab32f2464bfe3ad99dbc5fc58e82a805790a22c..53c87366e07df04b9d90e5fedb32c034ebe75a56 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/StatisticsResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/StatisticsResource.java @@ -1,37 +1,44 @@ package at.ac.uibk.gitsearch.web.rest; -import at.ac.uibk.gitsearch.service.GitlabService; - -import at.ac.uibk.gitsearch.service.StatisticsService; -import at.ac.uibk.gitsearch.web.rest.errors.BadRequestAlertException; -import at.ac.uibk.gitsearch.service.dto.StatisticsDTO; +import java.net.URI; +import java.net.URISyntaxException; +import java.text.ParseException; +import java.util.List; +import java.util.Optional; +import java.util.regex.Pattern; -import io.github.jhipster.web.util.HeaderUtil; -import io.github.jhipster.web.util.PaginationUtil; -import io.github.jhipster.web.util.ResponseUtil; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; -import org.gitlab4j.api.GitLabApiException; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.HandlerMapping; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; -import javax.validation.Valid; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.List; -import java.util.Optional; -import java.util.stream.StreamSupport; - -import static org.elasticsearch.index.query.QueryBuilders.*; +import at.ac.uibk.gitsearch.service.GitlabService; +import at.ac.uibk.gitsearch.service.StatisticsService; +import at.ac.uibk.gitsearch.service.dto.StatisticsDTO; +import at.ac.uibk.gitsearch.web.rest.errors.BadRequestAlertException; +import io.github.jhipster.web.util.HeaderUtil; +import io.github.jhipster.web.util.PaginationUtil; +import io.github.jhipster.web.util.ResponseUtil; /** * REST controller for managing {@link at.ac.uibk.gitsearch.domain.Statistics}. @@ -125,53 +132,65 @@ public class StatisticsResource { /** * {@code GET /statistics/:id} : get the "id" statistics. * - * @param id the id of the statisticsDTO to retrieve. + * @param statisticId the id of the statisticsDTO to retrieve. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body * the statisticsDTO, or with status {@code 404 (Not Found)}. */ - @GetMapping("/statistics/{id}") + @GetMapping("/statistics/{statisticId}") @PreAuthorize("hasAnyRole('ADMIN')") - public ResponseEntity<StatisticsDTO> getStatistics(@PathVariable Long id) { - log.debug("REST request to get Statistics : {}", id); - Optional<StatisticsDTO> statisticsDTO = statisticsService.findOne(id); + public ResponseEntity<StatisticsDTO> getStatistics(@PathVariable Long statisticId) { + log.debug("REST request to get Statistics : {}", statisticId); + Optional<StatisticsDTO> statisticsDTO = statisticsService.findOne(statisticId); return ResponseUtil.wrapOrNotFound(statisticsDTO); } + + protected static final Pattern ExerciseIdPattern = Pattern.compile("(\\d+):(.*)"); /* getStatisticsByExerciseId is used to match the exerciseId of a Gitlab project with the database object for the statistics If a rest request for an exerciseId comes from the client and there is no object with a fitting exerciseId in the DB the server will create a new db entry with number of views as 1 and downloads as 0 */ - @GetMapping("/statistics/exercise/{id}") - public ResponseEntity<StatisticsDTO> getStatisticsByExerciseId(@PathVariable Long id) { - - log.debug("REST request to get Statistics for ExerciseID : {}", id); - Optional<StatisticsDTO> statisticsDTO = statisticsService.findOneByExerciseID(id); - Boolean repoExists = gitlabService.repositoryExists(id.toString()); - - if (repoExists) { - if (statisticsDTO.isPresent()) { - StatisticsDTO newStats = statisticsDTO.get(); - newStats.setViews(newStats.getViews() + 1); - statisticsService.save(newStats); - } - if (!statisticsDTO.isPresent()) { - StatisticsDTO newStats = new StatisticsDTO(); - newStats.setDownloads(0); - newStats.setViews(1); - newStats.setExerciseID(id); - statisticsService.save(newStats); - log.debug("Created new statistics entry for exerciseID: {}", id); - statisticsDTO = Optional.of(newStats); - } - - return ResponseUtil.wrapOrNotFound(statisticsDTO); - } - else{ - return ResponseUtil.wrapOrNotFound(statisticsDTO); - } - } + @GetMapping("/statistics/exercise/**") + public ResponseEntity<StatisticsDTO> getStatisticsByExerciseId(HttpServletRequest request) { + + String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + + String exerciseId = new AntPathMatcher().extractPathWithinPattern(pattern, request.getRequestURI()); + + log.debug("REST request to get Statistics for ExerciseID : {}", exerciseId); + Optional<StatisticsDTO> statisticsDTO = statisticsService.findOneByExerciseID(exerciseId); + + ExerciseId parsedId; + try { + parsedId = ExerciseId.fromString(exerciseId); + } catch (ParseException e) { + return ResponseUtil.wrapOrNotFound(statisticsDTO); + } + Boolean repoExists = gitlabService.repositoryExists(parsedId.getProjectId()); + + if (repoExists) { + if (statisticsDTO.isPresent()) { + StatisticsDTO newStats = statisticsDTO.get(); + newStats.setViews(newStats.getViews() + 1); + statisticsService.save(newStats); + } + if (!statisticsDTO.isPresent()) { + StatisticsDTO newStats = new StatisticsDTO(); + newStats.setDownloads(0); + newStats.setViews(1); + newStats.setExerciseID(exerciseId); + statisticsService.save(newStats); + log.debug("Created new statistics entry for exerciseID: {}", exerciseId); + statisticsDTO = Optional.of(newStats); + } + + return ResponseUtil.wrapOrNotFound(statisticsDTO); + } else { + return ResponseUtil.wrapOrNotFound(statisticsDTO); + } + } /** * {@code DELETE /statistics/:id} : delete the "id" statistics. diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserJWTController.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserJWTController.java index 4dbaa4b3b37ccad14129803d8f6731e668b2055e..cc690b1cca2bc8d404036bc5117a93d92c281011 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserJWTController.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserJWTController.java @@ -1,7 +1,10 @@ package at.ac.uibk.gitsearch.web.rest; +import at.ac.uibk.gitsearch.domain.User; + import at.ac.uibk.gitsearch.security.jwt.JWTFilter; import at.ac.uibk.gitsearch.security.jwt.TokenProvider; +import at.ac.uibk.gitsearch.service.UserService; import at.ac.uibk.gitsearch.web.rest.vm.LoginVM; import com.fasterxml.jackson.annotation.JsonProperty; @@ -27,12 +30,17 @@ import javax.validation.Valid; public class UserJWTController { private final TokenProvider tokenProvider; + + private UserService userService; private final AuthenticationManagerBuilder authenticationManagerBuilder; - public UserJWTController(TokenProvider tokenProvider, AuthenticationManagerBuilder authenticationManagerBuilder) { + public UserJWTController(TokenProvider tokenProvider, + AuthenticationManagerBuilder authenticationManagerBuilder, + UserService userService) { this.tokenProvider = tokenProvider; this.authenticationManagerBuilder = authenticationManagerBuilder; + this.userService = userService; } @PostMapping("/authenticate") @@ -42,6 +50,7 @@ public class UserJWTController { new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword()); Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); + updateLastLogin(authentication); SecurityContextHolder.getContext().setAuthentication(authentication); boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe(); String jwt = tokenProvider.createToken(authentication, rememberMe); @@ -49,6 +58,16 @@ public class UserJWTController { httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK); } + + private void updateLastLogin(Authentication authentication) { + if (authentication.getPrincipal() instanceof User) { + User user = (User) authentication.getPrincipal(); + userService.updateLastLogin(user.getId()); + } else if (authentication.getPrincipal() instanceof org.springframework.security.core.userdetails.User) { + org.springframework.security.core.userdetails.User user = (org.springframework.security.core.userdetails.User) authentication.getPrincipal(); + userService.updateLastLogin(user.getUsername()); + } + } @PostMapping("/refreshToken") public ResponseEntity<JWTToken> refreshToken(@RequestParam("token") String token) { @@ -61,6 +80,7 @@ public class UserJWTController { if(!details.containsKey(TokenProvider.PRE_TOKEN_CLAIM)) { return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); } + updateLastLogin(authentication); SecurityContextHolder.getContext().setAuthentication(authentication); String jwt = tokenProvider.createToken(authentication, false); HttpHeaders httpHeaders = new HttpHeaders(); diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserResource.java index 8820cccd5601ecb866fb223cde0f820965ae8538..64c0943e801466d129e96057d88657896475c29c 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserResource.java @@ -18,7 +18,6 @@ import io.github.jhipster.web.util.ResponseUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResource.java index 87cf4753821f57ae4d72474b2d5daf312e6f6895..8cfe464e2f70d1989b403bf6e8190e13d9e5bae8 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResource.java @@ -8,6 +8,7 @@ import java.util.Optional; import javax.validation.Valid; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; @@ -34,8 +35,6 @@ import at.ac.uibk.gitsearch.service.UserService; import at.ac.uibk.gitsearch.service.UserWatchListQueryService; import at.ac.uibk.gitsearch.service.UserWatchListService; import at.ac.uibk.gitsearch.service.WatchListEntryService; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; import at.ac.uibk.gitsearch.service.dto.UserWatchListCriteria; import at.ac.uibk.gitsearch.service.dto.UserWatchListDTO; import at.ac.uibk.gitsearch.service.dto.WatchListEntryDTO; @@ -96,14 +95,14 @@ public class UserWatchListResource { log.debug("unknown user cannot create watchlist {}", userWatchListDTO.getName()); return ResponseEntity.badRequest().build(); } - if(userWatchListDTO.getUserIdId() == null) { + if(userWatchListDTO.getUserId() == null) { Optional<at.ac.uibk.gitsearch.domain.User> u = userService.getUserWithAuthoritiesByLogin(SecurityUtils.getCurrentUserLogin().get()); if(u.isEmpty()) { log.debug(" user not found, cannot create watchlist {}", userWatchListDTO.getName()); return ResponseEntity.badRequest().build(); } - userWatchListDTO.setUserIdId(u.get().getId()); - userWatchListDTO.setUserIdLogin(u.get().getLastName()); + userWatchListDTO.setUserId(u.get().getId()); + userWatchListDTO.setUserLogin(u.get().getLastName()); } if (userWatchListDTO.getId() != null) { throw new BadRequestAlertException("A new userWatchList cannot already have an ID", ENTITY_NAME, "idexists"); @@ -138,8 +137,8 @@ public class UserWatchListResource { log.warn("Cannot create a watchlist {} for unknown user", springUser.getUsername()); throw new BadRequestAlertException("Cannot create a watchlist for unknown user", ENTITY_NAME, "unknownUser"); } - userWatchListDTO.setUserIdLogin(springUser.getUsername()); - userWatchListDTO.setUserIdId(userWithAuthoritiesByLogin.get().getId()); + userWatchListDTO.setUserLogin(springUser.getUsername()); + userWatchListDTO.setUserId(userWithAuthoritiesByLogin.get().getId()); UserWatchListDTO result = userWatchListService.save(userWatchListDTO); return ResponseEntity.created(new URI("/api/user-watch-lists/" + result.getId())) .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) @@ -207,7 +206,7 @@ public class UserWatchListResource { final LongFilter userIdFilter = new LongFilter(); userIdFilter.setEquals(currentUser.get().getId()); - criteria.setUserIdId(userIdFilter); + criteria.setUserId(userIdFilter); Page<UserWatchListDTO> page = userWatchListQueryService.findByCriteria(criteria, pageable); HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); return ResponseEntity.ok().headers(headers).body(page.getContent()); @@ -293,7 +292,7 @@ public class UserWatchListResource { if(page == null) page = 0; userWatchListService.checkAccessToWatchList(id, "searchExercisesOnWatchlist", true); final List<WatchListEntryDTO> entriesForWatchlist = watchListEntryService.getEntriesForWatchlist(id); - return searchService.watchListResultPage(entriesForWatchlist.stream().map(entry -> entry.getExerciseId()), page, SearchInputDTO.PAGE_SIZE); + return searchService.watchListResultPage(entriesForWatchlist.stream().map(entry -> entry.getExerciseId()), page, 10); } } diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResource.java index 9174220ad6b9742d1dd897873d0d913eece03d61..292447140d480da7faec5f600ad6717fabf9208e 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResource.java @@ -9,7 +9,6 @@ import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; diff --git a/src/main/resources/.h2.server.properties b/src/main/resources/.h2.server.properties index 7455568a1343fa12063c9e390b8ce7bee0dfbd3d..c0dd2502f1bedda8800d7dd7c3008fda3cd6c293 100644 --- a/src/main/resources/.h2.server.properties +++ b/src/main/resources/.h2.server.properties @@ -1,5 +1,5 @@ #H2 Server Properties -#Mon Apr 12 10:02:24 CEST 2021 +#Tue Jun 15 15:37:27 CEST 2021 0=JHipster H2 (Disk)|org.h2.Driver|jdbc\:h2\:file\:./target/h2db/db/gitsearch|gitsearch webSSL=false webAllowOthers=true diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 6688d7ca2ddb4d3cce219b485e65776d147d6c48..13774184825b2df4dbf1c5c63f316c31acaef997 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -19,11 +19,6 @@ logging: io.github.jhipster: DEBUG at.ac.uibk.gitsearch: DEBUG -management: - health: - elasticsearch: - enabled: false - spring: profiles: active: dev @@ -50,7 +45,7 @@ spring: auto-commit: false h2: console: - enabled: false + enabled: true jpa: database-platform: io.github.jhipster.domain.util.FixedH2Dialect show-sql: true @@ -117,7 +112,7 @@ jhipster: token-validity-in-seconds: 86400 token-validity-in-seconds-for-remember-me: 2592000 mail: # specific JHipster mail property, for standard properties see MailProperties - base-url: http://127.0.0.1:8080 + base-url: http://localhost:8080 metrics: logs: # Reports metrics in the logs enabled: false @@ -143,11 +138,9 @@ jhipster: application: registeredConnectors: - - - url: "http://localhost:8081/api/sharing/config" + - url: 'http://localhost:8081/api/sharing/config' accessToken: acdd-erdf-asd2-234f-234d-32eb - - - url: 'http://localhost:8082/api/sharingPluginConfig' + - url: 'http://localhost:8082/api/sharingPluginConfig' accessToken: 2c8845a4-b3df-414b-a682-36e2313dc1c0 registeredConnectorsCallBackURL: http://localhost:8080/api installationName: Sharing Plattform (Development) diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml index 83d77ee776736627a0fff9ec30a3765319dab745..57d809b45f10ee9e87873c7efe2f85ab6d58e81a 100644 --- a/src/main/resources/config/application-prod.yml +++ b/src/main/resources/config/application-prod.yml @@ -57,10 +57,10 @@ spring: liquibase: contexts: prod mail: - host: localhost + host: smtp.uibk.ac.at port: 25 - username: - password: + username: ${MAIL_USERNAME} + password: ${MAIL_PASSWORD} thymeleaf: cache: true security: @@ -127,7 +127,7 @@ jhipster: token-validity-in-seconds: 86400 token-validity-in-seconds-for-remember-me: 2592000 mail: # specific JHipster mail property, for standard properties see MailProperties - base-url: http://my-server-url-to-change # Modify according to your server's URL + base-url: https://search.sharing-codeability.uibk.ac.at/ # Modify according to your server's URL metrics: logs: # Reports metrics in the logs enabled: false @@ -153,12 +153,11 @@ jhipster: application: registeredConnectors: - - - url: 'https://artemis.codeability.uibk.ac.at/api/sharing/config' - accessToken: "notYet" + - url: 'https://artemis.codeability.uibk.ac.at/api/sharing/config' + accessToken: 'notYet' registeredConnectorsCallBackURL: https://search.sharing-codeability.uibk.ac.at//api installationName: Sharing Plattform -# applicationName: Sharing Plattform + # applicationName: Sharing Plattform gitlab: url: https://sharing-codeability.uibk.ac.at/ generalAccessToken: ${APPLICATION_GITLAB_GENERALACCESSTOKEN} diff --git a/src/main/resources/config/application-staging.yml b/src/main/resources/config/application-staging.yml index ac9dc1df3d1d65970d2dc897e994496089f63521..0822ce027207a07e7c6ae1b7342ca06d0afd8894 100644 --- a/src/main/resources/config/application-staging.yml +++ b/src/main/resources/config/application-staging.yml @@ -57,10 +57,10 @@ spring: liquibase: contexts: prod mail: - host: localhost + host: smtp.uibk.ac.at port: 25 - username: - password: + username: ${MAIL_USERNAME} + password: ${MAIL_PASSWORD} thymeleaf: cache: true security: @@ -127,7 +127,7 @@ jhipster: token-validity-in-seconds: 86400 token-validity-in-seconds-for-remember-me: 2592000 mail: # specific JHipster mail property, for standard properties see MailProperties - base-url: http://my-server-url-to-change # Modify according to your server's URL + base-url: https://dev-exchange.codeability-austria.uibk.ac.at/ # Modify according to your server's URL metrics: logs: # Reports metrics in the logs enabled: false @@ -153,11 +153,10 @@ jhipster: application: registeredConnectors: - - - url: "https://artemis.codeability-austria.uibk.ac.at/api/sharing/config" - accessToken: "notYet" + - url: 'https://artemis.codeability-austria.uibk.ac.at/api/sharing/config' + accessToken: 'notYet' registeredConnectorsCallBackURL: https://dev-exchange.codeability-austria.uibk.ac.at/api - installationName: Sharing Plattform (Staging) + installationName: Sharing Plattform (Staging) gitlab: url: https://sharing.codeability-austria.uibk.ac.at/ generalAccessToken: ${APPLICATION_GITLAB_GENERALACCESSTOKEN} diff --git a/src/main/resources/config/liquibase/changelog/20210419144670_added_field_UserWatchList.xml b/src/main/resources/config/liquibase/changelog/20210419144670_added_field_UserWatchList.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd02efc73d8f1ea6eadc04755d540fe1944fa805 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210419144670_added_field_UserWatchList.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd + http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> + + <property name="autoIncrement" value="true"/> + + <!-- + Added the entity UserWatchList. + --> + <changeSet id="20210419144670-1" author="jhipster"> + <addColumn tableName="user_watch_list"> + <column name="check_frequency" type="int" defaultValueNumeric="0"> + <constraints nullable="false" /> + </column> + </addColumn> + </changeSet> + +</databaseChangeLog> diff --git a/src/main/resources/config/liquibase/changelog/20210613120444_added_entity_Likes.xml b/src/main/resources/config/liquibase/changelog/20210613120444_added_entity_Likes.xml new file mode 100644 index 0000000000000000000000000000000000000000..67c43aa949741141630edb739b94b380fd80aeb0 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210613120444_added_entity_Likes.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd + http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> + + <property name="autoIncrement" value="true"/> + + <!-- + Added the entity Likes. + --> + <changeSet id="20210613120444-1" author="jhipster"> + <createTable tableName="likes"> + <column name="id" type="bigint" autoIncrement="${autoIncrement}"> + <constraints primaryKey="true" nullable="false"/> + </column> + <column name="date" type="date"> + <constraints nullable="false" /> + </column> + <column name="user_id" type="integer"> + <constraints nullable="false" /> + </column> + <column name="project_id" type="varchar(255)"> + <constraints nullable="false" /> + </column> + <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here --> + </createTable> + </changeSet> + + <changeSet id="20210613120444-1-relations" author="jhipster"> + + </changeSet> + <!-- jhipster-needle-liquibase-add-changeset - JHipster will add changesets here --> + +</databaseChangeLog> diff --git a/src/main/resources/config/liquibase/changelog/20210618151109_added_fields_User.xml b/src/main/resources/config/liquibase/changelog/20210618151109_added_fields_User.xml new file mode 100644 index 0000000000000000000000000000000000000000..36c01350bb1ea3820efebaf6220671da73a89496 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210618151109_added_fields_User.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd + http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> + + <property name="autoIncrement" value="true"/> + + <!-- + Added the entity ExtendedUser. + --> + <changeSet id="20210618151109-1" author="jhipster"> + <addColumn tableName="jhi_user"> + <column name="last_login" type="datetime"> + <constraints nullable="true" /> + </column> + <column name="last_mail_sent" type="datetime"> + <constraints nullable="true" /> + </column> + <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here --> + </addColumn> + </changeSet> + + <changeSet id="20210618151109-1-relations" author="jhipster"> + + </changeSet> + <!-- jhipster-needle-liquibase-add-changeset - JHipster will add changesets here --> + + +</databaseChangeLog> diff --git a/src/main/resources/config/liquibase/changelog/20210618241110_update_exerciseId_statisticsEtAl.xml b/src/main/resources/config/liquibase/changelog/20210618241110_update_exerciseId_statisticsEtAl.xml new file mode 100644 index 0000000000000000000000000000000000000000..bb7d59dbdfd09a3f68aeb5c5c16eda3074e2e3b4 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210618241110_update_exerciseId_statisticsEtAl.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd + http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> + + <property name="autoIncrement" value="true"/> + + <!-- + change exercise_id from long to string. + --> + <changeSet id="20210624151110-1" author="michael breu"> + <modifyDataType tableName="statistics" columnName="exercise_id" newDataType="varchar(512)" /> + </changeSet> + + <!-- + some extra cleanup for weird named fields + --> + <changeSet id="20210624151110-2" author="michael breu"> + <renameColumn tableName="user_watch_list" oldColumnName="user_id_id" columnDataType="bigint" newColumnName="user_id" /> + <renameColumn tableName="saved_searches" oldColumnName="user_id_id" columnDataType="bigint" newColumnName="user_id" /> + </changeSet> + + <!-- jhipster-needle-liquibase-add-changeset - JHipster will add changesets here --> + + +</databaseChangeLog> diff --git a/src/main/resources/config/liquibase/changelog/20210701160634_changelog.xml b/src/main/resources/config/liquibase/changelog/20210701160634_changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..0362f239cf2c426341127b29830e5219e7f12721 --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210701160634_changelog.xml @@ -0,0 +1,11 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.9.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd"> + <changeSet author="root (generated)" id="1625155676503-2"> + <createIndex indexName="IDXahv9tfju817buqi6so79tecsu" tableName="statistics"> + <column name="exercise_id"/> + </createIndex> + </changeSet> + <changeSet author="root (generated)" id="1625155676503-1"> + <dropDefaultValue columnDataType="int" columnName="check_frequency" tableName="user_watch_list"/> + </changeSet> +</databaseChangeLog> diff --git a/src/main/resources/config/liquibase/changelog/20210702104135_update_projectID_Likes.xml b/src/main/resources/config/liquibase/changelog/20210702104135_update_projectID_Likes.xml new file mode 100644 index 0000000000000000000000000000000000000000..35c10aa3249e7bb62b50d16be981c15dc011ee6b --- /dev/null +++ b/src/main/resources/config/liquibase/changelog/20210702104135_update_projectID_Likes.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd + http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> + + <!-- + change project_id to name exercise_id. + --> + <changeSet id="20210702104135-1" author="eduard frankford"> + <renameColumn tableName="likes" oldColumnName="project_id" columnDataType="varchar(255)" newColumnName="exercise_id" /> + </changeSet> + +</databaseChangeLog> \ No newline at end of file diff --git a/src/main/resources/config/liquibase/fake-data/likes.csv b/src/main/resources/config/liquibase/fake-data/likes.csv new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/main/resources/config/liquibase/master.xml b/src/main/resources/config/liquibase/master.xml index 3f1fe4a58b15625d5c53328fa123857a7578ee03..bd9321aa6bf4ea755346c71b980e52d2b34e935b 100644 --- a/src/main/resources/config/liquibase/master.xml +++ b/src/main/resources/config/liquibase/master.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<databaseChangeLog - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd"> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd"> <property name="now" value="now()" dbms="h2"/> <property name="now" value="now()" dbms="mysql, mariadb"/> @@ -18,10 +16,18 @@ <include file="config/liquibase/changelog/20210414140546_added_entity_UserWatchList.xml" relativeToChangelogFile="false"/> <include file="config/liquibase/changelog/20210414141350_added_entity_WatchListEntry.xml" relativeToChangelogFile="false"/> <include file="config/liquibase/changelog/20210414150955_added_entity_SavedSearches.xml" relativeToChangelogFile="false"/> - <!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here --> + <include file="config/liquibase/changelog/20210618151109_added_fields_User.xml" relativeToChangelogFile="false"/> <include file="config/liquibase/changelog/20210414140546_added_entity_constraints_UserWatchList.xml" relativeToChangelogFile="false"/> <include file="config/liquibase/changelog/20210414150955_added_entity_constraints_SavedSearches.xml" relativeToChangelogFile="false"/> <include file="config/liquibase/changelog/20210419144638_added_entity_constraints_WatchListEntry.xml" relativeToChangelogFile="false"/> + <include file="config/liquibase/changelog/20210419144670_added_field_UserWatchList.xml" relativeToChangelogFile="false"/> + <include file="config/liquibase/changelog/20210618241110_update_exerciseId_statisticsEtAl.xml" relativeToChangelogFile="false"/> + <include file="config/liquibase/changelog/20210613120444_added_entity_Likes.xml" relativeToChangelogFile="false"/> + <include file="config/liquibase/changelog/20210701160634_changelog.xml" relativeToChangelogFile="false"/> + <include file="config/liquibase/changelog/20210702104135_update_projectID_Likes.xml" relativeToChangelogFile="false"/> + + <!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here --> + <!-- jhipster-needle-liquibase-add-constraints-changelog - JHipster will add liquibase constraints changelogs here --> <!-- jhipster-needle-liquibase-add-incremental-changelog - JHipster will add incremental liquibase changelogs here --> </databaseChangeLog> diff --git a/src/main/resources/i18n/messages_de.properties b/src/main/resources/i18n/messages_de.properties index e0d17ca2d68b1921ffb5eb21ee76335f9ee836f2..6568db571e17936af5166da25fada3c9f4a840a2 100644 --- a/src/main/resources/i18n/messages_de.properties +++ b/src/main/resources/i18n/messages_de.properties @@ -19,3 +19,19 @@ email.reset.title=gitsearch Passwort zurücksetzen email.reset.greeting=Liebe(r) {0} email.reset.text1=Für Ihren gitsearch Account wurde ein neues Passwort angefordert, bitte klicken Sie unten auf den Link, um das Passwort zurückzusetzen: email.reset.text2=Grüße, +# Info email +email.info.title=Austausch Plattform: Aktualisierungsinformation +email.info.greeting=Sehr geehrter Nutzer, +email.info.textIntro=Diese E-Mail wurde versandt, da sich Inhalte in der Plattform, die Sie beobachten, geändert haben. +email.info.textWatchlist=Einige Aufgabe auf Ihrer Lesezeichenliste wurden k�rzlich aktualisiert: +email.info.noChangesOnWatchlist=Es gab keine Änderungen auf Ihren Lesezeichenliste seit dem letzten Email-Versand. +email.info.textRegards=Mit besten Grüßen, +email.info.textClosing=Falls Sie diese Mail nicht mehr erhalten wollen, loggen Sie sich bitte auf der Austauschplattform ein und passen Sie Ihre Einstellungen an: +# Info email +email.info.title=Austausch Plattform: Aktualisierungsinformation +email.info.greeting=Sehr geehrter Nutzer, +email.info.textIntro=Diese E-Mail wurde versandt, da sich Inhalte in der Plattform, die Sie beobachten, geändert haben. +email.info.textWatchlist=Einige Aufgabe auf Ihrer Lesezeichenliste wurden k�rzlich aktualisiert: +email.info.noChangesOnWatchlist=Mit dieser E-Mail möchten wir Sie darüber informieren, dass es keine Änderung in Ihren Lesezeichenlisten gab. +email.info.textRegards=Mit besten Grüßen, +email.info.textClosing=Falls Sie diese Mail nicht mehr erhalten wollen, loggen Sie sich bitte auf der Austauschplattform ein und passen Sie Ihre Einstellungen an: diff --git a/src/main/resources/i18n/messages_en.properties b/src/main/resources/i18n/messages_en.properties index a4c9e6144fc34d3c72f53ce73557862661832177..400c5ba720c012aa89ffda13b76ab727313c490a 100644 --- a/src/main/resources/i18n/messages_en.properties +++ b/src/main/resources/i18n/messages_en.properties @@ -9,7 +9,7 @@ email.activation.title=gitsearch account activation email.activation.greeting=Dear {0} email.activation.text1=Your gitsearch account has been created, please click on the URL below to activate it: email.activation.text2=Regards, -email.signature=gitsearch Team. +email.signature=Your CodeAbility Sharing Platform Service Team # Creation email email.creation.text1=Your gitsearch account has been created, please click on the URL below to access it: @@ -19,3 +19,14 @@ email.reset.title=gitsearch password reset email.reset.greeting=Dear {0} email.reset.text1=For your gitsearch account a password reset was requested, please click on the URL below to reset it: email.reset.text2=Regards, + +# Info email +email.info.title=Sharing Platform: Update Mail +email.info.greeting=Dear {0} {1}, +email.info.textIntro=You get this e-mail, because some of your automatic checks was triggered. +email.info.textWatchlist=Some exercises on your watchlist were recently updated: +email.info.noChangesOnWatchlist=With this e-mail we inform you that there were no changes on your watchlists. +email.info.textRegards=Regards, +email.info.textClosing=If you are not interested in getting this e-mail, please log in to the CodeAbility Sharing Platform, and reset your update triggers: + + diff --git a/src/main/resources/templates/mail/info/infoEmail.html b/src/main/resources/templates/mail/info/infoEmail.html new file mode 100644 index 0000000000000000000000000000000000000000..f0eb0fc29f2f9dc5ca41484333390da9b3a7c218 --- /dev/null +++ b/src/main/resources/templates/mail/info/infoEmail.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org" th:lang="${#locale.language}" lang="en"> + <head> + <title th:text="#{email.info.title}">Sharing Platform Info Update</title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <link rel="icon" th:href="@{|${baseUrl}/favicon.ico|}" /> + </head> + <body> + <p th:text="#{email.info.greeting(null == ${user.firstName}?'':${user.firstName}, ${user.lastName})}"> + Dear participant, + </p> + <p th:if="${#lists.isEmpty(watchListUpdates)}" th:text="#{email.info.noChangesOnWatchlist}">With this E-mail we inform you that there were no changes on your watchlists.</p> + <div th:if="${not #lists.isEmpty(watchListUpdates)}"> + <p th:text="#{email.info.textIntro}"> + you get this e-mail, because one of your automatic checks was triggered. + </p> + <p th:text="#{email.info.textWatchlist}"> + Some exercises on your watchlist were recently updated: + </p> + + <table><caption>Updated Exercises</caption><tr><th scope="col">Exercise Name</th><th scope="col">Watchlist</th></tr> + <tr th:each="wlUpdate: ${watchListUpdates}"> + <td><span th:text="${wlUpdate.key.metadata.title}"></span><span th:text="${#temporals.format(wlUpdate.key.project.last_activity_at,'dd MMMM yyyy')}">Exercise title</span></td> + <td th:text="${wlUpdate.value.name}">Exercise title</td> + </tr> + + </table> + </div> + <p> + <span th:text="#{email.info.textRegards}">Regards, </span> + <br/> + <em th:text="#{email.signature}">Your CodeAbility Sharing Platform Service Team.</em> + </p> + <br/><br/> + <p><span th:text="#{email.info.textClosing}"> + If you are not interested in getting this e-mail, please log in to the CodeAbility Sharing Platform, and reset your update triggers + </span> <a th:with="url=(@{|${baseUrl}|})" th:href="${url}" th:text="${url}">Link to the Sharing Plattform</a> + </p> + + </body> +</html> diff --git a/src/main/webapp/app/account/settings/settings.component.html b/src/main/webapp/app/account/settings/settings.component.html index 3fa2a75c5ed2e0e8adc629362a9402be4c01bb1c..84113dffb14ebe893448fa2551ced2349e67b915 100644 --- a/src/main/webapp/app/account/settings/settings.component.html +++ b/src/main/webapp/app/account/settings/settings.component.html @@ -105,4 +105,9 @@ </form> </div> </div> + <div class="row justify-content-center"> + <div> + <button type="submit" class="btn btn-primary" (click)="triggerInfoMailSending()" jhiTranslate="settings.test.emailSending">Test Mail Sending</button> + </div> + </div> </div> diff --git a/src/main/webapp/app/account/settings/settings.component.ts b/src/main/webapp/app/account/settings/settings.component.ts index 26ad250d83dbdfb0a1793cf9fdd95843eff70f77..1db150c15b00e4083b56ec43bbe833e7c4900cb6 100644 --- a/src/main/webapp/app/account/settings/settings.component.ts +++ b/src/main/webapp/app/account/settings/settings.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, Validators } from '@angular/forms'; import { JhiLanguageService } from 'ng-jhipster'; +import { TestService, Message } from 'app/shared/service/test-service'; import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/user/account.model'; @@ -21,7 +22,12 @@ export class SettingsComponent implements OnInit { langKey: [undefined], }); - constructor(private accountService: AccountService, private fb: FormBuilder, private languageService: JhiLanguageService) {} + constructor( + private accountService: AccountService, + private testService: TestService, + private fb: FormBuilder, + private languageService: JhiLanguageService + ) {} ngOnInit(): void { this.accountService.identity().subscribe(account => { @@ -56,4 +62,13 @@ export class SettingsComponent implements OnInit { } }); } + + public triggerInfoMailSending(): void { + this.testService.triggerInfoMail().subscribe( + (m: Message) => { + alert(m.message); + }, + () => alert('Message sending failed!') + ); + } } diff --git a/src/main/webapp/app/admin/user-management/user-management.component.html b/src/main/webapp/app/admin/user-management/user-management.component.html index 751712b69cf04f98220362f6f5d958b81b0e4d29..277e7fcea83ed9622d8ab37f145fa80f29320c22 100644 --- a/src/main/webapp/app/admin/user-management/user-management.component.html +++ b/src/main/webapp/app/admin/user-management/user-management.component.html @@ -24,6 +24,8 @@ <th scope="col" jhiSortBy="createdDate"><span jhiTranslate="userManagement.createdDate">Created Date</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col" jhiSortBy="lastModifiedBy"><span jhiTranslate="userManagement.lastModifiedBy">Last Modified By</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col" jhiSortBy="lastModifiedDate"><span jhiTranslate="userManagement.lastModifiedDate">Last Modified Date</span> <fa-icon icon="sort"></fa-icon></th> + <th scope="col" ><span jhiTranslate="userManagement.lastLogin">Last Login</span></th> + <th scope="col" ><span jhiTranslate="userManagement.lastMailSent">Last Mail Sent</span></th> <th scope="col"></th> </tr> </thead> @@ -47,6 +49,8 @@ <td>{{ user.createdDate | date:'dd/MM/yy HH:mm' }}</td> <td>{{ user.lastModifiedBy }}</td> <td>{{ user.lastModifiedDate | date:'dd/MM/yy HH:mm' }}</td> + <td>{{ user.lastLogin | date:'medium' }}</td> + <td>{{ user.lastMailSent | date:'medium' }}</td> <td class="text-right"> <div class="btn-group"> <button type="submit" diff --git a/src/main/webapp/app/bookmarks/bookmarks-update.component.html b/src/main/webapp/app/bookmarks/bookmarks-update.component.html index 4d4dc41c5a9c7e8dd08053b9dbd051d260e2cb4d..2aaa9b5be9aeefc4f6234bd8e9badf8f88c0bd2b 100644 --- a/src/main/webapp/app/bookmarks/bookmarks-update.component.html +++ b/src/main/webapp/app/bookmarks/bookmarks-update.component.html @@ -26,18 +26,30 @@ </small> </div> </div> - + <div class="form-group"> + <label class="form-control-label" jhiTranslate="gitsearchApp.userWatchList.checkFrequency" for="field_checkFrequency">Check Frequency</label> + <ng-template #helpFulltext> {{ 'gitsearchApp.userWatchList.help.checkFrequency' | translate}}</ng-template> + <fa-icon style="padding: 10px 0px 0px 10px;" [ngbTooltip]="helpFulltext" container="body" [icon]="questionIcon"></fa-icon> + + <select class="form-control" name="checkFrequency" formControlName="checkFrequency" id="field_checkFrequency"> + <option value="NEVER">{{ 'gitsearchApp.CheckFrequency.NEVER' | translate }}</option> + <option value="DAILY">{{ 'gitsearchApp.CheckFrequency.DAILY' | translate }}</option> + <option value="WEEKLY">{{ 'gitsearchApp.CheckFrequency.WEEKLY' | translate }}</option> + <option value="MONTHLY">{{ 'gitsearchApp.CheckFrequency.MONTHLY' | translate }}</option> + </select> + </div> + <!-- <div class="form-group"> <label class="form-control-label" jhiTranslate="gitsearchApp.userWatchList.userId" for="field_userId">User Id</label> - <select class="form-control" id="field_userId" name="userId" formControlName="userIdId"> - <option *ngIf="!editForm.get('userIdId')!.value" [ngValue]="null" selected></option> + <select class="form-control" id="field_userId" name="userId" formControlName="userId"> + <option *ngIf="!editForm.get('userId')!.value" [ngValue]="null" selected></option> <option [ngValue]="userOption.id" *ngFor="let userOption of users; trackBy: trackById">{{ userOption.login }}</option> </select> </div> - <div *ngIf="editForm.get('userIdId')!.invalid && (editForm.get('userIdId')!.dirty || editForm.get('userIdId')!.touched)"> + <div *ngIf="editForm.get('userId')!.invalid && (editForm.get('userId')!.dirty || editForm.get('userId')!.touched)"> <small class="form-text text-danger" - *ngIf="editForm.get('userIdId')?.errors?.required" jhiTranslate="entity.validation.required"> + *ngIf="editForm.get('userId')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. </small> </div> diff --git a/src/main/webapp/app/bookmarks/bookmarks-update.component.ts b/src/main/webapp/app/bookmarks/bookmarks-update.component.ts index f84f945012761469eabf9ca89174440687cd3275..267654d4de7cac1e61fd25111f52282cc8226edf 100644 --- a/src/main/webapp/app/bookmarks/bookmarks-update.component.ts +++ b/src/main/webapp/app/bookmarks/bookmarks-update.component.ts @@ -5,8 +5,10 @@ import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; import { WatchlistManager } from 'app/shared/watchlist/watchlist-manager'; +import { faQuestion } from '@fortawesome/free-solid-svg-icons'; import { IUserWatchList, UserWatchList } from 'app/shared/model/user-watch-list.model'; +import { CheckFrequency } from 'app/shared/model/enumerations/check-frequency.model'; import { IUser } from 'app/core/user/user.model'; import { UserService } from 'app/core/user/user.service'; @@ -17,11 +19,13 @@ import { UserService } from 'app/core/user/user.service'; export class UserWatchListUpdateComponent implements OnInit { isSaving = false; users: IUser[] = []; + questionIcon = faQuestion; editForm = this.fb.group({ id: [], name: [null, [Validators.required, Validators.minLength(1)]], - userIdId: [null], + userId: [null], + checkFrequency: CheckFrequency.NEVER, }); constructor( @@ -43,7 +47,8 @@ export class UserWatchListUpdateComponent implements OnInit { this.editForm.patchValue({ id: userWatchList.id, name: userWatchList.name, - userIdId: userWatchList.userIdId, + userId: userWatchList.userId, + checkFrequency: userWatchList.checkFrequency, }); } @@ -66,7 +71,8 @@ export class UserWatchListUpdateComponent implements OnInit { ...new UserWatchList(), id: this.editForm.get(['id'])!.value, name: this.editForm.get(['name'])!.value, - userIdId: this.editForm.get(['userIdId'])!.value, + userId: this.editForm.get(['userId'])!.value, + checkFrequency: this.editForm.get(['checkFrequency'])!.value, }; } diff --git a/src/main/webapp/app/bookmarks/bookmarks.component.html b/src/main/webapp/app/bookmarks/bookmarks.component.html index 7d30ed4c6c634ab09239fdd0d137d7f652850af2..1b337e3ed03d972124a52b4866bb0c2324843c28 100644 --- a/src/main/webapp/app/bookmarks/bookmarks.component.html +++ b/src/main/webapp/app/bookmarks/bookmarks.component.html @@ -108,4 +108,4 @@ </div> </div> -<jhi-exercise-details [exercise]="selectedResult"></jhi-exercise-details> +<jhi-exercise-details [exercise]="selectedResult" (exerciseChangedEvent)="selectExercise($event)"></jhi-exercise-details> diff --git a/src/main/webapp/app/bookmarks/bookmarks.component.ts b/src/main/webapp/app/bookmarks/bookmarks.component.ts index 0ad4cb78450ce4d624d843f343f69bb4b7e8b87d..3c69ef4cc2bd9f55cb493e40308f08896802d4b1 100644 --- a/src/main/webapp/app/bookmarks/bookmarks.component.ts +++ b/src/main/webapp/app/bookmarks/bookmarks.component.ts @@ -214,6 +214,8 @@ export class BookmarkComponent implements OnInit, OnDestroy { originalResult: searchResult, views: searchResult.views, downloads: searchResult.downloads, + numberOfLikes: 0, + userHasLiked: false, }; } diff --git a/src/main/webapp/app/core/core.module.ts b/src/main/webapp/app/core/core.module.ts index 8f76c1e3a12e247244632c8e22340ae739ca3988..bc3389265275703d86055ae8739afe3db16bf8b7 100644 --- a/src/main/webapp/app/core/core.module.ts +++ b/src/main/webapp/app/core/core.module.ts @@ -3,6 +3,7 @@ import { DatePipe, registerLocaleData } from '@angular/common'; import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { Title } from '@angular/platform-browser'; import { FaIconLibrary } from '@fortawesome/angular-fontawesome'; +// import { far } from '@fortawesome/free-regular-svg-icons'; import { CookieService } from 'ngx-cookie-service'; import { TranslateModule, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core'; import { NgxWebstorageModule } from 'ngx-webstorage'; @@ -19,6 +20,7 @@ import { ErrorHandlerInterceptor } from 'app/blocks/interceptor/errorhandler.int import { NotificationInterceptor } from 'app/blocks/interceptor/notification.interceptor'; import { fontAwesomeIcons } from './icons/font-awesome-icons'; +import { fontAwesomeRegularIcons } from './icons/font-awesome-icons'; import { fas } from '@fortawesome/free-solid-svg-icons'; @NgModule({ @@ -81,6 +83,7 @@ export class GitSearchV2CoreModule { registerLocaleData(locale); iconLibrary.addIconPacks(fas); iconLibrary.addIcons(...fontAwesomeIcons); + iconLibrary.addIcons(...fontAwesomeRegularIcons); dpConfig.minDate = { year: moment().year() - 100, month: 1, day: 1 }; languageService.init(); } diff --git a/src/main/webapp/app/core/icons/font-awesome-icons.ts b/src/main/webapp/app/core/icons/font-awesome-icons.ts index 46617c114e871ef590f14cd64b545c1efe49d70e..e237b1b0fa198c20e60589d5a9bb0eaa8c9863e7 100644 --- a/src/main/webapp/app/core/icons/font-awesome-icons.ts +++ b/src/main/webapp/app/core/icons/font-awesome-icons.ts @@ -35,9 +35,12 @@ import { faHome, faLanguage, faDownload, + faTree, // jhipster-needle-add-icon-import } from '@fortawesome/free-solid-svg-icons'; +import { faHeart as farHeart } from '@fortawesome/free-regular-svg-icons'; + export const fontAwesomeIcons = [ faUser, faSort, @@ -76,5 +79,11 @@ export const fontAwesomeIcons = [ faLanguage, faBook, faDownload, + faTree, + // jhipster-needle-add-icon-import +]; + +export const fontAwesomeRegularIcons = [ + farHeart, // jhipster-needle-add-icon-import ]; diff --git a/src/main/webapp/app/core/user/user.model.ts b/src/main/webapp/app/core/user/user.model.ts index 585f7eddab427954f845492a80c4782a55097da3..418b1015e01f6a58c1ca65da0f857bf33d8d5f3f 100644 --- a/src/main/webapp/app/core/user/user.model.ts +++ b/src/main/webapp/app/core/user/user.model.ts @@ -1,3 +1,5 @@ +import { Moment } from 'moment'; + export interface IUser { id?: any; login?: string; @@ -12,6 +14,8 @@ export interface IUser { lastModifiedBy?: string; lastModifiedDate?: Date; password?: string; + lastLogin?: Moment; + lastMailSent?: Moment; } export class User implements IUser { diff --git a/src/main/webapp/app/entities/entity.module.ts b/src/main/webapp/app/entities/entity.module.ts index 31c2d1f3295b29fc85a6c3c58583404f05b49e74..75a02faacdb0f8045e34a782c3fa915796f19dd5 100644 --- a/src/main/webapp/app/entities/entity.module.ts +++ b/src/main/webapp/app/entities/entity.module.ts @@ -20,6 +20,10 @@ import { RouterModule } from '@angular/router'; path: 'saved-searches', loadChildren: () => import('./saved-searches/saved-searches.module').then(m => m.GitsearchSavedSearchesModule), }, + { + path: 'likes', + loadChildren: () => import('./likes/likes.module').then(m => m.GitsearchLikesModule), + }, /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ ]), ], diff --git a/src/main/webapp/app/entities/likes/likes-delete-dialog.component.html b/src/main/webapp/app/entities/likes/likes-delete-dialog.component.html new file mode 100644 index 0000000000000000000000000000000000000000..9a21cc29e4cd8e4b27891e4b88bfe1ba5e9b9869 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-delete-dialog.component.html @@ -0,0 +1,24 @@ +<form *ngIf="likes" name="deleteForm" (ngSubmit)="confirmDelete(likes?.id!)"> + <div class="modal-header"> + <h4 class="modal-title" jhiTranslate="entity.delete.title">Confirm delete operation</h4> + + <button type="button" class="close" data-dismiss="modal" aria-hidden="true" + (click)="cancel()">×</button> + </div> + + <div class="modal-body"> + <jhi-alert-error></jhi-alert-error> + + <p id="jhi-delete-likes-heading" jhiTranslate="gitsearchApp.likes.delete.question" [translateValues]="{ id: likes.id }">Are you sure you want to delete this Likes?</p> + </div> + + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal" (click)="cancel()"> + <fa-icon icon="ban"></fa-icon> <span jhiTranslate="entity.action.cancel">Cancel</span> + </button> + + <button id="jhi-confirm-delete-likes" type="submit" class="btn btn-danger"> + <fa-icon icon="times"></fa-icon> <span jhiTranslate="entity.action.delete">Delete</span> + </button> + </div> +</form> diff --git a/src/main/webapp/app/entities/likes/likes-delete-dialog.component.ts b/src/main/webapp/app/entities/likes/likes-delete-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..fdbd1ec44ac75657d40c8db337e758f31783fda5 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-delete-dialog.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { ILikes } from 'app/shared/model/likes.model'; +import { LikesService } from './likes.service'; + +@Component({ + templateUrl: './likes-delete-dialog.component.html', +}) +export class LikesDeleteDialogComponent { + likes?: ILikes; + + constructor(protected likesService: LikesService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmDelete(id: number): void { + this.likesService.delete(id).subscribe(() => { + this.eventManager.broadcast('likesListModification'); + this.activeModal.close(); + }); + } +} diff --git a/src/main/webapp/app/entities/likes/likes-detail.component.html b/src/main/webapp/app/entities/likes/likes-detail.component.html new file mode 100644 index 0000000000000000000000000000000000000000..b10516a120770418f90581b87a0112bd6237d4f4 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-detail.component.html @@ -0,0 +1,38 @@ +<div class="row justify-content-center"> + <div class="col-8"> + <div *ngIf="likes"> + <h2><span jhiTranslate="gitsearchApp.likes.detail.title">Likes</span> {{ likes.id }}</h2> + + <hr> + + <jhi-alert-error></jhi-alert-error> + + <dl class="row-md jh-entity-details"> + <dt><span jhiTranslate="gitsearchApp.likes.date">Date</span></dt> + <dd> + <span>{{ likes.date }}</span> + </dd> + <dt><span jhiTranslate="gitsearchApp.likes.userID">User ID</span></dt> + <dd> + <span>{{ likes.userID }}</span> + </dd> + <dt><span jhiTranslate="gitsearchApp.likes.exerciseID">Exercise ID</span></dt> + <dd> + <span>{{ likes.exerciseID }}</span> + </dd> + </dl> + + <button type="submit" + (click)="previousState()" + class="btn btn-info"> + <fa-icon icon="arrow-left"></fa-icon> <span jhiTranslate="entity.action.back">Back</span> + </button> + + <button type="button" + [routerLink]="['/likes', likes.id, 'edit']" + class="btn btn-primary"> + <fa-icon icon="pencil-alt"></fa-icon> <span jhiTranslate="entity.action.edit">Edit</span> + </button> + </div> + </div> +</div> diff --git a/src/main/webapp/app/entities/likes/likes-detail.component.ts b/src/main/webapp/app/entities/likes/likes-detail.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..dde5d83ca1f12e7aa17ce99dfa06846f434d17d9 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-detail.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { ILikes } from 'app/shared/model/likes.model'; + +@Component({ + selector: 'jhi-likes-detail', + templateUrl: './likes-detail.component.html', +}) +export class LikesDetailComponent implements OnInit { + likes: ILikes | null = null; + + constructor(protected activatedRoute: ActivatedRoute) {} + + ngOnInit(): void { + this.activatedRoute.data.subscribe(({ likes }) => (this.likes = likes)); + } + + previousState(): void { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/likes/likes-update.component.html b/src/main/webapp/app/entities/likes/likes-update.component.html new file mode 100644 index 0000000000000000000000000000000000000000..27a70d36c4dcc90d1efb300bceba0c1abedcb261 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-update.component.html @@ -0,0 +1,74 @@ +<div class="row justify-content-center"> + <div class="col-8"> + <form name="editForm" role="form" novalidate (ngSubmit)="save()" [formGroup]="editForm"> + <h2 id="jhi-likes-heading" jhiTranslate="gitsearchApp.likes.home.createOrEditLabel">Create or edit a Likes</h2> + + <div> + <jhi-alert-error></jhi-alert-error> + + <div class="form-group" [hidden]="!editForm.get('id')!.value"> + <label for="id" jhiTranslate="global.field.id">ID</label> + <input type="text" class="form-control" id="id" name="id" formControlName="id" readonly /> + </div> + + <div class="form-group"> + <label class="form-control-label" jhiTranslate="gitsearchApp.likes.date" for="field_date">Date</label> + <div class="input-group"> + <input id="field_date" type="text" class="form-control" name="date" ngbDatepicker #dateDp="ngbDatepicker" formControlName="date"/> + <span class="input-group-append"> + <button type="button" class="btn btn-secondary" (click)="dateDp.toggle()"><fa-icon icon="calendar-alt"></fa-icon></button> + </span> + </div> + <div *ngIf="editForm.get('date')!.invalid && (editForm.get('date')!.dirty || editForm.get('date')!.touched)"> + <small class="form-text text-danger" + *ngIf="editForm.get('date')?.errors?.required" jhiTranslate="entity.validation.required"> + This field is required. + </small> + </div> + </div> + + <div class="form-group"> + <label class="form-control-label" jhiTranslate="gitsearchApp.likes.userID" for="field_userID">User ID</label> + <input type="number" class="form-control" name="userID" id="field_userID" + formControlName="userID"/> + <div *ngIf="editForm.get('userID')!.invalid && (editForm.get('userID')!.dirty || editForm.get('userID')!.touched)"> + <small class="form-text text-danger" + *ngIf="editForm.get('userID')?.errors?.required" jhiTranslate="entity.validation.required"> + This field is required. + </small> + <small class="form-text text-danger" + [hidden]="!editForm.get('userID')?.errors?.number" jhiTranslate="entity.validation.number"> + This field should be a number. + </small> + </div> + </div> + + <div class="form-group"> + <label class="form-control-label" jhiTranslate="gitsearchApp.likes.projectID" for="field_projectID">Project ID</label> + <input type="number" class="form-control" name="projectID" id="field_projectID" + formControlName="projectID"/> + <div *ngIf="editForm.get('projectID')!.invalid && (editForm.get('projectID')!.dirty || editForm.get('projectID')!.touched)"> + <small class="form-text text-danger" + *ngIf="editForm.get('projectID')?.errors?.required" jhiTranslate="entity.validation.required"> + This field is required. + </small> + <small class="form-text text-danger" + [hidden]="!editForm.get('projectID')?.errors?.number" jhiTranslate="entity.validation.number"> + This field should be a number. + </small> + </div> + </div> + </div> + + <div> + <button type="button" id="cancel-save" class="btn btn-secondary" (click)="previousState()"> + <fa-icon icon="ban"></fa-icon> <span jhiTranslate="entity.action.cancel">Cancel</span> + </button> + + <button type="submit" id="save-entity" [disabled]="editForm.invalid || isSaving" class="btn btn-primary"> + <fa-icon icon="save"></fa-icon> <span jhiTranslate="entity.action.save">Save</span> + </button> + </div> + </form> + </div> +</div> diff --git a/src/main/webapp/app/entities/likes/likes-update.component.ts b/src/main/webapp/app/entities/likes/likes-update.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b8cb050f7fe010ec662ae90d8ab8dca145aaf09 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes-update.component.ts @@ -0,0 +1,82 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs'; + +import { ILikes, Likes } from 'app/shared/model/likes.model'; +import { LikesService } from './likes.service'; + +@Component({ + selector: 'jhi-likes-update', + templateUrl: './likes-update.component.html', +}) +export class LikesUpdateComponent implements OnInit { + isSaving = false; + dateDp: any; + + editForm = this.fb.group({ + id: [], + date: [null, [Validators.required]], + userID: [null, [Validators.required]], + exerciseID: [null, [Validators.required]], + }); + + constructor(protected likesService: LikesService, protected activatedRoute: ActivatedRoute, private fb: FormBuilder) {} + + ngOnInit(): void { + this.activatedRoute.data.subscribe(({ likes }) => { + this.updateForm(likes); + }); + } + + updateForm(likes: ILikes): void { + this.editForm.patchValue({ + id: likes.id, + date: likes.date, + userID: likes.userID, + exerciseID: likes.exerciseID, + }); + } + + previousState(): void { + window.history.back(); + } + + save(): void { + this.isSaving = true; + const likes = this.createFromForm(); + if (likes.id !== undefined) { + this.subscribeToSaveResponse(this.likesService.update(likes)); + } else { + this.subscribeToSaveResponse(this.likesService.create(likes)); + } + } + + private createFromForm(): ILikes { + return { + ...new Likes(), + id: this.editForm.get(['id'])!.value, + date: this.editForm.get(['date'])!.value, + userID: this.editForm.get(['userID'])!.value, + exerciseID: this.editForm.get(['exerciseID'])!.value, + }; + } + + protected subscribeToSaveResponse(result: Observable<HttpResponse<ILikes>>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); + } + + protected onSaveSuccess(): void { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError(): void { + this.isSaving = false; + } +} diff --git a/src/main/webapp/app/entities/likes/likes.component.html b/src/main/webapp/app/entities/likes/likes.component.html new file mode 100644 index 0000000000000000000000000000000000000000..cd8d200785783eacab6d833ca514bffed375b199 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes.component.html @@ -0,0 +1,83 @@ +<div> + <h2 id="page-heading"> + <span jhiTranslate="gitsearchApp.likes.home.title">Likes</span> + + <button id="jh-create-entity" class="btn btn-primary float-right jh-create-entity create-likes" [routerLink]="['/likes/new']"> + <fa-icon icon="plus"></fa-icon> + <span class="hidden-sm-down" jhiTranslate="gitsearchApp.likes.home.createLabel"> + Create a new Likes + </span> + </button> + </h2> + + <jhi-alert-error></jhi-alert-error> + + <jhi-alert></jhi-alert> + + <div class="row"> + <div class="col-sm-12"> + <form name="searchForm" class="form-inline"> + <div class="input-group w-100 mt-3"> + <input type="text" class="form-control" [(ngModel)]="currentSearch" id="currentSearch" name="currentSearch" placeholder="{{ 'gitsearchApp.likes.home.search' | translate }}"> + + <button class="input-group-append btn btn-info" (click)="search(currentSearch)"> + <fa-icon icon="search"></fa-icon> + </button> + + <button class="input-group-append btn btn-danger" (click)="search('')" *ngIf="currentSearch"> + <fa-icon icon="trash-alt"></fa-icon> + </button> + </div> + </form> + </div> + </div> + + <div class="alert alert-warning" id="no-result" *ngIf="likes?.length === 0"> + <span jhiTranslate="gitsearchApp.likes.home.notFound">No likes found</span> + </div> + + <div class="table-responsive" id="entities" *ngIf="likes && likes.length > 0"> + <table class="table table-striped" aria-describedby="page-heading"> + <thead> + <tr> + <th scope="col" ><span jhiTranslate="global.field.id">ID</span></th> + <th scope="col" ><span jhiTranslate="gitsearchApp.likes.date">Date</span></th> + <th scope="col" ><span jhiTranslate="gitsearchApp.likes.userID">User ID</span></th> + <th scope="col" ><span jhiTranslate="gitsearchApp.likes.projectID">Project ID</span></th> + <th scope="col"></th> + </tr> + </thead> + <tbody> + <tr *ngFor="let likes of likes ;trackBy: trackId"> + <td><a [routerLink]="['/likes', likes.id, 'view']">{{ likes.id }}</a></td> + <td>{{ likes.date | date:'mediumDate' }}</td> + <td>{{ likes.userID }}</td> + <td>{{ likes.projectID }}</td> + <td class="text-right"> + <div class="btn-group"> + <button type="submit" + [routerLink]="['/likes', likes.id, 'view']" + class="btn btn-info btn-sm"> + <fa-icon icon="eye"></fa-icon> + <span class="d-none d-md-inline" jhiTranslate="entity.action.view">View</span> + </button> + + <button type="submit" + [routerLink]="['/likes', likes.id, 'edit']" + class="btn btn-primary btn-sm"> + <fa-icon icon="pencil-alt"></fa-icon> + <span class="d-none d-md-inline" jhiTranslate="entity.action.edit">Edit</span> + </button> + + <button type="submit" (click)="delete(likes)" + class="btn btn-danger btn-sm"> + <fa-icon icon="times"></fa-icon> + <span class="d-none d-md-inline" jhiTranslate="entity.action.delete">Delete</span> + </button> + </div> + </td> + </tr> + </tbody> + </table> + </div> +</div> diff --git a/src/main/webapp/app/entities/likes/likes.component.ts b/src/main/webapp/app/entities/likes/likes.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..a44dabf51b7220acbcaf562e7916a96eef6c88d1 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes.component.ts @@ -0,0 +1,75 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { ActivatedRoute } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +import { ILikes } from 'app/shared/model/likes.model'; +import { LikesService } from './likes.service'; +import { LikesDeleteDialogComponent } from './likes-delete-dialog.component'; + +@Component({ + selector: 'jhi-likes', + templateUrl: './likes.component.html', +}) +export class LikesComponent implements OnInit, OnDestroy { + likes?: ILikes[]; + eventSubscriber?: Subscription; + currentSearch: string; + + constructor( + protected likesService: LikesService, + protected eventManager: JhiEventManager, + protected modalService: NgbModal, + protected activatedRoute: ActivatedRoute + ) { + this.currentSearch = + this.activatedRoute.snapshot && this.activatedRoute.snapshot.queryParams['search'] + ? this.activatedRoute.snapshot.queryParams['search'] + : ''; + } + + loadAll(): void { + if (this.currentSearch) { + this.likesService + .search({ + query: this.currentSearch, + }) + .subscribe((res: HttpResponse<ILikes[]>) => (this.likes = res.body || [])); + return; + } + + this.likesService.query().subscribe((res: HttpResponse<ILikes[]>) => (this.likes = res.body || [])); + } + + search(query: string): void { + this.currentSearch = query; + this.loadAll(); + } + + ngOnInit(): void { + this.loadAll(); + this.registerChangeInLikes(); + } + + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } + } + + trackId(index: number, item: ILikes): number { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + return item.id!; + } + + registerChangeInLikes(): void { + this.eventSubscriber = this.eventManager.subscribe('likesListModification', () => this.loadAll()); + } + + delete(likes: ILikes): void { + const modalRef = this.modalService.open(LikesDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.likes = likes; + } +} diff --git a/src/main/webapp/app/entities/likes/likes.module.ts b/src/main/webapp/app/entities/likes/likes.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..c539ba16a46609473835bf5638255e38a626f102 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { GitSearchV2SharedModule } from 'app/shared/shared.module'; +import { LikesComponent } from './likes.component'; +import { LikesDetailComponent } from './likes-detail.component'; +import { LikesUpdateComponent } from './likes-update.component'; +import { LikesDeleteDialogComponent } from './likes-delete-dialog.component'; +import { likesRoute } from './likes.route'; + +@NgModule({ + imports: [GitSearchV2SharedModule, RouterModule.forChild(likesRoute)], + declarations: [LikesComponent, LikesDetailComponent, LikesUpdateComponent, LikesDeleteDialogComponent], + entryComponents: [LikesDeleteDialogComponent], +}) +export class GitsearchLikesModule {} diff --git a/src/main/webapp/app/entities/likes/likes.route.ts b/src/main/webapp/app/entities/likes/likes.route.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c781737336e2a19e0dc7217e814a7dfd046d2a2 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes.route.ts @@ -0,0 +1,83 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; + +import { Authority } from 'app/shared/constants/authority.constants'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { ILikes, Likes } from 'app/shared/model/likes.model'; +import { LikesService } from './likes.service'; +import { LikesComponent } from './likes.component'; +import { LikesDetailComponent } from './likes-detail.component'; +import { LikesUpdateComponent } from './likes-update.component'; + +@Injectable({ providedIn: 'root' }) +export class LikesResolve implements Resolve<ILikes> { + constructor(private service: LikesService, private router: Router) {} + + resolve(route: ActivatedRouteSnapshot): Observable<ILikes> | Observable<never> { + const id = route.params['id']; + if (id) { + return this.service.find(id).pipe( + flatMap((likes: HttpResponse<Likes>) => { + if (likes.body) { + return of(likes.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) + ); + } + return of(new Likes()); + } +} + +export const likesRoute: Routes = [ + { + path: '', + component: LikesComponent, + data: { + authorities: [Authority.USER], + pageTitle: 'gitsearchApp.likes.home.title', + }, + canActivate: [UserRouteAccessService], + }, + { + path: ':id/view', + component: LikesDetailComponent, + resolve: { + likes: LikesResolve, + }, + data: { + authorities: [Authority.USER], + pageTitle: 'gitsearchApp.likes.home.title', + }, + canActivate: [UserRouteAccessService], + }, + { + path: 'new', + component: LikesUpdateComponent, + resolve: { + likes: LikesResolve, + }, + data: { + authorities: [Authority.USER], + pageTitle: 'gitsearchApp.likes.home.title', + }, + canActivate: [UserRouteAccessService], + }, + { + path: ':id/edit', + component: LikesUpdateComponent, + resolve: { + likes: LikesResolve, + }, + data: { + authorities: [Authority.USER], + pageTitle: 'gitsearchApp.likes.home.title', + }, + canActivate: [UserRouteAccessService], + }, +]; diff --git a/src/main/webapp/app/entities/likes/likes.service.ts b/src/main/webapp/app/entities/likes/likes.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9d0039d080a35c40f5b0af64be6f3b49976bd967 --- /dev/null +++ b/src/main/webapp/app/entities/likes/likes.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import * as moment from 'moment'; + +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption, Search } from 'app/shared/util/request-util'; +import { ILikes, Likes } from 'app/shared/model/likes.model'; + +type EntityResponseType = HttpResponse<ILikes>; +type EntityArrayResponseType = HttpResponse<ILikes[]>; + +@Injectable({ providedIn: 'root' }) +export class LikesService { + public resourceUrl = SERVER_API_URL + 'api/likes'; + public resourceSearchUrl = SERVER_API_URL + 'api/_search/likes'; + + constructor(protected http: HttpClient) {} + + create(likes: ILikes): Observable<EntityResponseType> { + const copy = this.convertDateFromClient(likes); + return this.http + .post<ILikes>(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + update(likes: ILikes): Observable<EntityResponseType> { + const copy = this.convertDateFromClient(likes); + return this.http + .put<ILikes>(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + find(id: number): Observable<EntityResponseType> { + return this.http + .get<ILikes>(`${this.resourceUrl}/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + query(req?: any): Observable<EntityArrayResponseType> { + const options = createRequestOption(req); + return this.http + .get<ILikes[]>(this.resourceUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + delete(id: number): Observable<HttpResponse<{}>> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + search(req: Search): Observable<EntityArrayResponseType> { + const options = createRequestOption(req); + return this.http + .get<ILikes[]>(this.resourceSearchUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + likeExercise(exerciseID: string): Observable<EntityResponseType> { + const like = new Likes(); + like.exerciseID = exerciseID; + return this.http.put<ILikes>(SERVER_API_URL + 'api/likeExercise', like, { observe: 'response' }); + } + + unlikeExercise(exerciseID: string): Observable<HttpResponse<{}>> { + return this.http.delete(SERVER_API_URL + 'api/unlikeExercise/' + exerciseID, { observe: 'response' }); + } + + getLikesForexerciseID(exerciseID: string): Observable<number> { + return this.http.get<number>(SERVER_API_URL + 'api/numberOfLikes/' + exerciseID); + } + + hasLiked(exerciseID: string): Observable<boolean> { + return this.http.get<boolean>(SERVER_API_URL + 'api/hasLiked/' + exerciseID); + } + + protected convertDateFromClient(likes: ILikes): ILikes { + const copy: ILikes = Object.assign({}, likes, { + date: likes.date && likes.date.isValid() ? likes.date.format(DATE_FORMAT) : undefined, + }); + return copy; + } + + protected convertDateFromServer(res: EntityResponseType): EntityResponseType { + if (res.body) { + res.body.date = res.body.date ? moment(res.body.date) : undefined; + } + return res; + } + + protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { + if (res.body) { + res.body.forEach((likes: ILikes) => { + likes.date = likes.date ? moment(likes.date) : undefined; + }); + } + return res; + } +} diff --git a/src/main/webapp/app/entities/saved-searches/saved-searches-detail.component.html b/src/main/webapp/app/entities/saved-searches/saved-searches-detail.component.html index b244bbf49cb61d13d9d530022e4a0730da28ffa7..de96f38c4cb830cb4e7709082ed799650ce5408a 100644 --- a/src/main/webapp/app/entities/saved-searches/saved-searches-detail.component.html +++ b/src/main/webapp/app/entities/saved-searches/saved-searches-detail.component.html @@ -18,7 +18,7 @@ </dd> <dt><span jhiTranslate="gitsearchApp.savedSearches.userId">User Id</span></dt> <dd> - {{ savedSearches.userIdLogin }} + {{ savedSearches.userLogin }} </dd> </dl> diff --git a/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.html b/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.html index f98dcf1f9ac1d77472d01c395dce2072dd7a5acf..6c4746b96041fc3ffc4d2d72a30b07cc1619a1a2 100644 --- a/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.html +++ b/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.html @@ -41,14 +41,14 @@ <div class="form-group"> <label class="form-control-label" jhiTranslate="gitsearchApp.savedSearches.userId" for="field_userId">User Id</label> - <select class="form-control" id="field_userId" name="userId" formControlName="userIdId"> - <option *ngIf="!editForm.get('userIdId')!.value" [ngValue]="null" selected></option> + <select class="form-control" id="field_userId" name="userId" formControlName="userId"> + <option *ngIf="!editForm.get('userId')!.value" [ngValue]="null" selected></option> <option [ngValue]="userOption.id" *ngFor="let userOption of users; trackBy: trackById">{{ userOption.login }}</option> </select> </div> - <div *ngIf="editForm.get('userIdId')!.invalid && (editForm.get('userIdId')!.dirty || editForm.get('userIdId')!.touched)"> + <div *ngIf="editForm.get('userId')!.invalid && (editForm.get('userId')!.dirty || editForm.get('userId')!.touched)"> <small class="form-text text-danger" - *ngIf="editForm.get('userIdId')?.errors?.required" jhiTranslate="entity.validation.required"> + *ngIf="editForm.get('userId')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. </small> </div> diff --git a/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.ts b/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.ts index a0616d55c3759a5317414f471dc7b337ffb5c5aa..dd187b7fbc0816dc6b75af3af867dbd3819ef4da 100644 --- a/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.ts +++ b/src/main/webapp/app/entities/saved-searches/saved-searches-update.component.ts @@ -22,7 +22,7 @@ export class SavedSearchesUpdateComponent implements OnInit { id: [], name: [null, [Validators.required, Validators.minLength(1)]], jsonQuery: [null, [Validators.required]], - userIdId: [null, Validators.required], + userId: [null, Validators.required], }); constructor( @@ -45,7 +45,7 @@ export class SavedSearchesUpdateComponent implements OnInit { id: savedSearches.id, name: savedSearches.name, jsonQuery: savedSearches.jsonQuery, - userIdId: savedSearches.userIdId, + userId: savedSearches.userId, }); } @@ -69,7 +69,7 @@ export class SavedSearchesUpdateComponent implements OnInit { id: this.editForm.get(['id'])!.value, name: this.editForm.get(['name'])!.value, jsonQuery: this.editForm.get(['jsonQuery'])!.value, - userIdId: this.editForm.get(['userIdId'])!.value, + userId: this.editForm.get(['userId'])!.value, }; } diff --git a/src/main/webapp/app/entities/saved-searches/saved-searches.component.html b/src/main/webapp/app/entities/saved-searches/saved-searches.component.html index 7ca1f6080ae4bc2bd06b1c6a831667d5951302d4..bfa98a4c5026b84bc1f0f7cc5c37652ad7010158 100644 --- a/src/main/webapp/app/entities/saved-searches/saved-searches.component.html +++ b/src/main/webapp/app/entities/saved-searches/saved-searches.component.html @@ -43,7 +43,7 @@ <th scope="col" jhiSortBy="id"><span jhiTranslate="global.field.id">ID</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col" jhiSortBy="name"><span jhiTranslate="gitsearchApp.savedSearches.name">Name</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col" jhiSortBy="jsonQuery"><span jhiTranslate="gitsearchApp.savedSearches.jsonQuery">Json Query</span> <fa-icon icon="sort"></fa-icon></th> - <th scope="col" jhiSortBy="userIdLogin"><span jhiTranslate="gitsearchApp.savedSearches.userId">User Id</span> <fa-icon icon="sort"></fa-icon></th> + <th scope="col" jhiSortBy="userLogin"><span jhiTranslate="gitsearchApp.savedSearches.userId">User Id</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col"></th> </tr> </thead> @@ -53,7 +53,7 @@ <td>{{ savedSearches.name }}</td> <td>{{ savedSearches.jsonQuery }}</td> <td> - {{ savedSearches.userIdLogin }} + {{ savedSearches.userLogin }} </td> <td class="text-right"> <div class="btn-group"> diff --git a/src/main/webapp/app/entities/user-watch-list/user-watch-list-detail.component.html b/src/main/webapp/app/entities/user-watch-list/user-watch-list-detail.component.html index ca5371eddfe826e23df44424b3561afbe13515f8..5efdd0448d4a6b2fb4c517515d7863ebeffbf381 100644 --- a/src/main/webapp/app/entities/user-watch-list/user-watch-list-detail.component.html +++ b/src/main/webapp/app/entities/user-watch-list/user-watch-list-detail.component.html @@ -12,9 +12,13 @@ <dd> <span>{{ userWatchList.name }}</span> </dd> + <dt><span jhiTranslate="gitsearchApp.userWatchList.checkFrequency">Check Frequency</span></dt> + <dd> + <span jhiTranslate="{{ 'gitsearchApp.CheckFrequency.' + userWatchList.checkFrequency }}">{{ userWatchList.checkFrequency }}</span> + </dd> <dt><span jhiTranslate="gitsearchApp.userWatchList.userId">User Id</span></dt> <dd> - {{ userWatchList.userIdLogin }} + {{ userWatchList.userLogin }} </dd> </dl> diff --git a/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.html b/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.html index 70aeaa5cbbfe71838e547a4147bc889ac7f2f942..598ef6aba086b352a92a3ca9f8fb0b464b229958 100644 --- a/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.html +++ b/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.html @@ -27,16 +27,32 @@ </div> </div> + <div class="form-group"> + <label class="form-control-label" jhiTranslate="gitsearchApp.userWatchList.checkFrequency" for="field_checkFrequency">Check Frequency</label> + <select class="form-control" name="checkFrequency" formControlName="checkFrequency" id="field_checkFrequency"> + <option value="NEVER">{{ 'gitsearchApp.CheckFrequency.NEVER' | translate }}</option> + <option value="DAILY">{{ 'gitsearchApp.CheckFrequency.DAILY' | translate }}</option> + <option value="WEEKLY">{{ 'gitsearchApp.CheckFrequency.WEEKLY' | translate }}</option> + <option value="MONTHLY">{{ 'gitsearchApp.CheckFrequency.MONTHLY' | translate }}</option> + </select> + <div *ngIf="editForm.get('checkFrequency')!.invalid && (editForm.get('checkFrequency')!.dirty || editForm.get('checkFrequency')!.touched)"> + <small class="form-text text-danger" + *ngIf="editForm.get('checkFrequency')?.errors?.required" jhiTranslate="entity.validation.required"> + This field is required. + </small> + </div> + </div> + <div class="form-group"> <label class="form-control-label" jhiTranslate="gitsearchApp.userWatchList.userId" for="field_userId">User Id</label> - <select class="form-control" id="field_userId" name="userId" formControlName="userIdId"> - <option *ngIf="!editForm.get('userIdId')!.value" [ngValue]="null" selected></option> + <select class="form-control" id="field_userId" name="userId" formControlName="userId"> + <option *ngIf="!editForm.get('userId')!.value" [ngValue]="null" selected></option> <option [ngValue]="userOption.id" *ngFor="let userOption of users; trackBy: trackById">{{ userOption.login }}</option> </select> </div> - <div *ngIf="editForm.get('userIdId')!.invalid && (editForm.get('userIdId')!.dirty || editForm.get('userIdId')!.touched)"> + <div *ngIf="editForm.get('userId')!.invalid && (editForm.get('userId')!.dirty || editForm.get('userId')!.touched)"> <small class="form-text text-danger" - *ngIf="editForm.get('userIdId')?.errors?.required" jhiTranslate="entity.validation.required"> + *ngIf="editForm.get('userId')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. </small> </div> diff --git a/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.ts b/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.ts index 4393a6b9f054f28528338dca1bf70a8814018cfd..5f29223307d03322179a9df73f8c81b3fe753f25 100644 --- a/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.ts +++ b/src/main/webapp/app/entities/user-watch-list/user-watch-list-update.component.ts @@ -21,7 +21,8 @@ export class UserWatchListUpdateComponent implements OnInit { editForm = this.fb.group({ id: [], name: [null, [Validators.required, Validators.minLength(1)]], - userIdId: [null, Validators.required], + checkFrequency: [null, [Validators.required]], + userId: [null, Validators.required], }); constructor( @@ -43,7 +44,8 @@ export class UserWatchListUpdateComponent implements OnInit { this.editForm.patchValue({ id: userWatchList.id, name: userWatchList.name, - userIdId: userWatchList.userIdId, + checkFrequency: userWatchList.checkFrequency, + userId: userWatchList.userId, }); } @@ -66,7 +68,8 @@ export class UserWatchListUpdateComponent implements OnInit { ...new UserWatchList(), id: this.editForm.get(['id'])!.value, name: this.editForm.get(['name'])!.value, - userIdId: this.editForm.get(['userIdId'])!.value, + checkFrequency: this.editForm.get(['checkFrequency'])!.value, + userId: this.editForm.get(['userId'])!.value, }; } diff --git a/src/main/webapp/app/entities/user-watch-list/user-watch-list.component.html b/src/main/webapp/app/entities/user-watch-list/user-watch-list.component.html index 326dbaabdd4589ebdb3878e59b6d80580ec1b59d..de5ea6d899f7e62a9373322584768761d0a4f72c 100644 --- a/src/main/webapp/app/entities/user-watch-list/user-watch-list.component.html +++ b/src/main/webapp/app/entities/user-watch-list/user-watch-list.component.html @@ -42,7 +42,8 @@ <tr jhiSort [(predicate)]="predicate" [(ascending)]="ascending" [callback]="reset.bind(this)"> <th scope="col" jhiSortBy="id"><span jhiTranslate="global.field.id">ID</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col" jhiSortBy="name"><span jhiTranslate="gitsearchApp.userWatchList.name">Name</span> <fa-icon icon="sort"></fa-icon></th> - <th scope="col" jhiSortBy="userIdLogin"><span jhiTranslate="gitsearchApp.userWatchList.userId">User Id</span> <fa-icon icon="sort"></fa-icon></th> + <th scope="col" jhiSortBy="checkFrequency"><span jhiTranslate="gitsearchApp.userWatchList.checkFrequency">Check Frequency</span> <fa-icon icon="sort"></fa-icon></th> + <th scope="col" jhiSortBy="userLogin"><span jhiTranslate="gitsearchApp.userWatchList.userId">User Id</span> <fa-icon icon="sort"></fa-icon></th> <th scope="col"></th> </tr> </thead> @@ -50,8 +51,9 @@ <tr *ngFor="let userWatchList of userWatchLists ;trackBy: trackId"> <td><a [routerLink]="['/user-watch-list', userWatchList.id, 'view']">{{ userWatchList.id }}</a></td> <td>{{ userWatchList.name }}</td> + <td jhiTranslate="{{ 'gitsearchApp.CheckFrequency.' + userWatchList.checkFrequency! }}">{{ userWatchList.checkFrequency }}</td> <td> - {{ userWatchList.userIdLogin }} + {{ userWatchList.userLogin }} </td> <td class="text-right"> <div class="btn-group"> diff --git a/src/main/webapp/app/exercise/exercise-card/exercise-card.component.ts b/src/main/webapp/app/exercise/exercise-card/exercise-card.component.ts index 102c7383013ece2b786591317608884d351e1446..803fe21303a7a1dd460a05f2528ad5e5fa362ea3 100644 --- a/src/main/webapp/app/exercise/exercise-card/exercise-card.component.ts +++ b/src/main/webapp/app/exercise/exercise-card/exercise-card.component.ts @@ -3,6 +3,7 @@ import { Exercise } from 'app/shared/model/exercise.model'; import { SearchService } from 'app/search/service/search-service'; import { Statistics } from 'app/shared/model/statistics.model'; import { WatchlistManager } from 'app/shared/watchlist/watchlist-manager'; +import { LikesService } from 'app/entities/likes/likes.service'; @Component({ selector: 'jhi-exercise-card', @@ -14,7 +15,7 @@ export class ExerciseCardComponent implements OnInit { @Output() exerciseSelectionEvent = new EventEmitter<Exercise>(); - constructor(protected searchService: SearchService, private watchlistManager: WatchlistManager) {} + constructor(protected searchService: SearchService, private watchlistManager: WatchlistManager, private likesService: LikesService) {} ngOnInit(): void {} @@ -22,6 +23,21 @@ export class ExerciseCardComponent implements OnInit { if (this.exercise !== undefined) { this.exercise.views = 0; this.exercise.downloads = 0; + + this.likesService.getLikesForexerciseID(this.exercise.originalResult.project.project_id).subscribe( + (data: number) => { + this.exercise!.numberOfLikes = data; + }, + () => alert('Could not load number of likes') + ); + + this.likesService.hasLiked(this.exercise.originalResult.project.project_id).subscribe( + (data: boolean) => { + this.exercise!.userHasLiked = data; + }, + () => alert('Could not load if user has liked or not') + ); + this.searchService.getStatisticsForExercise(this.exercise.originalResult.exerciseId).subscribe( (data: Statistics) => { this.exercise!.views = data.views!; diff --git a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.html b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.html index 8f5ee5fbff7d196ee2e4761287ed1615a44df768..271bbcb0f8dd184913af8c948f839373c6368719 100644 --- a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.html +++ b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.html @@ -7,8 +7,7 @@ <!-- Modal Header --> <div class="modal-header"> <img class="card-img-top col-3" src="{{exercise.imageURL}}" alt="exercise image" - (error)="correctImageURL($event)" - style="height: auto; float: left;"> + (error)="correctImageURL($event)" style="height: auto; float: left;"> <h4 class="modal-title">{{exercise.title}}</h4> <button type="button" class="close" data-dismiss="modal">×</button> </div> @@ -38,10 +37,69 @@ </div> </div> <!-- modal rating end--> + + + <div *ngIf="!exercise.userHasLiked" + style="float: left; width: 100%; margin-bottom: 5px; padding-top: 15px;"> + <div style="float: left;"> + <div> + <button [ngbTooltip]="helpForLike" style="padding: 0%; font-size: 1.2;" + *ngIf="isAuthenticated()" type="button" class="btn" + (click)="likeAction()" [disabled]="!isAuthenticated()"> + <!-- <fa-icon icon="heart"></fa-icon> --> + <fa-icon [icon]="['far', 'heart']"></fa-icon> + </button> + <span [ngbTooltip]="helpForLikeNotLoggedIn"> + <button style="padding: 0%; font-size: 1.2;" *ngIf="!isAuthenticated()" + type="button" class="btn" (click)="likeAction()" [disabled]="true"> + <!-- <fa-icon icon="heart"></fa-icon> --> + <fa-icon [icon]="['far', 'heart']"></fa-icon> + </button> + </span> + </div> + <!-- <div class="onhoverIconDisplay"><p class="card-text" jhiTranslate="exercise.details.views"></p></div> --> + + </div> + <div class="star-container"> + <span> + {{exercise.numberOfLikes}} + </span> + </div> + + <ng-template #helpForLike> {{ 'exercise.details.like' | translate}}</ng-template> + <ng-template #helpForLikeNotLoggedIn> {{ 'exercise.details.likeLogin' | translate}} + </ng-template> + </div> <!-- modal views end--> + + <div *ngIf="exercise.userHasLiked" + style="float: left; width: 100%; margin-bottom: 5px; padding-top: 15px;"> + <div style="float: left;"> + <div> + <button [ngbTooltip]="helpForUnLike" style="padding: 0%; font-size: 1.2;" + *ngIf="exercise.userHasLiked" type="button" class="btn" + (click)="unlikeAction()" [disabled]="!isAuthenticated()"> + <!-- <fa-icon icon="heart"></fa-icon> --> + <fa-icon class="rediconcolor" icon='heart'></fa-icon> + </button> + </div> + + </div> + <div class="star-container"> + <span> + {{exercise.numberOfLikes}} + </span> + </div> + <ng-template #helpForUnLike> {{ 'exercise.details.unlike' | translate}} + </ng-template> + + </div> + <div *ngIf="exercise.rating" style="float: left; width: 100%; margin-bottom: 5px; padding-top: 15px;"> <div style="float: left;"> - <div><fa-icon icon="eye"></fa-icon></div> + <div> + <fa-icon icon="eye"></fa-icon> + </div> <!-- <div class="onhoverIconDisplay"><p class="card-text" jhiTranslate="exercise.details.views"></p></div> --> </div> @@ -70,25 +128,31 @@ <div style="float: left;"> <p class="card-text" jhiTranslate="exercise.details.bookmark"></p> </div> - <div class="form-check" style="float: right; padding-right: 10px;" placement="right"> - <input class="form-check-input" type="checkbox" [checked]="isOnCurrentWatchlist(exercise)" (change)="handleForCurrentWatchlist(exercise)" value="" + <div class="form-check" style="float: right; padding-right: 10px;" + placement="right"> + <input class="form-check-input" type="checkbox" + [checked]="isOnCurrentWatchlist(exercise)" + (change)="handleForCurrentWatchlist(exercise)" value="" id="modal-defaultCheck1"> <label class="form-check-label" for="modal-defaultCheck1"></label> </div> </div> <!-- modal bookmark end--> - <!-- <button type="button" class="btn btn-outline-secondary" - style="display: block; margin-bottom: 5px;" - jhiTranslate="exercise.details.hitDetails"> - </button> --> - <div [ngbTooltip]="helpComingSoon" placement="bottom"> - <button *ngIf="exercise.type == exerciseType.COLLECTION" type="button" class="btn btn-outline-secondary" - style="display: block; margin-bottom: 5px;" - jhiTranslate="exercise.details.allExercises" - disabled> - > - </button></div> + <div *ngIf="exercise.originalResult.file.parentId" + style="float: left; width: 100%; padding-top: 15px; margin-bottom: 25px;"> + <ng-template #helpToParent data-container="body"> {{ 'exercise.help.toParent' | + translate}}</ng-template> + <fa-icon style="padding: 5px 0px 0px 5px;float:left;" [ngbTooltip]="helpToParent" + container="body" [icon]="treeIcon" + (click)="toParent(exercise.originalResult.file.parentId)"></fa-icon> + </div> + <button *ngIf="exercise.type == exerciseType.COLLECTION" type="button" + class="btn btn-outline-secondary" + (click)="searchChildren(exercise.originalResult.exerciseId)" data-dismiss="modal" + style="display: block; margin-bottom: 5px;" + jhiTranslate="exercise.details.allExercises"> + </button> <button type="button" class="btn btn-outline-secondary" style="display: block;" (click)="openLink(exercise.gitlabURL)" jhiTranslate="exercise.details.git"> @@ -105,30 +169,30 @@ </div> - <jhi-exercise-metadata - class="col-12 col-md-8" - [exercise]="exercise"> + <jhi-exercise-metadata class="col-12 col-md-8" [exercise]="exercise"> </jhi-exercise-metadata> <div class="col-6 col-md-4"></div> <div class="col-12 col-md-8"> - <p style="text-align: left; margin-top: 20px;"><strong jhiTranslate="exercise.export.export"></strong> + <p style="text-align: left; margin-top: 20px;"><strong + jhiTranslate="exercise.export.export"></strong> </p> <hr> - <a *ngFor="let action of exercise.originalResult.supportedActions" class="btn btn-outline-secondary" role="button" aria-pressed="true" - style="float: left; margin-right: 5px; margin-top: 5px;" (click)="startAction(action, exercise)" - >{{action.commandName}}</a> - <div [ngbTooltip]="helpComingSoon" placement="bottom"> - <button *ngIf="exercise.type == exerciseType.COLLECTION" type="button" class="btn btn-outline-secondary" + <a *ngFor="let action of exercise.originalResult.supportedActions" + class="btn btn-outline-secondary" role="button" aria-pressed="true" style="float: left; margin-right: 5px; margin-top: 5px;" - jhiTranslate="exercise.export.latex" title="{{ 'exercise.comingSoon' | translate}}" - disabled > - </button> + (click)="startAction(action, exercise)">{{action.commandName}}</a> + <div [ngbTooltip]="helpComingSoon" placement="bottom"> + <button *ngIf="exercise.type == exerciseType.COLLECTION" type="button" + class="btn btn-outline-secondary" + style="float: left; margin-right: 5px; margin-top: 5px;" + jhiTranslate="exercise.export.latex" + title="{{ 'exercise.comingSoon' | translate}}" disabled> + </button> </div> <a class="btn btn-outline-secondary" role="button" aria-pressed="true" - style="float: left; margin-right: 5px; margin-top: 5px;" - (click)="download()" + style="float: left; margin-right: 5px; margin-top: 5px;" (click)="download()" jhiTranslate="exercise.export.download"></a> </div> </div> @@ -140,9 +204,8 @@ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal" jhiTranslate="exercise.close"></button> </div> - </div> </div> </div> -<jhi-markdown-viewer [exercise]="exercise"></jhi-markdown-viewer> -</div> + <jhi-markdown-viewer [exercise]="exercise"></jhi-markdown-viewer> +</div> \ No newline at end of file diff --git a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.scss b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.scss index 4e3112f21acce9b58bdb5b1b3bef120ae30ccdae..3122828b347a8d2116826423489ddf8ff24506d5 100644 --- a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.scss +++ b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.scss @@ -40,6 +40,18 @@ text-align: left; } +.like { + margin-top: 20px; + position: absolute; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.like:hover { + font-size: 20px; +} + // .onhoverIcon:hover ~ .onhoverIconDisplay { // visibility: visible; // } @@ -47,3 +59,7 @@ // .onhoverIconDisplay { // visibility: hidden; // } + +.rediconcolor { + color: red; +} diff --git a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.ts b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.ts index 769eb5fb6d392b901cc3d40ffc3b75ea831f5317..9c8b8808226efd1c6ded0df9a55ab2b70999446f 100644 --- a/src/main/webapp/app/exercise/exercise-details/exercise-details.component.ts +++ b/src/main/webapp/app/exercise/exercise-details/exercise-details.component.ts @@ -1,15 +1,20 @@ -import { Component, OnInit, Input, OnDestroy } from '@angular/core'; -import { Exercise, IExerciseType } from 'app/shared/model/exercise.model'; +import { Component, OnInit, Input, Output, OnDestroy, EventEmitter } from '@angular/core'; +import { Exercise, IExerciseType, searchResultToExercise } from 'app/shared/model/exercise.model'; +import { ExerciseService } from 'app/exercise/service/exercise.service'; import { Subscription } from 'rxjs'; import { PluginActionInfo } from 'app/shared/model/search/search-result-dto.model'; import { PluginService } from 'app/shared/service/plugin-service'; import { ShoppingBasketInfo, ShoppingBasketRedirectInfoDTO } from 'app/shared/model/basket/shopping-basket-info.model'; import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/user/account.model'; -import { SearchService } from 'app/search/service/search-service.ts'; +import { SearchService } from 'app/search/service/search-service'; import { HttpResponse } from '@angular/common/http'; import { JhiAlertService } from 'ng-jhipster'; import { WatchlistManager } from 'app/shared/watchlist/watchlist-manager'; +import { LikesService } from 'app/entities/likes/likes.service'; +import { faFolder } from '@fortawesome/free-solid-svg-icons'; + +import { Router } from '@angular/router'; @Component({ selector: 'jhi-exercise-details', @@ -18,15 +23,24 @@ import { WatchlistManager } from 'app/shared/watchlist/watchlist-manager'; }) export class ExerciseDetailsComponent implements OnInit, OnDestroy { @Input() exercise: Exercise | undefined; + @Output() exerciseChangedEvent = new EventEmitter<Exercise>(); + account: Account | null = null; authSubscription?: Subscription; + hasLiked: Boolean | null = null; + likeSubscription?: Subscription; + authenticated = false; + treeIcon = faFolder; constructor( private accountService: AccountService, protected pluginService: PluginService, private searchService: SearchService, + private likesService: LikesService, private jhiAlertService: JhiAlertService, - private watchlistManager: WatchlistManager + private watchlistManager: WatchlistManager, + private exerciseService: ExerciseService, + private router: Router ) {} ngOnInit(): void { @@ -92,6 +106,20 @@ export class ExerciseDetailsComponent implements OnInit, OnDestroy { window.open(link); } + searchChildren(parentId: string): void { + this.router.navigate(['/search'], { queryParams: { p: parentId } }); + } + + toParent(parentId: string): void { + this.exerciseService.loadExercise(parentId).subscribe(searchResult => { + this.exercise = searchResultToExercise(searchResult); + this.exerciseChangedEvent.emit(this.exercise); + }), + () => { + alert('parent cannot be loaded'); + }; + } + ngOnDestroy(): void { if (this.authSubscription) { this.authSubscription.unsubscribe(); @@ -107,5 +135,33 @@ export class ExerciseDetailsComponent implements OnInit, OnDestroy { } } + likeAction(): void { + // to do call like service + this.likesService.likeExercise(this.exercise!.originalResult.project.project_id).subscribe(() => + // eslint-disable-next-line no-console + console.log('Liked post ' + this.exercise!.originalResult.project.project_id) + ); + + this.exercise!.numberOfLikes = this.exercise!.numberOfLikes + 1; + this.exercise!.userHasLiked = true; + + // eslint-disable-next-line no-console + console.log('Reloaded number of likes is ' + this.exercise!.numberOfLikes); + } + + unlikeAction(): void { + // to do call like service + this.likesService.unlikeExercise(this.exercise!.originalResult.project.project_id).subscribe(() => + // eslint-disable-next-line no-console + console.log('Unliked post ' + this.exercise!.originalResult.project.project_id) + ); + + this.exercise!.numberOfLikes = this.exercise!.numberOfLikes - 1; + this.exercise!.userHasLiked = false; + + // eslint-disable-next-line no-console + console.log('Reloaded number of likes is ' + this.exercise!.numberOfLikes); + } + selectREADME(): void {} } diff --git a/src/main/webapp/app/exercise/markDownViewer/markDownViewer.component.ts b/src/main/webapp/app/exercise/markDownViewer/markDownViewer.component.ts index 6aeb84d43dc5e05a3fbefdc1657d30aebdcbbec1..6a36c72a0b9dd00aebb1e496a1f547f8d531b9ae 100644 --- a/src/main/webapp/app/exercise/markDownViewer/markDownViewer.component.ts +++ b/src/main/webapp/app/exercise/markDownViewer/markDownViewer.component.ts @@ -4,6 +4,7 @@ import { ExerciseService } from '../service/exercise.service'; import { TranslateService } from '@ngx-translate/core'; import { MarkdownService } from 'ngx-markdown'; import { KatexOptions, errorKatexNotLoaded } from 'ngx-markdown'; +import { getPathOfExerciseId } from 'app/shared/model/search/search-result-dto.model'; declare let katex: any; // Magic @@ -72,14 +73,18 @@ export class MarkDownViewerComponent implements OnInit, OnChanges { // eslint-disable-next-line ngOnChanges(changes: SimpleChanges): void { if (!this.exercise) return; - this.baseURL = this.exercise.originalResult.project.url + '/-/raw/master/README.md'; - this.exerciseService.loadExerciseFile(this.exercise.originalResult.project.project_id, 'README.md').subscribe( + this.baseURL = + this.exercise.originalResult.project.url + + '/-/raw/master/' + + getPathOfExerciseId(this.exercise.originalResult.exerciseId) + + '/README.md'; + this.exerciseService.loadExerciseFile(this.exercise.originalResult.exerciseId, 'README.md').subscribe( content => { this.content = content; this.filename = 'README.md'; }, () => { - this.exerciseService.loadExerciseFile(this.exercise!.originalResult.project.project_id, 'exercise.md').subscribe( + this.exerciseService.loadExerciseFile(this.exercise!.originalResult.exerciseId, 'exercise.md').subscribe( content => { this.content = content; this.filename = 'exercise.md'; diff --git a/src/main/webapp/app/exercise/service/exercise.service.ts b/src/main/webapp/app/exercise/service/exercise.service.ts index 0b2c1b83ab8635fb2a04a6b267771bc225871eb0..dcefcce578134711102e96ccb48f2f5dd4cf92eb 100644 --- a/src/main/webapp/app/exercise/service/exercise.service.ts +++ b/src/main/webapp/app/exercise/service/exercise.service.ts @@ -1,13 +1,15 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; +import { SearchResultDTO } from 'app/shared/model/search/search-result-dto.model'; import { SERVER_API_URL } from 'app/app.constants'; import { ArtemisExerciseInfo } from 'app/shared/model/artemis-exercise-info.model'; @Injectable({ providedIn: 'root' }) export class ExerciseService { - public resourceUrl = SERVER_API_URL + 'api/exercise/'; + public resourceUrl = SERVER_API_URL + 'api/exerciseFile/'; + public exerciseUrl = SERVER_API_URL + 'api/exercise/'; constructor(private http: HttpClient) {} @@ -23,6 +25,10 @@ export class ExerciseService { }); } + public loadExercise(exerciseId: string): Observable<SearchResultDTO> { + return this.http.get<SearchResultDTO>(this.exerciseUrl + exerciseId); + } + /** * Used on init of import page, this function passes the retrieved (from Artemis) * exerciseUrl to the server diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.html b/src/main/webapp/app/layouts/navbar/navbar.component.html index db7cc3d8821fca4d9186bd424077430af7bb3416..fa03462f539638d766e54302d54e1812058a6676 100644 --- a/src/main/webapp/app/layouts/navbar/navbar.component.html +++ b/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -159,6 +159,12 @@ <span jhiTranslate="global.menu.entities.statistics">statistics</span> </a> </li> + <li> + <a class="dropdown-item" routerLink="likes" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }" (click)="collapseNavbar()"> + <fa-icon icon="asterisk" [fixedWidth]="true"></fa-icon> + <span jhiTranslate="global.menu.entities.likes">Likes</span> + </a> + </li> <!-- jhipster-needle-add-entity-to-menu - JHipster will add entities to the menu here --> </ul> </div> diff --git a/src/main/webapp/app/search/search-input/search-input.component.html b/src/main/webapp/app/search/search-input/search-input.component.html index f89a586cdd1051d7b5a8d73e2fcd4728173ec18a..3e3c30c6e5e1febdb3b985b6878fe540dbba6fa2 100644 --- a/src/main/webapp/app/search/search-input/search-input.component.html +++ b/src/main/webapp/app/search/search-input/search-input.component.html @@ -50,8 +50,8 @@ <div class="input-group w-100 mt-3"> <input type="text" class="form-control" queryParamName="author" name="author" [ngbTypeahead]="autoCompleteContributorCreator" placeholder="{{ 'search.filters.author' | translate }}"/> - <ng-template #helpauthorContritbutors data-container="body"> {{ 'search.help.authorContritbutors' | translate}}</ng-template> - <fa-icon style="padding: 10px 0px 0px 10px;" [ngbTooltip]="helpauthorContritbutors" container="body" [icon]="questionIcon"></fa-icon> + <ng-template #helpauthorContributors data-container="body"> {{ 'search.help.authorContributors' | translate}}</ng-template> + <fa-icon style="padding: 10px 0px 0px 10px;" [ngbTooltip]="helpauthorContributors" container="body" [icon]="questionIcon"></fa-icon> </div> </form> </div> @@ -66,6 +66,14 @@ </div> </form> </div> + <div *ngIf="searchInput.metadata.parentId"> + <form name="searchForm" class="form-inline"> + <div class="input-group w-100 mt-3"><span jhiTranslate="search.filters.parentId"></span>: {{searchInput.metadata.parentId}} + <ng-template #helpParent data-container="body"> {{ 'search.help.helpParent' | translate}}</ng-template> + <fa-icon style="padding: 5px 0px 0px 5px;float:right;" [ngbTooltip]="helpParent" container="body" [icon]="crossIcon" (click)="clearParentId()"></fa-icon> + </div> + </form> + </div> <div> <form name="searchForm" class="form-inline"> <div class="nav-item dropdown"> @@ -74,9 +82,7 @@ </a><span *ngFor="let type of getSelectedTypes(), let isLast=last">{{'exercise.metadata.' + type | translate}}{{isLast ? '' : ', '}}</span> <div class="dropdown-menu" style="padding-left: 10px;"> <table><tr *ngFor="let type of typeValues"><td> - <input [value]="type" type="checkbox" queryParamName="{{type}}"> - </td><td style="text-align: left;"> - <label class="form-check-label" style="display: inline-block;align-items: left" for="type">{{'exercise.metadata.' + type | translate}}</label> + <label class="form-check-label" style="display: inline-block;align-items: left"><input [value]="type" type="checkbox" queryParamName="{{type}}"> {{'exercise.metadata.' + type | translate}}</label> </td></table> </div> </div> @@ -91,9 +97,7 @@ </a><span *ngFor="let language of getSelectedLanguages(), let isLast=last">{{'exercise.metadata.' + language | translate}}{{isLast ? '' : ', '}}</span> <div class="dropdown-menu" style="padding-left: 10px;"> <table><tr *ngFor="let language of languageValues"><td> - <input [value]="language" type="checkbox" queryParamName="{{language}}"> - </td><td style="text-align: left;"> - <label class="form-check-label" style="display: inline-block;align-items: left" for="language">{{'exercise.metadata.' + language | translate}}</label> + <label class="form-check-label" style="display: inline-block;align-items: left"><input [value]="language" type="checkbox" queryParamName="{{language}}"> {{'exercise.metadata.' + language | translate}}</label> </td></table> </div> </div> diff --git a/src/main/webapp/app/search/search-input/search-input.component.scss b/src/main/webapp/app/search/search-input/search-input.component.scss index cbea52fb2011f05334c80503157fb758a6fdb1a3..441b436159478bdc14399c45913fb90d331e51a4 100644 --- a/src/main/webapp/app/search/search-input/search-input.component.scss +++ b/src/main/webapp/app/search/search-input/search-input.component.scss @@ -1,13 +1,7 @@ .searchform-container { padding: 20px; position: -webkit-sticky; - // position: sticky; + position: sticky; top: 0; + z-index: 1; } - -// .dropdown-menu { -// position: relative; -// overflow-y: visible; -// background-color: black; -// z-index: 100000; -// } diff --git a/src/main/webapp/app/search/search-input/search-input.component.ts b/src/main/webapp/app/search/search-input/search-input.component.ts index 6151034cbc57302a9219d3064d370b00d7b596e0..8c52ddac213a4ec0fba8860a7e4b3dc46d590768 100644 --- a/src/main/webapp/app/search/search-input/search-input.component.ts +++ b/src/main/webapp/app/search/search-input/search-input.component.ts @@ -1,11 +1,11 @@ import { Component, OnDestroy, OnInit, Output, EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute } from '@angular/router'; import { QueryParam, QueryParamBuilder, QueryParamGroup } from '@ngqp/core'; import { takeUntil } from 'rxjs/operators'; import { SearchInput } from 'app/shared/model/search/search-input.model'; import { SearchService } from '../service/search-service'; -import { faQuestion } from '@fortawesome/free-solid-svg-icons'; +import { faQuestion, faTrash } from '@fortawesome/free-solid-svg-icons'; import { Observable } from 'rxjs'; import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators'; @@ -31,6 +31,8 @@ export class SearchInputComponent implements OnInit, OnDestroy { languageValues = Object.keys(ILanguages); questionIcon = faQuestion; + crossIcon = faTrash; + public paramGroup: QueryParamGroup; private componentDestroyed$ = new Subject<void>(); @@ -38,12 +40,7 @@ export class SearchInputComponent implements OnInit, OnDestroy { public showSearchUsage = false; - constructor( - protected activatedRoute: ActivatedRoute, - private router: Router, - private qpb: QueryParamBuilder, - private searchService: SearchService - ) { + constructor(protected activatedRoute: ActivatedRoute, private qpb: QueryParamBuilder, private searchService: SearchService) { this.searchInput = new SearchInput(); const groupDef: LooseObject = { @@ -74,6 +71,10 @@ export class SearchInputComponent implements OnInit, OnDestroy { debounceTime: SearchInputComponent.DEBOUNCE_TIME, emptyOn: '', }), + parentId: qpb.stringParam('p', { + debounceTime: SearchInputComponent.DEBOUNCE_TIME, + emptyOn: '', + }), }; // add type checkbox support @@ -132,6 +133,10 @@ export class SearchInputComponent implements OnInit, OnDestroy { this.pageParam.setValue(page); } + public clearParentId(): void { + this.searchInput.metadata.parentId = ''; + } + /* public itemSelected(): void { this.searchInputEvent.emit(this.searchInput); @@ -143,7 +148,7 @@ export class SearchInputComponent implements OnInit, OnDestroy { distinctUntilChanged(), switchMap(searchText => { if (searchText.length <= 2) return []; - return this.searchService.getContributorCreatorAutoComplete(searchText).pipe(map(ace => ace.map(ac => ac.target))); + return this.searchService.getContributorCreatorAutoComplete(searchText, 10).pipe(map(ace => ace.map(ac => ac.target))); }) ); @@ -151,7 +156,7 @@ export class SearchInputComponent implements OnInit, OnDestroy { text$.pipe( debounceTime(200), distinctUntilChanged(), - switchMap(searchText => this.searchService.getKeywordsAutoComplete(searchText).pipe(map(ace => ace.map(ac => ac.target)))) + switchMap(searchText => this.searchService.getKeywordsAutoComplete(searchText, 10).pipe(map(ace => ace.map(ac => ac.target)))) ); autoCompleteFormats = (text$: Observable<string>) => diff --git a/src/main/webapp/app/search/search.component.html b/src/main/webapp/app/search/search.component.html index aeadad21ac5af7b053ec3dfc4432bb27b84d32a5..010ade16548eaa584bbcf81e3049b9c6c9bb80aa 100644 --- a/src/main/webapp/app/search/search.component.html +++ b/src/main/webapp/app/search/search.component.html @@ -8,7 +8,7 @@ class="col-12 col-md-5 col-lg-4 col-xl-3" (searchInputEvent)="updateSearchInput($event)"> </jhi-search-input> - <div class="col-12 col-md-7 col-lg-8 col-xl-9"> + <div class="col-12 col-md-7 col-lg-8 col-xl-9 back"> <div *ngIf="results.length === 0" > <span jhiTranslate="search.noResults">No results found</span> <span *ngIf="!accountService.isAuthenticated()" jhiTranslate="search.noResultsAnonymous">Anmelden?</span> @@ -26,5 +26,5 @@ </div> </div> -<jhi-exercise-details [exercise]="selectedResult"></jhi-exercise-details> +<jhi-exercise-details [exercise]="selectedResult" (exerciseChangedEvent)="selectExercise($event)"></jhi-exercise-details> diff --git a/src/main/webapp/app/search/search.component.ts b/src/main/webapp/app/search/search.component.ts index 7d06bacfd9af1092c17ab1c59692313d40d9d8b5..1e520dbf2307ea2507dfe12bcb6e5047df750d27 100644 --- a/src/main/webapp/app/search/search.component.ts +++ b/src/main/webapp/app/search/search.component.ts @@ -1,9 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { Exercise } from 'app/shared/model/exercise.model'; +import { Exercise, searchResultToExercise } from 'app/shared/model/exercise.model'; import { SearchInput } from 'app/shared/model/search/search-input.model'; import { SearchService } from 'app/search/service/search-service'; import { SearchResultsDTO } from 'app/shared/model/search/search-results-dto.model'; -import { SearchResultDTO } from 'app/shared/model/search/search-result-dto.model'; import { AccountService } from 'app/core/auth/account.service'; @Component({ @@ -65,40 +64,7 @@ export class SearchComponent implements OnInit { // eslint-disable-next-line @typescript-eslint/camelcase hit.file.indexing_date = new Date(hit.file.indexing_date); }); - return searchResultsDTO.searchResult.map(this.searchResultToExercise); - } - - private searchResultToExercise(searchResult: SearchResultDTO): Exercise { - return { - title: searchResult.metadata.title, - license: searchResult.metadata.license, - description: searchResult.metadata.description, - programmingLanguages: searchResult.metadata.programmingLanguage, - languages: searchResult.metadata.language, - creator: searchResult.metadata.creator, - contributor: searchResult.metadata.contributor, - publisher: searchResult.metadata.publisher, - imageURL: searchResult.metadata.image, - rating: searchResult.ranking5, - lastUpdate: searchResult.project.last_activity_at, - timeRequired: searchResult.metadata.timeRequired, - requires: searchResult.metadata.requires, - deprecated: searchResult.metadata.deprecated, - difficulty: searchResult.metadata.difficulty, - educationLevel: searchResult.metadata.educationLevel, - format: searchResult.metadata.format, - keyword: searchResult.metadata.keyword, - status: searchResult.metadata.status, - type: searchResult.metadata.type, - structure: searchResult.metadata.structure, - version: searchResult.metadata.version, - metadataVersion: searchResult.metadata.metadataVersion, - - gitlabURL: searchResult.project.url, - originalResult: searchResult, - views: searchResult.views, - downloads: searchResult.downloads, - }; + return searchResultsDTO.searchResult.map(searchResultToExercise); } onScroll(): void { diff --git a/src/main/webapp/app/search/service/search-service.ts b/src/main/webapp/app/search/service/search-service.ts index 88578f9a60463866f58d4dc02401af3b39bcd47c..d4d4734acec11ea4cf8d184105e1a44aaca08a76 100644 --- a/src/main/webapp/app/search/service/search-service.ts +++ b/src/main/webapp/app/search/service/search-service.ts @@ -48,11 +48,10 @@ export class SearchService { }); } - getKeywordsAutoComplete(prefix: string): Observable<Array<AutoCompletionEntry>> { - const options: HttpParams = new HttpParams(); - options.append('keyWordPrefix', prefix); + getKeywordsAutoComplete(prefix: string, maxCount: number): Observable<Array<AutoCompletionEntry>> { + const parameters = new HttpParams().set('keyWordPrefix', prefix).set('max', String(maxCount)); return this.http.get<Array<AutoCompletionEntry>>(this.resourceKeywordsAutoCompleteDetails, { - params: new HttpParams().set('keyWordPrefix', prefix), + params: parameters, }); } @@ -65,10 +64,9 @@ export class SearchService { } getProgrammingLanguageAutoComplete(prefix: string): Observable<Array<AutoCompletionEntry>> { - const options: HttpParams = new HttpParams(); - options.append('keyWordPrefix', prefix); + const options: HttpParams = new HttpParams().set('programmingLanguagePrefix', prefix); return this.http.get<Array<AutoCompletionEntry>>(this.resourceProgrammingLanguageAutoCompleteDetails, { - params: new HttpParams().set('programmingLanguagePrefix', prefix), + params: options, }); } @@ -80,19 +78,17 @@ export class SearchService { }); } - getContributorCreatorAutoComplete(prefix: string): Observable<Array<AutoCompletionEntry>> { - const options: HttpParams = new HttpParams(); - options.append('keyWordPrefix', prefix); + getContributorCreatorAutoComplete(prefix: string, maxCount: number): Observable<Array<AutoCompletionEntry>> { + const options: HttpParams = new HttpParams().set('contributorPrefix', prefix).set('max', String(maxCount)); return this.http.get<Array<AutoCompletionEntry>>(this.resourceContributorCreatorAutoCompleteDetails, { - params: new HttpParams().set('contributorPrefix', prefix), + params: options, }); } getCreatorAutoComplete(prefix: string): Observable<Array<AutoCompletionEntry>> { - const options: HttpParams = new HttpParams(); - options.append('keyWordPrefix', prefix); + const options: HttpParams = new HttpParams().set('contributorPrefix', prefix); return this.http.get<Array<AutoCompletionEntry>>(this.resourceCreatorAutoCompleteDetails, { - params: new HttpParams().set('contributorPrefix', prefix), + params: options, }); } } diff --git a/src/main/webapp/app/shared/model/enumerations/check-frequency.model.ts b/src/main/webapp/app/shared/model/enumerations/check-frequency.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..923200fe7ea14f2b186af35190f2b4b970a6166d --- /dev/null +++ b/src/main/webapp/app/shared/model/enumerations/check-frequency.model.ts @@ -0,0 +1,9 @@ +export const enum CheckFrequency { + NEVER = 'NEVER', + + DAILY = 'DAILY', + + WEEKLY = 'WEEKLY', + + MONTHLY = 'MONTHLY', +} diff --git a/src/main/webapp/app/shared/model/exercise.model.ts b/src/main/webapp/app/shared/model/exercise.model.ts index f8d554f9d533fbf8123c3a9c02288b76fe19acce..45e9826c92ae84da395bceac69721f85b3b160c3 100644 --- a/src/main/webapp/app/shared/model/exercise.model.ts +++ b/src/main/webapp/app/shared/model/exercise.model.ts @@ -24,6 +24,7 @@ export enum ILanguages { // myEnumField: IExerciseType; // } +/** @deprecated unnecessary wrapper around exercises. Only causes extra effort. On long term should be replaced by SearchResultDTO */ export interface Exercise { // from metadata (required) @@ -65,4 +66,42 @@ export interface Exercise { // thesis views: number; downloads: number; + numberOfLikes: number; + userHasLiked: boolean; +} + +export function searchResultToExercise(searchResult: SearchResultDTO): Exercise { + return { + title: searchResult.metadata.title, + license: searchResult.metadata.license, + description: searchResult.metadata.description, + programmingLanguages: searchResult.metadata.programmingLanguage, + languages: searchResult.metadata.language, + creators: searchResult.metadata.creator, + contributor: searchResult.metadata.contributor, + publisher: searchResult.metadata.publisher, + imageURL: searchResult.metadata.image, + rating: searchResult.ranking5, + lastUpdate: searchResult.project.last_activity_at, + timeRequired: searchResult.metadata.timeRequired, + requires: searchResult.metadata.requires, + deprecated: searchResult.metadata.deprecated, + difficulty: searchResult.metadata.difficulty, + educationLevel: searchResult.metadata.educationLevel, + format: searchResult.metadata.format, + keyword: searchResult.metadata.keyword, + status: searchResult.metadata.status, + type: searchResult.metadata.type, + structure: searchResult.metadata.structure, + version: searchResult.metadata.version, + metadataVersion: searchResult.metadata.metadataVersion, + + gitlabURL: searchResult.project.url, + originalResult: searchResult, + views: searchResult.views, + downloads: searchResult.downloads, + + numberOfLikes: 0, + userHasLiked: false, + }; } diff --git a/src/main/webapp/app/shared/model/likes.model.ts b/src/main/webapp/app/shared/model/likes.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..5332c26e9607c39de7071c88fdb7e649ae174057 --- /dev/null +++ b/src/main/webapp/app/shared/model/likes.model.ts @@ -0,0 +1,12 @@ +import { Moment } from 'moment'; + +export interface ILikes { + id?: number; + date?: Moment; + userID?: number; + exerciseID?: string; +} + +export class Likes implements ILikes { + constructor(public id?: number, public date?: Moment, public userID?: number, public exerciseID?: string) {} +} diff --git a/src/main/webapp/app/shared/model/saved-searches.model.ts b/src/main/webapp/app/shared/model/saved-searches.model.ts index 622b498289aa24b452dce3e97ec9bd0af22ff819..ba074950e7febf4f38a7e8c3bb461ab5df3a9e5a 100644 --- a/src/main/webapp/app/shared/model/saved-searches.model.ts +++ b/src/main/webapp/app/shared/model/saved-searches.model.ts @@ -2,10 +2,10 @@ export interface ISavedSearches { id?: number; name?: string; jsonQuery?: string; - userIdLogin?: string; - userIdId?: number; + userLogin?: string; + userId?: number; } export class SavedSearches implements ISavedSearches { - constructor(public id?: number, public name?: string, public jsonQuery?: string, public userIdLogin?: string, public userIdId?: number) {} + constructor(public id?: number, public name?: string, public jsonQuery?: string, public userLogin?: string, public userId?: number) {} } diff --git a/src/main/webapp/app/shared/model/search/metadata-file-dto.model.ts b/src/main/webapp/app/shared/model/search/metadata-file-dto.model.ts index d0cb42bd93e75e93062e4676a9083fbad99acd5b..5453b5c233ac1f6007f5af1c1113f29ae089d87d 100644 --- a/src/main/webapp/app/shared/model/search/metadata-file-dto.model.ts +++ b/src/main/webapp/app/shared/model/search/metadata-file-dto.model.ts @@ -3,4 +3,6 @@ export interface MetadataFileDTO { path: string; commit_id: string; indexing_date: Date; + parentId: string; + children: string[]; } diff --git a/src/main/webapp/app/shared/model/search/metadata-search-input.model.ts b/src/main/webapp/app/shared/model/search/metadata-search-input.model.ts index 023524b0d00cd39de74cd5771b26be083e4878f9..0c6882044c891b5f4253a0c36d00a3ba06b2ebcf 100644 --- a/src/main/webapp/app/shared/model/search/metadata-search-input.model.ts +++ b/src/main/webapp/app/shared/model/search/metadata-search-input.model.ts @@ -8,6 +8,7 @@ export class MetadataSearchInput { public author: string; public types: Array<IExerciseType>; public format: string; + public parentId: string; public constructor() { this.keyword = ''; @@ -17,5 +18,6 @@ export class MetadataSearchInput { this.author = ''; this.types = []; this.format = ''; + this.parentId = ''; } } diff --git a/src/main/webapp/app/shared/model/search/search-input.model.ts b/src/main/webapp/app/shared/model/search/search-input.model.ts index a9b088297d48fff119d9ff3ffb7a2ae164d0ac1d..c112978d3f203ea0e3cc560c18598179fcc9136d 100644 --- a/src/main/webapp/app/shared/model/search/search-input.model.ts +++ b/src/main/webapp/app/shared/model/search/search-input.model.ts @@ -20,6 +20,7 @@ export class SearchInput { this.metadata.author = value.author; this.metadata.license = value.license; this.metadata.format = value.format; + this.metadata.parentId = value.parentId; this.metadata.naturalLanguage = []; Object.keys(ILanguages).forEach(typeName => { diff --git a/src/main/webapp/app/shared/model/search/search-result-dto.model.ts b/src/main/webapp/app/shared/model/search/search-result-dto.model.ts index 8dcecef55af81426a2840495c68d2647189addd5..d252f0715a8d3e7ea4ef99e194410bc7f07728a1 100644 --- a/src/main/webapp/app/shared/model/search/search-result-dto.model.ts +++ b/src/main/webapp/app/shared/model/search/search-result-dto.model.ts @@ -13,6 +13,14 @@ export interface SearchResultDTO { downloads: number; } +export function getPathOfExerciseId(exerciseId: string) { + if (exerciseId) { + const colonPos = exerciseId.indexOf(':"'); + if (colonPos >= 0) return exerciseId.slice(colonPos + 1); + } + return ''; +} + export interface PluginActionInfo { plugin: string; action: string; diff --git a/src/main/webapp/app/shared/model/user-watch-list.model.ts b/src/main/webapp/app/shared/model/user-watch-list.model.ts index 23a97f613ebf88982fc04df6d96be8c76b2c8e91..a3781655cc1e4228053a8eb0ed0a4ac28c0ac0a9 100644 --- a/src/main/webapp/app/shared/model/user-watch-list.model.ts +++ b/src/main/webapp/app/shared/model/user-watch-list.model.ts @@ -1,14 +1,21 @@ import { IWatchListEntry } from './watch-list-entry.model'; - +import { CheckFrequency } from './enumerations/check-frequency.model'; export interface IUserWatchList { id?: number; name?: string; - userIdLogin?: string; - userIdId?: number; + checkFrequency?: CheckFrequency; + userLogin?: string; + userId?: number; } export class UserWatchList implements IUserWatchList { - constructor(public id?: number, public name?: string, public userIdLogin?: string, public userIdId?: number) {} + constructor( + public id?: number, + public name?: string, + public checkFrequency?: CheckFrequency, + public userLogin?: string, + public userId?: number + ) {} } export interface UserWatchListWithContent { diff --git a/src/main/webapp/app/shared/service/test-service.ts b/src/main/webapp/app/shared/service/test-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f132696d94a9f131cb552b07ffd4726536eb4ecd --- /dev/null +++ b/src/main/webapp/app/shared/service/test-service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +export interface Message { + message: string; +} + +/** + provides infrastructure services for Plugins + */ +@Injectable({ providedIn: 'root' }) +export class TestService { + public triggerInfoMailURL = SERVER_API_URL + 'api/triggerInfoMail'; + + constructor(protected http: HttpClient) {} + + public triggerInfoMail(): Observable<Message> { + return this.http.get<Message>(this.triggerInfoMailURL); + } +} diff --git a/src/main/webapp/app/shared/watchlist/watchlist-manager.ts b/src/main/webapp/app/shared/watchlist/watchlist-manager.ts index 2f8b168634dabca31048fdaa7f1515595e439f6e..d6a7a24248fd2cad49a592ac800e675367440a28 100644 --- a/src/main/webapp/app/shared/watchlist/watchlist-manager.ts +++ b/src/main/webapp/app/shared/watchlist/watchlist-manager.ts @@ -5,6 +5,7 @@ import { UserWatchListService } from 'app/entities/user-watch-list/user-watch-li import { WatchListEntryService } from 'app/entities/watch-list-entry/watch-list-entry.service'; import { TranslateService } from '@ngx-translate/core'; import { IUserWatchList, UserWatchListWithContent } from 'app/shared/model/user-watch-list.model'; +import { CheckFrequency } from 'app/shared/model/enumerations/check-frequency.model'; import { IWatchListEntry } from 'app/shared/model/watch-list-entry.model'; import { AccountService } from 'app/core/auth/account.service'; import { Subscription } from 'rxjs'; @@ -57,8 +58,9 @@ export class WatchlistManager implements OnInit, OnDestroy { const userWatchlist: IUserWatchList = { name: this.translate.instant('gitsearchApp.userWatchList.defaultName'), - userIdLogin: this.account!.login, - userIdId: 1, // unused, replaced by correct userId by create service + userLogin: this.account!.login, + userId: 1, // unused, replaced by correct userId by create service + checkFrequency: CheckFrequency.NEVER, }; this.watchListService.createForCurrentUser(userWatchlist).subscribe( (wl: HttpResponse<IUserWatchList>) => { @@ -120,14 +122,14 @@ export class WatchlistManager implements OnInit, OnDestroy { }; // reload watchlist this.watchListEntryService.createForCurrentUser(watchListEntry).subscribe((/* wle: HttpResponse<IWatchListEntry> */) => { - this.loadCurrentWatchList(this.currentWatchlist!.userWatchList); + if (this.currentWatchlist) this.loadCurrentWatchList(this.currentWatchlist.userWatchList); }); } else { // delete this.watchListEntryService .deleteForCurrentUser(this.currentWatchlist.userWatchList.id!, e.originalResult.exerciseId) .subscribe(() => { - this.loadCurrentWatchList(this.currentWatchlist!.userWatchList); + if (this.currentWatchlist) this.loadCurrentWatchList(this.currentWatchlist.userWatchList); }); } } diff --git a/src/main/webapp/app/teaserContent/teaserContent.component.ts b/src/main/webapp/app/teaserContent/teaserContent.component.ts index 811056039d366e8dab388295d613880863bb0b9c..e90088ea964ce90da16801e18590b075b93bd80b 100644 --- a/src/main/webapp/app/teaserContent/teaserContent.component.ts +++ b/src/main/webapp/app/teaserContent/teaserContent.component.ts @@ -29,7 +29,7 @@ export class TeaserContentComponent implements OnInit { constructor(private searchService: SearchService, private router: Router) {} ngOnInit(): void { - this.searchService.getKeywordsAutoComplete('').subscribe( + this.searchService.getKeywordsAutoComplete('', 20).subscribe( (data: Array<AutoCompletionEntry>) => { this.keywords = data; this.keywordCloudData = []; @@ -62,7 +62,7 @@ export class TeaserContentComponent implements OnInit { alert('Initialization of programming languages failed'); } ); - this.searchService.getContributorCreatorAutoComplete('').subscribe( + this.searchService.getContributorCreatorAutoComplete('', 10).subscribe( (data: Array<AutoCompletionEntry>) => { this.contributors = data; this.contributorCloudData = []; diff --git a/src/main/webapp/i18n/de/checkFrequency.json b/src/main/webapp/i18n/de/checkFrequency.json new file mode 100644 index 0000000000000000000000000000000000000000..519b381911db8eabae0569bffeaeeefd16601212 --- /dev/null +++ b/src/main/webapp/i18n/de/checkFrequency.json @@ -0,0 +1,11 @@ +{ + "gitsearchApp": { + "CheckFrequency": { + "null": "", + "NEVER": "Nie", + "DAILY": "Täglich", + "WEEKLY": "Wöchentlich", + "MONTHLY": "Monatlich" + } + } +} diff --git a/src/main/webapp/i18n/de/exercise.json b/src/main/webapp/i18n/de/exercise.json index 58e1f303317965b12f653266ec276dad19c8abfc..d2689c530fd6014eb9b3fbdfcba77266a6acbc18 100644 --- a/src/main/webapp/i18n/de/exercise.json +++ b/src/main/webapp/i18n/de/exercise.json @@ -10,7 +10,14 @@ "git": "In GitLab öffnen", "views": "Anzahl der Aufrufe", "downloads": "Anzahl der Downloads", - "readmeNotFound": "# Keine README.md Datei (oder Alternative) gefunden!" + "readmeNotFound": "# Keine README.md Datei (oder Alternative) gefunden!", + "toParent": "zum übergeordneten Objekt", + "like": "Wenn Ihnen diese Aufgabe gefällt, dann klicken Sie auf das Herz!", + "unlike": "Wenn Ihnen diese Aufgabe nicht mehr gefällt, dann klicken Sie auf das Herz!", + "likeLogin": "Melden Sie sich an, um dieser Aufgabe ein like zu geben" + }, + "help": { + "toParent": "Diese Aufgabe ist Teil einer Sammlung. Klicken Sie hier, um die Sammlung anzusehen." }, "metadata": { "metadata": "Metadaten", diff --git a/src/main/webapp/i18n/de/global.json b/src/main/webapp/i18n/de/global.json index 31d485d6d811597e86b5788e6116ec037560cc0b..6e75db48df17c2bdbe12cd207d0df6b99f793417 100644 --- a/src/main/webapp/i18n/de/global.json +++ b/src/main/webapp/i18n/de/global.json @@ -8,9 +8,10 @@ "entities": { "main": "Entitäten", "statistics": "Statistics", - "userWatchList": "Nutzermerkliste", + "userWatchList": "Merkliste", "watchListEntry": "Watch List Entry", "savedSearches": "Saved Searches", + "likes": "Likes", "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" }, "account": { diff --git a/src/main/webapp/i18n/de/likes.json b/src/main/webapp/i18n/de/likes.json new file mode 100644 index 0000000000000000000000000000000000000000..993d92958493977f6cea67526d84ddee160931fe --- /dev/null +++ b/src/main/webapp/i18n/de/likes.json @@ -0,0 +1,25 @@ +{ + "gitsearchApp": { + "likes": { + "home": { + "title": "Likes", + "createLabel": "Likes erstellen", + "createOrEditLabel": "Likes erstellen oder bearbeiten", + "search": "Suche nach Likes", + "notFound": "No Likes found" + }, + "created": "Likes erstellt mit ID {{ param }}", + "updated": "Likes aktualisiert mit ID {{ param }}", + "deleted": "Likes gelöscht mit ID {{ param }}", + "delete": { + "question": "Soll Likes {{ id }} wirklich dauerhaft gelöscht werden?" + }, + "detail": { + "title": "Likes" + }, + "date": "Date", + "userID": "User ID", + "projectID": "Project ID" + } + } +} diff --git a/src/main/webapp/i18n/de/search.json b/src/main/webapp/i18n/de/search.json index 54d4b20d1118e480b4402aa8731bb039107fac2f..b7004263e3ce8e01c4d0484418342800fdd6c6dd 100644 --- a/src/main/webapp/i18n/de/search.json +++ b/src/main/webapp/i18n/de/search.json @@ -7,9 +7,10 @@ "fulltext": "dieses Feld sucht im Titel, der Beschreibung und den Schlüsselwörtern (Präfixsuche)", "programmingLanguage": "Bitte geben die gewünschte Programmiersprache ein (Präfixsuche)", "keywords": "Suche nach relevanten Schlüsselwörtern (Präfixsuche)", - "authorContritbutors": "Suche nach Autoren (und Beitragenden) (Präfixsuche)", + "authorContributors": "Suche nach Autoren (und Beitragenden) (Präfixsuche)", "license": "Suche nach Lizenztyp (Präfixsuche)", - "formats": "Suche nach dem gewünschten Format (z.B latex, pdf etc.)" + "formats": "Suche nach dem gewünschten Format (z.B latex, pdf etc.)", + "helpParent": "Einschränkung aufheben" }, "noResults": "Keine Suchergebnisse gefunden.", "noResultsAnonymous": "Sie finden vielleicht mehr Resultate, wenn Sie sich anmelden", @@ -37,7 +38,8 @@ "keywords": "Schlüsselwörter", "formats": "Formate", "license": "Lizenz", - "author": "AutorInnen" + "author": "AutorInnen", + "parentId": "Id des übergeordneten Objekts" } } } diff --git a/src/main/webapp/i18n/de/settings.json b/src/main/webapp/i18n/de/settings.json index 28cd2b644bc21741cac33851e0795aaf51f10a3a..86d9d874635b50b1f2d2ccdbac510c1df2c3d6ae 100644 --- a/src/main/webapp/i18n/de/settings.json +++ b/src/main/webapp/i18n/de/settings.json @@ -9,6 +9,9 @@ "language": "Sprache", "button": "Speichern" }, + "test": { + "emailSending": "Teste den Versand der Info E-Mail" + }, "messages": { "error": { "fail": "<strong>Es ist ein Fehler aufgetreten!</strong> Die Einstellungen konnten nicht gespeichert werden.", diff --git a/src/main/webapp/i18n/de/user-management.json b/src/main/webapp/i18n/de/user-management.json index 309add6efcd286460a918012e9dc44fe152ae08b..f94a0c591757dc943ad44acb413a3f44febcb9b1 100644 --- a/src/main/webapp/i18n/de/user-management.json +++ b/src/main/webapp/i18n/de/user-management.json @@ -25,6 +25,8 @@ "createdBy": "Erstellt von", "createdDate": "Erstellt am", "lastModifiedBy": "Bearbeitet von", - "lastModifiedDate": "Zuletzt bearbeitet" + "lastModifiedDate": "Zuletzt bearbeitet", + "lastLogin": "letzte Anmeldung", + "lastMailSent": "Letzter Info-Mail Versand" } } diff --git a/src/main/webapp/i18n/de/userWatchList.json b/src/main/webapp/i18n/de/userWatchList.json index f13c1db209b210608be5d944abb6969896538580..78ac0c2ffdccf12531e50e3d3e2b92b58e5e79c5 100644 --- a/src/main/webapp/i18n/de/userWatchList.json +++ b/src/main/webapp/i18n/de/userWatchList.json @@ -19,10 +19,14 @@ "detail": { "title": "Lesezeichenliste" }, + "help": { + "checkFrequency": "Wie oft wollen Sie per Mail informiert werden, falls eine neue Version eines Eintrags in dieser Liste vorliegt?" + }, "name": "Name", "userId": "User Id", "selectedList": "ausgewählte Lesezeichenliste: ", - "currentList": "aktuelle Lesezeichenliste: " + "currentList": "aktuelle Lesezeichenliste: ", + "checkFrequency": "Ãœberprüfungshäufigkeit" } } } diff --git a/src/main/webapp/i18n/en/checkFrequency.json b/src/main/webapp/i18n/en/checkFrequency.json new file mode 100644 index 0000000000000000000000000000000000000000..21afca6e31dfbbe7b3ecedb3767942294c1bf646 --- /dev/null +++ b/src/main/webapp/i18n/en/checkFrequency.json @@ -0,0 +1,11 @@ +{ + "gitsearchApp": { + "CheckFrequency": { + "null": "", + "NEVER": "never", + "DAILY": "daily", + "WEEKLY": "weekly", + "MONTHLY": "monthly" + } + } +} diff --git a/src/main/webapp/i18n/en/exercise.json b/src/main/webapp/i18n/en/exercise.json index 86233a716a85d17759de669462513ea6b8592a00..1da524f0aba8552edeb8279afdba4a793f7abde0 100644 --- a/src/main/webapp/i18n/en/exercise.json +++ b/src/main/webapp/i18n/en/exercise.json @@ -10,7 +10,14 @@ "git": "Open in GitLab", "views": "Number of views", "downloads": "Number of downloads", - "readmeNotFound": "# No README.md (or alternatives) found!" + "readmeNotFound": "# No README.md (or alternatives) found!", + "toParent": "to parent object", + "like": "If you like this exercise, you can click here!", + "unlike": "If you don't like this exercise anymore, you can click here!", + "likeLogin": "Log-in to be able to click this heart" + }, + "help": { + "toParent": "This exercise is contained in a collection. Click here to see the collection item" }, "metadata": { "metadata": "Meta data", diff --git a/src/main/webapp/i18n/en/global.json b/src/main/webapp/i18n/en/global.json index 5dbb137f8c0268b619a61d776f2bebb85ce21d82..0c2aa152f1311fb2668715e2230c80ad00d008ac 100644 --- a/src/main/webapp/i18n/en/global.json +++ b/src/main/webapp/i18n/en/global.json @@ -11,6 +11,7 @@ "userWatchList": "User Watch List", "watchListEntry": "Watch List Entry", "savedSearches": "Saved Searches", + "likes": "Likes", "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" }, "account": { diff --git a/src/main/webapp/i18n/en/likes.json b/src/main/webapp/i18n/en/likes.json new file mode 100644 index 0000000000000000000000000000000000000000..bd7f01b59295c353130761da101e61976501c2f0 --- /dev/null +++ b/src/main/webapp/i18n/en/likes.json @@ -0,0 +1,25 @@ +{ + "gitsearchApp": { + "likes": { + "home": { + "title": "Likes", + "createLabel": "Create a new Likes", + "createOrEditLabel": "Create or edit a Likes", + "search": "Search for Likes", + "notFound": "No Likes found" + }, + "created": "A new Likes is created with identifier {{ param }}", + "updated": "A Likes is updated with identifier {{ param }}", + "deleted": "A Likes is deleted with identifier {{ param }}", + "delete": { + "question": "Are you sure you want to delete Likes {{ id }}?" + }, + "detail": { + "title": "Likes" + }, + "date": "Date", + "userID": "User ID", + "projectID": "Project ID" + } + } +} diff --git a/src/main/webapp/i18n/en/search.json b/src/main/webapp/i18n/en/search.json index 16f3a081e39079270563630badc3195894948cf7..430d5c3c87ddf047d6b6cd688490ba34aa2b291a 100644 --- a/src/main/webapp/i18n/en/search.json +++ b/src/main/webapp/i18n/en/search.json @@ -7,9 +7,10 @@ "fulltext": "this field searches in all the title, the decription, and the keywords (prefix search)", "programmingLanguage": "please enter the programming language (prefix search)", "keywords": "please enter relevant keywords (prefix search)", - "authorContritbutors": "please enter authors or contributors (prefix search)", + "authorContributors": "please enter authors or contributors (prefix search)", "license": "please enter a license type (prefix search)", - "formats": "search for the wanted format (e.g. latex, pdf etc.)" + "formats": "search for the wanted format (e.g. latex, pdf etc.)", + "helpParent": "reset the parent constraint" }, "noResults": "No results found.", "noResultsAnonymous": "You may find more results, if logged in", @@ -37,7 +38,8 @@ "keywords": "Keyword(s)", "formats": "Format(s)", "license": "License", - "author": "Author(s)" + "author": "Author(s)", + "parentId": "id of parent item" } } } diff --git a/src/main/webapp/i18n/en/settings.json b/src/main/webapp/i18n/en/settings.json index 508c037c3bce641047f8e5bdcb7c88e71f5f7e94..b727fb6e1b23936b907d76454d420adeabc76cbf 100644 --- a/src/main/webapp/i18n/en/settings.json +++ b/src/main/webapp/i18n/en/settings.json @@ -9,6 +9,9 @@ "language": "Language", "button": "Save" }, + "test": { + "emailSending": "Test Sending of Info Email" + }, "messages": { "error": { "fail": "<strong>An error has occurred!</strong> Settings could not be saved.", diff --git a/src/main/webapp/i18n/en/user-management.json b/src/main/webapp/i18n/en/user-management.json index 4923c0911836c00adda5086deff7ba83affbb25e..6f587923340b439263031aa564e98ddcffc907e8 100644 --- a/src/main/webapp/i18n/en/user-management.json +++ b/src/main/webapp/i18n/en/user-management.json @@ -25,6 +25,8 @@ "createdBy": "Created by", "createdDate": "Created date", "lastModifiedBy": "Modified by", - "lastModifiedDate": "Modified date" + "lastModifiedDate": "Modified date", + "lastLogin": "Last login", + "lastMailSent": "Last Info-Mail sent" } } diff --git a/src/main/webapp/i18n/en/userWatchList.json b/src/main/webapp/i18n/en/userWatchList.json index 357f40148eb159265a2c5d72cf95cb7ac51598ba..d111f74e5944d2b23e2954947c9a601de80d964a 100644 --- a/src/main/webapp/i18n/en/userWatchList.json +++ b/src/main/webapp/i18n/en/userWatchList.json @@ -19,10 +19,14 @@ "detail": { "title": "User Watch List" }, + "help": { + "checkFrequency": "How often want you get informed by email, when a new version of an exercise on this list is available?" + }, "name": "Name", "userId": "User Id", "selectedList": "selected bookmark list: ", - "currentList": "current bookmark list: " + "currentList": "current bookmark list: ", + "checkFrequency": "Check Frequency" } } } diff --git a/src/test/java/at/ac/uibk/gitsearch/domain/ExerciseIdTest.java b/src/test/java/at/ac/uibk/gitsearch/domain/ExerciseIdTest.java new file mode 100644 index 0000000000000000000000000000000000000000..564c03202e541dd8182b8111782da77678842d5e --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/domain/ExerciseIdTest.java @@ -0,0 +1,34 @@ +package at.ac.uibk.gitsearch.domain; + +import java.text.ParseException; + +import org.codeability.sharing.plugins.api.search.util.ExerciseId; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +public class ExerciseIdTest { + + @ParameterizedTest + @ValueSource(strings = {"3", "3:path", "3:path1/path2"} ) + public void parseVariousIds(String externalRepresentation) throws ParseException { + Assert.assertEquals(externalRepresentation, ExerciseId.fromString(externalRepresentation).toString()); + } + + @Test + public void parseIdsWithTrailingSlashes() throws ParseException { + Assert.assertEquals("30:abc", ExerciseId.fromString("30:/abc").toString()); + Assert.assertEquals("30:abc", ExerciseId.fromString("30://abc").toString()); + Assert.assertEquals("30", ExerciseId.fromString("30://").toString()); + Assert.assertEquals("30:abc/def", ExerciseId.fromString("30:/abc/def").toString()); + } + + @ParameterizedTest + @ValueSource(strings = {"=", ":path", "3x2", "3x2:/asd", "asdf=asd:30"} ) + public void parseCorruptIds(String corruptIds) throws ParseException { + Assertions.assertThrows(ParseException.class, () -> ExerciseId.fromString(corruptIds)); + } + +} diff --git a/src/test/java/at/ac/uibk/gitsearch/domain/LikesTest.java b/src/test/java/at/ac/uibk/gitsearch/domain/LikesTest.java new file mode 100644 index 0000000000000000000000000000000000000000..20f70a7d8d04d7c61aebfb5127fbb4c2c9787db6 --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/domain/LikesTest.java @@ -0,0 +1,22 @@ +package at.ac.uibk.gitsearch.domain; + +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; +import at.ac.uibk.gitsearch.web.rest.TestUtil; + +public class LikesTest { + + @Test + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Likes.class); + Likes likes1 = new Likes(); + likes1.setId(1L); + Likes likes2 = new Likes(); + likes2.setId(likes1.getId()); + assertThat(likes1).isEqualTo(likes2); + likes2.setId(2L); + assertThat(likes1).isNotEqualTo(likes2); + likes1.setId(null); + assertThat(likes1).isNotEqualTo(likes2); + } +} diff --git a/src/test/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImplIT.java b/src/test/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImplIT.java index 4640ee2b50f1ca2456ee24f403cdf87d23c941dd..c08035c4959b61e6095bdc137bd1f9906dc0fdc7 100644 --- a/src/test/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImplIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/repository/search/GitFilesRepositoryImplIT.java @@ -4,13 +4,13 @@ import static org.junit.jupiter.api.Assertions.fail; import java.io.IOException; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; +import org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.service.dto.GitFilesPageDetailsDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputMetadataDTO; /** @@ -29,7 +29,8 @@ class GitFilesRepositoryImplIT { void testPageDetails() throws IOException { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, "testing", null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - GitFilesPageDetailsDTO searchResultPage = gitFilesRepository.pageDetails(searchQuery, SearchInputDTO.PAGE_SIZE); + @SuppressWarnings("unused") + GitFilesPageDetailsDTO searchResultPage = gitFilesRepository.pageDetails(searchQuery); } // @Test diff --git a/src/test/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepositoryMockConfiguration.java b/src/test/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepositoryMockConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..ccf865ef3be47a1d45d909dfb9c5b7aa7589b656 --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/repository/search/LikesSearchRepositoryMockConfiguration.java @@ -0,0 +1,16 @@ +package at.ac.uibk.gitsearch.repository.search; + +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Configuration; + +/** + * Configure a Mock version of {@link LikesSearchRepository} to test the + * application without starting Elasticsearch. + */ +@Configuration +public class LikesSearchRepositoryMockConfiguration { + + @MockBean + private LikesSearchRepository mockLikesSearchRepository; + +} diff --git a/src/test/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepositoryIT.java b/src/test/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepositoryIT.java index f7d8954bdddf268815fd3901f3decfe722504f78..9c886c3f8f90d6eef6c669ffc04b080dd93bcb46 100644 --- a/src/test/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepositoryIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepositoryIT.java @@ -1,17 +1,23 @@ package at.ac.uibk.gitsearch.repository.search; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + import java.io.IOException; import java.util.List; +import java.util.Optional; import javax.ws.rs.NotFoundException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.node.NodeValidationException; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -22,7 +28,6 @@ import org.springframework.boot.test.context.SpringBootTest; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.repository.search.testESService.ElasticSearchTestServerConfiguration; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; @SpringBootTest(classes = GitsearchApp.class) public class MetaDataRepositoryIT { @@ -47,35 +52,35 @@ public class MetaDataRepositoryIT { @Test public void testKeywordAutocompletion() throws IOException { - final List<AutoCompleteEntry> keywordsAutoComplete = metaDataRepository.getKeywordsAutoComplete("Jav"); + final List<AutoCompleteEntry> keywordsAutoComplete = metaDataRepository.getKeywordsAutoComplete("Jav", 10); assertThat(keywordsAutoComplete, contains(hasProperty("target", is("Java")))); } @Test public void testCreatorAutocompletion() throws IOException { - final List<AutoCompleteEntry> creatorAutoComplete = metaDataRepository.getCreatorAutoComplete("Pod"); + final List<AutoCompleteEntry> creatorAutoComplete = metaDataRepository.getCreatorAutoComplete("Pod", 10); assertThat(creatorAutoComplete, contains(hasProperty("target", is("Stefan Podlipnig")))); - final List<AutoCompleteEntry> creatorAutoComplete2 = metaDataRepository.getCreatorAutoComplete("Po"); + final List<AutoCompleteEntry> creatorAutoComplete2 = metaDataRepository.getCreatorAutoComplete("Po", 10); assertThat(creatorAutoComplete2, contains(hasProperty("target", is("Stefan Podlipnig")))); } @Test public void testContributorAutocompletion() throws IOException { - final List<AutoCompleteEntry> contributorAutoComplete = metaDataRepository.getContributorAutoComplete("Bast"); + final List<AutoCompleteEntry> contributorAutoComplete = metaDataRepository.getContributorAutoComplete("Bast", 10); assertThat(contributorAutoComplete, contains(hasProperty("target", is("Daniel Bastta")))); } @Test public void testProgrammingLanguageAutocompletion() throws IOException { - final List<AutoCompleteEntry> plAutoComplete = metaDataRepository.getProgrammingLanguageAutoComplete("Ja"); - assertThat(plAutoComplete, contains(hasProperty("target", is("Java")))); + final List<AutoCompleteEntry> plAutoComplete = metaDataRepository.getProgrammingLanguageAutoComplete("Ja", 10); + assertThat(plAutoComplete, contains(hasProperty("target", is("JAVA")))); } @Test public void getByExerciseId() throws IOException { - // This test assumes that the test entries have consecutive ids - for (int i : new int[] { 1, 2, 3 }) { - final SearchResultDTO exerciseById = metaDataRepository.getExerciseById(i + ""); + // This test assumes that the test entries are public + for (int i : new int[] { 1 }) { + final SearchResultDTO exerciseById = metaDataRepository.getExerciseById(i + "", Optional.empty()); assertNotNull("should be found:", exerciseById); assertEquals("Id should be the same", i + "", exerciseById.getExerciseId()); } @@ -86,7 +91,7 @@ public class MetaDataRepositoryIT { // This test assumes that the test entries have consecutive ids String exerciseId = "999999"; // should not exist Assertions.assertThrows(NotFoundException.class, () -> { - metaDataRepository.getExerciseById(exerciseId);}, + metaDataRepository.getExerciseById(exerciseId, Optional.empty());}, "Exercise for id " + exerciseId + " should not exist:"); } } diff --git a/src/test/java/at/ac/uibk/gitsearch/repository/search/testESService/ElasticSearchTestServerConfiguration.java b/src/test/java/at/ac/uibk/gitsearch/repository/search/testESService/ElasticSearchTestServerConfiguration.java index 16865042fa4cb86441aee54c59db8bedb06066de..a9ba665321f6c0f7bd1a966b0ebecc87afb76d9d 100644 --- a/src/test/java/at/ac/uibk/gitsearch/repository/search/testESService/ElasticSearchTestServerConfiguration.java +++ b/src/test/java/at/ac/uibk/gitsearch/repository/search/testESService/ElasticSearchTestServerConfiguration.java @@ -3,15 +3,29 @@ package at.ac.uibk.gitsearch.repository.search.testESService; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.StringWriter; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.time.Instant; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHost; import org.apache.http.util.EntityUtils; import org.apache.logging.log4j.LogManager; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO.GitProject; +import org.codeability.sharing.plugins.api.search.SearchResultDTO.MetadataFile; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; @@ -32,66 +46,171 @@ import org.springframework.boot.context.event.ApplicationStartingEvent; import org.springframework.context.event.ContextStartedEvent; import org.springframework.context.event.ContextStoppedEvent; import org.springframework.context.event.EventListener; -import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.util.Assert; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.base.Charsets; import com.google.common.io.ByteSource; +import at.ac.uibk.gitsearch.repository.search.MetaDataRepository; import at.ac.uibk.gitsearch.repository.search.SearchRepositoryConstants; - /** - * this class provides test infrastructure for a local elastic search service for local tests. + * this class provides test infrastructure for a local elastic search service + * for local tests. + * * @author Michael Breu * */ public class ElasticSearchTestServerConfiguration { - + + /** + * just a helper class to store also data that is not exported to the user + * + * @author Michael Breu + * + */ + public static class ExtendedGitProject extends GitProject { + private String visibility; + private boolean archived; + private int star_count; + private int open_issues_count; + private int forks_count; + private String description; + + /** + * @return the visibility + */ + public String getVisibility() { + return visibility; + } + + /** + * @param visibility the visibility to set + */ + public void setVisibility(String visibility) { + this.visibility = visibility; + } + + /** + * @return the archived + */ + public boolean isArchived() { + return archived; + } + + /** + * @param archived the archived to set + */ + public void setArchived(boolean archived) { + this.archived = archived; + } + + /** + * @return the star_count + */ + public int getStar_count() { + return star_count; + } + + /** + * @param star_count the star_count to set + */ + public void setStar_count(int star_count) { + this.star_count = star_count; + } + + /** + * @return the open_issues_count + */ + public int getOpen_issues_count() { + return open_issues_count; + } + + /** + * @param open_issues_count the open_issues_count to set + */ + public void setOpen_issues_count(int open_issues_count) { + this.open_issues_count = open_issues_count; + } + + /** + * @return the forks_count + */ + public int getForks_count() { + return forks_count; + } + + /** + * @param forks_count the forks_count to set + */ + public void setForks_count(int forks_count) { + this.forks_count = forks_count; + } + + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @param description the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + } + private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ElasticSearchTestServerConfiguration.class); - private TestESNode testNode; - - private ElasticSearchTestServerConfiguration() { - } - - private static ElasticSearchTestServerConfiguration instance = null; - - public static ElasticSearchTestServerConfiguration getTestInstance() { - if (instance==null) - instance = new ElasticSearchTestServerConfiguration(); - return instance; - - } + private TestESNode testNode; + + private ElasticSearchTestServerConfiguration() { + } + + private static ElasticSearchTestServerConfiguration instance = null; + + public static ElasticSearchTestServerConfiguration getTestInstance() { + if (instance == null) + instance = new ElasticSearchTestServerConfiguration(); + return instance; + + } public synchronized void startTestNode() throws IOException, NodeValidationException { - if(testNode==null) { + if (testNode == null) { LOGGER.info("Starting ES Test Node"); try { - File f = File.createTempFile("tobedeleted", "txt"); - Settings s = Settings.builder().put("http.port", "29200") - .put("transport.port", "29300") - .put("node.name", "esSharingTest") - .put("transport.type", "netty4") - .put("http.type", "netty4") - .put("path.home", f.getParent() + File.separator + "esTest").build(); - f.delete(); - - testNode = new TestESNode(s, Collections.singleton(Netty4Plugin.class)) { - - }; - testNode.start(); - - setUpMetaDataIndex(); - setUpContent(); - LOGGER.info("Started ES Test Node"); + File f = File.createTempFile("tobedeleted", "txt"); + Settings s = Settings.builder().put("http.port", "29200").put("transport.port", "29300") + .put("node.name", "esSharingTest").put("transport.type", "netty4").put("http.type", "netty4") + .put("path.home", f.getParent() + File.separator + "esTest").build(); + f.delete(); + + testNode = new TestESNode(s, Collections.singleton(Netty4Plugin.class)) { + + }; + testNode.start(); + + setUpMetaDataIndex(); + setUpContent(); + LOGGER.info("Started ES Test Node"); } catch (Throwable t) { LOGGER.info("ES Test Node crashed: ", t); } @@ -99,114 +218,349 @@ public class ElasticSearchTestServerConfiguration { LOGGER.info("Node already started"); } } - + private void setUpMetaDataIndex() throws IOException { - + RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); + headers.setContentType(MediaType.APPLICATION_JSON); - try { - restTemplate.delete("http://localhost:29200/_all"); + try { + restTemplate.delete("http://localhost:29200/_all"); } catch (Throwable e) { LOGGER.info("Deletion of previous index failed: {}!", e.getMessage()); } - - List<String> indices2 = getIndices(); + List<String> indices2 = getIndices(); - indices2.forEach((s) -> { - LOGGER.info("Found index {}", s); - try { + indices2.forEach((s) -> { + LOGGER.info("Found index {}", s); + try { restTemplate.delete("http://localhost:29200/" + s, String.class); // just in case, delete old index } catch (RestClientException e) { LOGGER.info("Deletion of previous index failed: {}!", e.getMessage()); } - }); - - - - + }); + // GetIndexRequest request2 = new GetIndexRequest(); // // GetIndexResponse response = client.indices().get(request2, RequestOptions.DEFAULT); // String[] indices = response.getIndices(); - - - - HttpEntity<String> request = - new HttpEntity<String>(getMetaDataConfigDefinition(), headers); - - - - restTemplate.put("http://localhost:29200/idx_metadata_1", request, String.class); - + + HttpEntity<String> request = new HttpEntity<String>(getMetaDataConfigDefinition(), headers); + + restTemplate.put("http://localhost:29200/metadata", request, String.class); + } + @SuppressWarnings("deprecation") private List<String> getIndices() throws IOException, JsonProcessingException, JsonMappingException { List<String> indices2 = null; - RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 29200))); + RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 29200))); HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - - RestClient restClient = client.getLowLevelClient(); - Response response2 = null; - try { - response2 = restClient.performRequest("GET", "/_cat/indices?v&format=json"); - } catch (IOException e) { - LOGGER.warn(e.toString(), e); - } - - // parse the JSON response - List<HashMap<String, String>> list = null; - if (response2 != null) { - ObjectMapper mapper = new ObjectMapper(); - String rawBody = EntityUtils.toString(response2.getEntity()); - TypeReference<List<HashMap<String, String>>> typeRef = new TypeReference<List<HashMap<String, String>>>() {}; - list = mapper.readValue(rawBody, typeRef); - } - - // get the index names - if (list != null) { - indices2 = list.stream() - .map(x -> x.get("index")) - .collect(Collectors.toList()); - } + headers.setContentType(MediaType.APPLICATION_JSON); + + RestClient restClient = client.getLowLevelClient(); + Response response2 = null; + try { + response2 = restClient.performRequest("GET", "/_cat/indices?v&format=json"); + } catch (IOException e) { + LOGGER.warn(e.toString(), e); + } + + // parse the JSON response + List<HashMap<String, String>> list = null; + if (response2 != null) { + ObjectMapper mapper = new ObjectMapper(); + String rawBody = EntityUtils.toString(response2.getEntity()); + TypeReference<List<HashMap<String, String>>> typeRef = new TypeReference<List<HashMap<String, String>>>() { + }; + list = mapper.readValue(rawBody, typeRef); + } + + // get the index names + if (list != null) { + indices2 = list.stream().map(x -> x.get("index")).collect(Collectors.toList()); + } return indices2; } - - private void setUpContent() throws IOException { - + int contentCount = 0; + + private void setUpContent() throws IOException, URISyntaxException { + URL test = this.getClass().getResource("../../../service/testData"); + File rootData = new File(test.toURI()); + File metaDataTestDir = new File(rootData, "metaData"); + + contentCount = 0; + visitSubdirectories(metaDataTestDir, (File metaDataFile, List<SearchResultDTO> children, String relativePath, + ExtendedGitProject gitProject) -> { + try { + final UserProvidedMetadataDTO userMetaData = parseMetaDataFile(metaDataFile); + + SearchResultDTO toIndex = new SearchResultDTO(); + toIndex.setMetadata(userMetaData); + + final ExerciseId exerciseId = calculateProjectId(relativePath); + + if (gitProject == null) { + gitProject = new ExtendedGitProject(); + + gitProject.setProjectId(Integer.parseInt(exerciseId.getProjectId())); + gitProject.setProject_name("SomeGitProject" + exerciseId.getProjectId()); + gitProject.setVisibility("public"); + + } + + toIndex.setProject(gitProject); + + toIndex.setExerciseId(exerciseId.toString()); + + final MetadataFile file = new MetadataFile(); + file.setFilename(metaDataFile.getName()); + // path currently starts with project id + int slashPos = relativePath.indexOf("/"); + String projectRelativePath = (slashPos < 0)?metaDataFile.getName():(relativePath.substring(slashPos+1)+"/"+metaDataFile.getName()); + file.setPath(projectRelativePath); + file.setIndexing_date(Instant.now()); + file.setCommit_id("Unused Commit Id"); + file.setChildren(children.stream().map(c -> c.getExerciseId()).collect(Collectors.toList()) + .toArray(new String[] {})); + toIndex.setFile(file); + + toIndex.setExerciseId(exerciseId.toString()); + addContentToIndex(toIndex, exerciseId); + ElasticSearchTestServerConfiguration.this.contentCount++; + return Collections.singletonList(toIndex); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + }, "", null /* no initial project */ + ); +// +// +// +// while(true) { +// contentCount++; +// final String content = getContent(contentCount); +// if(content==null) break; +// } + + waitForCleanStartUp(contentCount - 1); + } + + private void addContentToIndex(SearchResultDTO content, ExerciseId id) + throws JsonGenerationException, JsonMappingException, IOException { + ObjectMapper mapper = MetaDataRepository.getSearchResultObjectMapper(); + StringWriter sw = new StringWriter(); + mapper.writeValue(sw, content); + String contentString = sw.toString(); + addContentToIndex(contentString, id.toString()); + } + + private static final Charset UTF8 = Charset.forName("UTF-8"); + + private void addContentToIndex(String content, String id) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - int contentCount = 0; - - while(true) { - contentCount++; - final String content = getContent(contentCount); - if(content==null) break; - HttpEntity<String> request = - new HttpEntity<String>(content, headers); - restTemplate.put("http://localhost:29200/metadata/_doc/"+contentCount, request, String.class); - } - - waitForCleanStartUp(contentCount-1); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity<String> request = new HttpEntity<String>(content, headers); + String encodedId = URLEncoder.encode(id, UTF8); + encodedId = id.replace("/", "%2F"); + URI uri; + try { + uri = new URI("http://localhost:29200/metadata/_doc/" + encodedId); + restTemplate.put(uri, request); + } catch (URISyntaxException e) { + LOGGER.warn("Cannot add " + id, e); + } + + } + + private ExerciseId calculateProjectId(String relativePath) { + int relativePathPos = relativePath.indexOf("/"); + if (relativePathPos < 0) { + int projectId = Integer.parseInt(relativePath); + return new ExerciseId(projectId + "", null); + } else { + int projectId = Integer.parseInt(relativePath.substring(0, relativePathPos)); + return new ExerciseId(projectId + "", relativePath.substring(relativePathPos + 1)); + } + } + + /** + * parse the mete data file and return a normalized meta data + * @param metaDataFile the meta data file + * @return parsed metadata + * @throws JsonParseException + * @throws JsonMappingException + * @throws IOException + */ + private UserProvidedMetadataDTO parseMetaDataFile(File metaDataFile) + throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + UserProvidedMetadataDTO result = mapper.readValue(metaDataFile, UserProvidedMetadataDTO.class); + makeUpperCase(result.getProgrammingLanguage()); + return result; } + /** + * make all strings in Array uppercase. + * @param strings + */ + private void makeUpperCase(String[] strings) { + if(strings==null) return; + for(int i=0; i<strings.length; i++) { + strings[i] = strings[i].toUpperCase(); + } + } + + private ExtendedGitProject parseProjectFile(File projectFile) + throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + ExtendedGitProject result = mapper.readValue(projectFile, ExtendedGitProject.class); + return result; + } + + /** + * an interface that is invoked on each node of the tree with a metadata + * @author Michael Breu + * + * @param <T> the harvested data type + */ + private interface Harvester<T> { + /** + * + * @param f the metaData File + * @param subResults the list of results of the next node level + * @param relativePath the relative path from test root + * @param gitProject the information about the git project. + * @return + */ + List<T> harvest(File f, List<T> subResults, String relativePath, ExtendedGitProject gitProject); + } + + /** + * recursively visits all nodes, collects all children metadata and then calls + * the harvester + * + * @param <T> the type the harvester returns + * @param dir the directory to start harvesting in + * @param harvester the harvester function + * @param relativePath the relative path to dir + * @param gitProject the gitProject that may be collected from root. + * @return + */ + private <T> List<T> visitSubdirectories(File dir, Harvester<T> harvester, String relativePath, + ExtendedGitProject gitProject) { + Assert.state(dir.exists() && dir.isDirectory(), "must be a directory"); + List<T> harvestedMetadata = new ArrayList<T>(); + for (File containedFile : dir.listFiles()) { + if (!containedFile.isDirectory() && containedFile.getName().equals("project.yaml")) { + if (gitProject != null) { + LOGGER.error("A project.yaml should not overwrite an existing project in a subnode! {}", + containedFile.getAbsolutePath()); + } + try { + gitProject = parseProjectFile(containedFile); + } catch (IOException e) { + LOGGER.error("Cannot parse project.yaml for " + containedFile.getAbsolutePath(), e); + } + } + } + for (File containedFiles : dir.listFiles()) { + if (containedFiles.isDirectory()) + harvestedMetadata.addAll(visitSubdirectories(containedFiles, harvester, + (StringUtils.isEmpty(relativePath) ? "" : (relativePath + "/")) + containedFiles.getName(), + gitProject)); + } + for (File containedFiles : dir.listFiles()) { + if (!containedFiles.isDirectory() && containedFiles.getName().equals("metaData.yaml")) { + + harvestedMetadata + .addAll(harvester.harvest(containedFiles, harvestedMetadata, relativePath, gitProject)); + return harvestedMetadata; + } + } + return harvestedMetadata; + } + + /** + * replaces existing metadata by new content + * + * @param content + * @param id + */ + public void updateMetadata(String content, int id) { + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity<String> request = new HttpEntity<String>(content, headers); + restTemplate.put("http://localhost:29200/metadata/_doc/" + id, request, String.class); + } + + public String updateMetadata(SearchResultDTO testExercise, int id) + throws JsonGenerationException, JsonMappingException, IOException { + + // first fetch previous content + RestTemplate restTemplate = new RestTemplate(); + String previousContent = restTemplate.getForObject("http://localhost:29200/metadata/_doc/" + id, String.class); + + ObjectMapper objectMapper = new ObjectMapper(); + final JavaTimeModule javaModule = new JavaTimeModule(); + + objectMapper.registerModule(javaModule); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + StringWriter sw = new StringWriter(); + objectMapper.writeValue(sw, testExercise); + final String contentString = sw.toString(); + updateMetadata(contentString, id); + + return previousContent; + } + + /** + * sets the content to a raw json string (containing "_source" attribute). Used + * to write back a changed value from updateMetadata(...). + * + * @param rawInput the json string + * @param id the id to write to + * @throws JsonGenerationException + * @throws JsonMappingException + * @throws IOException + */ + public void resetRawMetadata(String rawInput, int id) + throws JsonGenerationException, JsonMappingException, IOException { + + ObjectMapper objectMapper = new ObjectMapper(); + final JavaTimeModule javaModule = new JavaTimeModule(); + + objectMapper.registerModule(javaModule); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + final JsonNode tree = objectMapper.readTree(rawInput); + final JsonNode source = tree.at("/_source"); + StringWriter sw = new StringWriter(); + objectMapper.writeValue(sw, source); + final String contentString = sw.toString(); + updateMetadata(contentString, id); + + } + /** * we have to wait until correct startup of content indexing? + * * @param minExpectedHits */ private void waitForCleanStartUp(int minExpectedHits) { - RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 29200))); - int tryCount = 0; - while(tryCount < 10) { - tryCount++; + RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 29200))); + int tryCount = 0; + while (tryCount < 10) { + tryCount++; SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_METADATA); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); @@ -214,11 +568,13 @@ public class ElasticSearchTestServerConfiguration { SearchResponse searchResponse; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); - if(searchResponse.getHits().getTotalHits() >= minExpectedHits) { - LOGGER.info("Metadata index is up with {} hits after {} trials", searchResponse.getHits().getTotalHits(), tryCount); + if (searchResponse.getHits().getTotalHits() >= minExpectedHits) { + LOGGER.info("Metadata index is up with {} hits after {} trials", + searchResponse.getHits().getTotalHits(), tryCount); return; } else { - LOGGER.warn("Metadata index only {} hits up after {} trials", searchResponse.getHits().getTotalHits(), tryCount); + LOGGER.warn("Metadata index only {} hits up after {} trials", + searchResponse.getHits().getTotalHits(), tryCount); } } catch (IOException e) { LOGGER.warn("Metadata index startup exception", e); @@ -228,27 +584,13 @@ public class ElasticSearchTestServerConfiguration { } catch (InterruptedException e) { LOGGER.debug("Never mind: {}", e.getMessage()); } - } + } } - + private String getMetaDataConfigDefinition() throws IOException { InputStream metaDataStream = this.getClass().getResourceAsStream("../testData/es_metadata.schema.json"); ByteSource byteSource = new ByteSource() { - - @Override - public InputStream openStream() throws IOException { - return metaDataStream; - } - }; - String text = byteSource.asCharSource(Charsets.UTF_8).read(); - return text; - } - - private String getContent(int i) throws IOException { - InputStream metaDataStream = this.getClass().getResourceAsStream("../testData/content"+i+".json"); - if(metaDataStream==null) return null; - ByteSource byteSource = new ByteSource() { - + @Override public InputStream openStream() throws IOException { return metaDataStream; @@ -258,43 +600,42 @@ public class ElasticSearchTestServerConfiguration { return text; } - - @EventListener - public void onApplicationEvent(ApplicationStartingEvent event) { + @EventListener + public void onApplicationEvent(ApplicationStartingEvent event) { try { startTestNode(); } catch (IOException | NodeValidationException e) { LOGGER.error("Cannot startup TestNode", e); } - } + } @EventListener - public void onApplicationEvent(ContextStartedEvent event) { + public void onApplicationEvent(ContextStartedEvent event) { try { startTestNode(); } catch (IOException | NodeValidationException e) { LOGGER.error("Cannot startup TestNode", e); } - } - - @EventListener - public void onApplicationEvent(ContextStoppedEvent event) { + } + + @EventListener + public void onApplicationEvent(ContextStoppedEvent event) { try { testNode.close(); - } catch (IOException e) { + } catch (IOException e) { LOGGER.error("Cannot startup TestNode", e); } - } + } - public static class TestESNode extends Node { - public TestESNode(Settings preparedSettings, Collection<Class<? extends Plugin>> classpathPlugins) { - super(InternalSettingsPreparer.prepareEnvironment(preparedSettings, null), classpathPlugins, true); - } + public static class TestESNode extends Node { + public TestESNode(Settings preparedSettings, Collection<Class<? extends Plugin>> classpathPlugins) { + super(InternalSettingsPreparer.prepareEnvironment(preparedSettings, null), classpathPlugins, true); + } @Override protected void registerDerivedNodeNameWithLogger(String nodeName) { LogManager.getLogger(nodeName); } - } - + } + } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/GitLabServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/GitLabServiceIT.java index 955835f1e164cb10154a35ced7eacf3935e8497d..87ca5abe6cf2e31ca257553ef71c780966e85a15 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/GitLabServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/GitLabServiceIT.java @@ -6,6 +6,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import org.codeability.sharing.plugins.api.search.util.ExerciseId; import org.elasticsearch.node.NodeValidationException; import org.gitlab4j.api.GitLabApiException; import org.junit.Assert; @@ -47,7 +48,7 @@ public class GitLabServiceIT { @Test public void getREADMEmd() throws GitLabApiException, IOException { - final InputStream repositoryFile = gitlabService.getRepositoryFile("1", "README.md"); + final InputStream repositoryFile = gitlabService.getRepositoryFile(new ExerciseId("272", null), "README.md"); Assert.assertNotNull(repositoryFile); ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/src/test/java/at/ac/uibk/gitsearch/service/InfoMailServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/InfoMailServiceIT.java new file mode 100644 index 0000000000000000000000000000000000000000..8c49e1a08c09f6c22a4f67a13474844c28c3b2c4 --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/service/InfoMailServiceIT.java @@ -0,0 +1,190 @@ +package at.ac.uibk.gitsearch.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; + +import javax.mail.internet.MimeMessage; + +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.elasticsearch.node.NodeValidationException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.MessageSource; +import org.springframework.data.auditing.DateTimeProvider; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.transaction.annotation.Transactional; +import org.thymeleaf.spring5.SpringTemplateEngine; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.databind.JsonMappingException; + +import at.ac.uibk.gitsearch.GitsearchApp; +import at.ac.uibk.gitsearch.domain.User; +import at.ac.uibk.gitsearch.domain.UserWatchList; +import at.ac.uibk.gitsearch.domain.WatchListEntry; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; +import at.ac.uibk.gitsearch.repository.UserRepository; +import at.ac.uibk.gitsearch.repository.UserWatchListRepository; +import at.ac.uibk.gitsearch.repository.search.MetaDataRepository; +import at.ac.uibk.gitsearch.repository.search.testESService.ElasticSearchTestServerConfiguration; +import at.ac.uibk.gitsearch.service.dto.UserDTO; +import io.github.jhipster.config.JHipsterProperties; + +/** + * Integration tests for {@link UserWatchListService}. + */ +@SpringBootTest(classes = GitsearchApp.class) +@Transactional +public class InfoMailServiceIT { + + private static final String DEFAULT_LOGIN = "TestUser1"; + + private static final String DEFAULT_EMAIL = "TestUser1@localhost"; + + private static final String DEFAULT_FIRSTNAME = "Test"; + + private static final String DEFAULT_LASTNAME = "User1"; + + private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; + + private static final String DEFAULT_LANGKEY = "en"; + + private static final String TEST_EXERCISE_ID = "1"; + + @Autowired + private JHipsterProperties jHipsterProperties; + + @Autowired + private MessageSource messageSource; + + @Autowired + private SpringTemplateEngine templateEngine; + + @Autowired + private UserRepository userRepository; + @Autowired + private UserService userService; + + @Autowired + private UserWatchListService userWatchListService; + @Autowired + private UserWatchListRepository userWatchListRepository; + @Autowired + private MetaDataRepository metaDataRepository; + + @Spy + private JavaMailSenderImpl javaMailSender; + + @Captor + private ArgumentCaptor<MimeMessage> messageCaptor; + + private MailService mailService; + @Mock + private DateTimeProvider dateTimeProvider; + + private User user; + + @BeforeAll + public static void setUpESServer() throws IOException, NodeValidationException { + ElasticSearchTestServerConfiguration.getTestInstance().startTestNode(); + } + + @BeforeEach + public void init() { + UserDTO userDTO = new UserDTO(); + userDTO.setLogin(DEFAULT_LOGIN); + + userDTO.setActivated(true); + userDTO.setEmail(DEFAULT_EMAIL); + userDTO.setFirstName(DEFAULT_FIRSTNAME); + userDTO.setLastName(DEFAULT_LASTNAME); + userDTO.setImageUrl(DEFAULT_IMAGEURL); + userDTO.setLangKey(DEFAULT_LANGKEY); + userDTO.setAuthorities(new HashSet<>()); + userDTO.getAuthorities().add("sharing"); + + when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); + + userDTO.setActivated(false); + user = userService.createUser(userDTO); + + UserWatchList wlDAILY = new UserWatchList("someTestWatchList", CheckFrequency.DAILY, user); + + WatchListEntry wle1 = new WatchListEntry(); + wle1.setExerciseId(TEST_EXERCISE_ID); + wle1.setExerciseName("Unused in this test"); + wlDAILY.getWatchListEntries().add(wle1); + + userWatchListRepository.save(wlDAILY); + + UserWatchList wlMONTHLY = new UserWatchList("someTestWatchList", CheckFrequency.MONTHLY, user); + + WatchListEntry wle2 = new WatchListEntry(); + wle2.setExerciseId(TEST_EXERCISE_ID); + wle2.setExerciseName("Unused in this test"); + wlMONTHLY.getWatchListEntries().add(wle2); + + userWatchListRepository.save(wlMONTHLY); + + } + + @BeforeEach + public void setup() { + MockitoAnnotations.initMocks(this); + doNothing().when(javaMailSender).send(any(MimeMessage.class)); + mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine, userRepository, + userWatchListService); + } + + private String original = null; + + @BeforeEach + public void setUpChangedExercise() throws JsonGenerationException, JsonMappingException, IOException { + final SearchResultDTO testExercise = metaDataRepository.getExerciseById(TEST_EXERCISE_ID, Optional.empty()); + + testExercise.getProject().setLast_activity_at(Instant.now()); + + original = ElasticSearchTestServerConfiguration.getTestInstance().updateMetadata(testExercise, 3); + } + + @Test + @Transactional + public void testSendInfoMail() throws Exception { + + mailService.sendInfoMails(); + verify(javaMailSender).send(messageCaptor.capture()); + List<MimeMessage> messages = messageCaptor.getAllValues(); + assertThat(messages.size()).isEqualTo(1); + + MimeMessage message = messages.get(0); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo(jHipsterProperties.getMail().getFrom()); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @AfterEach + public void resetChangedExercise() throws JsonGenerationException, JsonMappingException, IOException { + ElasticSearchTestServerConfiguration.getTestInstance().resetRawMetadata(original, 3); + } + +} \ No newline at end of file diff --git a/src/test/java/at/ac/uibk/gitsearch/service/MailServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/MailServiceIT.java index b26c7e046a3ace8c4b396482d1ebda22b324d565..74575d0410e4106e1e7ea49ebdf02e18f508f1a7 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/MailServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/MailServiceIT.java @@ -4,6 +4,7 @@ import at.ac.uibk.gitsearch.config.Constants; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.domain.User; +import at.ac.uibk.gitsearch.repository.UserRepository; import io.github.jhipster.config.JHipsterProperties; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -59,7 +60,12 @@ public class MailServiceIT { @Autowired private SpringTemplateEngine templateEngine; + + @Autowired + private UserRepository userRepository; + @Autowired + private UserWatchListService userWatchListService; @Spy private JavaMailSenderImpl javaMailSender; @@ -72,7 +78,7 @@ public class MailServiceIT { public void setup() { MockitoAnnotations.initMocks(this); doNothing().when(javaMailSender).send(any(MimeMessage.class)); - mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine); + mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine, userRepository, userWatchListService); } @Test diff --git a/src/test/java/at/ac/uibk/gitsearch/service/PluginManagerActionIT.java b/src/test/java/at/ac/uibk/gitsearch/service/PluginManagerActionIT.java index 147da85ccb9bf12402652a9b1c42293e3424c950..0885ea6ee62f9474ce10a1b4b589d1889dcfbc3f 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/PluginManagerActionIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/PluginManagerActionIT.java @@ -5,6 +5,8 @@ import java.io.InputStream; import org.codeability.sharing.plugins.api.SharingPluginConfig; import org.codeability.sharing.plugins.api.SharingPluginConfig.Action; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO; import org.junit.Assert; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,8 +23,6 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.service.PluginManagementService.ConnectorConfigWrapper; import at.ac.uibk.gitsearch.service.PluginManagementService.ConnectorConfigWrapper.ActionWrapper; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO; @SpringBootTest(classes = GitsearchApp.class) public class PluginManagerActionIT { @@ -43,10 +43,12 @@ public class PluginManagerActionIT { ActionWrapper actionWrapper = config.getActions().get("someId"); - Assert.assertTrue("metaData1 should be applicable", - actionWrapper.isApplicable(readTestResults("metaData1.yaml"))); - Assert.assertFalse("metaData2 should not be applicable", - actionWrapper.isApplicable(readTestResults("metaData2.yaml"))); + Assert.assertTrue("metaData 1 should be applicable", + actionWrapper.isApplicable(readTestResults("metaData/1/metaData.yaml"))); + Assert.assertTrue("metaData 272 should be applicable", + actionWrapper.isApplicable(readTestResults("metaData/272/metaData.yaml"))); + Assert.assertFalse("metaData 2 should not be applicable", + actionWrapper.isApplicable(readTestResults("metaData/2/metaData.yaml"))); } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java index 72a0808c1a57ed6d6627178f168e66154507eb29..5039afb07823a77c169b2b0719564cbfadafaaec 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java @@ -1,6 +1,7 @@ package at.ac.uibk.gitsearch.service; import static at.ac.uibk.gitsearch.web.rest.AccountResourceIT.TEST_USER_LOGIN; +import static org.hamcrest.CoreMatchers.containsStringIgnoringCase; import static org.hamcrest.Matchers.anyOf; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; @@ -19,6 +20,10 @@ import java.util.Collections; import java.util.List; import org.codeability.sharing.plugins.api.SharingPluginConfig; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; +import org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO.ExerciseType; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.node.NodeValidationException; import org.junit.Assert; @@ -36,10 +41,6 @@ import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.repository.search.testESService.ElasticSearchTestServerConfiguration; import at.ac.uibk.gitsearch.service.PluginManagementService.ConnectorConfigWrapper; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputMetadataDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.ExerciseType; @SpringBootTest(classes = GitsearchApp.class) @WithMockUser(value = TEST_USER_LOGIN, authorities = "sharing") @@ -75,7 +76,7 @@ public class SearchServiceIT { public void testAllSearch() throws Exception { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); Assert.assertTrue("At least one hit?", searchResultPage.getSearchResult().size() >= 1); Assert.assertEquals("We start at 0", 0, searchResultPage.getPageStartIndex()); @@ -88,7 +89,7 @@ public class SearchServiceIT { final String WIEN = "Wien"; final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(WIEN, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -106,7 +107,7 @@ public class SearchServiceIT { final String PODLIPNIG = "Stefan Podlipnig"; final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, PODLIPNIG, null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -117,14 +118,14 @@ public class SearchServiceIT { @Test public void testProgrammingLanguageSearch() throws Exception { - final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO("Java".toLowerCase(), null, null, null, null,null); + final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO("JAVA", null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); assertNotNull(searchResultPage.getSearchResult()); assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); assertThat(searchResultPage.getSearchResult(), everyItem( - hasProperty("metadata", hasProperty("programmingLanguage", hasItemInArray(containsString("Java")))))); + hasProperty("metadata", hasProperty("programmingLanguage", hasItemInArray(containsStringIgnoringCase("Java")))))); } @@ -133,7 +134,7 @@ public class SearchServiceIT { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, "Podlipnig",null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -145,8 +146,8 @@ public class SearchServiceIT { @Test public void testKeywordSearch() throws IOException { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, "latex", null, null, null,null); - SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + org.codeability.sharing.plugins.api.search.SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -159,7 +160,7 @@ public class SearchServiceIT { public void testFormatSearch() throws IOException { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,"latex"); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -173,7 +174,7 @@ public class SearchServiceIT { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, "latex", null, null, null,null); searchMetadata.setTypes(Collections.singletonList(ExerciseType.COLLECTION)); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -187,7 +188,7 @@ public class SearchServiceIT { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, "latex", null, null, null,null); searchMetadata.setNaturalLanguage(List.of("de"));; SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -201,7 +202,7 @@ public class SearchServiceIT { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, "latex", null, null, null,null); searchMetadata.setTypes(Collections.singletonList(ExerciseType.OTHER)); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("We expect no hit for \"latex\" and ExerciseType.OTHER", searchResultPage.getHitCount() == 0); @@ -214,7 +215,7 @@ public class SearchServiceIT { final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, "MIT", null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); org.junit.Assert.assertNotNull(searchResultPage.getSearchResult()); org.junit.Assert.assertTrue("At least one test hit", searchResultPage.getHitCount() >= 1); @@ -225,27 +226,27 @@ public class SearchServiceIT { @Test public void testKeywordAutocompletion() throws IOException { - final List<AutoCompleteEntry> keywordsAutoComplete = searchService.getKeywordsAutoComplete("Jav"); + final List<AutoCompleteEntry> keywordsAutoComplete = searchService.getKeywordsAutoComplete("Jav", 10); assertThat(keywordsAutoComplete, contains(hasProperty("target", is("Java")))); } @Test public void testCreatorAutocompletion() throws IOException { - final List<AutoCompleteEntry> creatorAutoComplete = searchService.getCreatorAutoComplete("Pod"); + final List<AutoCompleteEntry> creatorAutoComplete = searchService.getCreatorAutoComplete("Pod", 10); assertThat(creatorAutoComplete, contains(hasProperty("target", is("Stefan Podlipnig")))); - final List<AutoCompleteEntry> creatorAutoComplete2 = searchService.getCreatorAutoComplete("Po"); + final List<AutoCompleteEntry> creatorAutoComplete2 = searchService.getCreatorAutoComplete("Po", 10); assertThat(creatorAutoComplete2, contains(hasProperty("target", is("Stefan Podlipnig")))); } @Test public void testContributorAutocompletion() throws IOException { - final List<AutoCompleteEntry> contributorAutoComplete = searchService.getContributorAutoComplete("Bast"); + final List<AutoCompleteEntry> contributorAutoComplete = searchService.getContributorAutoComplete("Bast", 10); assertThat(contributorAutoComplete, contains(hasProperty("target", is("Daniel Bastta")))); } @Test public void testContributorCreatorAutocompletion() throws IOException { - final List<AutoCompleteEntry> contributorAutoComplete = searchService.getContributorCreatorAutoComplete("Bast"); + final List<AutoCompleteEntry> contributorAutoComplete = searchService.getContributorCreatorAutoComplete("Bast", 10); assertThat(contributorAutoComplete, contains(hasProperty("target", is("Daniel Bastta")))); } } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceIT.java index 49fb2efc3ef93951ba5aa88f559ccd01f17278d4..67d04ea1568a0f94d545fc67c46b7e404b5c7cc7 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceIT.java @@ -9,13 +9,17 @@ import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.codeability.sharing.plugins.api.ShoppingBasket; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; +import org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; import org.elasticsearch.node.NodeValidationException; import org.junit.Assert; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.test.context.support.WithMockUser; @@ -24,10 +28,6 @@ import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.repository.search.testESService.ElasticSearchTestServerConfiguration; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketInfoDTO; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketRedirectInfoDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputMetadataDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; @SpringBootTest(classes = GitsearchApp.class) @WithMockUser(value = TEST_USER_LOGIN, authorities = "sharing") @@ -76,7 +76,7 @@ public class ShoppingBasketServiceIT { // just load everything from index :-) final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); Assert.assertTrue("At least one hit?", searchResultPage.getSearchResult().size() >= 1); ShoppingBasketInfoDTO sbi = new ShoppingBasketInfoDTO(searchResultPage.getSearchResult().toArray(new SearchResultDTO[] {})); diff --git a/src/test/java/at/ac/uibk/gitsearch/service/UserServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/UserServiceIT.java index 85d6254309800c872d109b282d6c76c21b8b04a3..7eb0c2b5415b0a516095e2a30673c1ca6a48f220 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/UserServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/UserServiceIT.java @@ -2,11 +2,14 @@ package at.ac.uibk.gitsearch.service; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.config.Constants; +import at.ac.uibk.gitsearch.domain.Authority; import at.ac.uibk.gitsearch.domain.User; import at.ac.uibk.gitsearch.repository.search.UserSearchRepository; +import at.ac.uibk.gitsearch.security.AuthoritiesConstants; +import at.ac.uibk.gitsearch.repository.AuthorityRepository; import at.ac.uibk.gitsearch.repository.UserRepository; import at.ac.uibk.gitsearch.service.dto.UserDTO; - +import at.ac.uibk.gitsearch.service.mapper.UserMapper; import io.github.jhipster.security.RandomUtil; import org.apache.commons.lang3.RandomStringUtils; @@ -27,6 +30,8 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.never; @@ -54,9 +59,14 @@ public class UserServiceIT { @Autowired private UserRepository userRepository; + @Autowired + private UserMapper userMapper; @Autowired private UserService userService; + + @Autowired + private EntityManager entityManager; /** * This repository is mocked in the at.ac.uibk.gitsearch.repository.search test package. @@ -68,6 +78,9 @@ public class UserServiceIT { @Autowired private AuditingHandler auditingHandler; + + @Autowired + private AuthorityRepository authorityRepository; @Mock private DateTimeProvider dateTimeProvider; @@ -218,5 +231,37 @@ public class UserServiceIT { .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) .isTrue(); } + + /** + * tests the clean up of unused authorities that are not assigned to any user any more. + */ + @Test + @Transactional + public void ensureAuthorityCleanUp() { + final Authority usedAuthority = new Authority("sharing"); + final Authority unUsedAuthority = new Authority("someUnusedAuthority"); + authorityRepository.save(unUsedAuthority); + // the usedAuthority is saved by userService.createUser + user.getAuthorities().add(usedAuthority); + UserDTO userDTO = userMapper.userToUserDTO(user); + userService.createUser(userDTO); + + assertThat(authorityRepository.findById(usedAuthority.getName())).isNotEmpty(); + assertThat(authorityRepository.findById(unUsedAuthority.getName())).isNotEmpty(); + + userService.cleanUpUnusedAuthorities(); + + // unfortunatelly authorities are somehow cached :-( + entityManager.clear(); + + assertThat(authorityRepository.findById(usedAuthority.getName())).isNotEmpty(); + assertThat(authorityRepository.findById(unUsedAuthority.getName())).isEmpty(); + + // Standard Roles may not be deleted! + assertThat(AuthoritiesConstants.ANONYMOUS).isNotEmpty(); + assertThat(AuthoritiesConstants.ADMIN).isNotEmpty(); + assertThat(AuthoritiesConstants.USER).isNotEmpty(); + + } } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/UserWatchListServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/UserWatchListServiceIT.java new file mode 100644 index 0000000000000000000000000000000000000000..801b6247c39ba70bc615fb3aa49bc237e47e1971 --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/service/UserWatchListServiceIT.java @@ -0,0 +1,145 @@ +package at.ac.uibk.gitsearch.service; + +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; + +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.elasticsearch.node.NodeValidationException; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.auditing.DateTimeProvider; +import org.springframework.transaction.annotation.Transactional; + +import at.ac.uibk.gitsearch.GitsearchApp; +import at.ac.uibk.gitsearch.domain.User; +import at.ac.uibk.gitsearch.domain.UserWatchList; +import at.ac.uibk.gitsearch.domain.WatchListEntry; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; +import at.ac.uibk.gitsearch.repository.UserWatchListRepository; +import at.ac.uibk.gitsearch.repository.search.testESService.ElasticSearchTestServerConfiguration; +import at.ac.uibk.gitsearch.service.dto.UserDTO; + +/** + * Integration tests for {@link UserWatchListService}. + */ +@SpringBootTest(classes = GitsearchApp.class) +@Transactional +public class UserWatchListServiceIT { + + private static final String DEFAULT_LOGIN = "johndoe"; + + private static final String DEFAULT_EMAIL = "johndoe@localhost"; + + private static final String DEFAULT_FIRSTNAME = "john"; + + private static final String DEFAULT_LASTNAME = "doe"; + + private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; + + private static final String DEFAULT_LANGKEY = "dummy"; + + private static final String TEST_EXERCISE_ID = "1"; + + @Autowired + private UserService userService; + + @Autowired + private UserWatchListService userWatchListService; + @Autowired + private UserWatchListRepository userWatchListRepository; + + private final static Instant LAST_CHANGE_DATE_OF_EXERCISE3 = Instant.parse("2021-02-17T15:13:27.123Z"); + @Mock + private DateTimeProvider dateTimeProvider; + + private User user; + + @BeforeAll + public static void setUpESServer() throws IOException, NodeValidationException { + ElasticSearchTestServerConfiguration.getTestInstance().startTestNode(); + } + + + @BeforeEach + public void init() { + UserDTO userDTO = new UserDTO(); + userDTO.setLogin(DEFAULT_LOGIN); + + userDTO.setActivated(true); + userDTO.setEmail(DEFAULT_EMAIL); + userDTO.setFirstName(DEFAULT_FIRSTNAME); + userDTO.setLastName(DEFAULT_LASTNAME); + userDTO.setImageUrl(DEFAULT_IMAGEURL); + userDTO.setLangKey(DEFAULT_LANGKEY); + userDTO.setAuthorities(new HashSet<>()); + userDTO.getAuthorities().add("sharing"); + + when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); + + userDTO.setActivated(false); + user = userService.createUser(userDTO); + + UserWatchList wlDAILY = new UserWatchList("someTestWatchList", CheckFrequency.DAILY, user); + + WatchListEntry wle1 = new WatchListEntry(); + wle1.setExerciseId(TEST_EXERCISE_ID); + wle1.setExerciseName("Unused in this test"); + wlDAILY.getWatchListEntries().add(wle1); + + userWatchListRepository.save(wlDAILY); + + UserWatchList wlMONTHLY = new UserWatchList("someTestWatchList", CheckFrequency.MONTHLY, user); + + WatchListEntry wle2 = new WatchListEntry(); + wle2.setExerciseId(TEST_EXERCISE_ID); + wle2.setExerciseName("Unused in this test"); + wlMONTHLY.getWatchListEntries().add(wle2); + + userWatchListRepository.save(wlMONTHLY); + + } + + @Test + @Transactional + public void testSimpleCheck() { + final Instant since1970 = Instant.ofEpochSecond(0); + final Map<SearchResultDTO, UserWatchList> changesSince1970 = userWatchListService.findChangesSince(since1970, user); + org.junit.Assert.assertTrue("At least one match, because changed since 1970", !changesSince1970.isEmpty()); + } + + @Test + @Transactional + public void testNotChangedAfterCheck() { + final Instant justOneHourAfterChange = LAST_CHANGE_DATE_OF_EXERCISE3.plus(1, ChronoUnit.HOURS); + final Map<SearchResultDTO, UserWatchList> changesSinceAnHourLater = userWatchListService.findChangesSince(justOneHourAfterChange, user); + org.junit.Assert.assertTrue("At least one match, because changed an hour before", changesSinceAnHourLater.isEmpty()); + } + + @Test + @Transactional + public void testChangedBeforeCheck() { + final Instant justOneHourBeforeChange = LAST_CHANGE_DATE_OF_EXERCISE3.minus(1, ChronoUnit.HOURS); + final Map<SearchResultDTO, UserWatchList> changesSinceAnHourBefore = userWatchListService.findChangesSince(justOneHourBeforeChange, user); + org.junit.Assert.assertTrue("At least one match, because changed an hour later", !changesSinceAnHourBefore.isEmpty()); + } + + @Test + @Transactional + public void testChangedBeforeCheckFrequency() { + final Map<SearchResultDTO, UserWatchList> allExercisesAreTooOld = userWatchListService.findChangesSince(CheckFrequency.MONTHLY, user); + org.junit.Assert.assertTrue("At least one match, because changed an hour later", allExercisesAreTooOld.isEmpty()); + } + + + } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTOTest.java b/src/test/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTOTest.java index 02212abccebf8d54717b55463dcd0745c06bfd31..16f2199018313f6880744449c28a7bc23d443c51 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTOTest.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/dto/SearchResultDTOTest.java @@ -1,5 +1,6 @@ package at.ac.uibk.gitsearch.service.dto; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; import org.junit.Assert; import org.junit.jupiter.api.Test; diff --git a/src/test/java/at/ac/uibk/gitsearch/service/dto/VariousDTOTest.java b/src/test/java/at/ac/uibk/gitsearch/service/dto/VariousDTOTest.java index cbe6eb26b42086a4c79b95d1f74d8233a8c46641..daebeeed5b84954b44b475bc8a592fce4f92220a 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/dto/VariousDTOTest.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/dto/VariousDTOTest.java @@ -2,15 +2,18 @@ package at.ac.uibk.gitsearch.service.dto; import java.lang.reflect.InvocationTargetException; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO.GitProject; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO.GitProjectVisibility; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO.ExerciseType; +import org.codeability.sharing.plugins.api.search.UserProvidedMetadataDTO.Person; import org.junit.Assert; import org.junit.jupiter.api.Test; import at.ac.uibk.gitsearch.config.ApplicationProperties.DeploymentInfo; import at.ac.uibk.gitsearch.service.MailService; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO.GitProject; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO.GitProjectVisibility; -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.ExerciseType; -import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.Person; import at.ac.uibk.gitsearch.testingUtilities.PropertiesTester; import nl.jqno.equalsverifier.EqualsVerifier; import nl.jqno.equalsverifier.Warning; @@ -42,6 +45,7 @@ public class VariousDTOTest { propertiesTester.testProperties(GitProject.class); // just for test coverage + @SuppressWarnings("unused") SearchResultsDTO srDTO = new SearchResultsDTO(null, 0, 0); } diff --git a/src/test/java/at/ac/uibk/gitsearch/service/management/PluginHealthCheckRegistryIT.java b/src/test/java/at/ac/uibk/gitsearch/service/management/PluginHealthCheckRegistryIT.java index e78d0b163b2aa7d1276a8fb7e0a9f058f126a51f..43462c40454165182bb8f0633f778e54c8dabe22 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/management/PluginHealthCheckRegistryIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/management/PluginHealthCheckRegistryIT.java @@ -1,6 +1,5 @@ package at.ac.uibk.gitsearch.service.management; -import static at.ac.uibk.gitsearch.web.rest.AccountResourceIT.TEST_USER_LOGIN; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.is; @@ -12,7 +11,6 @@ import org.springframework.boot.actuate.health.HealthContributorRegistry; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.actuate.health.Status; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.test.context.support.WithMockUser; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.config.ApplicationProperties; @@ -24,15 +22,13 @@ public class PluginHealthCheckRegistryIT { @Autowired private ApplicationProperties applicationProperties; @Autowired - private PluginHealthCheckRegistry pluginHealthCheckRegistry; - @Autowired private HealthContributorRegistry healthContributorRegistry; @Test public void testHealth() { healthContributorRegistry.forEach( contributor -> { - if(applicationProperties.getRegisteredConnectors().contains(contributor.getName())) { + if(applicationProperties.getRegisteredConnectors().stream().anyMatch(c -> c.getUrl().equals(contributor.getName()))) { Health h = ((HealthIndicator) contributor.getContributor()).health(); Assert.assertThat("Health for " + contributor.getName() + " should be either be up or down, but was " + h.getStatus(), h.getStatus(), anyOf(is(Status.UP), is(Status.DOWN))); diff --git a/src/test/java/at/ac/uibk/gitsearch/service/mapper/WatchListEntryMapperTest.java b/src/test/java/at/ac/uibk/gitsearch/service/mapper/WatchListEntryMapperTest.java index 55dc086ec8d16e09931f8308cf7004910756fcaf..70581e51654156b8b3b288cfaced30c087d6fb98 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/mapper/WatchListEntryMapperTest.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/mapper/WatchListEntryMapperTest.java @@ -33,7 +33,7 @@ public class WatchListEntryMapperTest { final long wlId = 25L; final long wleId = 13L; UserWatchList wl = new UserWatchList(); - wl.setId(wlId); wl.setName("Just testing"); wl.setUserId(new User()); + wl.setId(wlId); wl.setName("Just testing"); wl.setUser(new User()); WatchListEntry wle = new WatchListEntry(); diff --git a/src/test/java/at/ac/uibk/gitsearch/testingUtilities/PropertiesTester.java b/src/test/java/at/ac/uibk/gitsearch/testingUtilities/PropertiesTester.java index a005d33339e647517b3ca51a87c32c774d689541..7255b9f405dc60b3d16910176e9f14ea3d872dbe 100644 --- a/src/test/java/at/ac/uibk/gitsearch/testingUtilities/PropertiesTester.java +++ b/src/test/java/at/ac/uibk/gitsearch/testingUtilities/PropertiesTester.java @@ -5,6 +5,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.sql.Timestamp; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -127,7 +128,10 @@ public void testSetters(Class<?> beanClass, Object bean, String... setterExcepti } } else if(Set.class.isAssignableFrom(type)) { property = Collections.EMPTY_SET; - } else if(type.isInterface()) { + } else if (Instant.class.isAssignableFrom(type)) { + property = Instant.now(); + } + else if(type.isInterface()) { LOGGER.info("Cannot instantiate interface {} in {} for class {}", type.getName(), setter.getName(), bean.getClass().getName()); } else { diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/ExerciseResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/ExerciseResourceIT.java index 4a75f787766d3cc21e51fab545fd300bd968f329..97bb0c581d2c2cab871cf76524173ccd9febbc11 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/ExerciseResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/ExerciseResourceIT.java @@ -3,6 +3,8 @@ package at.ac.uibk.gitsearch.web.rest; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.io.IOException; @@ -43,8 +45,8 @@ public class ExerciseResourceIT { @Test public void getREADME() throws Exception { - String exerciseId = "1"; // warning: this depends on the sequence in the current search index :-( - restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId).param("filePath", "README.md") + String exerciseId = "272"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exerciseFile/"+exerciseId).param("filePath", "README.md") .with(csrf().asHeader()) .contentType(MediaType.APPLICATION_JSON)) // .andDo(print()) @@ -57,8 +59,8 @@ public class ExerciseResourceIT { @Test public void getExercisemd() throws Exception { - String exerciseId = "1"; // warning: this depends on the sequence in the current search index :-( - restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId).param("filePath", "exercise.md") + String exerciseId = "272"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exerciseFile/"+exerciseId).param("filePath", "exercise.md") .with(csrf().asHeader()) .contentType(MediaType.APPLICATION_JSON)) .andDo(print()) @@ -70,8 +72,8 @@ public class ExerciseResourceIT { @Test public void getNestedPath() throws Exception { - String exerciseId = "1"; // warning: this depends on the sequence in the current search index :-( - restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId).param("filePath", "solution/src/at/ac/uibk/ac/artemis/Receiver.java") + String exerciseId = "272"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exerciseFile/"+exerciseId).param("filePath", "solution/src/at/ac/uibk/ac/artemis/Receiver.java") .with(csrf().asHeader()) .contentType(MediaType.APPLICATION_JSON)) .andDo(print()) @@ -80,16 +82,29 @@ public class ExerciseResourceIT { .andExpect(StreamResultMatcher.expectMinimumSize(50)); } + @Test + public void getSplitPath() throws Exception { + String exerciseId = "272:solution/src/at"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exerciseFile/"+exerciseId).param("filePath", "ac/uibk/ac/artemis/Receiver.java") + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(status().is2xxSuccessful()) + .andExpect(StreamResultMatcher.expectOctetStream()) + .andExpect(StreamResultMatcher.expectMinimumSize(50)); + } + @Test public void testNotFound() throws Exception { String exerciseId = "1"; // warning: this depends on the sequence in the current search index :-( - restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId).param("filePath", "fileDoesNotExist.md") + restExerciseMockMvc.perform(get("/api/exerciseFile/"+exerciseId).param("filePath", "fileDoesNotExist.md") .with(csrf().asHeader()) .contentType(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(status().isNotFound()); } + public static class StreamResultMatcher { public static ResultMatcher expectMinimumSize(int size) { @@ -106,5 +121,46 @@ public class ExerciseResourceIT { }; } } + + @Test + public void getExerciseById1() throws Exception { + String exerciseId = "1"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId) + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.project.project_id").value(exerciseId)); + } + @Test + public void getExerciseBySubId() throws Exception { + String exerciseId = "272:solution/src/at"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId) + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.project.project_id").value("272")); + } + + @Test + public void getExerciseByNotFound1() throws Exception { + String exerciseId = "272:solution/src/atX"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId) + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(status().isNotFound()); + } + + @Test + public void getExerciseByNotFound2() throws Exception { + String exerciseId = "xxx272:solution/src/atX"; // warning: this depends on the sequence in the current search index :-( + restExerciseMockMvc.perform(get("/api/exercise/"+exerciseId) + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(status().isNotFound()); + } } diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/LikesResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/LikesResourceIT.java new file mode 100644 index 0000000000000000000000000000000000000000..dbc54e3457fafc4d7d52ffa0b6c1099696613fa3 --- /dev/null +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/LikesResourceIT.java @@ -0,0 +1,652 @@ +package at.ac.uibk.gitsearch.web.rest; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; + +import at.ac.uibk.gitsearch.GitsearchApp; +import at.ac.uibk.gitsearch.domain.Likes; +import at.ac.uibk.gitsearch.repository.LikesRepository; +import at.ac.uibk.gitsearch.repository.search.LikesSearchRepository; +import at.ac.uibk.gitsearch.service.LikesService; +import at.ac.uibk.gitsearch.service.dto.LikesCriteria; +import at.ac.uibk.gitsearch.service.LikesQueryService; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.transaction.annotation.Transactional; +import javax.persistence.EntityManager; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery; +import static org.hamcrest.Matchers.hasItem; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Integration tests for the {@link LikesResource} REST controller. + */ +@SpringBootTest(classes = GitsearchApp.class) +@ExtendWith(MockitoExtension.class) +@AutoConfigureMockMvc +@WithMockUser +public class LikesResourceIT { + + private static final LocalDate DEFAULT_DATE = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_DATE = LocalDate.now(ZoneId.systemDefault()); + private static final LocalDate SMALLER_DATE = LocalDate.ofEpochDay(-1L); + + private static final Integer DEFAULT_USER_ID = 1; + private static final Integer UPDATED_USER_ID = 2; + private static final Integer SMALLER_USER_ID = 1 - 1; + + private static final String DEFAULT_EXERCISE_ID = "1"; + private static final String UPDATED_EXERCISE_ID = "2"; + private static final String SMALLER_EXERCISE_ID = "0"; + + @Autowired + private LikesRepository likesRepository; + + @Autowired + private LikesService likesService; + + /** + * This repository is mocked in the at.ac.uibk.gitsearch.repository.search test + * package. + * + * @see at.ac.uibk.gitsearch.repository.search.LikesSearchRepositoryMockConfiguration + */ + @Autowired + private LikesSearchRepository mockLikesSearchRepository; + + @Autowired + private LikesQueryService likesQueryService; + + @Autowired + private EntityManager em; + + @Autowired + private MockMvc restLikesMockMvc; + + private Likes likes; + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, if + * they test an entity which requires the current entity. + */ + public static Likes createEntity(EntityManager em) { + Likes likes = new Likes().date(DEFAULT_DATE).userID(DEFAULT_USER_ID).exerciseID(DEFAULT_EXERCISE_ID); + return likes; + } + + /** + * Create an updated entity for this test. + * + * This is a static method, as tests for other entities might also need it, if + * they test an entity which requires the current entity. + */ + public static Likes createUpdatedEntity(EntityManager em) { + Likes likes = new Likes().date(UPDATED_DATE).userID(UPDATED_USER_ID).exerciseID(UPDATED_EXERCISE_ID); + return likes; + } + + @BeforeEach + public void initTest() { + likes = createEntity(em); + } + + @Test + @Transactional + public void createLikes() throws Exception { + int databaseSizeBeforeCreate = likesRepository.findAll().size(); + // Create the Likes + restLikesMockMvc.perform(post("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isCreated()); + + // Validate the Likes in the database + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeCreate + 1); + Likes testLikes = likesList.get(likesList.size() - 1); + assertThat(testLikes.getDate()).isEqualTo(DEFAULT_DATE); + assertThat(testLikes.getUserID()).isEqualTo(DEFAULT_USER_ID); + assertThat(testLikes.getExerciseID()).isEqualTo(DEFAULT_EXERCISE_ID); + + // Validate the Likes in Elasticsearch + verify(mockLikesSearchRepository, times(1)).save(testLikes); + } + + @Test + @Transactional + public void createLikesWithExistingId() throws Exception { + int databaseSizeBeforeCreate = likesRepository.findAll().size(); + + // Create the Likes with an existing ID + likes.setId(1L); + + // An entity with an existing ID cannot be created, so this API call must fail + restLikesMockMvc.perform(post("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isBadRequest()); + + // Validate the Likes in the database + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeCreate); + + // Validate the Likes in Elasticsearch + verify(mockLikesSearchRepository, times(0)).save(likes); + } + + @Test + @Transactional + public void checkDateIsRequired() throws Exception { + int databaseSizeBeforeTest = likesRepository.findAll().size(); + // set the field null + likes.setDate(null); + + // Create the Likes, which fails. + + restLikesMockMvc.perform(post("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isBadRequest()); + + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkUserIDIsRequired() throws Exception { + int databaseSizeBeforeTest = likesRepository.findAll().size(); + // set the field null + likes.setUserID(null); + + // Create the Likes, which fails. + + restLikesMockMvc.perform(post("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isBadRequest()); + + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkexerciseIDIsRequired() throws Exception { + int databaseSizeBeforeTest = likesRepository.findAll().size(); + // set the field null + likes.setExerciseID(null); + + // Create the Likes, which fails. + + restLikesMockMvc.perform(post("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isBadRequest()); + + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllLikes() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList + restLikesMockMvc.perform(get("/api/likes?sort=id,desc")).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(likes.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].userID").value(hasItem(DEFAULT_USER_ID))) + .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID))); + } + + @Test + @Transactional + public void getLikes() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get the likes + restLikesMockMvc.perform(get("/api/likes/{id}", likes.getId())).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.id").value(likes.getId().intValue())) + .andExpect(jsonPath("$.date").value(DEFAULT_DATE.toString())) + .andExpect(jsonPath("$.userID").value(DEFAULT_USER_ID)) + .andExpect(jsonPath("$.exerciseID").value(DEFAULT_EXERCISE_ID)); + } + + @Test + @Transactional + public void getLikesByExerciseID() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get the likes + restLikesMockMvc.perform(get("/api/numberOfLikes/", likes.getExerciseID())).andExpect(status().isOk()); + + assertEquals(1, likesRepository.findNumberOfLikesByExerciseID(likes.getExerciseID())); + } + + @Test + @Transactional + public void testLikeWorkflowWithAuthorities() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // generate new like + Likes newLike = new Likes(); + newLike.setExerciseID("1000"); + + //user likes a project + + restLikesMockMvc.perform(put("/api/likeExercise").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(newLike))).andExpect(status().isOk()); + + assertEquals(1, likesRepository.findNumberOfLikesByExerciseID("1000")); + + //like again and nothing should happen + + restLikesMockMvc.perform(put("/api/likeExercise").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(newLike))).andExpect(status().isOk()); + + assertEquals(1, likesRepository.findNumberOfLikesByExerciseID("1000")); + + //unlike project + + restLikesMockMvc.perform(delete("/api/unlikeExercise/{exerciseID}", "1000").with(csrf().asHeader()).accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isNoContent()); + + assertEquals(0, likesRepository.findNumberOfLikesByExerciseID("1000")); + + } + + @Test + @Transactional + public void testLikeWorkflowWithOutAuthorities() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // generate new like + Likes newLike = new Likes(); + newLike.setExerciseID("1000"); + + //user likes a project and nothing should happen + + restLikesMockMvc.perform(put("/api/likeExercise").contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(newLike))).andExpect(status().isForbidden()); + + assertEquals(0, likesRepository.findNumberOfLikesByExerciseID("1000")); + + + //unlike project + + restLikesMockMvc.perform(delete("/api/unlikeExercise/{exerciseID}", "1000").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isForbidden()); + + assertEquals(0, likesRepository.findNumberOfLikesByExerciseID("1000")); + + } + + @Test + @Transactional + public void getLikesByIdFiltering() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + Long id = likes.getId(); + + defaultLikesShouldBeFound("id.equals=" + id); + defaultLikesShouldNotBeFound("id.notEquals=" + id); + + defaultLikesShouldBeFound("id.greaterThanOrEqual=" + id); + defaultLikesShouldNotBeFound("id.greaterThan=" + id); + + defaultLikesShouldBeFound("id.lessThanOrEqual=" + id); + defaultLikesShouldNotBeFound("id.lessThan=" + id); + } + + @Test + @Transactional + public void getAllLikesByDateIsEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date equals to DEFAULT_DATE + defaultLikesShouldBeFound("date.equals=" + DEFAULT_DATE); + + // Get all the likesList where date equals to UPDATED_DATE + defaultLikesShouldNotBeFound("date.equals=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsNotEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date not equals to DEFAULT_DATE + defaultLikesShouldNotBeFound("date.notEquals=" + DEFAULT_DATE); + + // Get all the likesList where date not equals to UPDATED_DATE + defaultLikesShouldBeFound("date.notEquals=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsInShouldWork() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date in DEFAULT_DATE or UPDATED_DATE + defaultLikesShouldBeFound("date.in=" + DEFAULT_DATE + "," + UPDATED_DATE); + + // Get all the likesList where date equals to UPDATED_DATE + defaultLikesShouldNotBeFound("date.in=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsNullOrNotNull() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date is not null + defaultLikesShouldBeFound("date.specified=true"); + + // Get all the likesList where date is null + defaultLikesShouldNotBeFound("date.specified=false"); + } + + @Test + @Transactional + public void getAllLikesByDateIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date is greater than or equal to DEFAULT_DATE + defaultLikesShouldBeFound("date.greaterThanOrEqual=" + DEFAULT_DATE); + + // Get all the likesList where date is greater than or equal to UPDATED_DATE + defaultLikesShouldNotBeFound("date.greaterThanOrEqual=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsLessThanOrEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date is less than or equal to DEFAULT_DATE + defaultLikesShouldBeFound("date.lessThanOrEqual=" + DEFAULT_DATE); + + // Get all the likesList where date is less than or equal to SMALLER_DATE + defaultLikesShouldNotBeFound("date.lessThanOrEqual=" + SMALLER_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsLessThanSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date is less than DEFAULT_DATE + defaultLikesShouldNotBeFound("date.lessThan=" + DEFAULT_DATE); + + // Get all the likesList where date is less than UPDATED_DATE + defaultLikesShouldBeFound("date.lessThan=" + UPDATED_DATE); + } + + @Test + @Transactional + public void getAllLikesByDateIsGreaterThanSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where date is greater than DEFAULT_DATE + defaultLikesShouldNotBeFound("date.greaterThan=" + DEFAULT_DATE); + + // Get all the likesList where date is greater than SMALLER_DATE + defaultLikesShouldBeFound("date.greaterThan=" + SMALLER_DATE); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID equals to DEFAULT_USER_ID + defaultLikesShouldBeFound("userID.equals=" + DEFAULT_USER_ID); + + // Get all the likesList where userID equals to UPDATED_USER_ID + defaultLikesShouldNotBeFound("userID.equals=" + UPDATED_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsNotEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID not equals to DEFAULT_USER_ID + defaultLikesShouldNotBeFound("userID.notEquals=" + DEFAULT_USER_ID); + + // Get all the likesList where userID not equals to UPDATED_USER_ID + defaultLikesShouldBeFound("userID.notEquals=" + UPDATED_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsInShouldWork() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID in DEFAULT_USER_ID or UPDATED_USER_ID + defaultLikesShouldBeFound("userID.in=" + DEFAULT_USER_ID + "," + UPDATED_USER_ID); + + // Get all the likesList where userID equals to UPDATED_USER_ID + defaultLikesShouldNotBeFound("userID.in=" + UPDATED_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsNullOrNotNull() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID is not null + defaultLikesShouldBeFound("userID.specified=true"); + + // Get all the likesList where userID is null + defaultLikesShouldNotBeFound("userID.specified=false"); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsGreaterThanOrEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID is greater than or equal to + // DEFAULT_USER_ID + defaultLikesShouldBeFound("userID.greaterThanOrEqual=" + DEFAULT_USER_ID); + + // Get all the likesList where userID is greater than or equal to + // UPDATED_USER_ID + defaultLikesShouldNotBeFound("userID.greaterThanOrEqual=" + UPDATED_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsLessThanOrEqualToSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID is less than or equal to DEFAULT_USER_ID + defaultLikesShouldBeFound("userID.lessThanOrEqual=" + DEFAULT_USER_ID); + + // Get all the likesList where userID is less than or equal to SMALLER_USER_ID + defaultLikesShouldNotBeFound("userID.lessThanOrEqual=" + SMALLER_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsLessThanSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID is less than DEFAULT_USER_ID + defaultLikesShouldNotBeFound("userID.lessThan=" + DEFAULT_USER_ID); + + // Get all the likesList where userID is less than UPDATED_USER_ID + defaultLikesShouldBeFound("userID.lessThan=" + UPDATED_USER_ID); + } + + @Test + @Transactional + public void getAllLikesByUserIDIsGreaterThanSomething() throws Exception { + // Initialize the database + likesRepository.saveAndFlush(likes); + + // Get all the likesList where userID is greater than DEFAULT_USER_ID + defaultLikesShouldNotBeFound("userID.greaterThan=" + DEFAULT_USER_ID); + + // Get all the likesList where userID is greater than SMALLER_USER_ID + defaultLikesShouldBeFound("userID.greaterThan=" + SMALLER_USER_ID); + } + + /** + * Executes the search, and checks that the default entity is returned. + */ + private void defaultLikesShouldBeFound(String filter) throws Exception { + restLikesMockMvc.perform(get("/api/likes?sort=id,desc&" + filter)).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(likes.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].userID").value(hasItem(DEFAULT_USER_ID))) + .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID))); + + // Check, that the count call also returns 1 + restLikesMockMvc.perform(get("/api/likes/count?sort=id,desc&" + filter)).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)).andExpect(content().string("1")); + } + + /** + * Executes the search, and checks that the default entity is not returned. + */ + private void defaultLikesShouldNotBeFound(String filter) throws Exception { + restLikesMockMvc.perform(get("/api/likes?sort=id,desc&" + filter)).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)).andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").isEmpty()); + + // Check, that the count call also returns 0 + restLikesMockMvc.perform(get("/api/likes/count?sort=id,desc&" + filter)).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)).andExpect(content().string("0")); + } + + @Test + @Transactional + public void getNonExistingLikes() throws Exception { + // Get the likes + restLikesMockMvc.perform(get("/api/likes/{id}", Long.MAX_VALUE)).andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateLikes() throws Exception { + // Initialize the database + likesService.save(likes); + + int databaseSizeBeforeUpdate = likesRepository.findAll().size(); + + // Update the likes + Likes updatedLikes = likesRepository.findById(likes.getId()).get(); + // Disconnect from session so that the updates on updatedLikes are not directly + // saved in db + em.detach(updatedLikes); + updatedLikes.date(UPDATED_DATE).userID(UPDATED_USER_ID).exerciseID(UPDATED_EXERCISE_ID); + + restLikesMockMvc.perform(put("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(updatedLikes))).andExpect(status().isOk()); + + // Validate the Likes in the database + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeUpdate); + Likes testLikes = likesList.get(likesList.size() - 1); + assertThat(testLikes.getDate()).isEqualTo(UPDATED_DATE); + assertThat(testLikes.getUserID()).isEqualTo(UPDATED_USER_ID); + assertThat(testLikes.getExerciseID()).isEqualTo(UPDATED_EXERCISE_ID); + + // Validate the Likes in Elasticsearch + verify(mockLikesSearchRepository, times(2)).save(testLikes); + } + + @Test + @Transactional + public void updateNonExistingLikes() throws Exception { + int databaseSizeBeforeUpdate = likesRepository.findAll().size(); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restLikesMockMvc.perform(put("/api/likes").with(csrf().asHeader()).contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(likes))).andExpect(status().isBadRequest()); + + // Validate the Likes in the database + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeUpdate); + + // Validate the Likes in Elasticsearch + verify(mockLikesSearchRepository, times(0)).save(likes); + } + + @Test + @Transactional + public void deleteLikes() throws Exception { + // Initialize the database + likesService.save(likes); + + int databaseSizeBeforeDelete = likesRepository.findAll().size(); + + // Delete the likes + restLikesMockMvc.perform( + delete("/api/likes/{id}", likes.getId()).with(csrf().asHeader()).accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isNoContent()); + + // Validate the database contains one less item + List<Likes> likesList = likesRepository.findAll(); + assertThat(likesList).hasSize(databaseSizeBeforeDelete - 1); + + // Validate the Likes in Elasticsearch + verify(mockLikesSearchRepository, times(1)).deleteById(likes.getId()); + } + + @Test + @Transactional + public void searchLikes() throws Exception { + // Configure the mock search repository + // Initialize the database + likesService.save(likes); + when(mockLikesSearchRepository.search(queryStringQuery("id:" + likes.getId()))) + .thenReturn(Collections.singletonList(likes)); + + // Search the likes + restLikesMockMvc.perform(get("/api/_search/likes?query=id:" + likes.getId())).andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(likes.getId().intValue()))) + .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE.toString()))) + .andExpect(jsonPath("$.[*].userID").value(hasItem(DEFAULT_USER_ID))) + .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID))); + } +} diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResourceIT.java index 31e3e8c4f1087067c752f0982afb349da564d8ac..105a68e13f67df95db533a7583beb857d88a7ead 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/PluginInterfaceResourceIT.java @@ -9,7 +9,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.io.IOException; import org.codeability.sharing.plugins.api.UserPrincipal; +import org.codeability.sharing.plugins.api.search.SearchInputDTO; +import org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO; import org.codeability.sharing.plugins.api.search.SearchRequestDTO; +import org.codeability.sharing.plugins.api.search.SearchResultDTO; +import org.codeability.sharing.plugins.api.search.SearchResultsDTO; import org.elasticsearch.node.NodeValidationException; import org.junit.Assert; import org.junit.jupiter.api.BeforeAll; @@ -28,13 +32,7 @@ import at.ac.uibk.gitsearch.security.AuthoritiesConstants; import at.ac.uibk.gitsearch.service.SearchService; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketInfoDTO; import at.ac.uibk.gitsearch.service.ShoppingBasketService.ShoppingBasketRedirectInfoDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; -import at.ac.uibk.gitsearch.service.dto.SearchInputMetadataDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; -import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; -import at.ac.uibk.gitsearch.web.rest.PluginInterfaceResource.PluginSearchInputDTOMapper; import at.ac.uibk.gitsearch.web.rest.PluginInterfaceResource.SearchResultsDTOMapper; -import io.jsonwebtoken.lang.Collections; /** * Integration tests for the {@link PluginInterfaceResource} REST controller. @@ -67,7 +65,7 @@ public class PluginInterfaceResourceIT { // just load everything from index :-) final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery); Assert.assertTrue("At least one hit?", searchResultPage.getSearchResult().size() >= 1); ShoppingBasketInfoDTO sbi = new ShoppingBasketInfoDTO(searchResultPage.getSearchResult().toArray(new SearchResultDTO[] {})); @@ -93,7 +91,7 @@ public class PluginInterfaceResourceIT { // searches for all :-) - final org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO searchMetadata = new org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO(null, null, null, null, null); + final org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO searchMetadata = new org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO(null, null, null, null, null, null); final org.codeability.sharing.plugins.api.search.SearchInputDTO searchQuery = new org.codeability.sharing.plugins.api.search.SearchInputDTO(null, searchMetadata, null, null, null, 0); // This test may fail, if token is expired! @@ -117,7 +115,7 @@ public class PluginInterfaceResourceIT { // searches for all :-) - final org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO searchMetadata = new org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO(null, null, null, null, null); + final org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO searchMetadata = new org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO(null, null, null, null, null, null); final org.codeability.sharing.plugins.api.search.SearchInputDTO searchQuery = new org.codeability.sharing.plugins.api.search.SearchInputDTO(null, searchMetadata, null, null, null, 0); // This test may fail, if token is expired! @@ -132,31 +130,11 @@ public class PluginInterfaceResourceIT { .andExpect(TestUtil.testResult(org.codeability.sharing.plugins.api.search.SearchResultsDTO.class, result -> { // not really a good test :-( - assertTrue("Currently only one public result", result.getSearchResult().size() == 1); + assertTrue("Currently some public result", result.getSearchResult().size() >= 3); // result.getSearchResult().forEach(r -> r.getProject()..getNamespace()); })); } - /** - * just a simple test of the input mapper - */ - @Test - public void testSearchInputMapper() { - - final PluginSearchInputDTOMapper inputQueryMapper = PluginSearchInputDTOMapper.INSTANCE; - - final org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO searchMetadata = new org.codeability.sharing.plugins.api.search.SearchInputMetadataDTO(null, "testKeyWord1 testKeyword2", null, null, null); - @SuppressWarnings("unchecked") - org.codeability.sharing.plugins.api.search.SearchInputDTO searchQuery = new org.codeability.sharing.plugins.api.search.SearchInputDTO("fullText", searchMetadata, null, null, Collections.arrayToList(new String[] {"pdf", "txt"}), 25); - - SearchInputDTO mappedSearchQuery = inputQueryMapper.searchInputFromPlugin(searchQuery); - - // punktuelle Tests - Assert.assertEquals(mappedSearchQuery.getMetadata().getKeyword(), searchQuery.getMetadata().getKeyword()); - Assert.assertEquals(mappedSearchQuery.getPage(), searchQuery.getPage()); - Assert.assertEquals(mappedSearchQuery.getFulltextQuery(), searchQuery.getFulltextQuery()); - Assert.assertEquals(mappedSearchQuery.getSelectedFileFormat(), searchQuery.getSelectedFileFormat()); - } /** * just a simple test of the results mapper @@ -169,7 +147,7 @@ public class PluginInterfaceResourceIT { // just load everything from index :-) final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO(null, null, null, null, null,null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); - SearchResultsDTO results = searchService.searchResultPage(searchQuery, SearchInputDTO.PAGE_SIZE); + SearchResultsDTO results = searchService.searchResultPage(searchQuery); Assert.assertTrue("At least one hit?", results.getSearchResult().size() >= 1); org.codeability.sharing.plugins.api.search.SearchResultsDTO mappedResults = resultsMapper.searchResultsToPlugin(results); diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/SavedSearchesResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/SavedSearchesResourceIT.java index bd4d3c2c6a569fec7d765d721b43e656e46f3520..b42e17daaa3aa4af37da7774233b4dabbfcb339d 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/SavedSearchesResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/SavedSearchesResourceIT.java @@ -12,7 +12,6 @@ import at.ac.uibk.gitsearch.service.mapper.SavedSearchesMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mock; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; @@ -57,7 +56,8 @@ public class SavedSearchesResourceIT { @Autowired private SavedSearchesMapper savedSearchesMapper; - @Autowired + @SuppressWarnings("unused") + @Autowired private SavedSearchesService savedSearchesService; /** @@ -90,7 +90,7 @@ public class SavedSearchesResourceIT { User user = UserResourceIT.createEntity(em); em.persist(user); em.flush(); - savedSearches.setUserId(user); + savedSearches.setUser(user); return savedSearches; } /** @@ -107,7 +107,7 @@ public class SavedSearchesResourceIT { User user = UserResourceIT.createEntity(em); em.persist(user); em.flush(); - savedSearches.setUserId(user); + savedSearches.setUser(user); return savedSearches; } diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/SearchResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/SearchResourceIT.java index b950879a5a0db44fd24fe4d12b128e8b6df7531a..ab6d1e85ba2bbae9b19af5220e74c89d554bd6f0 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/SearchResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/SearchResourceIT.java @@ -32,7 +32,7 @@ import at.ac.uibk.gitsearch.web.rest.ExerciseResourceIT.StreamResultMatcher; * Integration tests for the {@link UserResource} REST controller. */ @AutoConfigureMockMvc -@WithMockUser(authorities = AuthoritiesConstants.USER) +@WithMockUser(authorities = {AuthoritiesConstants.USER, "sharing"}) @SpringBootTest(classes = GitsearchApp.class) public class SearchResourceIT { @@ -78,14 +78,14 @@ public class SearchResourceIT { .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(TestUtil.testResult(AutoCompleteEntry[].class, r -> { - assertThat(r, Matchers.hasItemInArray(hasProperty("target", is("Java")))); + assertThat(r, Matchers.hasItemInArray(hasProperty("target", is("JAVA")))); })); } @Test public void getREADME() throws Exception { - String projectId = "3"; // warning: this depends on the sequence in the current search index :-( - restSearchMockMvc.perform(post("/api/programming-exercises/"+projectId+"/export-programming-exercise") + String exerciseId = "3"; // warning: this depends on the sequence in the current search index :-( + restSearchMockMvc.perform(post("/api/programming-exercises/"+exerciseId+"/export-programming-exercise") .with(csrf().asHeader()) .contentType(MediaType.APPLICATION_JSON)) // .andDo(print()) diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/StatisticsResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/StatisticsResourceIT.java index 4332e63f3059db0564df3eac44a826ed31198edd..86068224e7e9829937650a371279eea8b0d54bba 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/StatisticsResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/StatisticsResourceIT.java @@ -27,6 +27,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -63,8 +65,8 @@ public class StatisticsResourceIT { private static final Integer DEFAULT_DOWNLOADS = 1; private static final Integer UPDATED_DOWNLOADS = 2; - private static final Long DEFAULT_EXERCISE_ID = (long) 1; - private static final Long UPDATED_EXERCISE_ID = (long) 2; + private static final String DEFAULT_EXERCISE_ID = "1"; + private static final String UPDATED_EXERCISE_ID = "2"; final String publicGitLabProjectId = "3"; @@ -189,7 +191,7 @@ public class StatisticsResourceIT { .andExpect(jsonPath("$.[*].id").value(hasItem(statistics.getId().intValue()))) .andExpect(jsonPath("$.[*].views").value(hasItem(DEFAULT_VIEWS))) .andExpect(jsonPath("$.[*].downloads").value(hasItem((int)(long)DEFAULT_DOWNLOADS))) - .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID.intValue()))); + .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID))); } @Test @@ -307,7 +309,7 @@ public class StatisticsResourceIT { .andExpect(jsonPath("$.[*].id").value(hasItem(statistics.getId().intValue()))) .andExpect(jsonPath("$.[*].views").value(hasItem(DEFAULT_VIEWS))) .andExpect(jsonPath("$.[*].downloads").value(hasItem(DEFAULT_DOWNLOADS))) - .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID.intValue()))); + .andExpect(jsonPath("$.[*].exerciseID").value(hasItem(DEFAULT_EXERCISE_ID))); } @Test @@ -322,19 +324,20 @@ public class StatisticsResourceIT { } - @Test + @ParameterizedTest + @ValueSource(strings = {"3", "3:with/path"}) @Transactional @WithMockUser(authorities = AuthoritiesConstants.ADMIN) - public void createStatisticsByExerciseId() throws Exception { + public void createStatisticsByExerciseId(String exerciseId) throws Exception { // Initialize the database statisticsRepository.saveAndFlush(statistics); - restStatisticsMockMvc.perform(get("/api/statistics/exercise/{id}", publicGitLabProjectId).with(csrf().asHeader())).andExpect(status().isOk()) + restStatisticsMockMvc.perform(get("/api/statistics/exercise/{id}", exerciseId).with(csrf().asHeader())).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(jsonPath("$.exerciseID").value(publicGitLabProjectId)); + .andExpect(jsonPath("$.exerciseID").value(exerciseId)); // Get the statistics and see if it is found - assertEquals(3L,statisticsService.findOneByExerciseID( 3L).get().getExerciseID()); + assertEquals(exerciseId,statisticsService.findOneByExerciseID(exerciseId).get().getExerciseID()); } diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResourceIT.java index fae6bfb4b6900aaeee5f254182141f1d050a2009..207155da33922c67d94dda42ec8a3c9f7a514c56 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/UserWatchListResourceIT.java @@ -24,18 +24,18 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.web.servlet.MockMvc; import org.springframework.transaction.annotation.Transactional; import at.ac.uibk.gitsearch.GitsearchApp; import at.ac.uibk.gitsearch.domain.User; import at.ac.uibk.gitsearch.domain.UserWatchList; +import at.ac.uibk.gitsearch.domain.enumeration.CheckFrequency; import at.ac.uibk.gitsearch.repository.UserWatchListRepository; import at.ac.uibk.gitsearch.security.AuthoritiesConstants; -import at.ac.uibk.gitsearch.service.UserWatchListService; import at.ac.uibk.gitsearch.service.dto.UserWatchListDTO; import at.ac.uibk.gitsearch.service.mapper.UserWatchListMapper; - /** * Integration tests for the {@link UserWatchListResource} REST controller. */ @@ -48,16 +48,15 @@ public class UserWatchListResourceIT { private static final String DEFAULT_NAME = "AAAAAAAAAA"; private static final String UPDATED_NAME = "BBBBBBBBBB"; + private static final CheckFrequency DEFAULT_CHECK_FREQUENCY = CheckFrequency.NEVER; + private static final CheckFrequency UPDATED_CHECK_FREQUENCY = CheckFrequency.DAILY; + @Autowired private UserWatchListRepository userWatchListRepository; @Autowired private UserWatchListMapper userWatchListMapper; - @Autowired - private UserWatchListService userWatchListService; - - @Autowired private EntityManager em; @@ -74,12 +73,13 @@ public class UserWatchListResourceIT { */ public static UserWatchList createEntity(EntityManager em) { UserWatchList userWatchList = new UserWatchList() - .name(DEFAULT_NAME); + .name(DEFAULT_NAME) + .checkFrequency(DEFAULT_CHECK_FREQUENCY); // Add required entity User user = UserResourceIT.createEntity(em); em.persist(user); em.flush(); - userWatchList.setUserId(user); + userWatchList.setUser(user); return userWatchList; } /** @@ -90,12 +90,13 @@ public class UserWatchListResourceIT { */ public static UserWatchList createUpdatedEntity(EntityManager em) { UserWatchList userWatchList = new UserWatchList() - .name(UPDATED_NAME); + .name(UPDATED_NAME) + .checkFrequency(UPDATED_CHECK_FREQUENCY); // Add required entity User user = UserResourceIT.createEntity(em); em.persist(user); em.flush(); - userWatchList.setUserId(user); + userWatchList.setUser(user); return userWatchList; } @@ -121,6 +122,7 @@ public class UserWatchListResourceIT { assertThat(userWatchListList).hasSize(databaseSizeBeforeCreate + 1); UserWatchList testUserWatchList = userWatchListList.get(userWatchListList.size() - 1); assertThat(testUserWatchList.getName()).isEqualTo(DEFAULT_NAME); + assertThat(testUserWatchList.getCheckFrequency()).isEqualTo(DEFAULT_CHECK_FREQUENCY); } @@ -168,6 +170,27 @@ public class UserWatchListResourceIT { assertThat(userWatchListList).hasSize(databaseSizeBeforeTest); } + @Test + @Transactional + public void checkCheckFrequencyIsRequired() throws Exception { + int databaseSizeBeforeTest = userWatchListRepository.findAll().size(); + // set the field null + userWatchList.setCheckFrequency(null); + + // Create the UserWatchList, which fails. + UserWatchListDTO userWatchListDTO = userWatchListMapper.toDto(userWatchList); + + + restUserWatchListMockMvc.perform(post("/api/user-watch-lists") + .with(csrf().asHeader()) + .contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(userWatchListDTO))) + .andExpect(status().isBadRequest()); + + List<UserWatchList> userWatchListList = userWatchListRepository.findAll(); + assertThat(userWatchListList).hasSize(databaseSizeBeforeTest); + } + @Test @Transactional public void getAllUserWatchLists() throws Exception { @@ -179,7 +202,8 @@ public class UserWatchListResourceIT { .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(jsonPath("$.[*].id").value(hasItem(userWatchList.getId().intValue()))) - .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME))); + .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME))) + .andExpect(jsonPath("$.[*].checkFrequency").value(hasItem(DEFAULT_CHECK_FREQUENCY.toString()))); } @Test @@ -193,7 +217,8 @@ public class UserWatchListResourceIT { .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(jsonPath("$.id").value(userWatchList.getId().intValue())) - .andExpect(jsonPath("$.name").value(DEFAULT_NAME)); + .andExpect(jsonPath("$.name").value(DEFAULT_NAME)) + .andExpect(jsonPath("$.checkFrequency").value(DEFAULT_CHECK_FREQUENCY.toString())); } @@ -294,33 +319,90 @@ public class UserWatchListResourceIT { } + @Test + @Transactional + public void getAllUserWatchListsByCheckFrequencyIsEqualToSomething() throws Exception { + // Initialize the database + userWatchListRepository.saveAndFlush(userWatchList); + + // Get all the userWatchListList where checkFrequency equals to DEFAULT_CHECK_FREQUENCY + defaultUserWatchListShouldBeFound("checkFrequency.equals=" + DEFAULT_CHECK_FREQUENCY); + + // Get all the userWatchListList where checkFrequency equals to UPDATED_CHECK_FREQUENCY + defaultUserWatchListShouldNotBeFound("checkFrequency.equals=" + UPDATED_CHECK_FREQUENCY); + } + + @Test + @Transactional + public void getAllUserWatchListsByCheckFrequencyIsNotEqualToSomething() throws Exception { + // Initialize the database + userWatchListRepository.saveAndFlush(userWatchList); + + // Get all the userWatchListList where checkFrequency not equals to DEFAULT_CHECK_FREQUENCY + defaultUserWatchListShouldNotBeFound("checkFrequency.notEquals=" + DEFAULT_CHECK_FREQUENCY); + + // Get all the userWatchListList where checkFrequency not equals to UPDATED_CHECK_FREQUENCY + defaultUserWatchListShouldBeFound("checkFrequency.notEquals=" + UPDATED_CHECK_FREQUENCY); + } + + @Test + @Transactional + public void getAllUserWatchListsByCheckFrequencyIsInShouldWork() throws Exception { + // Initialize the database + userWatchListRepository.saveAndFlush(userWatchList); + + // Get all the userWatchListList where checkFrequency in DEFAULT_CHECK_FREQUENCY or UPDATED_CHECK_FREQUENCY + defaultUserWatchListShouldBeFound("checkFrequency.in=" + DEFAULT_CHECK_FREQUENCY + "," + UPDATED_CHECK_FREQUENCY); + + // Get all the userWatchListList where checkFrequency equals to UPDATED_CHECK_FREQUENCY + defaultUserWatchListShouldNotBeFound("checkFrequency.in=" + UPDATED_CHECK_FREQUENCY); + } + + @Test + @Transactional + public void getAllUserWatchListsByCheckFrequencyIsNullOrNotNull() throws Exception { + // Initialize the database + userWatchListRepository.saveAndFlush(userWatchList); + + // Get all the userWatchListList where checkFrequency is not null + defaultUserWatchListShouldBeFound("checkFrequency.specified=true"); + + // Get all the userWatchListList where checkFrequency is null + defaultUserWatchListShouldNotBeFound("checkFrequency.specified=false"); + } + @Test @Transactional public void getAllUserWatchListsByUserIdIsEqualToSomething() throws Exception { // Get already existing entity - User userId = userWatchList.getUserId(); + User user = userWatchList.getUser(); userWatchListRepository.saveAndFlush(userWatchList); - Long userIdId = userId.getId(); + Long userId = user.getId(); - // Get all the userWatchListList where userId equals to userIdId - defaultUserWatchListShouldBeFound("userIdId.equals=" + userIdId); + // Get all the userWatchListList where userId equals to userId + defaultUserWatchListShouldBeFound("userId.equals=" + userId); - // Get all the userWatchListList where userId equals to userIdId + 1 - defaultUserWatchListShouldNotBeFound("userIdId.equals=" + (userIdId + 1)); + // Get all the userWatchListList where userId equals to userId + 1 + defaultUserWatchListShouldNotBeFound("userId.equals=" + (userId + 1)); } /** * Executes the search, and checks that the default entity is returned. */ private void defaultUserWatchListShouldBeFound(String filter) throws Exception { - restUserWatchListMockMvc.perform(get("/api/user-watch-lists?sort=id,desc&" + filter)) + restUserWatchListMockMvc.perform(get("/api/user-watch-lists?sort=id,desc&" + filter) + .with(csrf().asHeader()) + ) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(jsonPath("$.[*].id").value(hasItem(userWatchList.getId().intValue()))) - .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME))); + .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME))) + .andExpect(jsonPath("$.[*].checkFrequency").value(hasItem(DEFAULT_CHECK_FREQUENCY.toString()))); // Check, that the count call also returns 1 - restUserWatchListMockMvc.perform(get("/api/user-watch-lists/count?sort=id,desc&" + filter)) + restUserWatchListMockMvc.perform(get("/api/user-watch-lists/count?sort=id,desc&" + filter) + .with(csrf().asHeader()) + ) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(content().string("1")); @@ -330,14 +412,18 @@ public class UserWatchListResourceIT { * Executes the search, and checks that the default entity is not returned. */ private void defaultUserWatchListShouldNotBeFound(String filter) throws Exception { - restUserWatchListMockMvc.perform(get("/api/user-watch-lists?sort=id,desc&" + filter)) + restUserWatchListMockMvc.perform(get("/api/user-watch-lists?sort=id,desc&" + filter) .with(csrf().asHeader()) + .with(csrf().asHeader()) + ) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(jsonPath("$").isArray()) .andExpect(jsonPath("$").isEmpty()); // Check, that the count call also returns 0 - restUserWatchListMockMvc.perform(get("/api/user-watch-lists/count?sort=id,desc&" + filter)) + restUserWatchListMockMvc.perform(get("/api/user-watch-lists/count?sort=id,desc&" + filter) + .with(csrf().asHeader()) +) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(content().string("0")); @@ -364,7 +450,8 @@ public class UserWatchListResourceIT { // Disconnect from session so that the updates on updatedUserWatchList are not directly saved in db em.detach(updatedUserWatchList); updatedUserWatchList - .name(UPDATED_NAME); + .name(UPDATED_NAME) + .checkFrequency(UPDATED_CHECK_FREQUENCY); UserWatchListDTO userWatchListDTO = userWatchListMapper.toDto(updatedUserWatchList); restUserWatchListMockMvc.perform(put("/api/user-watch-lists") @@ -378,7 +465,7 @@ public class UserWatchListResourceIT { assertThat(userWatchListList).hasSize(databaseSizeBeforeUpdate); UserWatchList testUserWatchList = userWatchListList.get(userWatchListList.size() - 1); assertThat(testUserWatchList.getName()).isEqualTo(UPDATED_NAME); - + assertThat(testUserWatchList.getCheckFrequency()).isEqualTo(UPDATED_CHECK_FREQUENCY); } @Test @@ -405,7 +492,7 @@ public class UserWatchListResourceIT { @Test @Transactional - public void updatChangeUserWatchListWithoutId() throws Exception { + public void updateChangeUserWatchListWithoutId() throws Exception { int databaseSizeBeforeUpdate = userWatchListRepository.findAll().size(); // Create the UserWatchList @@ -441,6 +528,27 @@ public class UserWatchListResourceIT { // Validate the database contains one less item List<UserWatchList> userWatchListList = userWatchListRepository.findAll(); assertThat(userWatchListList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void createUserWatchListForCurrentUser() throws Exception { + final UserWatchListDTO userWatchListDTO = userWatchListMapper.toDto(userWatchList); + + int databaseSizeBeforeCreate = userWatchListRepository.findAll().size(); + // Delete the userWatchList + restUserWatchListMockMvc.perform(post("/api/currentuser-watch-lists", userWatchListDTO) + .with(SecurityMockMvcRequestPostProcessors.user(userWatchList.getUser().getLogin())) + .with(csrf().asHeader()) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(TestUtil.convertObjectToJsonBytes(userWatchListDTO))) + .andExpect(status().isCreated()); + // Validate the database contains this watchlist + List<UserWatchList> userWatchListList = userWatchListRepository.findAll(); + + assertThat(userWatchListList).hasSize(databaseSizeBeforeCreate + 1); } + } diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResourceIT.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResourceIT.java index acbe8451f287a949839e2122c8be5f83454d9648..e4f45be189151e79809dbc423239dbe0946df695 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResourceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/WatchListEntryResourceIT.java @@ -64,7 +64,8 @@ public class WatchListEntryResourceIT { @Autowired private WatchListEntryMapper watchListEntryMapper; - @Autowired + @SuppressWarnings("unused") + @Autowired private WatchListEntryService watchListEntryService; /** diff --git a/src/test/java/at/ac/uibk/gitsearch/web/rest/util/HeaderUtil.java b/src/test/java/at/ac/uibk/gitsearch/web/rest/util/HeaderUtil.java index ea50490db7fe17edea0af0ced365fa20b5c7a0e0..e265c5ec14537ef2f7e4c41464f50d66023d0d26 100644 --- a/src/test/java/at/ac/uibk/gitsearch/web/rest/util/HeaderUtil.java +++ b/src/test/java/at/ac/uibk/gitsearch/web/rest/util/HeaderUtil.java @@ -13,7 +13,8 @@ import org.springframework.http.MediaType; */ public final class HeaderUtil { - private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class); + @SuppressWarnings("unused") + private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class); private HeaderUtil() { } @@ -49,7 +50,12 @@ public final class HeaderUtil { public static HttpHeaders createAuthorization(String username, String password) { HttpHeaders acceptHeaders = new HttpHeaders() { - { + /** + * + */ + private static final long serialVersionUID = 1L; + + { set(com.google.common.net.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString()); set(com.google.common.net.HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON.toString()); } diff --git a/src/test/javascript/e2e/entities/likes/likes.page-object.ts b/src/test/javascript/e2e/entities/likes/likes.page-object.ts new file mode 100644 index 0000000000000000000000000000000000000000..761c64aca1137efe518b1cb33d7855652d699777 --- /dev/null +++ b/src/test/javascript/e2e/entities/likes/likes.page-object.ts @@ -0,0 +1,88 @@ +import { element, by, ElementFinder } from 'protractor'; + +export class LikesComponentsPage { + createButton = element(by.id('jh-create-entity')); + deleteButtons = element.all(by.css('jhi-likes div table .btn-danger')); + title = element.all(by.css('jhi-likes div h2#page-heading span')).first(); + noResult = element(by.id('no-result')); + entities = element(by.id('entities')); + + async clickOnCreateButton(): Promise<void> { + await this.createButton.click(); + } + + async clickOnLastDeleteButton(): Promise<void> { + await this.deleteButtons.last().click(); + } + + async countDeleteButtons(): Promise<number> { + return this.deleteButtons.count(); + } + + async getTitle(): Promise<string> { + return this.title.getAttribute('jhiTranslate'); + } +} + +export class LikesUpdatePage { + pageTitle = element(by.id('jhi-likes-heading')); + saveButton = element(by.id('save-entity')); + cancelButton = element(by.id('cancel-save')); + + dateInput = element(by.id('field_date')); + userIDInput = element(by.id('field_userID')); + projectIDInput = element(by.id('field_projectID')); + + async getPageTitle(): Promise<string> { + return this.pageTitle.getAttribute('jhiTranslate'); + } + + async setDateInput(date: string): Promise<void> { + await this.dateInput.sendKeys(date); + } + + async getDateInput(): Promise<string> { + return await this.dateInput.getAttribute('value'); + } + + async setUserIDInput(userID: string): Promise<void> { + await this.userIDInput.sendKeys(userID); + } + + async getUserIDInput(): Promise<string> { + return await this.userIDInput.getAttribute('value'); + } + + async setProjectIDInput(projectID: string): Promise<void> { + await this.projectIDInput.sendKeys(projectID); + } + + async getProjectIDInput(): Promise<string> { + return await this.projectIDInput.getAttribute('value'); + } + + async save(): Promise<void> { + await this.saveButton.click(); + } + + async cancel(): Promise<void> { + await this.cancelButton.click(); + } + + getSaveButton(): ElementFinder { + return this.saveButton; + } +} + +export class LikesDeleteDialog { + private dialogTitle = element(by.id('jhi-delete-likes-heading')); + private confirmButton = element(by.id('jhi-confirm-delete-likes')); + + async getDialogTitle(): Promise<string> { + return this.dialogTitle.getAttribute('jhiTranslate'); + } + + async clickOnConfirmButton(): Promise<void> { + await this.confirmButton.click(); + } +} diff --git a/src/test/javascript/e2e/entities/likes/likes.spec.ts b/src/test/javascript/e2e/entities/likes/likes.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..445cf5e1361f0a18f861fcddd441b4d3870460b6 --- /dev/null +++ b/src/test/javascript/e2e/entities/likes/likes.spec.ts @@ -0,0 +1,73 @@ +import { browser, ExpectedConditions as ec, promise } from 'protractor'; +import { NavBarPage, SignInPage } from '../../page-objects/jhi-page-objects'; + +import { LikesComponentsPage, LikesDeleteDialog, LikesUpdatePage } from './likes.page-object'; + +const expect = chai.expect; + +describe('Likes e2e test', () => { + let navBarPage: NavBarPage; + let signInPage: SignInPage; + let likesComponentsPage: LikesComponentsPage; + let likesUpdatePage: LikesUpdatePage; + let likesDeleteDialog: LikesDeleteDialog; + + before(async () => { + await browser.get('/'); + navBarPage = new NavBarPage(); + signInPage = await navBarPage.getSignInPage(); + await signInPage.autoSignInUsing('admin', 'admin'); + await browser.wait(ec.visibilityOf(navBarPage.entityMenu), 5000); + }); + + it('should load Likes', async () => { + await navBarPage.goToEntity('likes'); + likesComponentsPage = new LikesComponentsPage(); + await browser.wait(ec.visibilityOf(likesComponentsPage.title), 5000); + expect(await likesComponentsPage.getTitle()).to.eq('gitsearchApp.likes.home.title'); + await browser.wait(ec.or(ec.visibilityOf(likesComponentsPage.entities), ec.visibilityOf(likesComponentsPage.noResult)), 1000); + }); + + it('should load create Likes page', async () => { + await likesComponentsPage.clickOnCreateButton(); + likesUpdatePage = new LikesUpdatePage(); + expect(await likesUpdatePage.getPageTitle()).to.eq('gitsearchApp.likes.home.createOrEditLabel'); + await likesUpdatePage.cancel(); + }); + + it('should create and save Likes', async () => { + const nbButtonsBeforeCreate = await likesComponentsPage.countDeleteButtons(); + + await likesComponentsPage.clickOnCreateButton(); + + await promise.all([ + likesUpdatePage.setDateInput('2000-12-31'), + likesUpdatePage.setUserIDInput('5'), + likesUpdatePage.setProjectIDInput('5'), + ]); + + expect(await likesUpdatePage.getDateInput()).to.eq('2000-12-31', 'Expected date value to be equals to 2000-12-31'); + expect(await likesUpdatePage.getUserIDInput()).to.eq('5', 'Expected userID value to be equals to 5'); + expect(await likesUpdatePage.getProjectIDInput()).to.eq('5', 'Expected projectID value to be equals to 5'); + + await likesUpdatePage.save(); + expect(await likesUpdatePage.getSaveButton().isPresent(), 'Expected save button disappear').to.be.false; + + expect(await likesComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeCreate + 1, 'Expected one more entry in the table'); + }); + + it('should delete last Likes', async () => { + const nbButtonsBeforeDelete = await likesComponentsPage.countDeleteButtons(); + await likesComponentsPage.clickOnLastDeleteButton(); + + likesDeleteDialog = new LikesDeleteDialog(); + expect(await likesDeleteDialog.getDialogTitle()).to.eq('gitsearchApp.likes.delete.question'); + await likesDeleteDialog.clickOnConfirmButton(); + + expect(await likesComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeDelete - 1); + }); + + after(async () => { + await navBarPage.autoSignOut(); + }); +}); diff --git a/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.page-object.ts b/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.page-object.ts index dccf120c441b5bc4094fd9a10260e5a44c114935..a71640d72dfa0d541123794b18fa04d099896a8c 100644 --- a/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.page-object.ts +++ b/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.page-object.ts @@ -30,6 +30,7 @@ export class UserWatchListUpdatePage { cancelButton = element(by.id('cancel-save')); nameInput = element(by.id('field_name')); + checkFrequencySelect = element(by.id('field_checkFrequency')); userIdSelect = element(by.id('field_userId')); @@ -45,6 +46,18 @@ export class UserWatchListUpdatePage { return await this.nameInput.getAttribute('value'); } + async setCheckFrequencySelect(checkFrequency: string): Promise<void> { + await this.checkFrequencySelect.sendKeys(checkFrequency); + } + + async getCheckFrequencySelect(): Promise<string> { + return await this.checkFrequencySelect.element(by.css('option:checked')).getText(); + } + + async checkFrequencySelectLastOption(): Promise<void> { + await this.checkFrequencySelect.all(by.tagName('option')).last().click(); + } + async userIdSelectLastOption(): Promise<void> { await this.userIdSelect.all(by.tagName('option')).last().click(); } diff --git a/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.spec.ts b/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.spec.ts index 66fb9301b9d604b32d84aadcad0d3da8443f205e..54aefae104677d2d831ef40ee5bd80c88a689c54 100644 --- a/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.spec.ts +++ b/src/test/javascript/e2e/entities/user-watch-list/user-watch-list.spec.ts @@ -49,6 +49,7 @@ describe('UserWatchList e2e test', () => { await promise.all([ userWatchListUpdatePage.setNameInput('name'), + userWatchListUpdatePage.checkFrequencySelectLastOption(), userWatchListUpdatePage.userIdSelectLastOption(), ]); diff --git a/src/test/javascript/spec/app/entities/likes/likes-delete-dialog.component.spec.ts b/src/test/javascript/spec/app/entities/likes/likes-delete-dialog.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e229024b529e1aa7a20d8240c1d943bd2df31220 --- /dev/null +++ b/src/test/javascript/spec/app/entities/likes/likes-delete-dialog.component.spec.ts @@ -0,0 +1,65 @@ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { GitsearchTestModule } from '../../../test.module'; +import { MockEventManager } from '../../../helpers/mock-event-manager.service'; +import { MockActiveModal } from '../../../helpers/mock-active-modal.service'; +import { LikesDeleteDialogComponent } from 'app/entities/likes/likes-delete-dialog.component'; +import { LikesService } from 'app/entities/likes/likes.service'; + +describe('Component Tests', () => { + describe('Likes Management Delete Component', () => { + let comp: LikesDeleteDialogComponent; + let fixture: ComponentFixture<LikesDeleteDialogComponent>; + let service: LikesService; + let mockEventManager: MockEventManager; + let mockActiveModal: MockActiveModal; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [GitsearchTestModule], + declarations: [LikesDeleteDialogComponent], + }) + .overrideTemplate(LikesDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(LikesDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(LikesService); + mockEventManager = TestBed.get(JhiEventManager); + mockActiveModal = TestBed.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.closeSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + + it('Should not call delete service on clear', () => { + // GIVEN + spyOn(service, 'delete'); + + // WHEN + comp.cancel(); + + // THEN + expect(service.delete).not.toHaveBeenCalled(); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/likes/likes-detail.component.spec.ts b/src/test/javascript/spec/app/entities/likes/likes-detail.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..319925a35bdee083881b42ad4fe8f7c82c777b71 --- /dev/null +++ b/src/test/javascript/spec/app/entities/likes/likes-detail.component.spec.ts @@ -0,0 +1,37 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { GitsearchTestModule } from '../../../test.module'; +import { LikesDetailComponent } from 'app/entities/likes/likes-detail.component'; +import { Likes } from 'app/shared/model/likes.model'; + +describe('Component Tests', () => { + describe('Likes Management Detail Component', () => { + let comp: LikesDetailComponent; + let fixture: ComponentFixture<LikesDetailComponent>; + const route = ({ data: of({ likes: new Likes(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [GitsearchTestModule], + declarations: [LikesDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }], + }) + .overrideTemplate(LikesDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(LikesDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should load likes on init', () => { + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.likes).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/likes/likes-update.component.spec.ts b/src/test/javascript/spec/app/entities/likes/likes-update.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b9e257de3064a7fb4fcda3a66e5e0571cd823cc --- /dev/null +++ b/src/test/javascript/spec/app/entities/likes/likes-update.component.spec.ts @@ -0,0 +1,61 @@ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { FormBuilder } from '@angular/forms'; +import { of } from 'rxjs'; + +import { GitsearchTestModule } from '../../../test.module'; +import { LikesUpdateComponent } from 'app/entities/likes/likes-update.component'; +import { LikesService } from 'app/entities/likes/likes.service'; +import { Likes } from 'app/shared/model/likes.model'; + +describe('Component Tests', () => { + describe('Likes Management Update Component', () => { + let comp: LikesUpdateComponent; + let fixture: ComponentFixture<LikesUpdateComponent>; + let service: LikesService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [GitsearchTestModule], + declarations: [LikesUpdateComponent], + providers: [FormBuilder], + }) + .overrideTemplate(LikesUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(LikesUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(LikesService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Likes(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.updateForm(entity); + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Likes(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.updateForm(entity); + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/likes/likes.component.spec.ts b/src/test/javascript/spec/app/entities/likes/likes.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..d61bfaeb60630638f24989a287afd92f227aa57f --- /dev/null +++ b/src/test/javascript/spec/app/entities/likes/likes.component.spec.ts @@ -0,0 +1,49 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; + +import { GitsearchTestModule } from '../../../test.module'; +import { LikesComponent } from 'app/entities/likes/likes.component'; +import { LikesService } from 'app/entities/likes/likes.service'; +import { Likes } from 'app/shared/model/likes.model'; + +describe('Component Tests', () => { + describe('Likes Management Component', () => { + let comp: LikesComponent; + let fixture: ComponentFixture<LikesComponent>; + let service: LikesService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [GitsearchTestModule], + declarations: [LikesComponent], + }) + .overrideTemplate(LikesComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(LikesComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(LikesService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Likes(123)], + headers, + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.likes && comp.likes[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/likes/likes.service.spec.ts b/src/test/javascript/spec/app/entities/likes/likes.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..6ba4a166684c3cad569299380dc8bd1d15b7fbb5 --- /dev/null +++ b/src/test/javascript/spec/app/entities/likes/likes.service.spec.ts @@ -0,0 +1,131 @@ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { LikesService } from 'app/entities/likes/likes.service'; +import { ILikes, Likes } from 'app/shared/model/likes.model'; + +describe('Service Tests', () => { + describe('Likes Service', () => { + let injector: TestBed; + let service: LikesService; + let httpMock: HttpTestingController; + let elemDefault: ILikes; + let expectedResult: ILikes | ILikes[] | boolean | null; + let currentDate: moment.Moment; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + }); + expectedResult = null; + injector = getTestBed(); + service = injector.get(LikesService); + httpMock = injector.get(HttpTestingController); + currentDate = moment(); + + elemDefault = new Likes(0, currentDate, 0, '0'); + }); + + describe('Service methods', () => { + it('should find an element', () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + }, + elemDefault + ); + + service.find(123).subscribe(resp => (expectedResult = resp.body)); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(returnedFromService); + expect(expectedResult).toMatchObject(elemDefault); + }); + + it('should create a Likes', () => { + const returnedFromService = Object.assign( + { + id: 0, + date: currentDate.format(DATE_FORMAT), + }, + elemDefault + ); + + const expected = Object.assign( + { + date: currentDate, + }, + returnedFromService + ); + + service.create(new Likes()).subscribe(resp => (expectedResult = resp.body)); + + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(returnedFromService); + expect(expectedResult).toMatchObject(expected); + }); + + it('should update a Likes', () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + userID: 1, + projectID: 1, + }, + elemDefault + ); + + const expected = Object.assign( + { + date: currentDate, + }, + returnedFromService + ); + + service.update(expected).subscribe(resp => (expectedResult = resp.body)); + + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(returnedFromService); + expect(expectedResult).toMatchObject(expected); + }); + + it('should return a list of Likes', () => { + const returnedFromService = Object.assign( + { + date: currentDate.format(DATE_FORMAT), + userID: 1, + projectID: 1, + }, + elemDefault + ); + + const expected = Object.assign( + { + date: currentDate, + }, + returnedFromService + ); + + service.query().subscribe(resp => (expectedResult = resp.body)); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush([returnedFromService]); + httpMock.verify(); + expect(expectedResult).toContainEqual(expected); + }); + + it('should delete a Likes', () => { + service.delete(123).subscribe(resp => (expectedResult = resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + expect(expectedResult); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/src/test/javascript/spec/app/entities/user-watch-list/user-watch-list.service.spec.ts b/src/test/javascript/spec/app/entities/user-watch-list/user-watch-list.service.spec.ts index dcd36fd689a35b404c570454d2e497bc84fc8ccc..bde63c23ea0d26af9a87037138a7e0aca3cdef50 100644 --- a/src/test/javascript/spec/app/entities/user-watch-list/user-watch-list.service.spec.ts +++ b/src/test/javascript/spec/app/entities/user-watch-list/user-watch-list.service.spec.ts @@ -2,6 +2,7 @@ import { TestBed, getTestBed } from '@angular/core/testing'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { UserWatchListService } from 'app/entities/user-watch-list/user-watch-list.service'; import { IUserWatchList, UserWatchList } from 'app/shared/model/user-watch-list.model'; +import { CheckFrequency } from 'app/shared/model/enumerations/check-frequency.model'; describe('Service Tests', () => { describe('UserWatchList Service', () => { @@ -20,7 +21,7 @@ describe('Service Tests', () => { service = injector.get(UserWatchListService); httpMock = injector.get(HttpTestingController); - elemDefault = new UserWatchList(0, 'AAAAAAA'); + elemDefault = new UserWatchList(0, 'AAAAAAA', CheckFrequency.NEVER); }); describe('Service methods', () => { @@ -55,6 +56,7 @@ describe('Service Tests', () => { const returnedFromService = Object.assign( { name: 'BBBBBB', + checkFrequency: 'BBBBBB', }, elemDefault ); @@ -72,6 +74,7 @@ describe('Service Tests', () => { const returnedFromService = Object.assign( { name: 'BBBBBB', + checkFrequency: 'BBBBBB', }, elemDefault ); diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json deleted file mode 100644 index 13a37a86744282f28b9c0cd33c8e0e931a03057c..0000000000000000000000000000000000000000 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "project" : { - "project_id" : 3, "_comment": "This should be an existing public prject", - "project_name" : "apitest_76_1613574806194", - "namespace" : "sharing/health-check-tests/apitest_76_1613574806194", - "main_group" : "sharing", - "sub_group" : "health-check-tests", - "url" : "https://sharing.codeability-austria.uibk.ac.at/sharing/health-check-tests/apitest_76_1613574806194", "_comment2": "TODO: this url is not correct for project 3", - "visibility" : "private", - "archived" : false, - "star_count" : 0, - "open_issues_count" : 0, - "forks_count" : 0, - "last_activity_at" : "2021-02-17T15:13:27.733Z", - "description" : "Automatically generated testapi" - }, - "file" : { - "filename" : "metadata.yml", - "path" : "metadata.yml", - "commit_id" : "679236d0e8722976c285caa3a5391b6cff74b397", - "indexing_date" : "2021-03-10T17:02:58.245815" - }, - "metadata" : { - "metadataVersion" : "0.2", - "type" : "collection", - "collectionContent" : [ - "src/if-001/if-001.yml", - "src/if-002/if-002.yml", - "src/if-003/if-003.yml" - ], - "identifier" : "javaCourseTUWienTest", - "structure" : "hierarchical", - "version" : "1.0", - "status" : "final", - "title" : "Meta Test Data 76", - "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", - "programmingLanguage" : [ - "Java" - ], - "language" : [ - "de" - ], - "educationLevel" : "Anfänger, (to be detailed)", - "audience" : "Anfaenger", - "keyword" : [ - "Java", - "IOTest", - "latex", - "testing76" - ], - "license" : "MIT", - "creator" : [ - { - "name" : "Stefan Podlipnig", - "affiliation" : "TU Wien", - "email" : "stefan.podlipnig@tuwien.ac.at" - } - ], - "contributor" : [ - { - "name" : "Daniel Bastta", - "affiliation" : "TU Wien", - "email" : "daniel.bastta@tuwien.ac.at" - }, - { - "name" : "Andreas Merckel", - "affiliation" : "TU Wien", - "email" : "andreas.merkel@tuwien.ac.at" - }, - { - "name" : "Kerstin Limbeck", - "affiliation" : "TU Wien", - "email" : "kerstin.limbeck@tuwien.ac.at" - } - ], - "publisher" : [ - { - "name" : "Andreas Merckel", - "affiliation" : "TU Wien", - "email" : "andreas.merkel@tuwien.ac.at" - } - ], - "format" : [ - "latex" - ], - "deprecated" : false, - "difficulty" : "simple", - "valid" : { - "start" : "2020-01-01", - "end" : "2030-12-31" - }, - "requires" : [ - "Java14" - ], - "image" : "./courseIcon.png" - } - } diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json deleted file mode 100644 index a1eb515efe8dc405aa1726541ae4ed11ecdf5028..0000000000000000000000000000000000000000 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "project" : { - "project_id" : 143, - "project_name" : "apitest_76_1613574806194", - "namespace" : "sharing/health-check-tests/apitest_76_1613574806194", - "main_group" : "sharing", - "sub_group" : "health-check-tests", - "url" : "https://sharing.codeability-austria.uibk.ac.at/sharing/health-check-tests/apitest_76_1613574806194", - "visibility" : "private", - "archived" : false, - "star_count" : 0, - "open_issues_count" : 0, - "forks_count" : 0, - "last_activity_at" : "2021-02-17T15:13:27.733Z", - "description" : "Automatically generated testapi" - }, - "file" : { - "filename" : "metadata.yml", - "path" : "metadata.yml", - "commit_id" : "679236d0e8722976c285caa3a5391b6cff74b397", - "indexing_date" : "2021-03-10T17:02:58.245815" - }, - "metadata" : { - "metadataVersion" : "0.2", - "type" : "collection", - "collectionContent" : [ - "src/if-001/if-001.yml", - "src/if-002/if-002.yml", - "src/if-003/if-003.yml" - ], - "identifier" : "javaCourseTUWienTest", - "structure" : "hierarchical", - "version" : "1.0", - "status" : "final", - "title" : "Meta Test Data 76", - "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", - "programmingLanguage" : [ - "Java" - ], - "language" : [ - "de" - ], - "educationLevel" : "Anfänger, (to be detailed)", - "audience" : "Anfaenger", - "keyword" : [ - "Java", - "IOTest", - "latex", - "testing76" - ], - "license" : "CC-SA-BY 4.0", - "creator" : [ - { - "name" : "Stefan Podlipnig", - "affiliation" : "TU Wien", - "email" : "stefan.podlipnig@tuwien.ac.at" - } - ], - "contributor" : [ - { - "name" : "Daniel Bastta", - "affiliation" : "TU Wien", - "email" : "daniel.bastta@tuwien.ac.at" - }, - { - "name" : "Andreas Merckel", - "affiliation" : "TU Wien", - "email" : "andreas.merkel@tuwien.ac.at" - }, - { - "name" : "Kerstin Limbeck", - "affiliation" : "TU Wien", - "email" : "kerstin.limbeck@tuwien.ac.at" - } - ], - "publisher" : [ - { - "name" : "Andreas Merckel", - "affiliation" : "TU Wien", - "email" : "andreas.merkel@tuwien.ac.at" - } - ], - "format" : [ - "latex" - ], - "deprecated" : false, - "difficulty" : "simple", - "valid" : { - "start" : "2020-01-01", - "end" : "2030-12-31" - }, - "requires" : [ - "Java14" - ], - "image" : "./courseIcon.png" - } - } \ No newline at end of file diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json deleted file mode 100644 index 01a2a8b4ca7857a0f052798eb98cb61c79241446..0000000000000000000000000000000000000000 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "project": { - "project_id": 144, - "project_name": "apitest_76_1613574806194", - "namespace": "sharing/health-check-tests/apitest_76_1613574806194", - "main_group": "sharing", - "sub_group": "health-check-tests", - "url": "https://sharing.codeability-austria.uibk.ac.at/sharing/health-check-tests/apitest_76_1613574806194", - "visibility": "public", - "archived": false, - "star_count": 0, - "open_issues_count": 0, - "forks_count": 0, - "last_activity_at": "2021-02-17T15:13:27.733Z", - "description": "Automatically generated testapi" - }, - "file": { - "filename": "metadata.yml", - "path": "metadata.yml", - "commit_id": "679236d0e8722976c285caa3a5391b6cff74b397", - "indexing_date": "2021-03-10T17:02:58.245815" - }, - "metadata": { - "metadataVersion": "0.2", - "type": "collection", - "collectionContent": ["src/if-001/if-001.yml", "src/if-002/if-002.yml", "src/if-003/if-003.yml"], - "identifier": "javaCourseTUWienTest", - "structure": "hierarchical", - "version": "1.0", - "status": "final", - "title": "Meta Test Data 76", - "description": "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", - "programmingLanguage": ["Java"], - "language": ["de"], - "educationLevel": "Anfänger, (to be detailed)", - "audience": "Anfaenger", - "keyword": ["Java", "IOTest", "latex", "testing76"], - "license": "MIT", - "creator": [ - { - "name": "Stefan Podlipnig", - "affiliation": "TU Wien", - "email": "stefan.podlipnig@tuwien.ac.at" - } - ], - "contributor": [ - { - "name": "Daniel Bastta", - "affiliation": "TU Wien", - "email": "daniel.bastta@tuwien.ac.at" - }, - { - "name": "Andreas Merckel", - "affiliation": "TU Wien", - "email": "andreas.merkel@tuwien.ac.at" - }, - { - "name": "Kerstin Limbeck", - "affiliation": "TU Wien", - "email": "kerstin.limbeck@tuwien.ac.at" - } - ], - "publisher": [ - { - "name": "Andreas Merckel", - "affiliation": "TU Wien", - "email": "andreas.merkel@tuwien.ac.at" - } - ], - "format": ["latex"], - "deprecated": false, - "difficulty": "simple", - "valid": { - "start": "2020-01-01", - "end": "2030-12-31" - }, - "requires": ["Java14"], - "image": "./courseIcon.png" - } -} diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json index 6922d5b091ccc5ad8f7f3a88720bb657a7cda053..97127b1dd10855e913cc8abdf333656b78a0ecde 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json +++ b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json @@ -1,200 +1,209 @@ { - "idx_metadata_1" : { - "aliases" : { - "metadata" : { - "is_write_index" : true + "idx_metadata_1": { + "aliases": { + "metadata": { + "is_write_index": true } }, - "settings" : { - "index.mapping.total_fields.limit" : "2000", - "number_of_shards" : "1" - } - }, - "mappings" : { - "_doc" : { - - "properties" : { - "file" : { - "properties" : { - "commit_id" : { - "type" : "keyword" - }, - "filename" : { - "type" : "keyword" - }, - "indexing_date" : { - "type" : "date", - "format" : "dateOptionalTime" - }, - "path" : { - "type" : "keyword" - } + "settings": { + "index.mapping.total_fields.limit": "2000", + "number_of_shards": "1" + } + }, + "mappings": { + "_doc": { + "properties": { + "file": { + "properties": { + "children": { + "type": "keyword" + }, + "commit_id": { + "type": "keyword" + }, + "filename": { + "type": "keyword" + }, + "indexing_date": { + "type": "date", + "format": "dateOptionalTime" + }, + "last_activity_at": { + "type": "date", + "format": "dateOptionalTime" + }, + "parent": { + "type": "keyword" + }, + "path": { + "type": "keyword" } - }, - "metadata" : { - "properties" : { - "audience" : { - "type" : "text" - }, - "collectionContent" : { - "type" : "keyword" - }, - "contributor" : { - "properties" : { - "affiliation" : { - "type" : "text" - }, - "email" : { - "type" : "text" - }, - "name" : { - "type" : "text" - } + } + }, + "metadata": { + "properties": { + "audience": { + "type": "text" + }, + "collectionContent": { + "type": "keyword" + }, + "contributor": { + "properties": { + "affiliation": { + "type": "text" + }, + "email": { + "type": "text" + }, + "name": { + "type": "text" } - }, - "creator" : { - "properties" : { - "affiliation" : { - "type" : "text" - }, - "email" : { - "type" : "text" - }, - "name" : { - "type" : "text" - } + } + }, + "creator": { + "properties": { + "affiliation": { + "type": "text" + }, + "email": { + "type": "text" + }, + "name": { + "type": "text" } - }, - "deprecated" : { - "type" : "boolean" - }, - "description" : { - "type" : "text" - }, - "difficulty" : { - "type" : "keyword" - }, - "educationLevel" : { - "type" : "text" - }, - "format" : { - "type" : "keyword" - }, - "identifier" : { - "type" : "keyword" - }, - "image" : { - "type" : "keyword" - }, - "keyword" : { - "type" : "keyword" - }, - "language" : { - "type" : "keyword" - }, - "license" : { - "type" : "keyword" - }, - "metadataVersion" : { - "type" : "keyword" - }, - "programmingLanguage" : { - "type" : "keyword" - }, - "publisher" : { - "properties" : { - "affiliation" : { - "type" : "text" - }, - "email" : { - "type" : "text" - }, - "name" : { - "type" : "text" - } + } + }, + "deprecated": { + "type": "boolean" + }, + "description": { + "type": "text" + }, + "difficulty": { + "type": "keyword" + }, + "educationLevel": { + "type": "text" + }, + "format": { + "type": "keyword" + }, + "identifier": { + "type": "keyword" + }, + "image": { + "type": "keyword" + }, + "keyword": { + "type": "keyword" + }, + "language": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "metadataVersion": { + "type": "keyword" + }, + "programmingLanguage": { + "type": "keyword" + }, + "publisher": { + "properties": { + "affiliation": { + "type": "text" + }, + "email": { + "type": "text" + }, + "name": { + "type": "text" } - }, - "requires" : { - "type" : "text" - }, - "source" : { - "type" : "keyword" - }, - "status" : { - "type" : "keyword" - }, - "structure" : { - "type" : "keyword" - }, - "timeRequired" : { - "type" : "keyword" - }, - "title" : { - "type" : "text" - }, - "type" : { - "type" : "keyword" - }, - "valid" : { - "properties" : { - "end" : { - "type" : "keyword" - }, - "start" : { - "type" : "keyword" - } + } + }, + "requires": { + "type": "text" + }, + "source": { + "type": "keyword" + }, + "status": { + "type": "keyword" + }, + "structure": { + "type": "keyword" + }, + "timeRequired": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "type": { + "type": "keyword" + }, + "valid": { + "properties": { + "end": { + "type": "keyword" + }, + "start": { + "type": "keyword" } - }, - "version" : { - "type" : "keyword" } + }, + "version": { + "type": "keyword" } - }, - "project" : { - "properties" : { - "archived" : { - "type" : "boolean" - }, - "description" : { - "type" : "text" - }, - "forks_count" : { - "type" : "integer" - }, - "last_activity_at" : { - "type" : "date", - "format" : "dateOptionalTime" - }, - "main_group" : { - "type" : "keyword" - }, - "namespace" : { - "type" : "keyword" - }, - "open_issues_count" : { - "type" : "integer" - }, - "project_id" : { - "type" : "long" - }, - "project_name" : { - "type" : "keyword" - }, - "star_count" : { - "type" : "integer" - }, - "sub_group" : { - "type" : "keyword" - }, - "url" : { - "type" : "keyword" - }, - "visibility" : { - "type" : "keyword" - } + } + }, + "project": { + "properties": { + "archived": { + "type": "boolean" + }, + "description": { + "type": "text" + }, + "forks_count": { + "type": "integer" + }, + "last_activity_at": { + "type": "date", + "format": "dateOptionalTime" + }, + "main_group": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "open_issues_count": { + "type": "integer" + }, + "project_id": { + "type": "long" + }, + "project_name": { + "type": "keyword" + }, + "star_count": { + "type": "integer" + }, + "sub_group": { + "type": "keyword" + }, + "url": { + "type": "keyword" + }, + "visibility": { + "type": "keyword" } } } } } - } + } +} diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData1.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/metaData.yaml similarity index 97% rename from src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData1.yaml rename to src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/metaData.yaml index c6fb5218190ea673e5ae740df484949147226e83..19985a15374cae496297f60508116c9a3007f908 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData1.yaml +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/metaData.yaml @@ -1,7 +1,7 @@ metadataVersion: 0.2 type: programming exercise # format (not used here) -identifier: simpleIO +identifier: collection1 structure: atomic # one from atomic, networked, hierarchical, linear version: "1.0" # just a version tag status: final # one fo draft, final, revised, unavailable diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/project.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/project.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dc17595a5deb4c2f48e8d3659ad1270679c0b017 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/1/project.yaml @@ -0,0 +1,13 @@ +project_id: 1 +project_name: es test +namespace: sharing/vienna-universityof-technology/latex +main_group: sharing +sub_group: vienna-universityof-technology +url: https://sharing.codeability-austria.uibk.ac.at/sharing/vienna-universityof-technology/latex +visibility: public +archived: false +star_count: 0 +open_issues_count: 0 +forks_count: 1 +last_activity_at: 2021-02-17T15:13:27.123Z +description: diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/metaData.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/metaData.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9e9594ea717807439049dccee8713c3755c18b50 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/metaData.yaml @@ -0,0 +1,35 @@ +metadataVersion: "0.2" +type: collection +collectionContent: + - src/if-001/if-001.yml + - src/if-002/if-002.yml + - src/if-003/if-003.yml +identifier: javaCourseTUWienTest +structure: hierarchical # one from atomic, networked, hierarchical, linear +version: "1.0" # just a version tag +status: final # one fo draft, final, revised, unavalable +title: Meta Test Data 76 +description: "Dies sind Teile des Einführungskurses an der TU Wien. + Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx + 3. Zeile" +programmingLanguage: + - JAVA +language: [de] +educationLevel: "Anfänger, (to be detailed)" +audience: "Anfaenger" +keyword: [Java, IOTest, latex, testing76] +license: MIT # mandatory +creator: + - {name: "Stefan Podlipnig", affiliation: "TU Wien", email: "stefan.podlipnig@tuwien.ac.at"} +contributor: + - {name: "Daniel Bastta", affiliation: "TU Wien", email: "daniel.bastta@tuwien.ac.at"} + - {name: "Andreas Merckel", affiliation: "TU Wien", email: "andreas.merkel@tuwien.ac.at"} + - {name: "Kerstin Limbeck", affiliation: "TU Wien", email: "kerstin.limbeck@tuwien.ac.at"} +publisher: + - {name: "Andreas Merckel", affiliation: "TU Wien", email: "andreas.merkel@tuwien.ac.at"} + +format: [latex] +deprecated: false +difficulty: simple +requires: [Java14] +image: ./courseIcon.png diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/project.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/project.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dc0b50e606d2afadb1197d09e3a604f90f728369 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/143/project.yaml @@ -0,0 +1,13 @@ +project_id: 143 +project_name: apiTest_76_1613574806194 +namespace: sharing/health-check-tests/apiTest_76_1613574806194 +main_group: sharing +sub_group: health-check-tests +url: https://sharing.codeability-austria.uibk.ac.at/sharing/health-check-tests/apitest_76_1613574806194/ +visibility: public +archived: false +star_count: 0 +open_issues_count: 0 +forks_count: 1 +last_activity_at: 2021-04-08T15:13:27.123Z +description: Just a test project diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData2.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/2/metaData.yaml similarity index 100% rename from src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData2.yaml rename to src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/2/metaData.yaml diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/2/project.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/2/project.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8586745b307ac1c5d6ea10aeae15a4fc9a0717f0 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/2/project.yaml @@ -0,0 +1,13 @@ +project_id: 1 +project_name: latex +namespace: sharing/vienna-universityof-technology/latex +main_group: sharing +sub_group: vienna-universityof-technology +url: https://sharing.codeability-austria.uibk.ac.at/sharing/vienna-universityof-technology/latex +visibility: private +archived: false +star_count: 0 +open_issues_count: 0 +forks_count: 1 +last_activity_at: 2021-02-17T15:13:27.123Z +description: diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/metaData.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/metaData.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ce289b932310da4fdc382e1b3c7d169639ead680 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/metaData.yaml @@ -0,0 +1,22 @@ +metadataVersion: "0.2" +type: "programming exercise" +programmingLanguage: [java] +language: [de] +identifier: artemisOriginalCourseAndTitle +structure: atomic # one from atomic, networked, hierarchical, linear +version: "0.1.6" # just a version tag +title: JUnit Quality Tests Exercise2 (cloned) +format: + - Artemis +description: "Dies ist ein Beispiel, wie Tests die JUnit Test Coverage testen." +status: final # one fo draft, final, revised, unavalable +keyword: ["Example", "JUnit Tests", "JUnit", "Test Coverage Tests"] +license: CC-SA-BY 4.0 +creator: + - {name: "Michael Breu", affiliation: "Universität Innsbruck", email: "admin@localhost"} +publisher: + - {name: "Michael Breu", affiliation: "Universität Innsbruck", email: "michael.breu@uibk.ac.at"} +educationLevel: "Fortgeschrittene" +deprecated: false +difficulty: medium +requires: [Java8, JUnit] diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/project.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/project.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6cede8fc6ee55d0700d8975525de66078c87d3b6 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/project.yaml @@ -0,0 +1,13 @@ +project_id: 272 +project_name: junit-quality-tests-exercise2 +namespace: sharing/university-innsbruck/java/junit-quality-tests-exercise2 +main_group: sharing +sub_group: university-innsbruck +url: https://sharing.codeability-austria.uibk.ac.at/sharing/university-innsbruck/java/junit-quality-tests-exercise2/ +visibility: public +archived: false +star_count: 0 +open_issues_count: 0 +forks_count: 1 +last_activity_at: 2021-04-08T15:13:27.123Z +description: Just a test project diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/solution/src/at/metaData.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/solution/src/at/metaData.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a0d084fd1bebbdef54d48ec786e806d89464558 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/272/solution/src/at/metaData.yaml @@ -0,0 +1,31 @@ +# metadataVersion: 0.2 +type: programming exercise +# format (not used here) +identifier: simpleIO +structure: atomic # one from atomic, networked, hierarchical, linear +version: "1.0" # just a version tag +status: final # one fo draft, final, revised, unavailable +title: Just another sub exercise Demo +description: Not a really good structured example. +programmingLanguage: [JAVA] +language: [de] +educationLevel: "high school" # just for demonstration +"audience": { + "@type": "EducationalAudience", + "educationalRole": "student" + } +timeRequired: 0:05:00 # [hh:mm:ss] +keyword: [Java, IOTest, artemis] +license: CC-SA-BY 4.0 # mandatory +creator: + - {name: "Breu Michael", affiliation: "University of Innsbruck", email: "c703257@uibk.ac.at"} +publisher: + - {name: "Breu Michael", affiliation: "University of Innsbruck", email: "c703257@uibk.ac.at"} +deprecated: false +difficulty: simple +source: + - "cf. cunit" +contributor: + - {name: "Manuel Seywald", affiliation: "University of Klagenfurt", email: "maseywald@edu.aau.at"} +requires: [] # empty, t.b.d. later +image: 'https://sharing-codeability.uibk.ac.at/static/CodeAbility%20Austria-Dateien/Partner_UIBK.png' diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/metaData.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/metaData.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9f3374e95d498b98e073758370e444c7cbd666ab --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/metaData.yaml @@ -0,0 +1,33 @@ +# metadataVersion: 0.2 +type: collection +# format (not used here) +identifier: simpleIO +collectionContent: + "solution/src/at/metaData.yaml" +structure: hierarchical # one from atomic, networked, hierarchical, linear +version: "1.0" # just a version tag +status: final # one fo draft, final, revised, unavailable +title: Simple IO Test +description: This is a programming exercise to demonstrate a simple IO testing framework. +programmingLanguage: [JAVA] +language: [de] +educationLevel: "high school" # just for demonstration +"audience": { + "@type": "EducationalAudience", + "educationalRole": "student" + } +timeRequired: 0:05:00 # [hh:mm:ss] +keyword: [Java, IOTest, artemis] +license: CC-SA-BY 4.0 # mandatory +creator: + - {name: "Breu Michael", affiliation: "University of Innsbruck", email: "c703257@uibk.ac.at"} +publisher: + - {name: "Breu Michael", affiliation: "University of Innsbruck", email: "c703257@uibk.ac.at"} +deprecated: false +difficulty: simple +source: + - "cf. cunit" +contributor: + - {name: "Manuel Seywald", affiliation: "University of Klagenfurt", email: "maseywald@edu.aau.at"} +requires: [] # empty, t.b.d. later +image: 'https://sharing-codeability.uibk.ac.at/static/CodeAbility%20Austria-Dateien/Partner_UIBK.png' diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/project.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/project.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0912955f4f63ed5a4409c28214ce0097b4f7ad32 --- /dev/null +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/project.yaml @@ -0,0 +1,13 @@ +project_id: 272 +project_name: latex +namespace: sharing/vienna-universityof-technology/latex +main_group: sharing +sub_group: vienna-universityof-technology +url: https://sharing.codeability-austria.uibk.ac.at/sharing/vienna-universityof-technology/latex +visibility: private +archived: false +star_count: 0 +open_issues_count: 0 +forks_count: 1 +last_activity_at: 2021-02-17T15:13:27.123Z +description: diff --git a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData3.yaml b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/solution/src/at/metaData.yaml similarity index 90% rename from src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData3.yaml rename to src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/solution/src/at/metaData.yaml index c3086b1db5ce9d8fd5619258dc5802f7dfac4f7d..0b201757d45848ffccc79078e128811734ac1333 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData3.yaml +++ b/src/test/resources/at/ac/uibk/gitsearch/service/testData/metaData/3/solution/src/at/metaData.yaml @@ -1,11 +1,11 @@ -metadataVersion: 0.2 -type: collection +# metadataVersion: 0.2 +type: programming exercise # format (not used here) -identifier: collection1 +identifier: simpleIO structure: atomic # one from atomic, networked, hierarchical, linear version: "1.0" # just a version tag status: final # one fo draft, final, revised, unavailable -title: Simple IO Test +title: Simple IO Test (inside collection) description: This is a programming exercise to demonstrate a simple IO testing framework. programmingLanguage: [JAVA] language: [de] diff --git a/src/test/resources/i18n/messages_de.properties b/src/test/resources/i18n/messages_de.properties index a3c2f82e186821f660f4f3bdd5d451a4b766a475..ad936993214f032d4f5028fbe7a08aa905b8d4dd 100644 --- a/src/test/resources/i18n/messages_de.properties +++ b/src/test/resources/i18n/messages_de.properties @@ -1 +1,5 @@ email.test.title=Aktivierung + +# Info email +email.info.title=Sharing Plattform: E-Mail Update + diff --git a/src/test/resources/i18n/messages_en.properties b/src/test/resources/i18n/messages_en.properties index 73db38e99be55c13abf930cb9592d9a3d575b8ad..fc2c5da9e1279ff0de15585c07cb2fda2fe30f11 100644 --- a/src/test/resources/i18n/messages_en.properties +++ b/src/test/resources/i18n/messages_en.properties @@ -2,3 +2,13 @@ email.test.title=test title # Value used for English locale unit test in MailServiceIT # as this file is loaded instead of real file email.activation.title=gitsearch account activation + +# Info email +email.info.title=Sharing Platform: Update Mail +email.info.greeting=Dear user, +email.info.textIntro=You get this e-mail, because some of your automatic checks was triggered. +email.info.textWatchlist=Some exercises on your watchlist were recently updated: +email.info.noChangesOnWatchlist=There were no changes on your watchlists +email.info.textRegards=Regards, +email.info.textClosing=If you are not interested in getting this e-mail, please log in to the CodeAbility Sharing Platform, and reset your update triggers: + diff --git a/webpack/webpack.dev.js b/webpack/webpack.dev.js index 0fb31af50d43a2789920e39392768ef5823e525b..cb3701fc804b2891d9eebe8d339a2abceecc3574 100644 --- a/webpack/webpack.dev.js +++ b/webpack/webpack.dev.js @@ -20,6 +20,9 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { proxy: [{ context: [ '/api', + '/oauth2Config', + '/oauth2', + '/login', '/services', '/management', '/swagger-resources', diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000000000000000000000000000000000..2822fdff1b9349543c8ee3113c9927951430a401 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,13964 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/architect@0.1002.3": + "integrity" "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==" + "resolved" "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz" + "version" "0.1002.3" + dependencies: + "@angular-devkit/core" "10.2.3" + "rxjs" "6.6.2" + +"@angular-devkit/core@10.0.0": + "integrity" "sha512-IvX9IMaCjDkN9vDVnYcgWbSBinlUUb7jdFhDGeTtK6rGSnjX1GoLvWneVI2hoccS07fPbnfMoYXBoZLwVxiIxw==" + "resolved" "https://registry.npmjs.org/@angular-devkit/core/-/core-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "ajv" "6.12.2" + "fast-json-stable-stringify" "2.1.0" + "magic-string" "0.25.7" + "rxjs" "6.5.5" + "source-map" "0.7.3" + +"@angular-devkit/core@10.2.3": + "integrity" "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==" + "resolved" "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz" + "version" "10.2.3" + dependencies: + "ajv" "6.12.4" + "fast-json-stable-stringify" "2.1.0" + "magic-string" "0.25.7" + "rxjs" "6.6.2" + "source-map" "0.7.3" + +"@angular-devkit/schematics@10.2.3": + "integrity" "sha512-uCNeq5qH4QEiftgOud+EhTVvdriYQVBrYmX4f4BjVHkjnFhm73h30nfAgs6YuStIp8oxSI8jUGE9DAy331xvmA==" + "resolved" "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.2.3.tgz" + "version" "10.2.3" + dependencies: + "@angular-devkit/core" "10.2.3" + "ora" "5.0.0" + "rxjs" "6.6.2" + +"@angular/cli@^10.2.3": + "version" "10.2.3" + dependencies: + "@angular-devkit/architect" "0.1002.3" + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + "@schematics/angular" "10.2.3" + "@schematics/update" "0.1002.3" + "@yarnpkg/lockfile" "1.1.0" + "ansi-colors" "4.1.1" + "debug" "4.1.1" + "ini" "1.3.6" + "inquirer" "7.3.3" + "npm-package-arg" "8.0.1" + "npm-pick-manifest" "6.1.0" + "open" "7.2.0" + "pacote" "9.5.12" + "read-package-tree" "5.3.1" + "rimraf" "3.0.2" + "semver" "7.3.2" + "symbol-observable" "1.2.0" + "universal-analytics" "0.4.23" + "uuid" "8.3.0" + +"@angular/common@^10.0.0", "@angular/common@^10.0.0 || ^11.0.0 || ^12.0.0-0", "@angular/common@^7.2.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@angular/common@^9.0.0", "@angular/common@^9.0.5", "@angular/common@>=7.0.0", "@angular/common@>=9.0.0 <10.0.0", "@angular/common@10.0.0": + "integrity" "sha512-zaLHMRQqjZyoIc15tLGrwg5ugcVlggqATiMlMVNo9ddqxwpZ4qHK2fdAvqQy9FfWKaPGi6NpIBSR31RGV0ircw==" + "resolved" "https://registry.npmjs.org/@angular/common/-/common-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@angular/compiler-cli@>=10.0.0-next.0 < 11", "@angular/compiler-cli@10.0.0": + "integrity" "sha512-KusRkS1NKPrjhj3BXoxRgeejuJVy/ra4dcDV3hpscRmR8FSdim3rs2H+lYK2hZ26ISGsYUvC8cHNaMqP2U3X+g==" + "resolved" "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "canonical-path" "1.0.0" + "chokidar" "^3.0.0" + "convert-source-map" "^1.5.1" + "dependency-graph" "^0.7.2" + "fs-extra" "4.0.2" + "magic-string" "^0.25.0" + "minimist" "^1.2.0" + "reflect-metadata" "^0.1.2" + "semver" "^6.3.0" + "source-map" "^0.6.1" + "sourcemap-codec" "^1.4.8" + "tslib" "^2.0.0" + "yargs" "15.3.0" + +"@angular/compiler@>=2.3.1 <10.0.0 || >9.0.0-beta <10.0.0 || >9.1.0-beta <10.0.0 || >9.2.0-beta <10.0.0", "@angular/compiler@10.0.0": + "integrity" "sha512-meyJKPLLhkgjxF4dvdJq/sw7MI7KvpgYADoFt2K/5dt48ExXRj+kDlyQC6FAwm9mbgSea/A+JpDG8HMPU7AK5Q==" + "resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@angular/core@^10.0.0", "@angular/core@^10.0.0 || ^11.0.0 || ^12.0.0-0", "@angular/core@^10.2.5", "@angular/core@^7.2.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@angular/core@^9.0.0", "@angular/core@^9.0.5", "@angular/core@>=2.0.0", "@angular/core@>=2.3.1 <10.0.0 || >9.0.0-beta <10.0.0 || >9.1.0-beta <10.0.0 || >9.2.0-beta <10.0.0", "@angular/core@>=8.0.0", "@angular/core@>=9.0.0 <10.0.0", "@angular/core@10.0.0": + "integrity" "sha512-krhOKNTj5XE92Rk9ASX5KmgTF72j7qT2PLVxrGEVjuUKjBY2XaK3TV0Kotq9zI3qa9WgeCrP/Njn6jlKQCCAEQ==" + "resolved" "https://registry.npmjs.org/@angular/core/-/core-10.2.5.tgz" + "version" "10.2.5" + dependencies: + "tslib" "^2.0.0" + +"@angular/forms@^10.0.0", "@angular/forms@^7.2.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@angular/forms@>=9.0.0 <10.0.0", "@angular/forms@10.0.0": + "integrity" "sha512-Jaqs6WmF3fcaL1mKmeZt8pcFHkMuFvgLjbgGFqiOKcdz4UdGTcYkI3mE+UqHpqqXGXYTHLusup8A4TqD7s0rxg==" + "resolved" "https://registry.npmjs.org/@angular/forms/-/forms-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@angular/localize@^10.0.0", "@angular/localize@10.0.0": + "integrity" "sha512-UWuuJYVYDwMGKu8wQuyKH2v0Qbb9HW5n/3tIuw5s0O9yDlhyreueWqCYk42u51p8YDQ7FY7ToZhbMq73G7A8tA==" + "resolved" "https://registry.npmjs.org/@angular/localize/-/localize-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "@babel/core" "7.8.3" + "glob" "7.1.2" + "yargs" "15.3.0" + +"@angular/platform-browser-dynamic@>=2.0.0", "@angular/platform-browser-dynamic@10.0.0": + "integrity" "sha512-Ol9dMU/UB8PZ1xQkcILmANC+tA1Y/6YeYc8+MYnZUH7uAMXV6kscg9C5fK9JixSldOOS05AQZAdEty9ESjFNNg==" + "resolved" "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@angular/platform-browser@^10.0.0", "@angular/platform-browser@10.0.0": + "integrity" "sha512-2gp53WjGUrL1uReewU21IZJa4KFpbigCyDYB0j/KwTkIGrdwYCOjD0/04oHYjkpazPe/VIu3aN7Gb3PgUa3X/Q==" + "resolved" "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@angular/router@^10.0.0", "@angular/router@^7.2.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@angular/router@10.0.0": + "integrity" "sha512-rx9e0eOwXypV/oWLrGsug3wx9lPnD6NUU3i20/VG9O1uMHgXfpnP8RJLcUHqmEMBZEYTLMo59fDE5LEgM1sIFg==" + "resolved" "https://registry.npmjs.org/@angular/router/-/router-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "tslib" "^2.0.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4": + "version" "7.10.4" + dependencies: + "browserslist" "^4.12.0" + "invariant" "^2.2.4" + "semver" "^5.5.0" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@7 || ^7.0.0-rc.2", "@babel/core@7.8.3": + "integrity" "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.1" + "json5" "^2.1.0" + "lodash" "^4.17.13" + "resolve" "^1.3.2" + "semver" "^5.4.1" + "source-map" "^0.5.0" + +"@babel/core@^7.8.4": + "version" "7.12.3" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.1" + "json5" "^2.1.2" + "lodash" "^4.17.19" + "resolve" "^1.3.2" + "semver" "^5.4.1" + "source-map" "^0.5.0" + +"@babel/generator@^7.10.4", "@babel/generator@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + "jsesc" "^2.5.1" + "lodash" "^4.17.13" + "source-map" "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + "version" "7.12.5" + dependencies: + "@babel/types" "^7.12.5" + "jsesc" "^2.5.1" + "source-map" "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/compat-data" "^7.10.4" + "browserslist" "^4.12.0" + "invariant" "^2.2.4" + "levenary" "^1.1.1" + "semver" "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@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" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + "regexpu-core" "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.4" + "lodash" "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + "version" "7.12.1" + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-imports@^7.12.1": + "version" "7.12.5" + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + "lodash" "^4.17.13" + +"@babel/helper-module-transforms@^7.12.1": + "version" "7.12.1" + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + "lodash" "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": + "version" "7.10.4" + +"@babel/helper-regex@^7.10.4": + "version" "7.10.4" + dependencies: + "lodash" "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + "version" "7.10.4" + 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-replace-supers@^7.12.1": + "version" "7.12.5" + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-simple-access@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.12.1": + "version" "7.12.1" + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.11.0": + "version" "7.11.0" + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + "version" "7.10.4" + +"@babel/helper-wrap-function@^7.10.4": + "version" "7.10.4" + 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@^7.12.1": + "version" "7.12.5" + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helpers@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.8.3": + "version" "7.10.4" + +"@babel/parser@^7.12.3", "@babel/parser@^7.12.5": + "version" "7.12.5" + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + "version" "7.10.4" + 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" + +"@babel/plugin-proposal-class-properties@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-import-meta@^7.8.3": + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "lodash" "^4.17.13" + +"@babel/plugin-transform-classes@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@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" + "globals" "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + "version" "7.10.4" + 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" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + "version" "7.10.4" + dependencies: + "regenerator-transform" "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + "version" "7.10.4" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.8.4": + "version" "7.10.4" + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.4" + "browserslist" "^4.12.0" + "core-js-compat" "^3.6.2" + "invariant" "^2.2.2" + "levenary" "^1.1.1" + "semver" "^5.5.0" + +"@babel/preset-modules@^0.1.3": + "version" "0.1.3" + 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" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": + "version" "7.10.4" + dependencies: + "regenerator-runtime" "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + "debug" "^4.1.0" + "globals" "^11.1.0" + "lodash" "^4.17.13" + +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + "version" "7.12.5" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" + "debug" "^4.1.0" + "globals" "^11.1.0" + "lodash" "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3": + "version" "7.10.4" + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + "lodash" "^4.17.13" + "to-fast-properties" "^2.0.0" + +"@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5": + "version" "7.12.6" + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + "lodash" "^4.17.19" + "to-fast-properties" "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" + +"@cnakazawa/watch@^1.0.3": + "integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" + +"@fortawesome/angular-fontawesome@^0.6.1", "@fortawesome/angular-fontawesome@0.6.1": + "integrity" "sha512-ARQjtRuT+ZskzJDJKPwuiGO3+7nS0iyNLU/uHVJHfG4LwGJxwVIGldwg1SU957sra0Z0OtWEajHMhiS4vB9LwQ==" + "resolved" "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.6.1.tgz" + "version" "0.6.1" + +"@fortawesome/fontawesome-common-types@^0.2.29", "@fortawesome/fontawesome-common-types@^0.2.35": + "integrity" "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + "resolved" "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz" + "version" "0.2.35" + +"@fortawesome/fontawesome-free@^5.15.3": + "integrity" "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + "resolved" "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz" + "version" "5.15.3" + +"@fortawesome/fontawesome-svg-core@^1.2.21", "@fortawesome/fontawesome-svg-core@^1.2.27", "@fortawesome/fontawesome-svg-core@^1.2.29": + "version" "1.2.29" + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.29" + +"@fortawesome/free-regular-svg-icons@^5.15.3": + "integrity" "sha512-q4/p8Xehy9qiVTdDWHL4Z+o5PCLRChePGZRTXkl+/Z7erDVL8VcZUuqzJjs6gUz6czss4VIPBRdCz6wP37/zMQ==" + "resolved" "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.3.tgz" + "version" "5.15.3" + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.35" + +"@fortawesome/free-solid-svg-icons@^5.10.1", "@fortawesome/free-solid-svg-icons@5.13.1": + "integrity" "sha512-LQH/0L1p4+rqtoSHa9qFYR84hpuRZKqaQ41cfBQx8b68p21zoWSekTAeA54I/2x9VlCHDLFlG74Nmdg4iTPQOg==" + "resolved" "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.1.tgz" + "version" "5.13.1" + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.29" + +"@hapi/address@2.x.x": + "integrity" "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "resolved" "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz" + "version" "2.1.4" + +"@hapi/bourne@1.x.x": + "integrity" "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + "resolved" "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz" + "version" "1.3.2" + +"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x": + "integrity" "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz" + "version" "8.5.1" + +"@hapi/joi@^15.1.0": + "integrity" "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==" + "resolved" "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz" + "version" "15.1.1" + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + "integrity" "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==" + "resolved" "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz" + "version" "3.1.6" + dependencies: + "@hapi/hoek" "^8.3.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + "version" "0.1.2" + +"@jest/console@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "jest-message-util" "^26.1.0" + "jest-util" "^26.1.0" + "slash" "^3.0.0" + +"@jest/core@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/console" "^26.1.0" + "@jest/reporters" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-changed-files" "^26.1.0" + "jest-config" "^26.1.0" + "jest-haste-map" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.1.0" + "jest-resolve-dependencies" "^26.1.0" + "jest-runner" "^26.1.0" + "jest-runtime" "^26.1.0" + "jest-snapshot" "^26.1.0" + "jest-util" "^26.1.0" + "jest-validate" "^26.1.0" + "jest-watcher" "^26.1.0" + "micromatch" "^4.0.2" + "p-each-series" "^2.1.0" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" + +"@jest/environment@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + "jest-mock" "^26.1.0" + +"@jest/fake-timers@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "@sinonjs/fake-timers" "^6.0.1" + "jest-message-util" "^26.1.0" + "jest-mock" "^26.1.0" + "jest-util" "^26.1.0" + +"@jest/globals@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/environment" "^26.1.0" + "@jest/types" "^26.1.0" + "expect" "^26.1.0" + +"@jest/reporters@^26.1.0": + "version" "26.1.0" + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.2" + "graceful-fs" "^4.2.4" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^4.0.3" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.0.2" + "jest-haste-map" "^26.1.0" + "jest-resolve" "^26.1.0" + "jest-util" "^26.1.0" + "jest-worker" "^26.1.0" + "slash" "^3.0.0" + "source-map" "^0.6.0" + "string-length" "^4.0.1" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^4.1.3" + optionalDependencies: + "node-notifier" "^7.0.0" + +"@jest/source-map@^26.1.0": + "version" "26.1.0" + dependencies: + "callsites" "^3.0.0" + "graceful-fs" "^4.2.4" + "source-map" "^0.6.0" + +"@jest/test-result@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/console" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "collect-v8-coverage" "^1.0.0" + +"@jest/test-sequencer@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/test-result" "^26.1.0" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.1.0" + "jest-runner" "^26.1.0" + "jest-runtime" "^26.1.0" + +"@jest/transform@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.1.0" + "babel-plugin-istanbul" "^6.0.0" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.1.0" + "jest-regex-util" "^26.0.0" + "jest-util" "^26.1.0" + "micromatch" "^4.0.2" + "pirates" "^4.0.1" + "slash" "^3.0.0" + "source-map" "^0.6.1" + "write-file-atomic" "^3.0.0" + +"@jest/types@^25.5.0": + "integrity" "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + "chalk" "^3.0.0" + +"@jest/types@^26.1.0": + "version" "26.1.0" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + "chalk" "^4.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + "integrity" "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==" + "resolved" "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "call-me-maybe" "^1.0.1" + "glob-to-regexp" "^0.3.0" + +"@ng-bootstrap/ng-bootstrap@^6.1.0", "@ng-bootstrap/ng-bootstrap@^7.0.0": + "integrity" "sha512-SxUaptGWJmCxM0d2Zy1mx7K7p/YBwGZ69NmmBQVY4BE6p5av0hWrVmv9rzzfBz0rhxU7RPZLor2Jpaoq8Xyl4w==" + "resolved" "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "tslib" "^2.0.0" + +"@ng-select/ng-select@^4.0.4": + "version" "4.0.4" + dependencies: + "tslib" "^1.10.0" + +"@ngqp/core@^1.2.0": + "version" "1.2.0" + dependencies: + "tslib" "^2.0.0" + +"@ngtools/webpack@10.0.0": + "integrity" "sha512-2mnuzkCokn84PrBIiSwUqZImd5uKdsdZcpnuvgABmbxe3bAPxbOgzud/bLxG1/ynLvk/vd/FCNeDcY6HylB8OQ==" + "resolved" "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "@angular-devkit/core" "10.0.0" + "enhanced-resolve" "4.1.1" + "rxjs" "6.5.5" + "webpack-sources" "1.4.3" + +"@ngx-translate/core@^12.1.2", "@ngx-translate/core@>=11.0.0", "@ngx-translate/core@12.1.2": + "integrity" "sha512-ZudJsqIxTKlLmPoqK8gJY3UpMGujR0Xm7HfXL6AR79yGRS23QqpjAhMfx4v5qUCcHMmQ9/78bW8QJLfp31c7vQ==" + "resolved" "https://registry.npmjs.org/@ngx-translate/core/-/core-12.1.2.tgz" + "version" "12.1.2" + +"@ngx-translate/http-loader@^5.0.0", "@ngx-translate/http-loader@5.0.0": + "integrity" "sha512-8+aV7N52qed+6t4LIu4Yru/PkeBX4TR2ioXGwXzQE5syqSLTj/8TgKQIi3i2Z61ZhPxQG1qrGbapUoGQzUDVeg==" + "resolved" "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-5.0.0.tgz" + "version" "5.0.0" + +"@nodelib/fs.scandir@2.1.3": + "version" "2.1.3" + dependencies: + "@nodelib/fs.stat" "2.0.3" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^1.1.2": + "integrity" "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" + "version" "1.1.3" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.3": + "version" "2.0.3" + +"@nodelib/fs.walk@^1.2.3": + "version" "1.2.4" + dependencies: + "@nodelib/fs.scandir" "2.1.3" + "fastq" "^1.6.0" + +"@npmcli/move-file@^1.0.1": + "version" "1.0.1" + dependencies: + "mkdirp" "^1.0.4" + +"@openapitools/openapi-generator-cli@1.0.13-4.3.1": + "integrity" "sha512-hUbSHCXak8vujMpTgH5dDACq0mynya37xgPFD3JbmnwRrPrgrZ4mr3+w7QZJ5aLMCIfb2j3s96d1sWaOZYZzxA==" + "resolved" "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.13-4.3.1.tgz" + "version" "1.0.13-4.3.1" + +"@rollup/plugin-node-resolve@^7.1.1": + "integrity" "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==" + "resolved" "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + "builtin-modules" "^3.1.0" + "is-module" "^1.0.0" + "resolve" "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + "version" "2.3.3" + dependencies: + "@rollup/pluginutils" "^3.0.8" + "magic-string" "^0.25.5" + +"@rollup/pluginutils@^3.0.8": + "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==" + "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "@types/estree" "0.0.39" + "estree-walker" "^1.0.1" + "picomatch" "^2.2.2" + +"@samverschueren/stream-to-observable@^0.3.0": + "version" "0.3.0" + dependencies: + "any-observable" "^0.3.0" + +"@scarf/scarf@0.1.5": + "integrity" "sha512-Fx6atDc7JM1r0WkPCDhNetVZNp+DO21q/HGlomAKBG+k8vb1B8fg8Yige4oCf1P9OWTZWm5tM5i3jlXhrSbNOg==" + "resolved" "https://registry.npmjs.org/@scarf/scarf/-/scarf-0.1.5.tgz" + "version" "0.1.5" + +"@schematics/angular@10.2.3": + "integrity" "sha512-xcnfH5XMmGcs33VHm2cu0+4g3rkfSD+qpiKFjfg7KGC4lLoOKSED4ZnjzIYwcQ6QN4gTpAvlZKxI8zO7NkKv0A==" + "resolved" "https://registry.npmjs.org/@schematics/angular/-/angular-10.2.3.tgz" + "version" "10.2.3" + dependencies: + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + "jsonc-parser" "2.3.0" + +"@schematics/update@0.1002.3": + "integrity" "sha512-UnuMgRQtAOp/Pk9rSYW12medajXe9s5mW4a6foixC/B2UCFFlIAVbFBTiFpr69xbalfLlFcFx1MD+8/8njWtbQ==" + "resolved" "https://registry.npmjs.org/@schematics/update/-/update-0.1002.3.tgz" + "version" "0.1002.3" + dependencies: + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + "@yarnpkg/lockfile" "1.1.0" + "ini" "1.3.6" + "npm-package-arg" "^8.0.0" + "pacote" "9.5.12" + "semver" "7.3.2" + "semver-intersect" "1.4.0" + +"@sinonjs/commons@^1.7.0": + "version" "1.8.0" + dependencies: + "type-detect" "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + "integrity" "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + "version" "1.4.1" + dependencies: + "ejs" "^2.6.1" + "magic-string" "^0.25.0" + +"@types/anymatch@*": + "version" "1.3.1" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + "version" "7.1.9" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + "version" "7.6.1" + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + "version" "7.0.2" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + "version" "7.0.12" + dependencies: + "@babel/types" "^7.3.0" + +"@types/chai-string@1.4.2": + "integrity" "sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q==" + "resolved" "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@4.2.11": + "integrity" "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz" + "version" "4.2.11" + +"@types/color-name@^1.1.1": + "version" "1.1.1" + +"@types/concat-stream@^1.6.0": + "integrity" "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=" + "resolved" "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "@types/node" "*" + +"@types/eslint-visitor-keys@^1.0.0": + "integrity" "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + "resolved" "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz" + "version" "1.0.0" + +"@types/estree@*", "@types/estree@0.0.39": + "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + "version" "0.0.39" + +"@types/form-data@0.0.33": + "integrity" "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=" + "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + "version" "7.1.2" + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + "version" "4.1.3" + dependencies: + "@types/node" "*" + +"@types/html-minifier-terser@^5.0.0": + "version" "5.1.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz" + "version" "2.0.3" + +"@types/istanbul-lib-report@*": + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + "integrity" "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@26.0.3": + "integrity" "sha512-v89ga1clpVL/Y1+YI0eIu1VMW+KU7Xl8PhylVtDKVWaSUHBHYPLXMQGBdrpHewaKoTvlXkksbYqPgz8b4cmRZg==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-26.0.3.tgz" + "version" "26.0.3" + dependencies: + "jest-diff" "^25.2.1" + "pretty-format" "^25.2.1" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": + "version" "7.0.5" + +"@types/lodash@^4.14.170": + "version" "4.14.170" + +"@types/marked@^1.1.0": + "integrity" "sha512-wLfw1hnuuDYrFz97IzJja0pdVsC0oedtS4QsKH1/inyW9qkLQbXgMUqEQT0MVtUBx3twjWeInUfjQbhBVLECXw==" + "resolved" "https://registry.npmjs.org/@types/marked/-/marked-1.2.2.tgz" + "version" "1.2.2" + +"@types/minimatch@*", "@types/minimatch@^3.0.3": + "version" "3.0.3" + +"@types/minimist@^1.2.0": + "integrity" "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" + "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" + "version" "1.2.1" + +"@types/mocha@7.0.2": + "integrity" "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==" + "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz" + "version" "7.0.2" + +"@types/node@*", "@types/node@^13.13.52": + "version" "13.13.52" + +"@types/node@^10.0.3": + "version" "10.17.44" + +"@types/node@^8.0.0": + "integrity" "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + "version" "8.10.66" + +"@types/normalize-package-data@^2.4.0": + "integrity" "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" + "version" "2.4.0" + +"@types/parse-json@^4.0.0": + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + +"@types/prettier@^2.0.0": + "version" "2.0.1" + +"@types/prismjs@^1.16.5": + "version" "1.16.5" + +"@types/q@^0.0.32": + "integrity" "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=" + "resolved" "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz" + "version" "0.0.32" + +"@types/q@^1.5.1": + "integrity" "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "resolved" "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz" + "version" "1.5.4" + +"@types/qs@^6.2.31": + "version" "6.9.5" + +"@types/resolve@0.0.8": + "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" + "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" + "version" "0.0.8" + dependencies: + "@types/node" "*" + +"@types/selenium-webdriver@^3.0.0": + "integrity" "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==" + "resolved" "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz" + "version" "3.0.17" + +"@types/selenium-webdriver@4.0.9": + "integrity" "sha512-HopIwBE7GUXsscmt/J0DhnFXLSmO04AfxT6b8HAprknwka7pqEWquWDMXxCjd+NUHK9MkCe1SDKKsMiNmCItbQ==" + "resolved" "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.9.tgz" + "version" "4.0.9" + +"@types/source-list-map@*": + "integrity" "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + "resolved" "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz" + "version" "0.1.2" + +"@types/stack-utils@^1.0.1": + "version" "1.0.1" + +"@types/tapable@*", "@types/tapable@^1.0.5": + "version" "1.0.6" + +"@types/uglify-js@*": + "version" "3.9.2" + dependencies: + "source-map" "^0.6.1" + +"@types/webpack-sources@*": + "version" "1.4.0" + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + "source-map" "^0.7.3" + +"@types/webpack@^4.41.8": + "version" "4.41.18" + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + "source-map" "^0.6.0" + +"@types/yargs-parser@*": + "version" "15.0.0" + +"@types/yargs@^15.0.0": + "version" "15.0.5" + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin-tslint@2.30.0": + "integrity" "sha512-phARGRY1SyAkG9uVhF7o0yjK1eqmGYCwM7JpNkOo/50d68ZG0V/P9VyYMSKAj+IbRlZ/k2rKFibKZvfLJPcFGw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-2.30.0.tgz" + "version" "2.30.0" + dependencies: + "@typescript-eslint/experimental-utils" "2.30.0" + "lodash" "^4.17.15" + +"@typescript-eslint/eslint-plugin@^2.0.0", "@typescript-eslint/eslint-plugin@2.30.0": + "integrity" "sha512-PGejii0qIZ9Q40RB2jIHyUpRWs1GJuHP1pkoCiaeicfwO9z7Fx03NQzupuyzAmv+q9/gFNHu7lo1ByMXe8PNyg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.30.0.tgz" + "version" "2.30.0" + dependencies: + "@typescript-eslint/experimental-utils" "2.30.0" + "functional-red-black-tree" "^1.0.1" + "regexpp" "^3.0.0" + "tsutils" "^3.17.1" + +"@typescript-eslint/experimental-utils@2.30.0": + "integrity" "sha512-L3/tS9t+hAHksy8xuorhOzhdefN0ERPDWmR9CclsIGOUqGKy6tqc/P+SoXeJRye5gazkuPO0cK9MQRnolykzkA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.30.0.tgz" + "version" "2.30.0" + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.30.0" + "eslint-scope" "^5.0.0" + "eslint-utils" "^2.0.0" + +"@typescript-eslint/parser@^2.0.0", "@typescript-eslint/parser@2.30.0": + "integrity" "sha512-9kDOxzp0K85UnpmPJqUzdWaCNorYYgk1yZmf4IKzpeTlSAclnFsrLjfwD9mQExctLoLoGAUXq1co+fbr+3HeFw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.30.0.tgz" + "version" "2.30.0" + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.30.0" + "@typescript-eslint/typescript-estree" "2.30.0" + "eslint-visitor-keys" "^1.1.0" + +"@typescript-eslint/typescript-estree@2.30.0": + "integrity" "sha512-nI5WOechrA0qAhnr+DzqwmqHsx7Ulr/+0H7bWCcClDhhWkSyZR5BmTvnBEyONwJCTWHfc5PAQExX24VD26IAVw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.30.0.tgz" + "version" "2.30.0" + dependencies: + "debug" "^4.1.1" + "eslint-visitor-keys" "^1.1.0" + "glob" "^7.1.6" + "is-glob" "^4.0.1" + "lodash" "^4.17.15" + "semver" "^6.3.0" + "tsutils" "^3.17.1" + +"@ungap/promise-all-settled@1.1.2": + "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + "version" "1.1.2" + +"@webassemblyjs/ast@1.9.0": + "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + "integrity" "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-api-error@1.9.0": + "integrity" "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-buffer@1.9.0": + "integrity" "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-code-frame@1.9.0": + "integrity" "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + "integrity" "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-module-context@1.9.0": + "integrity" "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + "integrity" "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-wasm-section@1.9.0": + "integrity" "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + "integrity" "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + "integrity" "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + "integrity" "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/wasm-edit@1.9.0": + "integrity" "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + "integrity" "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + "integrity" "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + "integrity" "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + "integrity" "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + "integrity" "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"@yarnpkg/lockfile@1.1.0": + "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + "version" "1.1.0" + +"abab@^2.0.3": + "version" "2.0.3" + +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.7": + "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + "version" "1.3.7" + dependencies: + "mime-types" "~2.1.24" + "negotiator" "0.6.2" + +"acorn-globals@^6.0.0": + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==" + "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "acorn" "^7.1.1" + "acorn-walk" "^7.1.1" + +"acorn-jsx@^5.2.0": + "version" "5.2.0" + +"acorn-walk@^7.1.1": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn@^6.0.0 || ^7.0.0", "acorn@^7.1.0", "acorn@^7.1.1": + "version" "7.3.1" + +"acorn@^6.4.1": + "version" "6.4.1" + +"adm-zip@^0.4.9": + "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + "version" "0.4.16" + +"after@0.8.2": + "integrity" "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "resolved" "https://registry.npmjs.org/after/-/after-0.8.2.tgz" + "version" "0.8.2" + +"agent-base@^4.3.0", "agent-base@4": + "integrity" "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "es6-promisify" "^5.0.0" + +"agent-base@~4.2.1": + "integrity" "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "es6-promisify" "^5.0.0" + +"agentkeepalive@^3.4.1": + "integrity" "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz" + "version" "3.5.2" + dependencies: + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "version" "3.0.1" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-errors@^1.0.0": + "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + "version" "1.0.1" + +"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1": + "version" "3.5.0" + +"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.2", "ajv@^6.5.5", "ajv@^6.9.1", "ajv@>=5.0.0", "ajv@6.12.2": + "integrity" "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz" + "version" "6.12.2" + 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" + +"ajv@6.12.4": + "integrity" "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz" + "version" "6.12.4" + 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" + +"alphanum-sort@^1.0.0": + "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + "resolved" "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" + "version" "1.0.2" + +"angular-tag-cloud-module@^5.3.0": + "integrity" "sha512-tzaNISF+XgaQPf6zI+WMQKbqQNdQuKPsyUnY39iovxn5htTXj5R6wnejla4iSf9glDBEEkdXozOjIWYkjSxAtQ==" + "resolved" "https://registry.npmjs.org/angular-tag-cloud-module/-/angular-tag-cloud-module-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "tslib" "^2.0.0" + +"ansi-colors@^1.0.1": + "integrity" "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ansi-wrap" "^0.1.0" + +"ansi-colors@^3.0.0": + "integrity" "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" + "version" "3.2.4" + +"ansi-colors@4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-escapes@^1.1.0": + "integrity" "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz" + "version" "1.4.0" + +"ansi-escapes@^3.0.0": + "integrity" "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" + "version" "3.2.0" + +"ansi-escapes@^3.2.0": + "integrity" "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" + "version" "3.2.0" + +"ansi-escapes@^4.2.1": + "version" "4.3.1" + dependencies: + "type-fest" "^0.11.0" + +"ansi-font@0.0.2": + "integrity" "sha1-iQMBvVhBRi/TnAt3Ca/R9SUUMzE=" + "resolved" "https://registry.npmjs.org/ansi-font/-/ansi-font-0.0.2.tgz" + "version" "0.0.2" + +"ansi-html@0.0.7": + "integrity" "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + "resolved" "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz" + "version" "0.0.7" + +"ansi-regex@^2.0.0": + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^3.0.0": + "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + "version" "3.0.0" + +"ansi-regex@^4.1.0": + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + "version" "4.1.0" + +"ansi-regex@^5.0.0": + "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + "version" "5.0.0" + +"ansi-styles@^2.2.1": + "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + "version" "2.2.1" + +"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0": + "version" "4.2.1" + dependencies: + "@types/color-name" "^1.1.1" + "color-convert" "^2.0.1" + +"ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-wrap@^0.1.0": + "integrity" "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + "resolved" "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + "version" "0.1.0" + +"ansi@^0.3.0", "ansi@~0.3.1": + "integrity" "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + "resolved" "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" + "version" "0.3.1" + +"any-observable@^0.3.0": + "integrity" "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" + "resolved" "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz" + "version" "0.3.0" + +"anymatch@^2.0.0": + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "micromatch" "^3.1.4" + "normalize-path" "^2.1.1" + +"anymatch@^3.0.3", "anymatch@~3.1.1": + "version" "3.1.1" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"app-root-path@^2.2.1": + "integrity" "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==" + "resolved" "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz" + "version" "2.2.1" + +"aproba@^1.1.1": + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + "version" "1.2.0" + +"are-we-there-yet@~1.1.2": + "integrity" "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"aria-query@^3.0.0": + "integrity" "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=" + "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ast-types-flow" "0.0.7" + "commander" "^2.11.0" + +"arr-diff@^4.0.0": + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + "version" "4.0.0" + +"arr-flatten@^1.1.0": + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + "version" "1.1.0" + +"arr-union@^3.1.0": + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + "version" "3.1.0" + +"array-differ@^3.0.0": + "integrity" "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + "resolved" "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + "version" "3.0.0" + +"array-flatten@^2.1.0": + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + "version" "2.1.2" + +"array-flatten@1.1.1": + "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-union@^1.0.1": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-union@^1.0.2": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-uniq@^1.0.1": + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"array-unique@^0.3.2": + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + "version" "0.3.2" + +"arraybuffer.slice@~0.0.7": + "integrity" "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + "resolved" "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz" + "version" "0.0.7" + +"arrify@^1.0.0": + "integrity" "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"arrify@^1.0.1": + "integrity" "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"arrify@^2.0.1": + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + "version" "2.0.1" + +"asap@^2.0.0", "asap@~2.0.6": + "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" + +"asn1.js@^4.0.0": + "version" "4.10.1" + dependencies: + "bn.js" "^4.0.0" + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + +"asn1@~0.2.3": + "integrity" "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"assert@^1.1.1": + "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==" + "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "object-assign" "^4.1.1" + "util" "0.10.3" + +"assertion-error@^1.1.0": + "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "version" "1.1.0" + +"assign-symbols@^1.0.0": + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + "version" "1.0.0" + +"ast-types-flow@0.0.7": + "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + "resolved" "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + "version" "0.0.7" + +"astral-regex@^1.0.0": + "integrity" "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" + "version" "1.0.0" + +"async-each-series@0.1.1": + "integrity" "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=" + "resolved" "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz" + "version" "0.1.1" + +"async-each@^1.0.1": + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + "version" "1.0.3" + +"async-limiter@~1.0.0": + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + "version" "1.0.1" + +"async@^2.6.1": + "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==" + "resolved" "https://registry.npmjs.org/async/-/async-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "lodash" "^4.17.14" + +"async@^2.6.2": + "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==" + "resolved" "https://registry.npmjs.org/async/-/async-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "lodash" "^4.17.14" + +"async@0.9.x": + "integrity" "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + "resolved" "https://registry.npmjs.org/async/-/async-0.9.2.tgz" + "version" "0.9.2" + +"async@1.5.2": + "integrity" "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "version" "1.5.2" + +"asynckit@^0.4.0": + "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"atob@^2.1.2": + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + "version" "2.1.2" + +"autoprefixer@9.8.4": + "integrity" "sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz" + "version" "9.8.4" + dependencies: + "browserslist" "^4.12.0" + "caniuse-lite" "^1.0.30001087" + "colorette" "^1.2.0" + "normalize-range" "^0.1.2" + "num2fraction" "^1.2.2" + "postcss" "^7.0.32" + "postcss-value-parser" "^4.1.0" + +"aws-sdk@2.706.0": + "integrity" "sha512-7GT+yrB5Wb/zOReRdv/Pzkb2Qt+hz6B/8FGMVaoysX3NryHvQUdz7EQWi5yhg9CxOjKxdw5lFwYSs69YlSp1KA==" + "resolved" "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.706.0.tgz" + "version" "2.706.0" + dependencies: + "buffer" "4.9.2" + "events" "1.1.1" + "ieee754" "1.1.13" + "jmespath" "0.15.0" + "querystring" "0.2.0" + "sax" "1.2.1" + "url" "0.10.3" + "uuid" "3.3.2" + "xml2js" "0.4.19" + +"aws-sign2@~0.7.0": + "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + "version" "0.7.0" + +"aws4@^1.8.0": + "version" "1.10.0" + +"axios@^0.21.1", "axios@0.21.1": + "integrity" "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz" + "version" "0.21.1" + dependencies: + "follow-redirects" "^1.10.0" + +"axios@0.19.2": + "integrity" "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz" + "version" "0.19.2" + dependencies: + "follow-redirects" "1.5.10" + +"axobject-query@2.0.2": + "integrity" "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==" + "resolved" "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "ast-types-flow" "0.0.7" + +"babel-extract-comments@^1.0.0": + "integrity" "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==" + "resolved" "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "babylon" "^6.18.0" + +"babel-jest@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/babel__core" "^7.1.7" + "babel-plugin-istanbul" "^6.0.0" + "babel-preset-jest" "^26.1.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "slash" "^3.0.0" + +"babel-plugin-dynamic-import-node@^2.3.3": + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "object.assign" "^4.1.0" + +"babel-plugin-istanbul@^6.0.0": + "integrity" "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-instrument" "^4.0.0" + "test-exclude" "^6.0.0" + +"babel-plugin-jest-hoist@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +"babel-plugin-syntax-object-rest-spread@^6.8.0": + "integrity" "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + "resolved" "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz" + "version" "6.13.0" + +"babel-plugin-transform-object-rest-spread@^6.26.0": + "integrity" "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=" + "resolved" "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz" + "version" "6.26.0" + dependencies: + "babel-plugin-syntax-object-rest-spread" "^6.8.0" + "babel-runtime" "^6.26.0" + +"babel-preset-current-node-syntax@^0.1.2": + "version" "0.1.3" + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"babel-preset-jest@^26.1.0": + "version" "26.1.0" + dependencies: + "babel-plugin-jest-hoist" "^26.1.0" + "babel-preset-current-node-syntax" "^0.1.2" + +"babel-runtime@^6.26.0": + "integrity" "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "resolved" "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" + "version" "6.26.0" + dependencies: + "core-js" "^2.4.0" + "regenerator-runtime" "^0.11.0" + +"babylon@^6.18.0": + "integrity" "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "resolved" "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" + "version" "6.18.0" + +"backo2@1.0.2": + "integrity" "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + "resolved" "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + "version" "1.0.2" + +"balanced-match@^1.0.0": + "version" "1.0.0" + +"base@^0.11.1": + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" + "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + "version" "0.11.2" + dependencies: + "cache-base" "^1.0.1" + "class-utils" "^0.3.5" + "component-emitter" "^1.2.1" + "define-property" "^1.0.0" + "isobject" "^3.0.1" + "mixin-deep" "^1.2.0" + "pascalcase" "^0.1.1" + +"base64-arraybuffer@0.1.4": + "integrity" "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + "resolved" "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz" + "version" "0.1.4" + +"base64-js@^1.0.2": + "version" "1.3.1" + +"base64id@2.0.0": + "integrity" "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + "resolved" "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + "version" "2.0.0" + +"batch@0.6.1": + "integrity" "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "resolved" "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + "version" "0.6.1" + +"bcrypt-pbkdf@^1.0.0": + "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"bfj@^6.1.1": + "integrity" "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==" + "resolved" "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz" + "version" "6.1.2" + dependencies: + "bluebird" "^3.5.5" + "check-types" "^8.0.3" + "hoopy" "^0.1.4" + "tryer" "^1.0.1" + +"big.js@^5.2.2": + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + "version" "5.2.2" + +"binary-extensions@^1.0.0": + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + "version" "1.13.1" + +"binary-extensions@^2.0.0": + "version" "2.1.0" + +"binaryextensions@^2.1.2": + "integrity" "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==" + "resolved" "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz" + "version" "2.3.0" + +"bindings@^1.5.0": + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" + "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "file-uri-to-path" "1.0.0" + +"blob@0.0.5": + "integrity" "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + "resolved" "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz" + "version" "0.0.5" + +"blocking-proxy@^1.0.0": + "integrity" "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==" + "resolved" "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"bluebird@^3.5.1", "bluebird@^3.5.3", "bluebird@^3.5.5": + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + "version" "3.7.2" + +"bn.js@^4.0.0": + "version" "4.11.9" + +"bn.js@^4.1.0": + "version" "4.11.9" + +"bn.js@^4.11.9": + "version" "4.11.9" + +"bn.js@^5.1.1": + "version" "5.1.2" + +"body-parser@1.19.0": + "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" + "version" "1.19.0" + dependencies: + "bytes" "3.1.0" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "~1.1.2" + "http-errors" "1.7.2" + "iconv-lite" "0.4.24" + "on-finished" "~2.3.0" + "qs" "6.7.0" + "raw-body" "2.4.0" + "type-is" "~1.6.17" + +"bonjour@^3.5.0": + "integrity" "sha1-jokKGD2O6aI5OzhExpGkK897yfU=" + "resolved" "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "array-flatten" "^2.1.0" + "deep-equal" "^1.0.1" + "dns-equal" "^1.0.0" + "dns-txt" "^2.0.2" + "multicast-dns" "^6.0.1" + "multicast-dns-service-types" "^1.1.0" + +"boolbase@^1.0.0", "boolbase@~1.0.0": + "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + "version" "1.0.0" + +"bootstrap@^4.6.0": + "version" "4.6.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^2.3.1": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "arr-flatten" "^1.1.0" + "array-unique" "^0.3.2" + "extend-shallow" "^2.0.1" + "fill-range" "^4.0.0" + "isobject" "^3.0.1" + "repeat-element" "^1.1.2" + "snapdragon" "^0.8.1" + "snapdragon-node" "^2.0.1" + "split-string" "^3.0.2" + "to-regex" "^3.0.1" + +"braces@^2.3.2": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "arr-flatten" "^1.1.0" + "array-unique" "^0.3.2" + "extend-shallow" "^2.0.1" + "fill-range" "^4.0.0" + "isobject" "^3.0.1" + "repeat-element" "^1.1.2" + "snapdragon" "^0.8.1" + "snapdragon-node" "^2.0.1" + "split-string" "^3.0.2" + "to-regex" "^3.0.1" + +"braces@^3.0.1", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"brorand@^1.0.1", "brorand@^1.1.0": + "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + "version" "1.1.0" + +"browser-process-hrtime@^1.0.0": + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + "version" "1.0.0" + +"browser-stdout@1.3.1": + "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + "version" "1.3.1" + +"browser-sync-client@^2.26.14": + "integrity" "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==" + "resolved" "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz" + "version" "2.26.14" + dependencies: + "etag" "1.8.1" + "fresh" "0.5.2" + "mitt" "^1.1.3" + "rxjs" "^5.5.6" + +"browser-sync-ui@^2.26.14": + "integrity" "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==" + "resolved" "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz" + "version" "2.26.14" + dependencies: + "async-each-series" "0.1.1" + "connect-history-api-fallback" "^1" + "immutable" "^3" + "server-destroy" "1.0.1" + "socket.io-client" "^2.4.0" + "stream-throttle" "^0.1.3" + +"browser-sync-webpack-plugin@2.2.2": + "integrity" "sha512-x92kl8LdBi4dp6YVXYqrSoDkOCOLCeBOrYSY0h9Sk1VcCDSoZC1Vc62eae6TfC2ljN4/L+aYlkzE46kirHzbgA==" + "resolved" "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "lodash" "^4" + +"browser-sync@^2", "browser-sync@^2.26.13": + "integrity" "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==" + "resolved" "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz" + "version" "2.26.14" + dependencies: + "browser-sync-client" "^2.26.14" + "browser-sync-ui" "^2.26.14" + "bs-recipes" "1.3.4" + "bs-snippet-injector" "^2.0.1" + "chokidar" "^3.5.1" + "connect" "3.6.6" + "connect-history-api-fallback" "^1" + "dev-ip" "^1.0.1" + "easy-extender" "^2.3.4" + "eazy-logger" "3.1.0" + "etag" "^1.8.1" + "fresh" "^0.5.2" + "fs-extra" "3.0.1" + "http-proxy" "^1.18.1" + "immutable" "^3" + "localtunnel" "^2.0.1" + "micromatch" "^4.0.2" + "opn" "5.3.0" + "portscanner" "2.1.1" + "qs" "6.2.3" + "raw-body" "^2.3.2" + "resp-modifier" "6.0.2" + "rx" "4.1.0" + "send" "0.16.2" + "serve-index" "1.9.1" + "serve-static" "1.13.2" + "server-destroy" "1.0.1" + "socket.io" "2.4.0" + "ua-parser-js" "^0.7.18" + "yargs" "^15.4.1" + +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" + "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "buffer-xor" "^1.0.3" + "cipher-base" "^1.0.0" + "create-hash" "^1.1.0" + "evp_bytestokey" "^1.0.3" + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"browserify-cipher@^1.0.0": + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" + "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "browserify-aes" "^1.0.4" + "browserify-des" "^1.0.0" + "evp_bytestokey" "^1.0.0" + +"browserify-des@^1.0.0": + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" + "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "cipher-base" "^1.0.1" + "des.js" "^1.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": + "version" "4.0.1" + dependencies: + "bn.js" "^4.1.0" + "randombytes" "^2.0.1" + +"browserify-sign@^4.0.0": + "version" "4.2.0" + dependencies: + "bn.js" "^5.1.1" + "browserify-rsa" "^4.0.1" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "elliptic" "^6.5.2" + "inherits" "^2.0.4" + "parse-asn1" "^5.1.5" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"browserify-zlib@^0.2.0": + "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" + "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "pako" "~1.0.5" + +"browserslist@^4.0.0", "browserslist@^4.12.0", "browserslist@^4.8.5": + "integrity" "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" + "version" "4.16.6" + dependencies: + "caniuse-lite" "^1.0.30001219" + "colorette" "^1.2.2" + "electron-to-chromium" "^1.3.723" + "escalade" "^3.1.1" + "node-releases" "^1.1.71" + +"browserstack@^1.5.1": + "version" "1.6.0" + dependencies: + "https-proxy-agent" "^2.2.1" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" + +"bs-recipes@1.3.4": + "integrity" "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=" + "resolved" "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz" + "version" "1.3.4" + +"bs-snippet-injector@^2.0.1": + "integrity" "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=" + "resolved" "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz" + "version" "2.0.1" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-from@^1.0.0", "buffer-from@1.x": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + +"buffer-indexof@^1.0.0": + "integrity" "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "resolved" "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" + "version" "1.1.1" + +"buffer-xor@^1.0.3": + "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + "version" "1.0.3" + +"buffer@^4.3.0", "buffer@4.9.2": + "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + "version" "4.9.2" + dependencies: + "base64-js" "^1.0.2" + "ieee754" "^1.1.4" + "isarray" "^1.0.0" + +"builtin-modules@^1.1.1": + "integrity" "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "version" "1.1.1" + +"builtin-modules@^3.1.0": + "version" "3.1.0" + +"builtin-status-codes@^3.0.0": + "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + "version" "3.0.0" + +"builtins@^1.0.3": + "integrity" "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + "version" "1.0.3" + +"bytes@3.0.0": + "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + "version" "3.0.0" + +"bytes@3.1.0": + "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + "version" "3.1.0" + +"cacache@^12.0.0", "cacache@^12.0.2": + "integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" + "version" "12.0.4" + dependencies: + "bluebird" "^3.5.5" + "chownr" "^1.1.1" + "figgy-pudding" "^3.5.1" + "glob" "^7.1.4" + "graceful-fs" "^4.1.15" + "infer-owner" "^1.0.3" + "lru-cache" "^5.1.1" + "mississippi" "^3.0.0" + "mkdirp" "^0.5.1" + "move-concurrently" "^1.0.1" + "promise-inflight" "^1.0.1" + "rimraf" "^2.6.3" + "ssri" "^6.0.1" + "unique-filename" "^1.1.1" + "y18n" "^4.0.0" + +"cacache@^15.0.4": + "version" "15.0.4" + dependencies: + "@npmcli/move-file" "^1.0.1" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "glob" "^7.1.4" + "infer-owner" "^1.0.4" + "lru-cache" "^5.1.1" + "minipass" "^3.1.1" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.2" + "mkdirp" "^1.0.3" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^8.0.0" + "tar" "^6.0.2" + "unique-filename" "^1.1.1" + +"cache-base@^1.0.1": + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" + "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "collection-visit" "^1.0.0" + "component-emitter" "^1.2.1" + "get-value" "^2.0.6" + "has-value" "^1.0.0" + "isobject" "^3.0.1" + "set-value" "^2.0.0" + "to-object-path" "^0.3.0" + "union-value" "^1.0.0" + "unset-value" "^1.0.0" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"call-me-maybe@^1.0.1": + "integrity" "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "resolved" "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz" + "version" "1.0.1" + +"caller-callsite@^2.0.0": + "integrity" "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=" + "resolved" "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "callsites" "^2.0.0" + +"caller-path@^2.0.0": + "integrity" "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=" + "resolved" "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "caller-callsite" "^2.0.0" + +"callsites@^2.0.0": + "integrity" "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" + "version" "2.0.0" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camel-case@^4.1.1": + "version" "4.1.1" + dependencies: + "pascal-case" "^3.1.1" + "tslib" "^1.10.0" + +"camelcase-keys@^6.1.1": + "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" + "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + "version" "6.2.2" + dependencies: + "camelcase" "^5.3.1" + "map-obj" "^4.0.0" + "quick-lru" "^4.0.1" + +"camelcase@^5.0.0", "camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.0.0": + "version" "6.0.0" + +"caniuse-api@^3.0.0": + "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" + "resolved" "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "browserslist" "^4.0.0" + "caniuse-lite" "^1.0.0" + "lodash.memoize" "^4.1.2" + "lodash.uniq" "^4.5.0" + +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001087", "caniuse-lite@^1.0.30001219": + "version" "1.0.30001239" + +"canonical-path@1.0.0": + "integrity" "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==" + "resolved" "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz" + "version" "1.0.0" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"capture-stack-trace@^1.0.0": + "integrity" "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + "resolved" "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" + "version" "1.0.1" + +"caseless@^0.12.0", "caseless@~0.12.0": + "integrity" "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "version" "0.12.0" + +"chai-as-promised@7.1.1": + "integrity" "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==" + "resolved" "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "check-error" "^1.0.2" + +"chai-string@1.5.0": + "integrity" "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" + "resolved" "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" + "version" "1.5.0" + +"chai@^4.1.2", "chai@>= 2.1.2 < 5", "chai@4.2.0": + "integrity" "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "assertion-error" "^1.1.0" + "check-error" "^1.0.2" + "deep-eql" "^3.0.1" + "get-func-name" "^2.0.0" + "pathval" "^1.1.0" + "type-detect" "^4.0.5" + +"chalk@^1.0.0", "chalk@^1.1.3": + "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "ansi-styles" "^2.2.1" + "escape-string-regexp" "^1.0.2" + "has-ansi" "^2.0.0" + "strip-ansi" "^3.0.0" + "supports-color" "^2.0.0" + +"chalk@^1.1.1": + "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "ansi-styles" "^2.2.1" + "escape-string-regexp" "^1.0.2" + "has-ansi" "^2.0.0" + "strip-ansi" "^3.0.0" + "supports-color" "^2.0.0" + +"chalk@^2.0.0", "chalk@^2.0.1", "chalk@^2.1.0", "chalk@^2.3.0", "chalk@^2.3.1", "chalk@^2.4.0", "chalk@^2.4.1", "chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^3.0.0": + "integrity" "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.0.0": + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.0": + "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@2.3.x": + "integrity" "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@4.1.0": + "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"check-error@^1.0.2": + "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "version" "1.0.2" + +"check-types@^8.0.3": + "integrity" "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" + "resolved" "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz" + "version" "8.0.3" + +"chevrotain@6.5.0": + "integrity" "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==" + "resolved" "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz" + "version" "6.5.0" + dependencies: + "regexp-to-ast" "0.4.0" + +"chevrotain@7.0.1": + "integrity" "sha512-B/44jrdw5GAzy483LEeVSgXSX0qOYM8lUd3l5+yf6Vl6OQjEUCm2BUiYbHRCIK6xCEvCLAFe1kj8uyV6+zdaVw==" + "resolved" "https://registry.npmjs.org/chevrotain/-/chevrotain-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "regexp-to-ast" "0.5.0" + +"chokidar@^2.1.8": + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + "version" "2.1.8" + dependencies: + "anymatch" "^2.0.0" + "async-each" "^1.0.1" + "braces" "^2.3.2" + "glob-parent" "^3.1.0" + "inherits" "^2.0.3" + "is-binary-path" "^1.0.0" + "is-glob" "^4.0.0" + "normalize-path" "^3.0.0" + "path-is-absolute" "^1.0.0" + "readdirp" "^2.2.1" + "upath" "^1.1.1" + optionalDependencies: + "fsevents" "^1.2.7" + +"chokidar@^3.0.0", "chokidar@^3.4.0", "chokidar@^3.5.1", "chokidar@>=2.0.0 <4.0.0", "chokidar@3.5.1": + "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" + "version" "3.5.1" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.5.0" + optionalDependencies: + "fsevents" "~2.3.1" + +"chownr@^1.1.1", "chownr@^1.1.2": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"chrome-trace-event@^1.0.2": + "version" "1.0.2" + dependencies: + "tslib" "^1.9.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" + "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"class-utils@^0.3.5": + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" + "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "arr-union" "^3.1.0" + "define-property" "^0.2.5" + "isobject" "^3.0.0" + "static-extend" "^0.1.1" + +"clean-css@^4.2.3": + "integrity" "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==" + "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "source-map" "~0.6.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^1.0.1": + "integrity" "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "restore-cursor" "^1.0.1" + +"cli-cursor@^2.0.0": + "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "restore-cursor" "^2.0.0" + +"cli-cursor@^2.1.0": + "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "restore-cursor" "^2.0.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.2.0", "cli-spinners@^2.4.0": + "integrity" "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz" + "version" "2.6.0" + +"cli-table@^0.3.1": + "version" "0.3.1" + dependencies: + "colors" "1.0.3" + +"cli-truncate@^0.2.1": + "integrity" "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "slice-ansi" "0.0.4" + "string-width" "^1.0.1" + +"cli-width@^2.0.0": + "integrity" "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" + "version" "2.2.1" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"clipboard@^2.0.0": + "version" "2.0.6" + dependencies: + "good-listener" "^1.2.2" + "select" "^1.1.2" + "tiny-emitter" "^2.0.0" + +"cliui@^5.0.0": + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "string-width" "^3.1.0" + "strip-ansi" "^5.2.0" + "wrap-ansi" "^5.1.0" + +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"clone-buffer@^1.0.0": + "integrity" "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + "resolved" "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + "version" "1.0.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"clone-stats@^1.0.0": + "integrity" "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + "resolved" "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" + "version" "1.0.0" + +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"clone@^2.1.1": + "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + "version" "2.1.2" + +"cloneable-readable@^1.0.0": + "integrity" "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==" + "resolved" "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "inherits" "^2.0.1" + "process-nextick-args" "^2.0.0" + "readable-stream" "^2.3.5" + +"co@^4.6.0": + "integrity" "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"coa@^2.0.2": + "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==" + "resolved" "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "@types/q" "^1.5.1" + "chalk" "^2.4.1" + "q" "^1.1.2" + +"code-point-at@^1.0.0": + "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"codelyzer@5.2.2": + "integrity" "sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA==" + "resolved" "https://registry.npmjs.org/codelyzer/-/codelyzer-5.2.2.tgz" + "version" "5.2.2" + dependencies: + "app-root-path" "^2.2.1" + "aria-query" "^3.0.0" + "axobject-query" "2.0.2" + "css-selector-tokenizer" "^0.7.1" + "cssauron" "^1.4.0" + "damerau-levenshtein" "^1.0.4" + "semver-dsl" "^1.0.1" + "source-map" "^0.5.7" + "sprintf-js" "^1.1.2" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"collection-visit@^1.0.0": + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "map-visit" "^1.0.0" + "object-visit" "^1.0.0" + +"color-convert@^1.9.0", "color-convert@^1.9.1": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.0.0", "color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-string@^1.5.2": + "version" "1.5.3" + dependencies: + "color-name" "^1.0.0" + "simple-swizzle" "^0.2.2" + +"color@^3.0.0", "color@3.0.x": + "integrity" "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==" + "resolved" "https://registry.npmjs.org/color/-/color-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "color-convert" "^1.9.1" + "color-string" "^1.5.2" + +"colorette@^1.2.0", "colorette@^1.2.2": + "integrity" "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" + "version" "1.2.2" + +"colornames@^1.1.1": + "integrity" "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + "resolved" "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz" + "version" "1.1.1" + +"colors@^1.2.1": + "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + "version" "1.4.0" + +"colors@1.0.3": + "integrity" "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + "version" "1.0.3" + +"colorspace@1.1.x": + "integrity" "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==" + "resolved" "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "color" "3.0.x" + "text-hex" "1.0.x" + +"combined-stream@^1.0.6", "combined-stream@~1.0.6": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"commander@^2.11.0", "commander@^2.12.1", "commander@^2.14.1", "commander@^2.18.0", "commander@^2.19.0", "commander@^2.2.0", "commander@^2.20.0", "commander@^2.9.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@^4.1.1": + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + "version" "4.1.1" + +"commander@5.1.0": + "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + "version" "5.1.0" + +"common-tags@^1.8.0": + "integrity" "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + "resolved" "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz" + "version" "1.8.0" + +"commondir@^1.0.1": + "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" + +"compare-versions@^3.6.0": + "integrity" "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "resolved" "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz" + "version" "3.6.0" + +"component-bind@1.0.0": + "integrity" "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + "resolved" "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz" + "version" "1.0.0" + +"component-emitter@^1.2.1", "component-emitter@1.2.1": + "integrity" "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz" + "version" "1.2.1" + +"component-emitter@~1.3.0": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" + +"component-inherit@0.0.3": + "integrity" "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + "resolved" "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz" + "version" "0.0.3" + +"compressible@~2.0.16": + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" + "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + "version" "2.0.18" + dependencies: + "mime-db" ">= 1.43.0 < 2" + +"compression@^1.7.4": + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==" + "resolved" "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "accepts" "~1.3.5" + "bytes" "3.0.0" + "compressible" "~2.0.16" + "debug" "2.6.9" + "on-headers" "~1.0.2" + "safe-buffer" "5.1.2" + "vary" "~1.1.2" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.4.7", "concat-stream@^1.5.0", "concat-stream@^1.6.0", "concat-stream@^1.6.2": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"conf@^1.4.0": + "integrity" "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==" + "resolved" "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "dot-prop" "^4.1.0" + "env-paths" "^1.0.0" + "make-dir" "^1.0.0" + "pkg-up" "^2.0.0" + "write-file-atomic" "^2.3.0" + +"conf@6.2.4": + "integrity" "sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ==" + "resolved" "https://registry.npmjs.org/conf/-/conf-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "ajv" "^6.10.2" + "debounce-fn" "^3.0.1" + "dot-prop" "^5.0.0" + "env-paths" "^2.2.0" + "json-schema-typed" "^7.0.1" + "make-dir" "^3.0.0" + "onetime" "^5.1.0" + "pkg-up" "^3.0.1" + "semver" "^6.2.0" + "write-file-atomic" "^3.0.0" + +"connect-history-api-fallback@^1", "connect-history-api-fallback@^1.6.0": + "integrity" "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" + "version" "1.6.0" + +"connect@3.6.6": + "integrity" "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=" + "resolved" "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" + "version" "3.6.6" + dependencies: + "debug" "2.6.9" + "finalhandler" "1.1.0" + "parseurl" "~1.3.2" + "utils-merge" "1.0.1" + +"console-browserify@^1.1.0": + "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + "version" "1.2.0" + +"constants-browserify@^1.0.0": + "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + "version" "1.0.0" + +"content-disposition@0.5.3": + "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "safe-buffer" "5.1.2" + +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" + +"convert-source-map@^1.4.0", "convert-source-map@^1.5.1", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie-signature@1.0.6": + "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@~0.4.1": + "integrity" "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" + "version" "0.4.1" + +"cookie@0.4.0": + "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" + "version" "0.4.0" + +"copy-concurrently@^1.0.0": + "integrity" "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==" + "resolved" "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "aproba" "^1.1.1" + "fs-write-stream-atomic" "^1.0.8" + "iferr" "^0.1.5" + "mkdirp" "^0.5.1" + "rimraf" "^2.5.4" + "run-queue" "^1.0.0" + +"copy-descriptor@^0.1.0": + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + "version" "0.1.1" + +"copy-webpack-plugin@6.0.2": + "integrity" "sha512-9Gm8X0c6eXlKnmltMPFCBeGOKjtcRIyTt4VaO3k1TkNgVTe5Ov2lYsYVuyLp0kp8DItO3apewflM+1GYgh6V2Q==" + "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "cacache" "^15.0.4" + "fast-glob" "^3.2.2" + "find-cache-dir" "^3.3.1" + "glob-parent" "^5.1.1" + "globby" "^11.0.1" + "loader-utils" "^2.0.0" + "normalize-path" "^3.0.0" + "p-limit" "^2.3.0" + "schema-utils" "^2.7.0" + "serialize-javascript" "^3.1.0" + "webpack-sources" "^1.4.3" + +"core-js-compat@^3.6.2": + "version" "3.6.5" + dependencies: + "browserslist" "^4.8.5" + "semver" "7.0.0" + +"core-js@^2.4.0": + "version" "2.6.11" + +"core-util-is@~1.0.0", "core-util-is@1.0.2": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cosmiconfig@^5.0.0": + "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "import-fresh" "^2.0.0" + "is-directory" "^0.3.1" + "js-yaml" "^3.13.1" + "parse-json" "^4.0.0" + +"cosmiconfig@^5.2.0": + "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "import-fresh" "^2.0.0" + "is-directory" "^0.3.1" + "js-yaml" "^3.13.1" + "parse-json" "^4.0.0" + +"cosmiconfig@^6.0.0": + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@types/parse-json" "^4.0.0" + "import-fresh" "^3.1.0" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.7.2" + +"create-ecdh@^4.0.0": + "version" "4.0.3" + dependencies: + "bn.js" "^4.1.0" + "elliptic" "^6.0.0" + +"create-error-class@^3.0.0": + "integrity" "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=" + "resolved" "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "capture-stack-trace" "^1.0.0" + +"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" + "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "cipher-base" "^1.0.1" + "inherits" "^2.0.1" + "md5.js" "^1.3.4" + "ripemd160" "^2.0.1" + "sha.js" "^2.4.0" + +"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" + "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "cipher-base" "^1.0.3" + "create-hash" "^1.1.0" + "inherits" "^2.0.1" + "ripemd160" "^2.0.0" + "safe-buffer" "^5.0.1" + "sha.js" "^2.4.8" + +"cross-spawn@^6.0.0", "cross-spawn@^6.0.5": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^7.0.0": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"crypto-browserify@^3.11.0": + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" + "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + "version" "3.12.0" + dependencies: + "browserify-cipher" "^1.0.0" + "browserify-sign" "^4.0.0" + "create-ecdh" "^4.0.0" + "create-hash" "^1.1.0" + "create-hmac" "^1.1.0" + "diffie-hellman" "^5.0.0" + "inherits" "^2.0.1" + "pbkdf2" "^3.0.3" + "public-encrypt" "^4.0.0" + "randombytes" "^2.0.0" + "randomfill" "^1.0.3" + +"crypto-random-string@^1.0.0": + "integrity" "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz" + "version" "1.0.0" + +"css-color-names@^0.0.4", "css-color-names@0.0.4": + "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" + "version" "0.0.4" + +"css-declaration-sorter@^4.0.1": + "integrity" "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==" + "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.1" + "timsort" "^0.3.0" + +"css-loader@3.6.0": + "integrity" "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==" + "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "camelcase" "^5.3.1" + "cssesc" "^3.0.0" + "icss-utils" "^4.1.1" + "loader-utils" "^1.2.3" + "normalize-path" "^3.0.0" + "postcss" "^7.0.32" + "postcss-modules-extract-imports" "^2.0.0" + "postcss-modules-local-by-default" "^3.0.2" + "postcss-modules-scope" "^2.2.0" + "postcss-modules-values" "^3.0.0" + "postcss-value-parser" "^4.1.0" + "schema-utils" "^2.7.0" + "semver" "^6.3.0" + +"css-select-base-adapter@^0.1.1": + "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + "resolved" "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + "version" "0.1.1" + +"css-select@^2.0.0": + "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "boolbase" "^1.0.0" + "css-what" "^3.2.1" + "domutils" "^1.7.0" + "nth-check" "^1.0.2" + +"css-select@^4.1.3": + "version" "4.1.3" + dependencies: + "boolbase" "^1.0.0" + "css-what" "^5.0.0" + "domhandler" "^4.2.0" + "domutils" "^2.6.0" + "nth-check" "^2.0.0" + +"css-selector-tokenizer@^0.7.1": + "integrity" "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==" + "resolved" "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz" + "version" "0.7.3" + dependencies: + "cssesc" "^3.0.0" + "fastparse" "^1.1.2" + +"css-tree@^1.1.2": + "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "mdn-data" "2.0.14" + "source-map" "^0.6.1" + +"css-tree@1.0.0-alpha.37": + "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + "version" "1.0.0-alpha.37" + dependencies: + "mdn-data" "2.0.4" + "source-map" "^0.6.1" + +"css-what@^3.2.1": + "integrity" "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + "version" "3.4.2" + +"css-what@^5.0.0": + "version" "5.0.1" + +"cssauron@^1.4.0": + "integrity" "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=" + "resolved" "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "through" "X.X.X" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"cssnano-preset-default@^4.0.8": + "integrity" "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==" + "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" + "version" "4.0.8" + dependencies: + "css-declaration-sorter" "^4.0.1" + "cssnano-util-raw-cache" "^4.0.1" + "postcss" "^7.0.0" + "postcss-calc" "^7.0.1" + "postcss-colormin" "^4.0.3" + "postcss-convert-values" "^4.0.1" + "postcss-discard-comments" "^4.0.2" + "postcss-discard-duplicates" "^4.0.2" + "postcss-discard-empty" "^4.0.1" + "postcss-discard-overridden" "^4.0.1" + "postcss-merge-longhand" "^4.0.11" + "postcss-merge-rules" "^4.0.3" + "postcss-minify-font-values" "^4.0.2" + "postcss-minify-gradients" "^4.0.2" + "postcss-minify-params" "^4.0.2" + "postcss-minify-selectors" "^4.0.2" + "postcss-normalize-charset" "^4.0.1" + "postcss-normalize-display-values" "^4.0.2" + "postcss-normalize-positions" "^4.0.2" + "postcss-normalize-repeat-style" "^4.0.2" + "postcss-normalize-string" "^4.0.2" + "postcss-normalize-timing-functions" "^4.0.2" + "postcss-normalize-unicode" "^4.0.1" + "postcss-normalize-url" "^4.0.1" + "postcss-normalize-whitespace" "^4.0.2" + "postcss-ordered-values" "^4.1.2" + "postcss-reduce-initial" "^4.0.3" + "postcss-reduce-transforms" "^4.0.2" + "postcss-svgo" "^4.0.3" + "postcss-unique-selectors" "^4.0.1" + +"cssnano-util-get-arguments@^4.0.0": + "integrity" "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + "resolved" "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" + "version" "4.0.0" + +"cssnano-util-get-match@^4.0.0": + "integrity" "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + "resolved" "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" + "version" "4.0.0" + +"cssnano-util-raw-cache@^4.0.1": + "integrity" "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==" + "resolved" "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"cssnano-util-same-parent@^4.0.0": + "integrity" "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + "resolved" "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" + "version" "4.0.1" + +"cssnano@^4.1.10": + "integrity" "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==" + "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz" + "version" "4.1.11" + dependencies: + "cosmiconfig" "^5.0.0" + "cssnano-preset-default" "^4.0.8" + "is-resolvable" "^1.0.0" + "postcss" "^7.0.0" + +"csso@^4.0.2": + "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==" + "resolved" "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "css-tree" "^1.1.2" + +"cssom@^0.4.4": + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + "version" "0.4.4" + +"cssom@~0.3.6": + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + "version" "0.3.8" + +"cssstyle@^2.2.0": + "version" "2.3.0" + dependencies: + "cssom" "~0.3.6" + +"cyclist@^1.0.1": + "integrity" "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + "resolved" "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" + "version" "1.0.1" + +"damerau-levenshtein@^1.0.4": + "version" "1.0.6" + +"dargs@^6.1.0": + "integrity" "sha512-5dVBvpBLBnPwSsYXqfybFyehMmC/EenKEcf23AhCTgTf48JFBbmJKqoZBsERDnjL0FyiVTYWdFsRfTLHxLyKdQ==" + "resolved" "https://registry.npmjs.org/dargs/-/dargs-6.1.0.tgz" + "version" "6.1.0" + +"dashdash@^1.12.0": + "integrity" "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"data-urls@^2.0.0": + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==" + "resolved" "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "abab" "^2.0.3" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + +"date-fns@^1.27.2": + "integrity" "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz" + "version" "1.30.1" + +"dateformat@^3.0.3": + "integrity" "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + "version" "3.0.3" + +"debounce-fn@^3.0.1": + "integrity" "sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q==" + "resolved" "https://registry.npmjs.org/debounce-fn/-/debounce-fn-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "mimic-fn" "^2.1.0" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^2.3.3": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.1.0": + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@^3.1.1": + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@^3.2.5": + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@~4.1.0", "debug@4.1.1": + "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ms" "^2.1.1" + +"debug@=3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + +"debug@~3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + +"debug@4.3.1": + "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + "version" "4.3.1" + dependencies: + "ms" "2.1.2" + +"debuglog@^1.0.1": + "integrity" "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" + "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + "version" "1.0.1" + +"decamelize-keys@^1.1.0": + "integrity" "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=" + "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "decamelize" "^1.1.0" + "map-obj" "^1.0.0" + +"decamelize@^1.1.0", "decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decamelize@^4.0.0": + "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + "version" "4.0.0" + +"decimal.js@^10.2.0": + "version" "10.2.0" + +"decode-uri-component@^0.2.0": + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"dedent@^0.7.0": + "integrity" "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-eql@^3.0.1": + "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-equal@^1.0.1": + "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==" + "resolved" "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "is-arguments" "^1.0.4" + "is-date-object" "^1.0.1" + "is-regex" "^1.0.4" + "object-is" "^1.0.1" + "object-keys" "^1.1.1" + "regexp.prototype.flags" "^1.2.0" + +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@~0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"default-gateway@^4.2.0": + "integrity" "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==" + "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "execa" "^1.0.0" + "ip-regex" "^2.1.0" + +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"define-properties@^1.1.2", "define-properties@^1.1.3": + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "object-keys" "^1.0.12" + +"define-property@^0.2.5": + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + "version" "0.2.5" + dependencies: + "is-descriptor" "^0.1.0" + +"define-property@^1.0.0": + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-descriptor" "^1.0.0" + +"define-property@^2.0.2": + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-descriptor" "^1.0.2" + "isobject" "^3.0.1" + +"del@^2.2.0": + "integrity" "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=" + "resolved" "https://registry.npmjs.org/del/-/del-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "globby" "^5.0.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + "rimraf" "^2.2.8" + +"del@^3.0.0": + "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=" + "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "globby" "^6.1.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "p-map" "^1.1.1" + "pify" "^3.0.0" + "rimraf" "^2.2.8" + +"del@^4.1.1": + "integrity" "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==" + "resolved" "https://registry.npmjs.org/del/-/del-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "@types/glob" "^7.1.1" + "globby" "^6.1.0" + "is-path-cwd" "^2.0.0" + "is-path-in-cwd" "^2.0.0" + "p-map" "^2.0.0" + "pify" "^4.0.1" + "rimraf" "^2.6.3" + +"delayed-stream@~1.0.0": + "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegate@^3.1.2": + "integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "resolved" "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz" + "version" "3.2.0" + +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"depd@~1.1.2": + "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"dependency-graph@^0.7.2": + "integrity" "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==" + "resolved" "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz" + "version" "0.7.2" + +"des.js@^1.0.0": + "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" + "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + +"destroy@~1.0.4": + "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + "version" "1.0.4" + +"detect-file@^1.0.0": + "integrity" "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + "version" "1.0.0" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"detect-node@^2.0.4": + "version" "2.0.4" + +"dev-ip@^1.0.1": + "integrity" "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=" + "resolved" "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz" + "version" "1.0.1" + +"dezalgo@^1.0.0": + "integrity" "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=" + "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "asap" "^2.0.0" + "wrappy" "1" + +"diagnostics@^1.1.1": + "integrity" "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==" + "resolved" "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "colorspace" "1.1.x" + "enabled" "1.0.x" + "kuler" "1.0.x" + +"didyoumean@1.2.1": + "integrity" "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=" + "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz" + "version" "1.2.1" + +"diff-sequences@^25.2.6": + "integrity" "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz" + "version" "25.2.6" + +"diff-sequences@^26.0.0": + "version" "26.0.0" + +"diff@^3.5.0": + "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + "version" "3.5.0" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"diff@5.0.0": + "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + "version" "5.0.0" + +"diffie-hellman@^5.0.0": + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" + "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + "version" "5.0.3" + dependencies: + "bn.js" "^4.1.0" + "miller-rabin" "^4.0.0" + "randombytes" "^2.0.0" + +"dir-glob@^2.2.2": + "integrity" "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "path-type" "^3.0.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"dir-glob@2.0.0": + "integrity" "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "arrify" "^1.0.1" + "path-type" "^3.0.0" + +"dlv@^1.1.3": + "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + "version" "1.1.3" + +"dns-equal@^1.0.0": + "integrity" "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "resolved" "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + "version" "1.0.0" + +"dns-packet@^1.3.1": + "integrity" "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==" + "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" + "version" "1.3.4" + dependencies: + "ip" "^1.1.0" + "safe-buffer" "^5.0.1" + +"dns-txt@^2.0.2": + "integrity" "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=" + "resolved" "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "buffer-indexof" "^1.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dom-converter@^0.2.0": + "version" "0.2.0" + dependencies: + "utila" "~0.4" + +"dom-serializer@^1.0.1": + "integrity" "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^4.2.0" + "entities" "^2.0.0" + +"dom-serializer@0": + "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "domelementtype" "^2.0.1" + "entities" "^2.0.0" + +"domain-browser@^1.1.1": + "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + "version" "1.2.0" + +"domelementtype@^2.0.1", "domelementtype@^2.2.0": + "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" + "version" "2.2.0" + +"domelementtype@1": + "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + "version" "1.3.1" + +"domexception@^2.0.1": + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==" + "resolved" "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "webidl-conversions" "^5.0.0" + +"domhandler@^3.0.0": + "version" "3.0.0" + dependencies: + "domelementtype" "^2.0.1" + +"domhandler@^4.0.0": + "version" "4.2.0" + dependencies: + "domelementtype" "^2.2.0" + +"domhandler@^4.2.0": + "integrity" "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "domelementtype" "^2.2.0" + +"domutils@^1.7.0": + "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "dom-serializer" "0" + "domelementtype" "1" + +"domutils@^2.0.0", "domutils@^2.5.2", "domutils@^2.6.0": + "version" "2.7.0" + dependencies: + "dom-serializer" "^1.0.1" + "domelementtype" "^2.2.0" + "domhandler" "^4.2.0" + +"dot-case@^3.0.3": + "version" "3.0.3" + dependencies: + "no-case" "^3.0.3" + "tslib" "^1.10.0" + +"dot-prop@^4.1.0": + "integrity" "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "is-obj" "^1.0.0" + +"dot-prop@^5.0.0", "dot-prop@^5.2.0": + "version" "5.2.0" + dependencies: + "is-obj" "^2.0.0" + +"download-stats@^0.3.4": + "integrity" "sha512-ic2BigbyUWx7/CBbsfGjf71zUNZB4edBGC3oRliSzsoNmvyVx3Ycfp1w3vp2Y78Ee0eIIkjIEO5KzW0zThDGaA==" + "resolved" "https://registry.npmjs.org/download-stats/-/download-stats-0.3.4.tgz" + "version" "0.3.4" + dependencies: + "JSONStream" "^1.2.1" + "lazy-cache" "^2.0.1" + "moment" "^2.15.1" + +"drange@^1.0.2": + "integrity" "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==" + "resolved" "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz" + "version" "1.1.1" + +"duplexer@^0.1.1": + "version" "0.1.1" + +"duplexer3@^0.1.4": + "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" + "version" "0.1.4" + +"duplexify@^3.4.2", "duplexify@^3.6.0": + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" + "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + "version" "3.7.1" + dependencies: + "end-of-stream" "^1.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + "stream-shift" "^1.0.0" + +"easy-extender@^2.3.4": + "integrity" "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==" + "resolved" "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "lodash" "^4.17.10" + +"eazy-logger@3.1.0": + "integrity" "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==" + "resolved" "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "tfunk" "^4.0.0" + +"ecc-jsbn@~0.1.1": + "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"editions@^2.2.0": + "integrity" "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==" + "resolved" "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "errlop" "^2.0.0" + "semver" "^6.3.0" + +"ee-first@1.1.1": + "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"ejs@^2.6.1": + "integrity" "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + "resolved" "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz" + "version" "2.7.4" + +"ejs@^3.1.5": + "version" "3.1.5" + dependencies: + "jake" "^10.6.1" + +"ejs@3.1.3": + "integrity" "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==" + "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "jake" "^10.6.1" + +"electron-to-chromium@^1.3.723": + "version" "1.3.755" + +"elegant-spinner@^1.0.1": + "integrity" "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" + "resolved" "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz" + "version" "1.0.1" + +"elliptic@^6.0.0", "elliptic@^6.5.2": + "version" "6.5.4" + dependencies: + "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@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-toolkit@^6.0.1": + "integrity" "sha512-oY5E81cXvRUxXkbVgOI8NxYHKF5FeWfJhFCIYUKhbVfSmdCH8+bmJzgDdhufExa7t1+WEzpUFdHwYxJTXS90vQ==" + "resolved" "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-6.5.1.tgz" + "version" "6.5.1" + +"emojis-list@^3.0.0": + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + "version" "3.0.0" + +"enabled@1.0.x": + "integrity" "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=" + "resolved" "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "env-variable" "0.0.x" + +"encodeurl@~1.0.1", "encodeurl@~1.0.2": + "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding@^0.1.11": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"engine.io-client@~3.5.0": + "integrity" "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==" + "resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz" + "version" "3.5.2" + dependencies: + "component-emitter" "~1.3.0" + "component-inherit" "0.0.3" + "debug" "~3.1.0" + "engine.io-parser" "~2.2.0" + "has-cors" "1.1.0" + "indexof" "0.0.1" + "parseqs" "0.0.6" + "parseuri" "0.0.6" + "ws" "~7.4.2" + "xmlhttprequest-ssl" "~1.6.2" + "yeast" "0.1.2" + +"engine.io-parser@~2.2.0": + "integrity" "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==" + "resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "after" "0.8.2" + "arraybuffer.slice" "~0.0.7" + "base64-arraybuffer" "0.1.4" + "blob" "0.0.5" + "has-binary2" "~1.0.2" + +"engine.io@~3.5.0": + "integrity" "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==" + "resolved" "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "accepts" "~1.3.4" + "base64id" "2.0.0" + "cookie" "~0.4.1" + "debug" "~4.1.0" + "engine.io-parser" "~2.2.0" + "ws" "~7.4.2" + +"enhanced-resolve@^4.0.0", "enhanced-resolve@^4.1.0", "enhanced-resolve@^4.1.1", "enhanced-resolve@4.1.1": + "integrity" "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "graceful-fs" "^4.1.2" + "memory-fs" "^0.5.0" + "tapable" "^1.0.0" + +"entities@^2.0.0": + "version" "2.0.3" + +"env-paths@^1.0.0": + "integrity" "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz" + "version" "1.0.0" + +"env-paths@^2.2.0": + "version" "2.2.0" + +"env-variable@0.0.x": + "integrity" "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + "resolved" "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz" + "version" "0.0.6" + +"err-code@^1.0.0": + "integrity" "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz" + "version" "1.1.2" + +"errlop@^2.0.0": + "integrity" "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==" + "resolved" "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz" + "version" "2.2.0" + +"errno@^0.1.3", "errno@~0.1.7": + "version" "0.1.7" + dependencies: + "prr" "~1.0.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"error-stack-parser@^2.0.0": + "integrity" "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==" + "resolved" "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "stackframe" "^1.1.1" + +"error@^7.0.2": + "integrity" "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==" + "resolved" "https://registry.npmjs.org/error/-/error-7.2.1.tgz" + "version" "7.2.1" + dependencies: + "string-template" "~0.2.1" + +"es-abstract@^1.17.0-next.1", "es-abstract@^1.17.5", "es-abstract@^1.18.2": + "integrity" "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz" + "version" "1.18.3" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "get-intrinsic" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.2" + "is-callable" "^1.2.3" + "is-negative-zero" "^2.0.1" + "is-regex" "^1.1.3" + "is-string" "^1.0.6" + "object-inspect" "^1.10.3" + "object-keys" "^1.1.1" + "object.assign" "^4.1.2" + "string.prototype.trimend" "^1.0.4" + "string.prototype.trimstart" "^1.0.4" + "unbox-primitive" "^1.0.1" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +"es6-promise@^4.0.3": + "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + "version" "4.2.8" + +"es6-promise@4.0.5": + "integrity" "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" + "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz" + "version" "4.0.5" + +"es6-promisify@^5.0.0": + "integrity" "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=" + "resolved" "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "es6-promise" "^4.0.3" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.4", "escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escodegen@^1.14.1": + "version" "1.14.3" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^4.2.0" + "esutils" "^2.0.2" + "optionator" "^0.8.1" + optionalDependencies: + "source-map" "~0.6.1" + +"eslint-config-jhipster@0.0.1": + "integrity" "sha512-E9/05t3+6V2K9YrJwsLmrblGgYnYfw62o/ja+Hr9wz3+AX2nG6gtycMW7LrS4alFuar1SGhbAyT3orTR5ur9MQ==" + "resolved" "https://registry.npmjs.org/eslint-config-jhipster/-/eslint-config-jhipster-0.0.1.tgz" + "version" "0.0.1" + +"eslint-config-prettier@^6.1.0", "eslint-config-prettier@6.11.0": + "integrity" "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "get-stdin" "^6.0.0" + +"eslint-loader@4.0.2": + "integrity" "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==" + "resolved" "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "find-cache-dir" "^3.3.1" + "fs-extra" "^8.1.0" + "loader-utils" "^2.0.0" + "object-hash" "^2.0.3" + "schema-utils" "^2.6.5" + +"eslint-scope@^4.0.3": + "integrity" "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + +"eslint-scope@^5.0.0": + "version" "5.1.0" + dependencies: + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + +"eslint-utils@^1.4.3": + "integrity" "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "eslint-visitor-keys" "^1.1.0" + +"eslint-utils@^2.0.0": + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "eslint-visitor-keys" "^1.1.0" + +"eslint-visitor-keys@^1.1.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" + +"eslint@*", "eslint@^5.0.0 || ^6.0.0", "eslint@^6.0.0 || ^7.0.0", "eslint@^6.1.0", "eslint@>=3.14.1", "eslint@6.8.0": + "integrity" "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz" + "version" "6.8.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "ajv" "^6.10.0" + "chalk" "^2.1.0" + "cross-spawn" "^6.0.5" + "debug" "^4.0.1" + "doctrine" "^3.0.0" + "eslint-scope" "^5.0.0" + "eslint-utils" "^1.4.3" + "eslint-visitor-keys" "^1.1.0" + "espree" "^6.1.2" + "esquery" "^1.0.1" + "esutils" "^2.0.2" + "file-entry-cache" "^5.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^5.0.0" + "globals" "^12.1.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "inquirer" "^7.0.0" + "is-glob" "^4.0.0" + "js-yaml" "^3.13.1" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.3.0" + "lodash" "^4.17.14" + "minimatch" "^3.0.4" + "mkdirp" "^0.5.1" + "natural-compare" "^1.4.0" + "optionator" "^0.8.3" + "progress" "^2.0.0" + "regexpp" "^2.0.1" + "semver" "^6.1.2" + "strip-ansi" "^5.2.0" + "strip-json-comments" "^3.0.1" + "table" "^5.2.3" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^6.1.2": + "integrity" "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==" + "resolved" "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "acorn" "^7.1.1" + "acorn-jsx" "^5.2.0" + "eslint-visitor-keys" "^1.1.0" + +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.0.1": + "version" "1.3.1" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.1.0": + "version" "4.2.1" + dependencies: + "estraverse" "^4.1.0" + +"estraverse@^4.1.0", "estraverse@^4.1.1", "estraverse@^4.2.0": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0": + "version" "5.1.0" + +"estree-walker@^0.6.1": + "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" + "version" "0.6.1" + +"estree-walker@^1.0.1": + "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + "version" "1.0.1" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"etag@^1.8.1", "etag@~1.8.1", "etag@1.8.1": + "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"eventemitter3@^4.0.0": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + +"events@^3.0.0": + "version" "3.1.0" + +"events@1.1.1": + "integrity" "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "resolved" "https://registry.npmjs.org/events/-/events-1.1.1.tgz" + "version" "1.1.1" + +"eventsource@^1.0.7": + "version" "1.0.7" + dependencies: + "original" "^1.0.0" + +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" + "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "md5.js" "^1.3.4" + "safe-buffer" "^5.1.1" + +"exec-sh@^0.3.2": + "version" "0.3.4" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^4.0.0": + "version" "4.0.2" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"exit-hook@^1.0.0": + "integrity" "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + "resolved" "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" + "version" "1.1.1" + +"exit@^0.1.2": + "integrity" "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expand-brackets@^2.1.4": + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "debug" "^2.3.3" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "posix-character-classes" "^0.1.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": + "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" + "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "homedir-polyfill" "^1.0.1" + +"expect@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "ansi-styles" "^4.0.0" + "jest-get-type" "^26.0.0" + "jest-matcher-utils" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-regex-util" "^26.0.0" + +"express@^4.16.3", "express@^4.17.1": + "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" + "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + "version" "4.17.1" + dependencies: + "accepts" "~1.3.7" + "array-flatten" "1.1.1" + "body-parser" "1.19.0" + "content-disposition" "0.5.3" + "content-type" "~1.0.4" + "cookie" "0.4.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "~1.1.2" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "~1.1.2" + "fresh" "0.5.2" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "~2.3.0" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.5" + "qs" "6.7.0" + "range-parser" "~1.2.1" + "safe-buffer" "5.1.2" + "send" "0.17.1" + "serve-static" "1.14.1" + "setprototypeof" "1.1.1" + "statuses" "~1.5.0" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"extend-shallow@^2.0.1": + "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend-shallow@^3.0.0", "extend-shallow@^3.0.2": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend@^3.0.0", "extend@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"external-editor@^1.1.0": + "integrity" "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "extend" "^3.0.0" + "spawn-sync" "^1.0.15" + "tmp" "^0.0.29" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extglob@^2.0.4": + "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "array-unique" "^0.3.2" + "define-property" "^1.0.0" + "expand-brackets" "^2.1.4" + "extend-shallow" "^2.0.1" + "fragment-cache" "^0.2.1" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"faker@4.1.0": + "integrity" "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" + "resolved" "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz" + "version" "4.1.0" + +"fast-deep-equal@^3.1.1": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^2.0.2": + "integrity" "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" + "version" "2.2.7" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + "glob-parent" "^3.1.0" + "is-glob" "^4.0.0" + "merge2" "^1.2.3" + "micromatch" "^3.1.10" + +"fast-glob@^2.2.6": + "integrity" "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" + "version" "2.2.7" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + "glob-parent" "^3.1.0" + "is-glob" "^4.0.0" + "merge2" "^1.2.3" + "micromatch" "^3.1.10" + +"fast-glob@^3.1.1", "fast-glob@^3.2.2": + "version" "3.2.4" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.0" + "merge2" "^1.3.0" + "micromatch" "^4.0.2" + "picomatch" "^2.2.1" + +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@^2.1.0", "fast-json-stable-stringify@2.1.0", "fast-json-stable-stringify@2.x": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@~2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fast-safe-stringify@^2.0.4": + "integrity" "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz" + "version" "2.0.7" + +"fastparse@^1.1.2": + "integrity" "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + "resolved" "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" + "version" "1.1.2" + +"fastq@^1.6.0": + "version" "1.8.0" + dependencies: + "reusify" "^1.0.4" + +"faye-websocket@^0.10.0": + "integrity" "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=" + "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz" + "version" "0.10.0" + dependencies: + "websocket-driver" ">=0.5.1" + +"faye-websocket@~0.11.1": + "version" "0.11.3" + dependencies: + "websocket-driver" ">=0.5.1" + +"fb-watchman@^2.0.0": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"fecha@^4.2.0": + "version" "4.2.0" + +"figgy-pudding@^3.4.1", "figgy-pudding@^3.5.1": + "integrity" "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "resolved" "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" + "version" "3.5.2" + +"figures@^1.3.5": + "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" + "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "escape-string-regexp" "^1.0.5" + "object-assign" "^4.1.0" + +"figures@^1.7.0": + "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" + "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "escape-string-regexp" "^1.0.5" + "object-assign" "^4.1.0" + +"figures@^2.0.0": + "integrity" "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=" + "resolved" "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"figures@^3.0.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"figures@2.0.x": + "integrity" "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=" + "resolved" "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^5.0.1": + "integrity" "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "flat-cache" "^2.0.1" + +"file-loader@6.0.0": + "integrity" "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==" + "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "loader-utils" "^2.0.0" + "schema-utils" "^2.6.5" + +"file-uri-to-path@1.0.0": + "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + "version" "1.0.0" + +"filelist@^1.0.1": + "version" "1.0.1" + dependencies: + "minimatch" "^3.0.4" + +"filesize@^3.6.1": + "integrity" "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "resolved" "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz" + "version" "3.6.1" + +"fill-range@^4.0.0": + "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "extend-shallow" "^2.0.1" + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + "to-regex-range" "^2.1.0" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"finalhandler@~1.1.2": + "integrity" "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "~2.3.0" + "parseurl" "~1.3.3" + "statuses" "~1.5.0" + "unpipe" "~1.0.0" + +"finalhandler@1.1.0": + "integrity" "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "debug" "2.6.9" + "encodeurl" "~1.0.1" + "escape-html" "~1.0.3" + "on-finished" "~2.3.0" + "parseurl" "~1.3.2" + "statuses" "~1.3.1" + "unpipe" "~1.0.0" + +"find-cache-dir@^2.1.0": + "integrity" "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "commondir" "^1.0.1" + "make-dir" "^2.0.0" + "pkg-dir" "^3.0.0" + +"find-cache-dir@^3.3.1": + "integrity" "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "commondir" "^1.0.1" + "make-dir" "^3.0.2" + "pkg-dir" "^4.1.0" + +"find-up@^2.1.0": + "integrity" "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "locate-path" "^2.0.0" + +"find-up@^3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"find-versions@^3.2.0": + "integrity" "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==" + "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "semver-regex" "^2.0.0" + +"findup-sync@^3.0.0": + "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" + "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "detect-file" "^1.0.0" + "is-glob" "^4.0.0" + "micromatch" "^3.0.4" + "resolve-dir" "^1.0.1" + +"first-chunk-stream@^2.0.0": + "integrity" "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=" + "resolved" "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "readable-stream" "^2.0.2" + +"flat-cache@^2.0.1": + "integrity" "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "flatted" "^2.0.0" + "rimraf" "2.6.3" + "write" "1.0.3" + +"flat@^5.0.2": + "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + "version" "5.0.2" + +"flatted@^2.0.0": + "integrity" "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" + "version" "2.0.2" + +"flush-write-stream@^1.0.0": + "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" + "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "inherits" "^2.0.3" + "readable-stream" "^2.3.6" + +"fn-name@~2.0.1": + "integrity" "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" + "resolved" "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz" + "version" "2.0.1" + +"follow-redirects@^1.0.0", "follow-redirects@1.5.10": + "integrity" "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz" + "version" "1.5.10" + dependencies: + "debug" "=3.1.0" + +"follow-redirects@^1.10.0": + "version" "1.13.1" + +"for-in@^1.0.2": + "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + "version" "1.0.2" + +"forever-agent@~0.6.1": + "integrity" "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +"form-data@^2.2.0", "form-data@~2.3.2": + "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"forwarded@~0.1.2": + "version" "0.1.2" + +"fragment-cache@^0.2.1": + "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "map-cache" "^0.2.2" + +"fresh@^0.5.2", "fresh@0.5.2": + "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"friendly-errors-webpack-plugin@1.7.0": + "integrity" "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==" + "resolved" "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "chalk" "^1.1.3" + "error-stack-parser" "^2.0.0" + "string-width" "^2.0.0" + +"from2@^2.1.0": + "integrity" "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=" + "resolved" "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + +"fs-extra@^8.1.0": + "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@3.0.1": + "integrity" "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^3.0.0" + "universalify" "^0.1.0" + +"fs-extra@4.0.2": + "integrity" "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@8.1.0": + "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-minipass@^1.2.5": + "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "minipass" "^2.6.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-write-stream-atomic@^1.0.8": + "integrity" "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=" + "resolved" "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "graceful-fs" "^4.1.2" + "iferr" "^0.1.5" + "imurmurhash" "^0.1.4" + "readable-stream" "1 || 2" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fs@0.0.2": + "integrity" "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=" + "resolved" "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz" + "version" "0.0.2" + +"fsevents@^1.2.7": + "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "bindings" "^1.5.0" + "nan" "^2.12.1" + +"fsevents@^2.1.2": + "version" "2.1.3" + +"fsevents@~2.3.1": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"g-status@^2.0.2": + "integrity" "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==" + "resolved" "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "arrify" "^1.0.1" + "matcher" "^1.0.0" + "simple-git" "^1.85.0" + +"gauge@~1.2.5": + "integrity" "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "ansi" "^0.3.0" + "has-unicode" "^2.0.0" + "lodash.pad" "^4.1.0" + "lodash.padend" "^4.1.0" + "lodash.padstart" "^4.1.0" + +"generator-jhipster@^6.10.5": + "integrity" "sha512-5NulSuou7sghjggc1rQuWWWigfJAdlzB0iMB92WQd90nXBC9ZopVFvgkjfLxWpKEgidFPjrwhrt5iWjoA+yo5A==" + "resolved" "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-6.10.5.tgz" + "version" "6.10.5" + dependencies: + "aws-sdk" "2.706.0" + "axios" "0.19.2" + "chalk" "4.1.0" + "commander" "5.1.0" + "conf" "6.2.4" + "didyoumean" "1.2.1" + "ejs" "3.1.3" + "faker" "4.1.0" + "glob" "7.1.6" + "gulp-filter" "6.0.0" + "insight" "0.10.3" + "jhipster-core" "7.3.4" + "js-object-pretty-print" "0.3.0" + "js-yaml" "3.14.0" + "lodash" "4.17.15" + "meow" "6.1.0" + "mkdirp" "1.0.4" + "normalize-path" "3.0.0" + "ora" "4.0.4" + "os-locale" "5.0.0" + "parse-gitignore" "1.0.1" + "pluralize" "8.0.0" + "prettier" "2.1.2" + "prettier-plugin-java" "0.8.2" + "progress" "2.0.3" + "randexp" "0.5.3" + "semver" "7.3.2" + "shelljs" "0.8.4" + "tabtab" "2.2.2" + "test" "^0.6.0" + "then-request" "6.0.2" + "through2" "3.0.2" + "uuid" "7.0.3" + "yeoman-environment" "2.10.3" + "yeoman-generator" "4.11.0" + +"genfun@^5.0.0": + "integrity" "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==" + "resolved" "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz" + "version" "5.0.0" + +"gensync@^1.0.0-beta.1": + "version" "1.0.0-beta.1" + +"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-func-name@^2.0.0": + "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "version" "2.0.0" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1": + "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.1" + +"get-own-enumerable-property-symbols@^3.0.0": + "integrity" "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + "resolved" "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + "version" "3.0.2" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stdin@^6.0.0": + "integrity" "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" + "version" "6.0.0" + +"get-stream@^3.0.0": + "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + "version" "3.0.0" + +"get-stream@^4.0.0", "get-stream@^4.1.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^5.0.0": + "version" "5.1.0" + dependencies: + "pump" "^3.0.0" + +"get-value@^2.0.3", "get-value@^2.0.6": + "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + "version" "2.0.6" + +"getpass@^0.1.1": + "integrity" "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"gh-got@^5.0.0": + "integrity" "sha1-7pW+NxBv2HSKlvjR20uuqJ4b+oo=" + "resolved" "https://registry.npmjs.org/gh-got/-/gh-got-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "got" "^6.2.0" + "is-plain-obj" "^1.1.0" + +"github-username@^3.0.0": + "integrity" "sha1-CnciGbMTB0NCnyRW0L3T21Xc57E=" + "resolved" "https://registry.npmjs.org/github-username/-/github-username-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "gh-got" "^5.0.0" + +"glob-parent@^3.1.0": + "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-glob" "^3.1.0" + "path-dirname" "^1.0.0" + +"glob-parent@^5.0.0", "glob-parent@^5.1.0", "glob-parent@^5.1.1", "glob-parent@~5.1.0": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-to-regexp@^0.3.0": + "integrity" "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz" + "version" "0.3.0" + +"glob@^7.0.0", "glob@^7.0.3", "glob@^7.0.6", "glob@^7.1.1", "glob@^7.1.2", "glob@7.1.2": + "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + "version" "7.1.2" + 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" + +"glob@^7.1.3", "glob@^7.1.4": + "version" "7.1.6" + 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" + +"glob@^7.1.6": + "version" "7.1.6" + 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" + +"glob@7.1.1": + "integrity" "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.2" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@7.1.6": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + 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" + +"global-modules@^1.0.0": + "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "global-prefix" "^1.0.1" + "is-windows" "^1.0.1" + "resolve-dir" "^1.0.0" + +"global-modules@^2.0.0": + "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "global-prefix" "^3.0.0" + +"global-prefix@^1.0.1": + "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "expand-tilde" "^2.0.2" + "homedir-polyfill" "^1.0.1" + "ini" "^1.3.4" + "is-windows" "^1.0.1" + "which" "^1.2.14" + +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^12.1.0": + "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==" + "resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" + "version" "12.4.0" + dependencies: + "type-fest" "^0.8.1" + +"globby@^11.0.1": + "version" "11.0.1" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"globby@^5.0.0": + "integrity" "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=" + "resolved" "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "array-union" "^1.0.1" + "arrify" "^1.0.0" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"globby@^6.1.0": + "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=" + "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "array-union" "^1.0.1" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"globby@^8.0.1": + "integrity" "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==" + "resolved" "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "array-union" "^1.0.1" + "dir-glob" "2.0.0" + "fast-glob" "^2.0.2" + "glob" "^7.1.2" + "ignore" "^3.3.5" + "pify" "^3.0.0" + "slash" "^1.0.0" + +"globby@^9.2.0": + "integrity" "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz" + "version" "9.2.0" + dependencies: + "@types/glob" "^7.1.1" + "array-union" "^1.0.2" + "dir-glob" "^2.2.2" + "fast-glob" "^2.2.6" + "glob" "^7.1.3" + "ignore" "^4.0.3" + "pify" "^4.0.1" + "slash" "^2.0.0" + +"good-listener@^1.2.2": + "integrity" "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=" + "resolved" "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "delegate" "^3.1.2" + +"got@^6.2.0": + "integrity" "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=" + "resolved" "https://registry.npmjs.org/got/-/got-6.7.1.tgz" + "version" "6.7.1" + dependencies: + "create-error-class" "^3.0.0" + "duplexer3" "^0.1.4" + "get-stream" "^3.0.0" + "is-redirect" "^1.0.0" + "is-retry-allowed" "^1.0.0" + "is-stream" "^1.0.0" + "lowercase-keys" "^1.0.0" + "safe-buffer" "^5.0.1" + "timed-out" "^4.0.0" + "unzip-response" "^2.0.1" + "url-parse-lax" "^1.0.0" + +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4": + "version" "4.2.4" + +"grouped-queue@^1.1.0": + "integrity" "sha512-rZOFKfCqLhsu5VqjBjEWiwrYqJR07KxIkH4mLZlNlGDfntbb4FbMyGFP14TlvRPrU9S3Hnn/sgxbC5ZeN0no3Q==" + "resolved" "https://registry.npmjs.org/grouped-queue/-/grouped-queue-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "lodash" "^4.17.15" + +"growl@1.10.5": + "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + "version" "1.10.5" + +"growly@^1.3.0": + "integrity" "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" + "version" "1.3.0" + +"gulp-filter@6.0.0": + "integrity" "sha512-veQFW93kf6jBdWdF/RxMEIlDK2mkjHyPftM381DID2C9ImTVngwYpyyThxm4/EpgcNOT37BLefzMOjEKbyYg0Q==" + "resolved" "https://registry.npmjs.org/gulp-filter/-/gulp-filter-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "multimatch" "^4.0.0" + "plugin-error" "^1.0.1" + "streamfilter" "^3.0.0" + +"gzip-size@^5.0.0": + "integrity" "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==" + "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "duplexer" "^0.1.1" + "pify" "^4.0.1" + +"handle-thing@^2.0.0": + "integrity" "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "resolved" "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + "version" "2.0.1" + +"handlebars@^4.7.6": + "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" + "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + "version" "4.7.7" + dependencies: + "minimist" "^1.2.5" + "neo-async" "^2.6.0" + "source-map" "^0.6.1" + "wordwrap" "^1.0.0" + optionalDependencies: + "uglify-js" "^3.1.4" + +"har-schema@^2.0.0": + "integrity" "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + "version" "2.0.0" + +"har-validator@~5.1.3": + "version" "5.1.3" + dependencies: + "ajv" "^6.5.5" + "har-schema" "^2.0.0" + +"hard-rejection@^2.0.0": + "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + "version" "2.1.0" + +"has-ansi@^2.0.0": + "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-regex" "^2.0.0" + +"has-bigints@^1.0.1": + "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + "version" "1.0.1" + +"has-binary2@~1.0.2": + "integrity" "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==" + "resolved" "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "isarray" "2.0.1" + +"has-cors@1.1.0": + "integrity" "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + "resolved" "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz" + "version" "1.1.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2": + "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + "version" "1.0.2" + +"has-unicode@^2.0.0": + "integrity" "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has-value@^0.3.1": + "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "get-value" "^2.0.3" + "has-values" "^0.1.4" + "isobject" "^2.0.0" + +"has-value@^1.0.0": + "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-value" "^2.0.6" + "has-values" "^1.0.0" + "isobject" "^3.0.0" + +"has-values@^0.1.4": + "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + "version" "0.1.4" + +"has-values@^1.0.0": + "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-number" "^3.0.0" + "kind-of" "^4.0.0" + +"has@^1.0.0", "has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hash-base@^3.0.0": + "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" + "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"hash.js@^1.0.0", "hash.js@^1.0.3": + "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.1" + +"he@^1.2.0", "he@1.2.0": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" + +"hex-color-regex@^1.1.0": + "integrity" "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + "resolved" "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" + "version" "1.1.0" + +"hmac-drbg@^1.0.1": + "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" + "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"homedir-polyfill@^1.0.1": + "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" + "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "parse-passwd" "^1.0.0" + +"hoopy@^0.1.4": + "integrity" "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + "resolved" "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz" + "version" "0.1.4" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"hosted-git-info@^2.7.1": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"hosted-git-info@^3.0.2": + "integrity" "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" + "version" "3.0.8" + dependencies: + "lru-cache" "^6.0.0" + +"hpack.js@^2.1.6": + "integrity" "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=" + "resolved" "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + "version" "2.1.6" + dependencies: + "inherits" "^2.0.1" + "obuf" "^1.0.0" + "readable-stream" "^2.0.1" + "wbuf" "^1.1.0" + +"hsl-regex@^1.0.0": + "integrity" "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + "resolved" "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" + "version" "1.0.0" + +"hsla-regex@^1.0.0": + "integrity" "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + "resolved" "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" + "version" "1.0.0" + +"html-encoding-sniffer@^2.0.1": + "integrity" "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==" + "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "whatwg-encoding" "^1.0.5" + +"html-entities@^1.3.1": + "version" "1.3.1" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"html-loader@1.1.0": + "integrity" "sha512-zwLbEgy+i7sgIYTlxI9M7jwkn29IvdsV6f1y7a2aLv/w8l1RigVk0PFijBZLLFsdi2gvL8sf2VJhTjLlfnK8sA==" + "resolved" "https://registry.npmjs.org/html-loader/-/html-loader-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "html-minifier-terser" "^5.0.5" + "htmlparser2" "^4.1.0" + "loader-utils" "^2.0.0" + "parse-srcset" "^1.0.2" + "schema-utils" "^2.6.5" + +"html-minifier-terser@^5.0.1", "html-minifier-terser@^5.0.5": + "integrity" "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==" + "resolved" "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "camel-case" "^4.1.1" + "clean-css" "^4.2.3" + "commander" "^4.1.1" + "he" "^1.2.0" + "param-case" "^3.0.3" + "relateurl" "^0.2.7" + "terser" "^4.6.3" + +"html-webpack-plugin@4.3.0": + "integrity" "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==" + "resolved" "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + "html-minifier-terser" "^5.0.1" + "loader-utils" "^1.2.3" + "lodash" "^4.17.15" + "pretty-error" "^2.1.1" + "tapable" "^1.1.3" + "util.promisify" "1.0.0" + +"htmlparser2@^4.1.0": + "integrity" "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^3.0.0" + "domutils" "^2.0.0" + "entities" "^2.0.0" + +"htmlparser2@^6.1.0": + "version" "6.1.0" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^4.0.0" + "domutils" "^2.5.2" + "entities" "^2.0.0" + +"http-basic@^8.1.1": + "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" + "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + "version" "8.1.3" + dependencies: + "caseless" "^0.12.0" + "concat-stream" "^1.6.2" + "http-response-object" "^3.0.1" + "parse-cache-control" "^1.0.1" + +"http-cache-semantics@^3.8.1": + "integrity" "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + "version" "3.8.1" + +"http-deceiver@^1.2.7": + "integrity" "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "resolved" "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + "version" "1.2.7" + +"http-errors@~1.6.2": + "integrity" "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.0" + "statuses" ">= 1.4.0 < 2" + +"http-errors@~1.7.2", "http-errors@1.7.3": + "integrity" "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" + "version" "1.7.3" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.4" + "setprototypeof" "1.1.1" + "statuses" ">= 1.5.0 < 2" + "toidentifier" "1.0.0" + +"http-errors@1.7.2": + "integrity" "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" + "version" "1.7.2" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.1" + "statuses" ">= 1.5.0 < 2" + "toidentifier" "1.0.0" + +"http-proxy-agent@^2.1.0": + "integrity" "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "agent-base" "4" + "debug" "3.1.0" + +"http-proxy-middleware@0.19.1": + "integrity" "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==" + "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" + "version" "0.19.1" + dependencies: + "http-proxy" "^1.17.0" + "is-glob" "^4.0.0" + "lodash" "^4.17.11" + "micromatch" "^3.1.10" + +"http-proxy@^1.17.0": + "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" + "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + "version" "1.18.1" + dependencies: + "eventemitter3" "^4.0.0" + "follow-redirects" "^1.0.0" + "requires-port" "^1.0.0" + +"http-proxy@^1.18.1": + "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" + "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + "version" "1.18.1" + dependencies: + "eventemitter3" "^4.0.0" + "follow-redirects" "^1.0.0" + "requires-port" "^1.0.0" + +"http-response-object@^3.0.1": + "integrity" "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==" + "resolved" "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "@types/node" "^10.0.3" + +"http-signature@~1.2.0": + "integrity" "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" + +"https-browserify@^1.0.0": + "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + "version" "1.0.0" + +"https-proxy-agent@^2.2.1", "https-proxy-agent@^2.2.3": + "integrity" "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz" + "version" "2.2.4" + dependencies: + "agent-base" "^4.3.0" + "debug" "^3.1.0" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"humanize-ms@^1.2.1": + "integrity" "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"husky@4.2.5": + "integrity" "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==" + "resolved" "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz" + "version" "4.2.5" + dependencies: + "chalk" "^4.0.0" + "ci-info" "^2.0.0" + "compare-versions" "^3.6.0" + "cosmiconfig" "^6.0.0" + "find-versions" "^3.2.0" + "opencollective-postinstall" "^2.0.2" + "pkg-dir" "^4.2.0" + "please-upgrade-node" "^3.2.0" + "slash" "^3.0.0" + "which-pm-runs" "^1.0.0" + +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"icss-utils@^4.0.0", "icss-utils@^4.1.1": + "integrity" "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==" + "resolved" "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "postcss" "^7.0.14" + +"ieee754@^1.1.4", "ieee754@1.1.13": + "integrity" "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" + "version" "1.1.13" + +"iferr@^0.1.5": + "integrity" "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "resolved" "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" + "version" "0.1.5" + +"ignore-walk@^3.0.1": + "integrity" "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==" + "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "minimatch" "^3.0.4" + +"ignore@^3.3.5": + "integrity" "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" + "version" "3.3.10" + +"ignore@^4.0.3": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^4.0.6": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^5.1.4": + "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + "version" "5.1.8" + +"immediate@~3.0.5": + "integrity" "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + "version" "3.0.6" + +"immutable@^3": + "integrity" "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz" + "version" "3.8.2" + +"import-cwd@^2.0.0": + "integrity" "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=" + "resolved" "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "import-from" "^2.1.0" + +"import-fresh@^2.0.0": + "integrity" "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "caller-path" "^2.0.0" + "resolve-from" "^3.0.0" + +"import-fresh@^3.0.0", "import-fresh@^3.1.0": + "version" "3.2.1" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-from@^2.1.0": + "integrity" "sha1-M1238qev/VOqpHHUuAId7ja387E=" + "resolved" "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "resolve-from" "^3.0.0" + +"import-local@^2.0.0": + "integrity" "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "pkg-dir" "^3.0.0" + "resolve-cwd" "^2.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^3.0.0": + "integrity" "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz" + "version" "3.2.0" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"indexes-of@^1.0.1": + "integrity" "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + "resolved" "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" + "version" "1.0.1" + +"indexof@0.0.1": + "integrity" "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "resolved" "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + "version" "0.0.1" + +"infer-owner@^1.0.3", "infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"inherits@2.0.1": + "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + "version" "2.0.1" + +"inherits@2.0.3": + "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + +"ini@^1.3.4", "ini@^1.3.5": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"ini@1.3.6": + "integrity" "sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.6.tgz" + "version" "1.3.6" + +"inquirer@^1.0.2": + "integrity" "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz" + "version" "1.2.3" + dependencies: + "ansi-escapes" "^1.1.0" + "chalk" "^1.0.0" + "cli-cursor" "^1.0.1" + "cli-width" "^2.0.0" + "external-editor" "^1.1.0" + "figures" "^1.3.5" + "lodash" "^4.3.0" + "mute-stream" "0.0.6" + "pinkie-promise" "^2.0.0" + "run-async" "^2.2.0" + "rx" "^4.1.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.0" + "through" "^2.3.6" + +"inquirer@^6.3.1": + "integrity" "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz" + "version" "6.5.2" + dependencies: + "ansi-escapes" "^3.2.0" + "chalk" "^2.4.2" + "cli-cursor" "^2.1.0" + "cli-width" "^2.0.0" + "external-editor" "^3.0.3" + "figures" "^2.0.0" + "lodash" "^4.17.12" + "mute-stream" "0.0.7" + "run-async" "^2.2.0" + "rxjs" "^6.4.0" + "string-width" "^2.1.0" + "strip-ansi" "^5.1.0" + "through" "^2.3.6" + +"inquirer@^7.0.0", "inquirer@^7.1.0", "inquirer@7.3.3": + "integrity" "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" + "version" "7.3.3" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.19" + "mute-stream" "0.0.8" + "run-async" "^2.4.0" + "rxjs" "^6.6.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + +"insight@0.10.3": + "integrity" "sha512-YOncxSN6Omh+1Oqxt+OJAvJVMDKw7l6IEG0wT2cTMGxjsTcroOGW4IR926QDzxg/uZHcFZ2cZbckDWdZhc2pZw==" + "resolved" "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz" + "version" "0.10.3" + dependencies: + "async" "^2.6.2" + "chalk" "^2.4.2" + "conf" "^1.4.0" + "inquirer" "^6.3.1" + "lodash.debounce" "^4.0.8" + "os-name" "^3.1.0" + "request" "^2.88.0" + "tough-cookie" "^3.0.1" + "uuid" "^3.3.2" + +"internal-ip@^4.3.0": + "integrity" "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==" + "resolved" "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "default-gateway" "^4.2.0" + "ipaddr.js" "^1.9.0" + +"interpret@^1.0.0", "interpret@^1.4.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"invariant@^2.2.2", "invariant@^2.2.4": + "version" "2.2.4" + dependencies: + "loose-envify" "^1.0.0" + +"invert-kv@^3.0.0": + "integrity" "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz" + "version" "3.0.1" + +"ip-regex@^2.1.0": + "integrity" "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + "resolved" "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" + "version" "2.1.0" + +"ip@^1.1.0", "ip@^1.1.5", "ip@1.1.5": + "integrity" "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "resolved" "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" + "version" "1.1.5" + +"ipaddr.js@^1.9.0", "ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-absolute-url@^2.0.0": + "integrity" "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" + "version" "2.1.0" + +"is-absolute-url@^3.0.3": + "integrity" "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" + "version" "3.0.3" + +"is-accessor-descriptor@^0.1.6": + "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "kind-of" "^3.0.2" + +"is-accessor-descriptor@^1.0.0": + "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-arguments@^1.0.4": + "version" "1.0.4" + +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-arrayish@^0.3.1": + "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + "version" "0.3.2" + +"is-bigint@^1.0.1": + "integrity" "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" + "version" "1.0.2" + +"is-binary-path@^1.0.0": + "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "binary-extensions" "^1.0.0" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "call-bind" "^1.0.2" + +"is-buffer@^1.1.5": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + +"is-callable@^1.1.4", "is-callable@^1.2.3": + "integrity" "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" + "version" "1.2.3" + +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ci-info" "^2.0.0" + +"is-color-stop@^1.0.0": + "integrity" "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=" + "resolved" "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "css-color-names" "^0.0.4" + "hex-color-regex" "^1.1.0" + "hsl-regex" "^1.0.0" + "hsla-regex" "^1.0.0" + "rgb-regex" "^1.0.1" + "rgba-regex" "^1.0.0" + +"is-data-descriptor@^0.1.4": + "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" + +"is-data-descriptor@^1.0.0": + "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-date-object@^1.0.1": + "version" "1.0.2" + +"is-descriptor@^0.1.0": + "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "is-accessor-descriptor" "^0.1.6" + "is-data-descriptor" "^0.1.4" + "kind-of" "^5.0.0" + +"is-descriptor@^1.0.0": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" + +"is-descriptor@^1.0.2": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" + +"is-directory@^0.3.1": + "integrity" "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + "resolved" "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" + "version" "0.3.1" + +"is-docker@^2.0.0": + "version" "2.0.0" + +"is-extendable@^0.1.0", "is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" + +"is-extendable@^1.0.1": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-plain-object" "^2.0.4" + +"is-extglob@^2.1.0", "is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-glob@^3.1.0": + "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-extglob" "^2.1.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-module@^1.0.0": + "integrity" "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + "resolved" "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + "version" "1.0.0" + +"is-negative-zero@^2.0.1": + "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" + "version" "2.0.1" + +"is-number-like@^1.0.3": + "integrity" "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==" + "resolved" "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "lodash.isfinite" "^3.3.2" + +"is-number-object@^1.0.4": + "integrity" "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz" + "version" "1.0.5" + +"is-number@^3.0.0": + "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "kind-of" "^3.0.2" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-obj@^1.0.0": + "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + "version" "1.0.1" + +"is-obj@^1.0.1": + "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + "version" "1.0.1" + +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" + +"is-observable@^1.1.0": + "integrity" "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==" + "resolved" "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "symbol-observable" "^1.1.0" + +"is-path-cwd@^1.0.0": + "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + "version" "1.0.0" + +"is-path-cwd@^2.0.0": + "integrity" "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + "version" "2.2.0" + +"is-path-in-cwd@^1.0.0": + "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-path-inside" "^1.0.0" + +"is-path-in-cwd@^2.0.0": + "integrity" "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "is-path-inside" "^2.1.0" + +"is-path-inside@^1.0.0": + "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY=" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "path-is-inside" "^1.0.1" + +"is-path-inside@^2.1.0": + "integrity" "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "path-is-inside" "^1.0.2" + +"is-plain-obj@^1.0.0", "is-plain-obj@^1.1.0": + "integrity" "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + "version" "1.1.0" + +"is-plain-obj@^2.1.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" + +"is-plain-object@^2.0.3", "is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-potential-custom-element-name@^1.0.0": + "version" "1.0.0" + +"is-promise@^2.1.0": + "integrity" "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz" + "version" "2.2.2" + +"is-redirect@^1.0.0": + "integrity" "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "resolved" "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz" + "version" "1.0.0" + +"is-regex@^1.0.4", "is-regex@^1.1.3": + "integrity" "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "call-bind" "^1.0.2" + "has-symbols" "^1.0.2" + +"is-regexp@^1.0.0": + "integrity" "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "resolved" "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + "version" "1.0.0" + +"is-resolvable@^1.0.0": + "integrity" "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + "version" "1.1.0" + +"is-retry-allowed@^1.0.0": + "integrity" "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + "version" "1.2.0" + +"is-scoped@^1.0.0": + "integrity" "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=" + "resolved" "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "scoped-regex" "^1.0.0" + +"is-stream@^1.0.0", "is-stream@^1.1.0": + "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^2.0.0": + "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" + "version" "2.0.0" + +"is-string@^1.0.5", "is-string@^1.0.6": + "integrity" "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" + "version" "1.0.6" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "version" "1.0.3" + dependencies: + "has-symbols" "^1.0.1" + +"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": + "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"is-utf8@^0.2.0", "is-utf8@^0.2.1": + "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + "version" "0.2.1" + +"is-windows@^1.0.1", "is-windows@^1.0.2": + "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + "version" "1.0.2" + +"is-wsl@^1.1.0": + "integrity" "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + "version" "1.1.0" + +"is-wsl@^2.1.1": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@2.0.1": + "integrity" "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz" + "version" "2.0.1" + +"isbinaryfile@^4.0.0": + "version" "4.0.6" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^2.0.0": + "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "isarray" "1.0.0" + +"isobject@^3.0.0", "isobject@^3.0.1": + "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"isstream@~0.1.2": + "integrity" "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "version" "0.1.2" + +"istanbul-lib-coverage@^3.0.0": + "integrity" "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz" + "version" "3.0.0" + +"istanbul-lib-instrument@^4.0.0", "istanbul-lib-instrument@^4.0.3": + "integrity" "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-coverage" "^3.0.0" + "semver" "^6.3.0" + +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" + +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" + +"istanbul-reports@^3.0.2": + "integrity" "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" + +"istextorbinary@^2.5.1": + "integrity" "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==" + "resolved" "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "binaryextensions" "^2.1.2" + "editions" "^2.2.0" + "textextensions" "^2.5.0" + +"jake@^10.6.1": + "integrity" "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==" + "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz" + "version" "10.8.2" + dependencies: + "async" "0.9.x" + "chalk" "^2.4.2" + "filelist" "^1.0.1" + "minimatch" "^3.0.4" + +"jasmine-core@~2.8.0": + "integrity" "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=" + "resolved" "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz" + "version" "2.8.0" + +"jasmine@2.8.0": + "integrity" "sha1-awicChFXax8W3xG4AUbZHU6Lij4=" + "resolved" "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz" + "version" "2.8.0" + dependencies: + "exit" "^0.1.2" + "glob" "^7.0.6" + "jasmine-core" "~2.8.0" + +"jasminewd2@^2.1.0": + "integrity" "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=" + "resolved" "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz" + "version" "2.2.0" + +"java-parser@0.8.2": + "integrity" "sha512-YphTEk4zIpWAHqBriAdjlNnTEcEYQ2xBA8KOH5V7QxggNbxjkeEcKJjNYnQvqEue8+O1TLj7vfL0NVG6x5LGMw==" + "resolved" "https://registry.npmjs.org/java-parser/-/java-parser-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "chevrotain" "6.5.0" + "lodash" "4.17.20" + +"jest-changed-files@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "execa" "^4.0.0" + "throat" "^5.0.0" + +"jest-cli@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/core" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "import-local" "^3.0.2" + "is-ci" "^2.0.0" + "jest-config" "^26.1.0" + "jest-util" "^26.1.0" + "jest-validate" "^26.1.0" + "prompts" "^2.0.1" + "yargs" "^15.3.1" + +"jest-config@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.1.0" + "@jest/types" "^26.1.0" + "babel-jest" "^26.1.0" + "chalk" "^4.0.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.1" + "graceful-fs" "^4.2.4" + "jest-environment-jsdom" "^26.1.0" + "jest-environment-node" "^26.1.0" + "jest-get-type" "^26.0.0" + "jest-jasmine2" "^26.1.0" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.1.0" + "jest-util" "^26.1.0" + "jest-validate" "^26.1.0" + "micromatch" "^4.0.2" + "pretty-format" "^26.1.0" + +"jest-date-mock@1.0.8": + "integrity" "sha512-0Lyp+z9xvuNmLbK+5N6FOhSiBeux05Lp5bbveFBmYo40Aggl2wwxFoIrZ+rOWC8nDNcLeBoDd2miQdEDSf3iQw==" + "resolved" "https://registry.npmjs.org/jest-date-mock/-/jest-date-mock-1.0.8.tgz" + "version" "1.0.8" + +"jest-diff@^25.2.1": + "integrity" "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "chalk" "^3.0.0" + "diff-sequences" "^25.2.6" + "jest-get-type" "^25.2.6" + "pretty-format" "^25.5.0" + +"jest-diff@^26.1.0": + "version" "26.1.0" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^26.0.0" + "jest-get-type" "^26.0.0" + "pretty-format" "^26.1.0" + +"jest-docblock@^26.0.0": + "integrity" "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz" + "version" "26.0.0" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "jest-get-type" "^26.0.0" + "jest-util" "^26.1.0" + "pretty-format" "^26.1.0" + +"jest-environment-jsdom@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + "jest-mock" "^26.1.0" + "jest-util" "^26.1.0" + "jsdom" "^16.2.2" + +"jest-environment-node@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + "jest-mock" "^26.1.0" + "jest-util" "^26.1.0" + +"jest-get-type@^25.2.6": + "integrity" "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz" + "version" "25.2.6" + +"jest-get-type@^26.0.0": + "version" "26.0.0" + +"jest-haste-map@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "@types/graceful-fs" "^4.1.2" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-serializer" "^26.1.0" + "jest-util" "^26.1.0" + "jest-worker" "^26.1.0" + "micromatch" "^4.0.2" + "sane" "^4.0.3" + "walker" "^1.0.7" + "which" "^2.0.2" + optionalDependencies: + "fsevents" "^2.1.2" + +"jest-jasmine2@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.1.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "co" "^4.6.0" + "expect" "^26.1.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^26.1.0" + "jest-matcher-utils" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-runtime" "^26.1.0" + "jest-snapshot" "^26.1.0" + "jest-util" "^26.1.0" + "pretty-format" "^26.1.0" + "throat" "^5.0.0" + +"jest-junit@11.0.1": + "integrity" "sha512-stgc0mBoiSg/F9qWd4KkmR3K7Nk2u+M/dc1oup7gxz9mrzGcEaU2YL9/0QscVqqg3IOaA1P5ZXtozG/XR6j6nw==" + "resolved" "https://registry.npmjs.org/jest-junit/-/jest-junit-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "mkdirp" "^1.0.4" + "strip-ansi" "^5.2.0" + "uuid" "^3.3.3" + "xml" "^1.0.1" + +"jest-leak-detector@^26.1.0": + "version" "26.1.0" + dependencies: + "jest-get-type" "^26.0.0" + "pretty-format" "^26.1.0" + +"jest-matcher-utils@^26.1.0": + "version" "26.1.0" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^26.1.0" + "jest-get-type" "^26.0.0" + "pretty-format" "^26.1.0" + +"jest-message-util@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.1.0" + "@types/stack-utils" "^1.0.1" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "micromatch" "^4.0.2" + "slash" "^3.0.0" + "stack-utils" "^2.0.2" + +"jest-mock@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + +"jest-pnp-resolver@^1.2.1": + "version" "1.2.2" + +"jest-preset-angular@8.2.1": + "integrity" "sha512-6t7lavnIHnZWz6a03jpZ5L7phMefi6SoBIRZ/GQdyML8YgwMtbJszbhUE+dh5lzmeNbd6AJ1gfleetGy2Rg4cQ==" + "resolved" "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-8.2.1.tgz" + "version" "8.2.1" + dependencies: + "pretty-format" "^26.0.0" + "ts-jest" "^26.0.0" + +"jest-regex-util@^26.0.0": + "integrity" "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz" + "version" "26.0.0" + +"jest-resolve-dependencies@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "jest-regex-util" "^26.0.0" + "jest-snapshot" "^26.1.0" + +"jest-resolve@*", "jest-resolve@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "jest-pnp-resolver" "^1.2.1" + "jest-util" "^26.1.0" + "read-pkg-up" "^7.0.1" + "resolve" "^1.17.0" + "slash" "^3.0.0" + +"jest-runner@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/console" "^26.1.0" + "@jest/environment" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-config" "^26.1.0" + "jest-docblock" "^26.0.0" + "jest-haste-map" "^26.1.0" + "jest-jasmine2" "^26.1.0" + "jest-leak-detector" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-resolve" "^26.1.0" + "jest-runtime" "^26.1.0" + "jest-util" "^26.1.0" + "jest-worker" "^26.1.0" + "source-map-support" "^0.5.6" + "throat" "^5.0.0" + +"jest-runtime@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/console" "^26.1.0" + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/globals" "^26.1.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/yargs" "^15.0.0" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.4" + "jest-config" "^26.1.0" + "jest-haste-map" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-mock" "^26.1.0" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.1.0" + "jest-snapshot" "^26.1.0" + "jest-util" "^26.1.0" + "jest-validate" "^26.1.0" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + "yargs" "^15.3.1" + +"jest-serializer@^26.1.0": + "version" "26.1.0" + dependencies: + "graceful-fs" "^4.2.4" + +"jest-snapshot@^26.1.0": + "version" "26.1.0" + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.1.0" + "@types/prettier" "^2.0.0" + "chalk" "^4.0.0" + "expect" "^26.1.0" + "graceful-fs" "^4.2.4" + "jest-diff" "^26.1.0" + "jest-get-type" "^26.0.0" + "jest-haste-map" "^26.1.0" + "jest-matcher-utils" "^26.1.0" + "jest-message-util" "^26.1.0" + "jest-resolve" "^26.1.0" + "natural-compare" "^1.4.0" + "pretty-format" "^26.1.0" + "semver" "^7.3.2" + +"jest-sonar-reporter@2.0.0": + "integrity" "sha512-ZervDCgEX5gdUbdtWsjdipLN3bKJwpxbvhkYNXTAYvAckCihobSLr9OT/IuyNIRT1EZMDDwR6DroWtrq+IL64w==" + "resolved" "https://registry.npmjs.org/jest-sonar-reporter/-/jest-sonar-reporter-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "xml" "^1.0.1" + +"jest-util@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "is-ci" "^2.0.0" + "micromatch" "^4.0.2" + +"jest-validate@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "camelcase" "^6.0.0" + "chalk" "^4.0.0" + "jest-get-type" "^26.0.0" + "leven" "^3.1.0" + "pretty-format" "^26.1.0" + +"jest-watcher@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "jest-util" "^26.1.0" + "string-length" "^4.0.1" + +"jest-worker@^24.9.0": + "integrity" "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz" + "version" "24.9.0" + dependencies: + "merge-stream" "^2.0.0" + "supports-color" "^6.1.0" + +"jest-worker@^26.0.0", "jest-worker@^26.1.0": + "version" "26.1.0" + dependencies: + "merge-stream" "^2.0.0" + "supports-color" "^7.0.0" + +"jest@^26.0.0", "jest@>=26 <27", "jest@26.1.0": + "integrity" "sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==" + "resolved" "https://registry.npmjs.org/jest/-/jest-26.1.0.tgz" + "version" "26.1.0" + dependencies: + "@jest/core" "^26.1.0" + "import-local" "^3.0.2" + "jest-cli" "^26.1.0" + +"jhipster-core@7.3.4": + "integrity" "sha512-AUhT69kNkqppaJZVfan/xnKG4Gs9Ggj7YLtTZFVe+xg+THrbMb5Ng7PL07PDlDw4KAEA33GMCwuAf65E8EpC4g==" + "resolved" "https://registry.npmjs.org/jhipster-core/-/jhipster-core-7.3.4.tgz" + "version" "7.3.4" + dependencies: + "chevrotain" "7.0.1" + "fs-extra" "8.1.0" + "lodash" "4.17.15" + "winston" "3.2.1" + +"jmespath@0.15.0": + "integrity" "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + "resolved" "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz" + "version" "0.15.0" + +"jquery@^3.6.0", "jquery@1.9.1 - 3": + "version" "3.6.0" + +"js-object-pretty-print@0.3.0": + "integrity" "sha1-RnDkUAZu4ezPNRdMfRl/WqOLz3Q=" + "resolved" "https://registry.npmjs.org/js-object-pretty-print/-/js-object-pretty-print-0.3.0.tgz" + "version" "0.3.0" + +"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1", "js-yaml@3.14.0": + "integrity" "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" + "version" "3.14.0" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@4.0.0": + "integrity" "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "argparse" "^2.0.1" + +"jsbn@~0.1.0": + "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"jsdom@^16.2.2": + "version" "16.2.2" + dependencies: + "abab" "^2.0.3" + "acorn" "^7.1.1" + "acorn-globals" "^6.0.0" + "cssom" "^0.4.4" + "cssstyle" "^2.2.0" + "data-urls" "^2.0.0" + "decimal.js" "^10.2.0" + "domexception" "^2.0.1" + "escodegen" "^1.14.1" + "html-encoding-sniffer" "^2.0.1" + "is-potential-custom-element-name" "^1.0.0" + "nwsapi" "^2.2.0" + "parse5" "5.1.1" + "request" "^2.88.2" + "request-promise-native" "^1.0.8" + "saxes" "^5.0.0" + "symbol-tree" "^3.2.4" + "tough-cookie" "^3.0.1" + "w3c-hr-time" "^1.0.2" + "w3c-xmlserializer" "^2.0.0" + "webidl-conversions" "^6.0.0" + "whatwg-encoding" "^1.0.5" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + "ws" "^7.2.3" + "xml-name-validator" "^3.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"jsesc@~0.5.0": + "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" + +"json-parse-better-errors@^1.0.0", "json-parse-better-errors@^1.0.1", "json-parse-better-errors@^1.0.2": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"json-parse-even-better-errors@^2.3.0": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-typed@^7.0.1": + "integrity" "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + "resolved" "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz" + "version" "7.0.3" + +"json-schema@0.2.3": + "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" + "version" "0.2.3" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stringify-safe@~5.0.1": + "integrity" "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "version" "5.0.1" + +"json3@^3.3.2": + "integrity" "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "resolved" "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz" + "version" "3.3.3" + +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"json5@^2.1.0", "json5@^2.1.2", "json5@2.x": + "version" "2.1.3" + dependencies: + "minimist" "^1.2.5" + +"jsonc-parser@2.3.0": + "integrity" "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz" + "version" "2.3.0" + +"jsonfile@^3.0.0": + "integrity" "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" + "version" "3.0.1" + optionalDependencies: + "graceful-fs" "^4.1.6" + +"jsonfile@^4.0.0": + "integrity" "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" + optionalDependencies: + "graceful-fs" "^4.1.6" + +"jsonparse@^1.2.0": + "integrity" "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + "version" "1.3.1" + +"JSONStream@^1.2.1", "JSONStream@^1.3.4", "JSONStream@^1.3.5": + "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" + "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "jsonparse" "^1.2.0" + "through" ">=2.2.7 <3" + +"jsprim@^1.2.2": + "integrity" "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.2.3" + "verror" "1.10.0" + +"jszip@^3.1.3": + "version" "3.5.0" + dependencies: + "lie" "~3.3.0" + "pako" "~1.0.2" + "readable-stream" "~2.3.6" + "set-immediate-shim" "~1.0.1" + +"katex@^0.12.0": + "integrity" "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==" + "resolved" "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz" + "version" "0.12.0" + dependencies: + "commander" "^2.19.0" + +"killable@^1.0.1": + "integrity" "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "resolved" "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" + "version" "1.0.1" + +"kind-of@^3.0.2": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^3.0.3": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^3.2.0": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^4.0.0": + "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^5.0.0": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^6.0.0", "kind-of@^6.0.2", "kind-of@^6.0.3": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" + +"kuler@1.0.x": + "integrity" "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==" + "resolved" "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "colornames" "^1.1.1" + +"last-call-webpack-plugin@^3.0.0": + "integrity" "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==" + "resolved" "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "lodash" "^4.17.5" + "webpack-sources" "^1.1.0" + +"lazy-cache@^2.0.1": + "integrity" "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=" + "resolved" "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "set-getter" "^0.1.0" + +"lcid@^3.0.0": + "integrity" "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==" + "resolved" "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "invert-kv" "^3.0.0" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levenary@^1.1.1": + "version" "1.1.1" + dependencies: + "leven" "^3.1.0" + +"levn@^0.3.0", "levn@~0.3.0": + "integrity" "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"lie@~3.3.0": + "integrity" "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==" + "resolved" "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "immediate" "~3.0.5" + +"limiter@^1.0.5": + "integrity" "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + "resolved" "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" + "version" "1.1.5" + +"lines-and-columns@^1.1.6": + "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" + "version" "1.1.6" + +"lint-staged@8.2.1": + "integrity" "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz" + "version" "8.2.1" + dependencies: + "chalk" "^2.3.1" + "commander" "^2.14.1" + "cosmiconfig" "^5.2.0" + "debug" "^3.1.0" + "dedent" "^0.7.0" + "del" "^3.0.0" + "execa" "^1.0.0" + "g-status" "^2.0.2" + "is-glob" "^4.0.0" + "is-windows" "^1.0.2" + "listr" "^0.14.2" + "listr-update-renderer" "^0.5.0" + "lodash" "^4.17.11" + "log-symbols" "^2.2.0" + "micromatch" "^3.1.8" + "npm-which" "^3.0.1" + "p-map" "^1.1.1" + "path-is-inside" "^1.0.2" + "pify" "^3.0.0" + "please-upgrade-node" "^3.0.2" + "staged-git-files" "1.1.2" + "string-argv" "^0.0.2" + "stringify-object" "^3.2.2" + "yup" "^0.27.0" + +"listr-silent-renderer@^1.1.1": + "integrity" "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" + "resolved" "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz" + "version" "1.1.1" + +"listr-update-renderer@^0.5.0": + "integrity" "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==" + "resolved" "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz" + "version" "0.5.0" + dependencies: + "chalk" "^1.1.3" + "cli-truncate" "^0.2.1" + "elegant-spinner" "^1.0.1" + "figures" "^1.7.0" + "indent-string" "^3.0.0" + "log-symbols" "^1.0.2" + "log-update" "^2.3.0" + "strip-ansi" "^3.0.1" + +"listr-verbose-renderer@^0.5.0": + "integrity" "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==" + "resolved" "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz" + "version" "0.5.0" + dependencies: + "chalk" "^2.4.1" + "cli-cursor" "^2.1.0" + "date-fns" "^1.27.2" + "figures" "^2.0.0" + +"listr@^0.14.2": + "integrity" "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==" + "resolved" "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz" + "version" "0.14.3" + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + "is-observable" "^1.1.0" + "is-promise" "^2.1.0" + "is-stream" "^1.1.0" + "listr-silent-renderer" "^1.1.1" + "listr-update-renderer" "^0.5.0" + "listr-verbose-renderer" "^0.5.0" + "p-map" "^2.0.0" + "rxjs" "^6.3.3" + +"loader-runner@^2.3.1", "loader-runner@^2.4.0": + "integrity" "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + "version" "2.4.0" + +"loader-utils@^1.0.0": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^1.0.2": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^1.1.0": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^1.2.3": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^1.4.0": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^2.0.0": + "integrity" "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^2.1.2" + +"localtunnel@^2.0.1": + "integrity" "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==" + "resolved" "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "axios" "0.21.1" + "debug" "4.3.1" + "openurl" "1.1.1" + "yargs" "16.2.0" + +"locate-path@^2.0.0": + "integrity" "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-locate" "^2.0.0" + "path-exists" "^3.0.0" + +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash._reinterpolate@^3.0.0": + "integrity" "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + "resolved" "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" + "version" "3.0.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.difference@^4.5.0": + "integrity" "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "resolved" "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" + "version" "4.5.0" + +"lodash.isfinite@^3.3.2": + "integrity" "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" + "resolved" "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz" + "version" "3.3.2" + +"lodash.memoize@^4.1.2", "lodash.memoize@4.x": + "integrity" "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.pad@^4.1.0": + "integrity" "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + "resolved" "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" + "version" "4.5.1" + +"lodash.padend@^4.1.0": + "integrity" "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + "resolved" "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" + "version" "4.6.1" + +"lodash.padstart@^4.1.0": + "integrity" "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + "resolved" "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" + "version" "4.6.1" + +"lodash.sortby@^4.7.0": + "version" "4.7.0" + +"lodash.template@^4.5.0": + "integrity" "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==" + "resolved" "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "lodash._reinterpolate" "^3.0.0" + "lodash.templatesettings" "^4.0.0" + +"lodash.templatesettings@^4.0.0": + "integrity" "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==" + "resolved" "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "lodash._reinterpolate" "^3.0.0" + +"lodash.uniq@^4.5.0": + "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + "version" "4.5.0" + +"lodash@^4", "lodash@^4.17.10", "lodash@^4.17.11", "lodash@^4.17.12", "lodash@^4.17.13", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.21", "lodash@^4.17.5", "lodash@^4.3.0": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"lodash@4.17.15": + "integrity" "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" + "version" "4.17.15" + +"lodash@4.17.20": + "integrity" "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz" + "version" "4.17.20" + +"log-symbols@^1.0.2": + "integrity" "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "chalk" "^1.0.0" + +"log-symbols@^2.2.0": + "integrity" "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "chalk" "^2.0.1" + +"log-symbols@^3.0.0": + "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "chalk" "^2.4.2" + +"log-symbols@^4.0.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"log-symbols@4.0.0": + "integrity" "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "chalk" "^4.0.0" + +"log-update@^2.3.0", "log-update@2.3.x": + "integrity" "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "ansi-escapes" "^3.0.0" + "cli-cursor" "^2.0.0" + "wrap-ansi" "^3.0.1" + +"logform@^2.1.1": + "integrity" "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==" + "resolved" "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "colors" "^1.2.1" + "fast-safe-stringify" "^2.0.4" + "fecha" "^4.2.0" + "ms" "^2.1.1" + "triple-beam" "^1.3.0" + +"loglevel@^1.6.8": + "version" "1.6.8" + +"loose-envify@^1.0.0": + "version" "1.4.0" + dependencies: + "js-tokens" "^3.0.0 || ^4.0.0" + +"lower-case@^2.0.1": + "version" "2.0.1" + dependencies: + "tslib" "^1.10.0" + +"lowercase-keys@^1.0.0": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"macos-release@^2.2.0": + "integrity" "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==" + "resolved" "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz" + "version" "2.4.1" + +"magic-string@^0.25.0", "magic-string@^0.25.5", "magic-string@0.25.7": + "integrity" "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + "version" "0.25.7" + dependencies: + "sourcemap-codec" "^1.4.4" + +"make-dir@^1.0.0": + "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "pify" "^3.0.0" + +"make-dir@^2.0.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.0", "make-dir@^3.0.2": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1", "make-error@1.x": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"make-fetch-happen@^5.0.0": + "integrity" "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz" + "version" "5.0.2" + dependencies: + "agentkeepalive" "^3.4.1" + "cacache" "^12.0.0" + "http-cache-semantics" "^3.8.1" + "http-proxy-agent" "^2.1.0" + "https-proxy-agent" "^2.2.3" + "lru-cache" "^5.1.1" + "mississippi" "^3.0.0" + "node-fetch-npm" "^2.0.2" + "promise-retry" "^1.1.1" + "socks-proxy-agent" "^4.0.0" + "ssri" "^6.0.0" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"map-age-cleaner@^0.1.3": + "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" + "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "p-defer" "^1.0.0" + +"map-cache@^0.2.2": + "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + "version" "0.2.2" + +"map-obj@^1.0.0": + "integrity" "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + "version" "1.0.1" + +"map-obj@^4.0.0": + "version" "4.1.0" + +"map-visit@^1.0.0": + "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "object-visit" "^1.0.0" + +"marked@^1.1.0": + "integrity" "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==" + "resolved" "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz" + "version" "1.2.9" + +"matcher@^1.0.0": + "integrity" "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==" + "resolved" "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "escape-string-regexp" "^1.0.4" + +"md5.js@^1.3.4": + "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" + "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"mdn-data@2.0.14": + "integrity" "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + "version" "2.0.14" + +"mdn-data@2.0.4": + "integrity" "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + "version" "2.0.4" + +"media-typer@0.3.0": + "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"mem-fs-editor@^6.0.0": + "integrity" "sha512-e0WfJAMm8Gv1mP5fEq/Blzy6Lt1VbLg7gNnZmZak7nhrBTibs+c6nQ4SKs/ZyJYHS1mFgDJeopsLAv7Ow0FMFg==" + "resolved" "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "commondir" "^1.0.1" + "deep-extend" "^0.6.0" + "ejs" "^2.6.1" + "glob" "^7.1.4" + "globby" "^9.2.0" + "isbinaryfile" "^4.0.0" + "mkdirp" "^0.5.0" + "multimatch" "^4.0.0" + "rimraf" "^2.6.3" + "through2" "^3.0.1" + "vinyl" "^2.2.0" + +"mem-fs-editor@^7.0.1": + "integrity" "sha512-BH6QEqCXSqGeX48V7zu+e3cMwHU7x640NB8Zk8VNvVZniz+p4FK60pMx/3yfkzo6miI6G3a8pH6z7FeuIzqrzA==" + "resolved" "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "commondir" "^1.0.1" + "deep-extend" "^0.6.0" + "ejs" "^3.1.5" + "glob" "^7.1.4" + "globby" "^9.2.0" + "isbinaryfile" "^4.0.0" + "mkdirp" "^1.0.0" + "multimatch" "^4.0.0" + "rimraf" "^3.0.0" + "through2" "^3.0.2" + "vinyl" "^2.2.1" + +"mem-fs@^1.1.0": + "integrity" "sha512-b8g0jWKdl8pM0LqAPdK9i8ERL7nYrzmJfRhxMiWH2uYdfYnb7uXnmwVb0ZGe7xyEl4lj+nLIU3yf4zPUT+XsVQ==" + "resolved" "https://registry.npmjs.org/mem-fs/-/mem-fs-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "through2" "^3.0.0" + "vinyl" "^2.0.1" + "vinyl-file" "^3.0.0" + +"mem@^5.0.0": + "integrity" "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==" + "resolved" "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "map-age-cleaner" "^0.1.3" + "mimic-fn" "^2.1.0" + "p-is-promise" "^2.1.0" + +"memory-fs@^0.4.1": + "integrity" "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=" + "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "errno" "^0.1.3" + "readable-stream" "^2.0.1" + +"memory-fs@^0.5.0": + "integrity" "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==" + "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" + "version" "0.5.0" + dependencies: + "errno" "^0.1.3" + "readable-stream" "^2.0.1" + +"meow@6.1.0": + "integrity" "sha512-iIAoeI01v6pmSfObAAWFoITAA4GgiT45m4SmJgoxtZfvI0fyZwhV4d0lTwiUXvAKIPlma05Feb2Xngl52Mj5Cg==" + "resolved" "https://registry.npmjs.org/meow/-/meow-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "@types/minimist" "^1.2.0" + "camelcase-keys" "^6.1.1" + "decamelize-keys" "^1.1.0" + "hard-rejection" "^2.0.0" + "minimist-options" "^4.0.1" + "normalize-package-data" "^2.5.0" + "read-pkg-up" "^7.0.0" + "redent" "^3.0.0" + "trim-newlines" "^3.0.0" + "type-fest" "^0.8.1" + "yargs-parser" "^18.1.1" + +"merge-descriptors@1.0.1": + "integrity" "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" + +"merge-jsons-webpack-plugin@1.0.21": + "integrity" "sha512-5Brw0DBi7tF48gm3BB21hu3qYWUMHuKWHKNqdZYmGTQlZQFTc63VFY/5LgonqusI/b0uvvjkpTdx1WrjInXreQ==" + "resolved" "https://registry.npmjs.org/merge-jsons-webpack-plugin/-/merge-jsons-webpack-plugin-1.0.21.tgz" + "version" "1.0.21" + dependencies: + "es6-promise" "4.0.5" + "glob" "7.1.1" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.2.3", "merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"methods@~1.1.2": + "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^3.0.4", "micromatch@^3.1.10", "micromatch@^3.1.4", "micromatch@^3.1.8": + "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + "version" "3.1.10" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "braces" "^2.3.1" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "extglob" "^2.0.4" + "fragment-cache" "^0.2.1" + "kind-of" "^6.0.2" + "nanomatch" "^1.2.9" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.2" + +"micromatch@^4.0.0": + "version" "4.0.2" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.0.5" + +"micromatch@^4.0.2": + "version" "4.0.2" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.0.5" + +"micromatch@4.x": + "version" "4.0.2" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.0.5" + +"miller-rabin@^4.0.0": + "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" + "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "bn.js" "^4.0.0" + "brorand" "^1.0.1" + +"mime-db@>= 1.43.0 < 2", "mime-db@1.44.0": + "version" "1.44.0" + +"mime-types@^2.1.12", "mime-types@~2.1.17", "mime-types@~2.1.19", "mime-types@~2.1.24": + "version" "2.1.27" + dependencies: + "mime-db" "1.44.0" + +"mime@^2.4.4": + "version" "2.4.6" + +"mime@1.4.1": + "integrity" "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz" + "version" "1.4.1" + +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^1.0.0": + "integrity" "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" + "version" "1.2.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"min-indent@^1.0.0": + "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + "version" "1.0.1" + +"mini-css-extract-plugin@0.9.0": + "integrity" "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==" + "resolved" "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz" + "version" "0.9.0" + dependencies: + "loader-utils" "^1.1.0" + "normalize-url" "1.9.1" + "schema-utils" "^1.0.0" + "webpack-sources" "^1.1.0" + +"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-crypto-utils@^1.0.1": + "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.2", "minimatch@^3.0.4", "minimatch@3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist-options@^4.0.1": + "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" + "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "arrify" "^1.0.1" + "is-plain-obj" "^1.1.0" + "kind-of" "^6.0.3" + +"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.5": + "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + "version" "1.2.5" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.2": + "version" "1.2.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^2.3.5", "minipass@^2.6.0", "minipass@^2.8.6", "minipass@^2.9.0": + "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + "version" "2.9.0" + dependencies: + "safe-buffer" "^5.1.2" + "yallist" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.1": + "integrity" "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^1.2.1": + "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + "version" "1.3.3" + dependencies: + "minipass" "^2.9.0" + +"minizlib@^2.1.0": + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mississippi@^3.0.0": + "integrity" "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==" + "resolved" "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "concat-stream" "^1.5.0" + "duplexify" "^3.4.2" + "end-of-stream" "^1.1.0" + "flush-write-stream" "^1.0.0" + "from2" "^2.1.0" + "parallel-transform" "^1.1.0" + "pump" "^3.0.0" + "pumpify" "^1.3.3" + "stream-each" "^1.1.0" + "through2" "^2.0.0" + +"mitt@^1.1.3": + "integrity" "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==" + "resolved" "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz" + "version" "1.2.0" + +"mixin-deep@^1.2.0": + "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" + "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "for-in" "^1.0.2" + "is-extendable" "^1.0.1" + +"mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@~0.5.1": + "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + "version" "0.5.5" + dependencies: + "minimist" "^1.2.5" + +"mkdirp@^1.0.0": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@1.x": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mocha@^8.4.0": + "version" "8.4.0" + dependencies: + "@ungap/promise-all-settled" "1.1.2" + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.1" + "debug" "4.3.1" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.1.6" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "4.0.0" + "log-symbols" "4.0.0" + "minimatch" "3.0.4" + "ms" "2.1.3" + "nanoid" "3.1.20" + "serialize-javascript" "5.0.1" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "which" "2.0.2" + "wide-align" "1.1.3" + "workerpool" "6.1.0" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"moment-locales-webpack-plugin@1.2.0": + "integrity" "sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ==" + "resolved" "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "lodash.difference" "^4.5.0" + +"moment@^2.15.1", "moment@^2.22.1", "moment@^2.24.0", "moment@^2.8.0", "moment@2.27.0": + "integrity" "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz" + "version" "2.27.0" + +"move-concurrently@^1.0.1": + "integrity" "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=" + "resolved" "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "aproba" "^1.1.1" + "copy-concurrently" "^1.0.0" + "fs-write-stream-atomic" "^1.0.8" + "mkdirp" "^0.5.1" + "rimraf" "^2.5.4" + "run-queue" "^1.0.3" + +"ms@^2.0.0", "ms@^2.1.1", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.1": + "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + "version" "2.1.1" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"multicast-dns-service-types@^1.1.0": + "integrity" "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + "resolved" "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" + "version" "1.1.0" + +"multicast-dns@^6.0.1": + "integrity" "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==" + "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" + "version" "6.2.3" + dependencies: + "dns-packet" "^1.3.1" + "thunky" "^1.0.2" + +"multimatch@^4.0.0": + "integrity" "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==" + "resolved" "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@types/minimatch" "^3.0.3" + "array-differ" "^3.0.0" + "array-union" "^2.1.0" + "arrify" "^2.0.1" + "minimatch" "^3.0.4" + +"mute-stream@0.0.6": + "integrity" "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz" + "version" "0.0.6" + +"mute-stream@0.0.7": + "integrity" "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" + "version" "0.0.7" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nan@^2.12.1": + "version" "2.14.1" + +"nanoid@3.1.20": + "integrity" "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" + "version" "3.1.20" + +"nanomatch@^1.2.9": + "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" + "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "fragment-cache" "^0.2.1" + "is-windows" "^1.0.2" + "kind-of" "^6.0.2" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"negotiator@0.6.2": + "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + "version" "0.6.2" + +"neo-async@^2.5.0", "neo-async@^2.6.0", "neo-async@^2.6.1": + "version" "2.6.1" + +"ng-jhipster@0.14.0": + "integrity" "sha512-f6S8gkGLVOLYcODykhhgGkqY3zTO/VIc2oavvkN8pg7BAqIwj7gkLjrPnYTF4IDH9taSDkkD+Oizp4XLPEEc4A==" + "resolved" "https://registry.npmjs.org/ng-jhipster/-/ng-jhipster-0.14.0.tgz" + "version" "0.14.0" + dependencies: + "tslib" "^2.0.0" + +"ngx-cookie-service@^3.1.3": + "version" "3.1.3" + dependencies: + "tslib" "^1.10.0" + +"ngx-infinite-scroll@9.0.0": + "integrity" "sha512-C8JhvrTip/AKv6f8oiB+GJjW+FGE3EPIc3Kk+v3MICGlW0nkOetyJDe/ejXr8tI8zwbNjbfvAKFRKenibDIW6w==" + "resolved" "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-9.0.0.tgz" + "version" "9.0.0" + dependencies: + "@scarf/scarf" "0.1.5" + "opencollective-postinstall" "^2.0.2" + +"ngx-markdown@^10.1.1": + "integrity" "sha512-bUVgN6asb35d5U4xM5CNfo7pSpuwqJSdTgK0PhNZzLiaiyPIK2owtLF6sWGhxTThJu+LngJPjj4MQ+AFe/s8XQ==" + "resolved" "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-10.1.1.tgz" + "version" "10.1.1" + dependencies: + "@types/marked" "^1.1.0" + "emoji-toolkit" "^6.0.1" + "katex" "^0.12.0" + "marked" "^1.1.0" + "prismjs" "^1.20.0" + "tslib" "^2.0.0" + +"ngx-webstorage@5.0.0": + "integrity" "sha512-m96dBjUgLCpaknLRKfsJMEik393xrSX0EwO3paNSkS5d+xj2/cAendE3NwJeKY/W1D9EkKAhCvSUDX9/bAwCUg==" + "resolved" "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-5.0.0.tgz" + "version" "5.0.0" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"no-case@^3.0.3": + "version" "3.0.3" + dependencies: + "lower-case" "^2.0.1" + "tslib" "^1.10.0" + +"node-fetch-npm@^2.0.2": + "integrity" "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==" + "resolved" "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "encoding" "^0.1.11" + "json-parse-better-errors" "^1.0.0" + "safe-buffer" "^5.1.1" + +"node-forge@^0.10.0": + "integrity" "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" + "version" "0.10.0" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-libs-browser@^2.2.1": + "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" + "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "assert" "^1.1.1" + "browserify-zlib" "^0.2.0" + "buffer" "^4.3.0" + "console-browserify" "^1.1.0" + "constants-browserify" "^1.0.0" + "crypto-browserify" "^3.11.0" + "domain-browser" "^1.1.1" + "events" "^3.0.0" + "https-browserify" "^1.0.0" + "os-browserify" "^0.3.0" + "path-browserify" "0.0.1" + "process" "^0.11.10" + "punycode" "^1.2.4" + "querystring-es3" "^0.2.0" + "readable-stream" "^2.3.3" + "stream-browserify" "^2.0.1" + "stream-http" "^2.7.2" + "string_decoder" "^1.0.0" + "timers-browserify" "^2.0.4" + "tty-browserify" "0.0.0" + "url" "^0.11.0" + "util" "^0.11.0" + "vm-browserify" "^1.0.1" + +"node-modules-regexp@^1.0.0": + "integrity" "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + "resolved" "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz" + "version" "1.0.0" + +"node-notifier@^5.1.2": + "version" "5.4.3" + dependencies: + "growly" "^1.3.0" + "is-wsl" "^1.1.0" + "semver" "^5.5.0" + "shellwords" "^0.1.1" + "which" "^1.3.0" + +"node-notifier@^7.0.0": + "version" "7.0.1" + dependencies: + "growly" "^1.3.0" + "is-wsl" "^2.1.1" + "semver" "^7.2.1" + "shellwords" "^0.1.1" + "uuid" "^7.0.3" + "which" "^2.0.2" + +"node-releases@^1.1.71": + "version" "1.1.73" + +"normalize-package-data@^2.0.0", "normalize-package-data@^2.4.0", "normalize-package-data@^2.5.0": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-path@^2.1.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0", "normalize-path@3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-range@^0.1.2": + "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + "version" "0.1.2" + +"normalize-url@^3.0.0": + "integrity" "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" + "version" "3.3.0" + +"normalize-url@1.9.1": + "integrity" "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "object-assign" "^4.0.1" + "prepend-http" "^1.0.0" + "query-string" "^4.1.0" + "sort-keys" "^1.0.0" + +"npm-api@^1.0.0": + "version" "1.0.0" + dependencies: + "clone-deep" "^4.0.1" + "download-stats" "^0.3.4" + "JSONStream" "^1.3.5" + "moment" "^2.24.0" + "paged-request" "^2.0.1" + "request" "^2.88.0" + +"npm-bundled@^1.0.1": + "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "npm-normalize-package-bin" "^1.0.1" + +"npm-install-checks@^4.0.0": + "integrity" "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==" + "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "semver" "^7.1.1" + +"npm-normalize-package-bin@^1.0.0", "npm-normalize-package-bin@^1.0.1": + "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + "version" "1.0.1" + +"npm-package-arg@^6.0.0", "npm-package-arg@^6.1.0": + "integrity" "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "hosted-git-info" "^2.7.1" + "osenv" "^0.1.5" + "semver" "^5.6.0" + "validate-npm-package-name" "^3.0.0" + +"npm-package-arg@^8.0.0", "npm-package-arg@8.0.1": + "integrity" "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "hosted-git-info" "^3.0.2" + "semver" "^7.0.0" + "validate-npm-package-name" "^3.0.0" + +"npm-packlist@^1.1.12": + "integrity" "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==" + "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz" + "version" "1.4.8" + dependencies: + "ignore-walk" "^3.0.1" + "npm-bundled" "^1.0.1" + "npm-normalize-package-bin" "^1.0.1" + +"npm-path@^2.0.2": + "integrity" "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==" + "resolved" "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "which" "^1.2.10" + +"npm-pick-manifest@^3.0.0": + "integrity" "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==" + "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "figgy-pudding" "^3.5.1" + "npm-package-arg" "^6.0.0" + "semver" "^5.4.1" + +"npm-pick-manifest@6.1.0": + "integrity" "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==" + "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "npm-install-checks" "^4.0.0" + "npm-package-arg" "^8.0.0" + "semver" "^7.0.0" + +"npm-registry-fetch@^4.0.0": + "integrity" "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==" + "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz" + "version" "4.0.7" + dependencies: + "bluebird" "^3.5.1" + "figgy-pudding" "^3.4.1" + "JSONStream" "^1.3.4" + "lru-cache" "^5.1.1" + "make-fetch-happen" "^5.0.0" + "npm-package-arg" "^6.1.0" + "safe-buffer" "^5.2.0" + +"npm-run-path@^2.0.0": + "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-which@^3.0.1": + "integrity" "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=" + "resolved" "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "commander" "^2.9.0" + "npm-path" "^2.0.2" + "which" "^1.2.10" + +"npmlog@^2.0.3": + "integrity" "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "ansi" "~0.3.1" + "are-we-there-yet" "~1.1.2" + "gauge" "~1.2.5" + +"nth-check@^1.0.2": + "integrity" "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "boolbase" "~1.0.0" + +"nth-check@^2.0.0": + "version" "2.0.0" + dependencies: + "boolbase" "^1.0.0" + +"num2fraction@^1.2.2": + "integrity" "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" + "version" "1.2.2" + +"number-is-nan@^1.0.0": + "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"nwsapi@^2.2.0": + "integrity" "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" + "version" "2.2.0" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-copy@^0.1.0": + "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" + "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "copy-descriptor" "^0.1.0" + "define-property" "^0.2.5" + "kind-of" "^3.0.3" + +"object-hash@^2.0.3": + "version" "2.0.3" + +"object-inspect@^1.10.3": + "integrity" "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz" + "version" "1.10.3" + +"object-is@^1.0.1": + "version" "1.1.2" + dependencies: + "define-properties" "^1.1.3" + "es-abstract" "^1.17.5" + +"object-keys@^1.0.12", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-visit@^1.0.0": + "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "isobject" "^3.0.0" + +"object.assign@^4.1.0", "object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" + +"object.getownpropertydescriptors@^2.0.3": + "version" "2.1.0" + dependencies: + "define-properties" "^1.1.3" + "es-abstract" "^1.17.0-next.1" + +"object.pick@^1.3.0": + "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "isobject" "^3.0.1" + +"object.values@^1.1.0": + "integrity" "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==" + "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.18.2" + +"obuf@^1.0.0", "obuf@^1.1.2": + "integrity" "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "resolved" "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + "version" "1.1.2" + +"on-finished@~2.3.0": + "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "ee-first" "1.1.1" + +"on-headers@~1.0.2": + "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + "version" "1.0.2" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"one-time@0.0.4": + "integrity" "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + "resolved" "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz" + "version" "0.0.4" + +"onetime@^1.0.0": + "integrity" "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" + "version" "1.1.0" + +"onetime@^2.0.0": + "integrity" "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mimic-fn" "^1.0.0" + +"onetime@^5.1.0": + "version" "5.1.0" + dependencies: + "mimic-fn" "^2.1.0" + +"open@7.2.0": + "integrity" "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==" + "resolved" "https://registry.npmjs.org/open/-/open-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "is-docker" "^2.0.0" + "is-wsl" "^2.1.1" + +"opencollective-postinstall@^2.0.2": + "integrity" "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + "resolved" "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" + "version" "2.0.3" + +"opener@^1.5.1": + "version" "1.5.1" + +"openurl@1.1.1": + "integrity" "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=" + "resolved" "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz" + "version" "1.1.1" + +"opn@^5.5.0": + "integrity" "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==" + "resolved" "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "is-wsl" "^1.1.0" + +"opn@5.3.0": + "integrity" "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==" + "resolved" "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "is-wsl" "^1.1.0" + +"optimize-css-assets-webpack-plugin@5.0.3": + "integrity" "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==" + "resolved" "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz" + "version" "5.0.3" + dependencies: + "cssnano" "^4.1.10" + "last-call-webpack-plugin" "^3.0.0" + +"optionator@^0.8.1", "optionator@^0.8.3": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" + +"ora@4.0.4": + "integrity" "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==" + "resolved" "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "chalk" "^3.0.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.2.0" + "is-interactive" "^1.0.0" + "log-symbols" "^3.0.0" + "mute-stream" "0.0.8" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"ora@5.0.0": + "integrity" "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.4.0" + "is-interactive" "^1.0.0" + "log-symbols" "^4.0.0" + "mute-stream" "0.0.8" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"original@^1.0.0": + "integrity" "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==" + "resolved" "https://registry.npmjs.org/original/-/original-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "url-parse" "^1.4.3" + +"os-browserify@^0.3.0": + "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + "version" "0.3.0" + +"os-homedir@^1.0.0": + "integrity" "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "resolved" "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + "version" "1.0.2" + +"os-locale@5.0.0": + "integrity" "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "execa" "^4.0.0" + "lcid" "^3.0.0" + "mem" "^5.0.0" + +"os-name@^3.1.0": + "integrity" "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==" + "resolved" "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "macos-release" "^2.2.0" + "windows-release" "^3.1.0" + +"os-shim@^0.1.2": + "integrity" "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" + "resolved" "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz" + "version" "0.1.3" + +"os-tmpdir@^1.0.0", "os-tmpdir@~1.0.1", "os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"osenv@^0.1.5": + "integrity" "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==" + "resolved" "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "os-homedir" "^1.0.0" + "os-tmpdir" "^1.0.0" + +"p-defer@^1.0.0": + "integrity" "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + "version" "1.0.0" + +"p-each-series@^2.1.0": + "version" "2.1.0" + +"p-finally@^1.0.0": + "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-is-promise@^2.1.0": + "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + "version" "2.1.0" + +"p-limit@^1.1.0": + "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "p-try" "^1.0.0" + +"p-limit@^2.0.0", "p-limit@^2.2.0", "p-limit@^2.3.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^3.0.1": + "version" "3.0.1" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^2.0.0": + "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-limit" "^1.1.0" + +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map@^1.1.1": + "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + "version" "1.2.0" + +"p-map@^2.0.0": + "integrity" "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" + "version" "2.1.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"p-retry@^3.0.1": + "integrity" "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==" + "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "retry" "^0.12.0" + +"p-try@^1.0.0": + "integrity" "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + "version" "1.0.0" + +"p-try@^2.0.0", "p-try@^2.1.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"pacote@9.5.12": + "integrity" "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==" + "resolved" "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz" + "version" "9.5.12" + dependencies: + "bluebird" "^3.5.3" + "cacache" "^12.0.2" + "chownr" "^1.1.2" + "figgy-pudding" "^3.5.1" + "get-stream" "^4.1.0" + "glob" "^7.1.3" + "infer-owner" "^1.0.4" + "lru-cache" "^5.1.1" + "make-fetch-happen" "^5.0.0" + "minimatch" "^3.0.4" + "minipass" "^2.3.5" + "mississippi" "^3.0.0" + "mkdirp" "^0.5.1" + "normalize-package-data" "^2.4.0" + "npm-normalize-package-bin" "^1.0.0" + "npm-package-arg" "^6.1.0" + "npm-packlist" "^1.1.12" + "npm-pick-manifest" "^3.0.0" + "npm-registry-fetch" "^4.0.0" + "osenv" "^0.1.5" + "promise-inflight" "^1.0.1" + "promise-retry" "^1.1.1" + "protoduck" "^5.0.1" + "rimraf" "^2.6.2" + "safe-buffer" "^5.1.2" + "semver" "^5.6.0" + "ssri" "^6.0.1" + "tar" "^4.4.10" + "unique-filename" "^1.1.1" + "which" "^1.3.1" + +"paged-request@^2.0.1": + "integrity" "sha512-NWrGqneZImDdcMU/7vMcAOo1bIi5h/pmpJqe7/jdsy85BA/s5MSaU/KlpxwW/IVPmIwBcq2uKPrBWWhEWhtxag==" + "resolved" "https://registry.npmjs.org/paged-request/-/paged-request-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "axios" "^0.21.1" + +"pako@~1.0.2", "pako@~1.0.5": + "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + "version" "1.0.11" + +"parallel-transform@^1.1.0": + "integrity" "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==" + "resolved" "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "cyclist" "^1.0.1" + "inherits" "^2.0.3" + "readable-stream" "^2.1.5" + +"param-case@^3.0.3": + "version" "3.0.3" + dependencies: + "dot-case" "^3.0.3" + "tslib" "^1.10.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": + "version" "5.1.5" + dependencies: + "asn1.js" "^4.0.0" + "browserify-aes" "^1.0.0" + "create-hash" "^1.1.0" + "evp_bytestokey" "^1.0.0" + "pbkdf2" "^3.0.3" + "safe-buffer" "^5.1.1" + +"parse-cache-control@^1.0.1": + "integrity" "sha1-juqz5U+laSD+Fro493+iGqzC104=" + "resolved" "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + "version" "1.0.1" + +"parse-gitignore@1.0.1": + "integrity" "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==" + "resolved" "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-1.0.1.tgz" + "version" "1.0.1" + +"parse-json@^4.0.0": + "integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + +"parse-json@^5.0.0": + "version" "5.1.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse-passwd@^1.0.0": + "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + "version" "1.0.0" + +"parse-srcset@^1.0.2": + "integrity" "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" + "resolved" "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz" + "version" "1.0.2" + +"parse5@5.1.1": + "version" "5.1.1" + +"parseqs@0.0.6": + "integrity" "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + "resolved" "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz" + "version" "0.0.6" + +"parseuri@0.0.6": + "integrity" "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + "resolved" "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz" + "version" "0.0.6" + +"parseurl@~1.3.2", "parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"pascal-case@^3.1.1": + "version" "3.1.1" + dependencies: + "no-case" "^3.0.3" + "tslib" "^1.10.0" + +"pascalcase@^0.1.1": + "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + "version" "0.1.1" + +"path-browserify@0.0.1": + "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + "version" "0.0.1" + +"path-dirname@^1.0.0": + "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + "version" "1.0.2" + +"path-exists@^3.0.0": + "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1", "path-is-inside@^1.0.2": + "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6": + "version" "1.0.6" + +"path-to-regexp@0.1.7": + "integrity" "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^3.0.0": + "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "pify" "^3.0.0" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"path@^0.12.7": + "integrity" "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=" + "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + "version" "0.12.7" + dependencies: + "process" "^0.11.1" + "util" "^0.10.3" + +"pathval@^1.1.0": + "version" "1.1.0" + +"pbkdf2@^3.0.3": + "version" "3.1.1" + 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" + +"performance-now@^2.1.0": + "integrity" "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + +"picomatch@^2.0.4", "picomatch@^2.0.5", "picomatch@^2.2.1", "picomatch@^2.2.2": + "version" "2.2.2" + +"pify@^2.0.0", "pify@^2.3.0": + "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"pinkie-promise@^2.0.0": + "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"pirates@^4.0.1": + "integrity" "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "node-modules-regexp" "^1.0.0" + +"pkg-dir@^3.0.0": + "integrity" "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "find-up" "^3.0.0" + +"pkg-dir@^4.1.0", "pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"pkg-up@^2.0.0": + "integrity" "sha1-yBmscoBZpGHKscOImivjxJoATX8=" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "find-up" "^2.1.0" + +"pkg-up@^3.0.1": + "integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "find-up" "^3.0.0" + +"please-upgrade-node@^3.0.2", "please-upgrade-node@^3.2.0": + "integrity" "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==" + "resolved" "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "semver-compare" "^1.0.0" + +"plugin-error@^1.0.1": + "integrity" "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==" + "resolved" "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "ansi-colors" "^1.0.1" + "arr-diff" "^4.0.0" + "arr-union" "^3.1.0" + "extend-shallow" "^3.0.2" + +"pluralize@8.0.0": + "integrity" "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + "resolved" "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + "version" "8.0.0" + +"portfinder@^1.0.26": + "version" "1.0.26" + dependencies: + "async" "^2.6.2" + "debug" "^3.1.1" + "mkdirp" "^0.5.1" + +"portscanner@2.1.1": + "integrity" "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=" + "resolved" "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "async" "1.5.2" + "is-number-like" "^1.0.3" + +"posix-character-classes@^0.1.0": + "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + "version" "0.1.1" + +"postcss-calc@^7.0.1": + "version" "7.0.2" + dependencies: + "postcss" "^7.0.27" + "postcss-selector-parser" "^6.0.2" + "postcss-value-parser" "^4.0.2" + +"postcss-colormin@^4.0.3": + "integrity" "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==" + "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "color" "^3.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-convert-values@^4.0.1": + "integrity" "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==" + "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-discard-comments@^4.0.2": + "integrity" "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==" + "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-duplicates@^4.0.2": + "integrity" "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==" + "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-empty@^4.0.1": + "integrity" "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==" + "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-overridden@^4.0.1": + "integrity" "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==" + "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-load-config@^2.0.0": + "version" "2.1.0" + dependencies: + "cosmiconfig" "^5.0.0" + "import-cwd" "^2.0.0" + +"postcss-loader@3.0.0": + "integrity" "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==" + "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "loader-utils" "^1.1.0" + "postcss" "^7.0.0" + "postcss-load-config" "^2.0.0" + "schema-utils" "^1.0.0" + +"postcss-merge-longhand@^4.0.11": + "integrity" "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==" + "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" + "version" "4.0.11" + dependencies: + "css-color-names" "0.0.4" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + "stylehacks" "^4.0.0" + +"postcss-merge-rules@^4.0.3": + "integrity" "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==" + "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "caniuse-api" "^3.0.0" + "cssnano-util-same-parent" "^4.0.0" + "postcss" "^7.0.0" + "postcss-selector-parser" "^3.0.0" + "vendors" "^1.0.0" + +"postcss-minify-font-values@^4.0.2": + "integrity" "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==" + "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-minify-gradients@^4.0.2": + "integrity" "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==" + "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-arguments" "^4.0.0" + "is-color-stop" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-minify-params@^4.0.2": + "integrity" "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==" + "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "alphanum-sort" "^1.0.0" + "browserslist" "^4.0.0" + "cssnano-util-get-arguments" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + "uniqs" "^2.0.0" + +"postcss-minify-selectors@^4.0.2": + "integrity" "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==" + "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "alphanum-sort" "^1.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-selector-parser" "^3.0.0" + +"postcss-modules-extract-imports@^2.0.0": + "integrity" "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==" + "resolved" "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "postcss" "^7.0.5" + +"postcss-modules-local-by-default@^3.0.2": + "version" "3.0.2" + dependencies: + "icss-utils" "^4.1.1" + "postcss" "^7.0.16" + "postcss-selector-parser" "^6.0.2" + "postcss-value-parser" "^4.0.0" + +"postcss-modules-scope@^2.2.0": + "integrity" "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==" + "resolved" "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "postcss" "^7.0.6" + "postcss-selector-parser" "^6.0.0" + +"postcss-modules-values@^3.0.0": + "integrity" "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==" + "resolved" "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "icss-utils" "^4.0.0" + "postcss" "^7.0.6" + +"postcss-normalize-charset@^4.0.1": + "integrity" "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==" + "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-normalize-display-values@^4.0.2": + "integrity" "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==" + "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-match" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-positions@^4.0.2": + "integrity" "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-arguments" "^4.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-repeat-style@^4.0.2": + "integrity" "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==" + "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-arguments" "^4.0.0" + "cssnano-util-get-match" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-string@^4.0.2": + "integrity" "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-timing-functions@^4.0.2": + "integrity" "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==" + "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-match" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-unicode@^4.0.1": + "integrity" "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "browserslist" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-url@^4.0.1": + "integrity" "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-absolute-url" "^2.0.0" + "normalize-url" "^3.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-whitespace@^4.0.2": + "integrity" "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-ordered-values@^4.1.2": + "integrity" "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==" + "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "cssnano-util-get-arguments" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-reduce-initial@^4.0.3": + "integrity" "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==" + "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "caniuse-api" "^3.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + +"postcss-reduce-transforms@^4.0.2": + "integrity" "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==" + "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-match" "^4.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-selector-parser@^3.0.0": + "integrity" "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "dot-prop" "^5.2.0" + "indexes-of" "^1.0.1" + "uniq" "^1.0.1" + +"postcss-selector-parser@^6.0.0", "postcss-selector-parser@^6.0.2": + "version" "6.0.2" + dependencies: + "cssesc" "^3.0.0" + "indexes-of" "^1.0.1" + "uniq" "^1.0.1" + +"postcss-svgo@^4.0.3": + "integrity" "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==" + "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + "svgo" "^1.0.0" + +"postcss-unique-selectors@^4.0.1": + "integrity" "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==" + "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "alphanum-sort" "^1.0.0" + "postcss" "^7.0.0" + "uniqs" "^2.0.0" + +"postcss-value-parser@^3.0.0": + "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + "version" "3.3.1" + +"postcss-value-parser@^4.0.0", "postcss-value-parser@^4.0.2", "postcss-value-parser@^4.1.0": + "integrity" "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" + "version" "4.1.0" + +"postcss@^7.0.0", "postcss@^7.0.1", "postcss@^7.0.14", "postcss@^7.0.16", "postcss@^7.0.27", "postcss@^7.0.32", "postcss@^7.0.5", "postcss@^7.0.6": + "version" "7.0.36" + dependencies: + "chalk" "^2.4.2" + "source-map" "^0.6.1" + "supports-color" "^6.1.0" + +"prelude-ls@~1.1.2": + "integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"prepend-http@^1.0.0", "prepend-http@^1.0.1": + "integrity" "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + "version" "1.0.4" + +"prettier-plugin-java@0.8.2": + "integrity" "sha512-G11PMutlfhUjLqmrB0gW9n6hTIvlnXX+lhzgH3Uhc1QSlDQoLBky5lNSRgvdYSDPpSF3DmyYd3/7U3Ez8n0ckg==" + "resolved" "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "java-parser" "0.8.2" + "lodash" "4.17.20" + "prettier" "2.1.1" + +"prettier@2.0.5": + "integrity" "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz" + "version" "2.0.5" + +"prettier@2.1.1": + "integrity" "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz" + "version" "2.1.1" + +"prettier@2.1.2": + "integrity" "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz" + "version" "2.1.2" + +"pretty-bytes@^5.2.0", "pretty-bytes@^5.3.0": + "version" "5.3.0" + +"pretty-error@^2.1.1": + "version" "2.1.1" + dependencies: + "renderkid" "^2.0.1" + "utila" "~0.4" + +"pretty-format@^25.2.1", "pretty-format@^25.5.0": + "integrity" "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "@jest/types" "^25.5.0" + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^16.12.0" + +"pretty-format@^26.0.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^16.12.0" + +"pretty-format@^26.1.0": + "version" "26.1.0" + dependencies: + "@jest/types" "^26.1.0" + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^16.12.0" + +"prismjs@^1.20.0": + "integrity" "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==" + "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz" + "version" "1.23.0" + optionalDependencies: + "clipboard" "^2.0.0" + +"process-nextick-args@^2.0.0", "process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.1", "process@^0.11.10": + "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"progress@^2.0.0", "progress@2.0.3": + "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + "version" "2.0.3" + +"promise-inflight@^1.0.1": + "integrity" "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^1.1.1": + "integrity" "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "err-code" "^1.0.0" + "retry" "^0.10.0" + +"promise@^8.0.0": + "integrity" "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==" + "resolved" "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "asap" "~2.0.6" + +"prompts@^2.0.1": + "version" "2.3.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.4" + +"property-expr@^1.5.0": + "integrity" "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" + "resolved" "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz" + "version" "1.5.1" + +"protoduck@^5.0.1": + "integrity" "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==" + "resolved" "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "genfun" "^5.0.0" + +"protractor@7.0.0": + "integrity" "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==" + "resolved" "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + "blocking-proxy" "^1.0.0" + "browserstack" "^1.5.1" + "chalk" "^1.1.3" + "glob" "^7.0.3" + "jasmine" "2.8.0" + "jasminewd2" "^2.1.0" + "q" "1.4.1" + "saucelabs" "^1.5.0" + "selenium-webdriver" "3.6.0" + "source-map-support" "~0.4.0" + "webdriver-js-extender" "2.1.0" + "webdriver-manager" "^12.1.7" + "yargs" "^15.3.1" + +"proxy-addr@~2.0.5": + "version" "2.0.6" + dependencies: + "forwarded" "~0.1.2" + "ipaddr.js" "1.9.1" + +"prr@~1.0.1": + "integrity" "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + "version" "1.0.1" + +"psl@^1.1.28": + "integrity" "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + "version" "1.8.0" + +"public-encrypt@^4.0.0": + "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" + "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + "version" "4.0.3" + 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" + +"pump@^2.0.0": + "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" + "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"pumpify@^1.3.3": + "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" + "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "duplexify" "^3.6.0" + "inherits" "^2.0.3" + "pump" "^2.0.0" + +"punycode@^1.2.4": + "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "version" "1.4.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"punycode@1.3.2": + "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + "version" "1.3.2" + +"q@^1.1.2", "q@^1.4.1": + "integrity" "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + "version" "1.5.1" + +"q@1.4.1": + "integrity" "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "resolved" "https://registry.npmjs.org/q/-/q-1.4.1.tgz" + "version" "1.4.1" + +"qs@^6.4.0", "qs@~6.5.2": + "integrity" "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" + "version" "6.5.2" + +"qs@6.2.3": + "integrity" "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz" + "version" "6.2.3" + +"qs@6.7.0": + "integrity" "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" + "version" "6.7.0" + +"query-string@^4.1.0": + "integrity" "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=" + "resolved" "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "object-assign" "^4.1.0" + "strict-uri-encode" "^1.0.0" + +"querystring-es3@^0.2.0": + "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + "version" "0.2.1" + +"querystring@0.2.0": + "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + "version" "0.2.0" + +"querystringify@^2.1.1": + "version" "2.1.1" + +"quick-lru@^4.0.1": + "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + "version" "4.0.1" + +"randexp@0.5.3": + "integrity" "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==" + "resolved" "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "drange" "^1.0.2" + "ret" "^0.2.0" + +"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"randomfill@^1.0.3": + "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" + "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "randombytes" "^2.0.5" + "safe-buffer" "^5.1.0" + +"range-parser@^1.2.1", "range-parser@~1.2.0", "range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@^2.3.2": + "integrity" "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "bytes" "3.1.0" + "http-errors" "1.7.3" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"raw-body@2.4.0": + "integrity" "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "bytes" "3.1.0" + "http-errors" "1.7.2" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"react-is@^16.12.0": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + +"read-chunk@^3.2.0": + "integrity" "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==" + "resolved" "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "pify" "^4.0.1" + "with-open-file" "^0.1.6" + +"read-package-json@^2.0.0": + "integrity" "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==" + "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "glob" "^7.1.1" + "json-parse-even-better-errors" "^2.3.0" + "normalize-package-data" "^2.0.0" + "npm-normalize-package-bin" "^1.0.0" + +"read-package-tree@5.3.1": + "integrity" "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==" + "resolved" "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz" + "version" "5.3.1" + dependencies: + "read-package-json" "^2.0.0" + "readdir-scoped-modules" "^1.0.0" + "util-promisify" "^2.1.0" + +"read-pkg-up@^5.0.0": + "integrity" "sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "find-up" "^3.0.0" + "read-pkg" "^5.0.0" + +"read-pkg-up@^7.0.0": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg-up@^7.0.1": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg@^5.0.0", "read-pkg@^5.2.0": + "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@types/normalize-package-data" "^2.4.0" + "normalize-package-data" "^2.5.0" + "parse-json" "^5.0.0" + "type-fest" "^0.6.0" + +"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.6", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@^2.3.7", "readable-stream@~2.3.6", "readable-stream@1 || 2", "readable-stream@2 || 3": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.6": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.1.1": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readdir-scoped-modules@^1.0.0": + "integrity" "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==" + "resolved" "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "debuglog" "^1.0.1" + "dezalgo" "^1.0.0" + "graceful-fs" "^4.1.2" + "once" "^1.3.0" + +"readdirp@^2.2.1": + "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "graceful-fs" "^4.1.11" + "micromatch" "^3.1.10" + "readable-stream" "^2.0.2" + +"readdirp@~3.5.0": + "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "picomatch" "^2.2.1" + +"rechoir@^0.6.2": + "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" + dependencies: + "resolve" "^1.1.6" + +"redent@^3.0.0": + "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" + "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "indent-string" "^4.0.0" + "strip-indent" "^3.0.0" + +"reflect-metadata@^0.1.2": + "integrity" "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + "version" "0.1.13" + +"regenerate-unicode-properties@^8.2.0": + "integrity" "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "regenerate" "^1.4.0" + +"regenerate@^1.4.0": + "version" "1.4.1" + +"regenerator-runtime@^0.11.0": + "integrity" "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" + "version" "0.11.1" + +"regenerator-runtime@^0.13.4": + "version" "0.13.5" + +"regenerator-transform@^0.14.2": + "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" + "version" "0.14.5" + dependencies: + "@babel/runtime" "^7.8.4" + +"regex-not@^1.0.0", "regex-not@^1.0.2": + "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" + "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "extend-shallow" "^3.0.2" + "safe-regex" "^1.1.0" + +"regexp-to-ast@0.4.0": + "integrity" "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==" + "resolved" "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz" + "version" "0.4.0" + +"regexp-to-ast@0.5.0": + "integrity" "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==" + "resolved" "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz" + "version" "0.5.0" + +"regexp.prototype.flags@^1.2.0": + "version" "1.3.0" + dependencies: + "define-properties" "^1.1.3" + "es-abstract" "^1.17.0-next.1" + +"regexpp@^2.0.1": + "integrity" "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz" + "version" "2.0.1" + +"regexpp@^3.0.0": + "integrity" "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" + "version" "3.1.0" + +"regexpu-core@^4.7.0": + "version" "4.7.0" + 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" + +"regjsgen@^0.5.1": + "integrity" "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" + "version" "0.5.2" + +"regjsparser@^0.6.4": + "version" "0.6.4" + dependencies: + "jsesc" "~0.5.0" + +"relateurl@^0.2.7": + "integrity" "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + "resolved" "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + "version" "0.2.7" + +"remove-trailing-separator@^1.0.1": + "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + "version" "1.1.0" + +"renderkid@^2.0.1": + "version" "2.0.7" + dependencies: + "css-select" "^4.1.3" + "dom-converter" "^0.2.0" + "htmlparser2" "^6.1.0" + "lodash" "^4.17.21" + "strip-ansi" "^3.0.1" + +"repeat-element@^1.1.2": + "version" "1.1.3" + +"repeat-string@^1.6.1": + "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" + +"replace-ext@^1.0.0": + "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + "version" "1.0.1" + +"request-promise-core@1.1.3": + "version" "1.1.3" + dependencies: + "lodash" "^4.17.15" + +"request-promise-native@^1.0.8": + "version" "1.0.8" + dependencies: + "request-promise-core" "1.1.3" + "stealthy-require" "^1.1.1" + "tough-cookie" "^2.3.3" + +"request@^2.34", "request@^2.87.0", "request@^2.88.0", "request@^2.88.2": + "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" + "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + "version" "2.88.2" + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"requires-port@^1.0.0": + "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resolve-cwd@^2.0.0": + "integrity" "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "resolve-from" "^3.0.0" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": + "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" + "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "expand-tilde" "^2.0.0" + "global-modules" "^1.0.0" + +"resolve-from@^3.0.0": + "integrity" "sha1-six699nWiBvItuZTM17rywoYh0g=" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + "version" "3.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve-url@^0.2.1": + "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + "version" "0.2.1" + +"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.17.0", "resolve@^1.3.2": + "version" "1.17.0" + dependencies: + "path-parse" "^1.0.6" + +"resp-modifier@6.0.2": + "integrity" "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=" + "resolved" "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "^2.2.0" + "minimatch" "^3.0.2" + +"restore-cursor@^1.0.1": + "integrity" "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "exit-hook" "^1.0.0" + "onetime" "^1.0.0" + +"restore-cursor@^2.0.0": + "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "onetime" "^2.0.0" + "signal-exit" "^3.0.2" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"ret@^0.2.0": + "integrity" "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" + "version" "0.2.2" + +"ret@~0.1.10": + "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + "version" "0.1.15" + +"retry@^0.10.0": + "integrity" "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz" + "version" "0.10.1" + +"retry@^0.12.0": + "integrity" "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rgb-regex@^1.0.1": + "integrity" "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + "resolved" "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" + "version" "1.0.1" + +"rgba-regex@^1.0.0": + "integrity" "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + "resolved" "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" + "version" "1.0.0" + +"rimraf@^2.2.8", "rimraf@^2.5.2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^2.5.4": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^2.6.2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^2.6.3": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^3.0.0", "rimraf@^3.0.2", "rimraf@3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@2.6.3": + "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "glob" "^7.1.3" + +"ripemd160@^2.0.0", "ripemd160@^2.0.1": + "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" + "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + +"rollup-plugin-babel@^4.3.3": + "integrity" "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==" + "resolved" "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz" + "version" "4.4.0" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "rollup-pluginutils" "^2.8.1" + +"rollup-plugin-terser@^5.3.1": + "integrity" "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==" + "resolved" "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz" + "version" "5.3.1" + dependencies: + "@babel/code-frame" "^7.5.5" + "jest-worker" "^24.9.0" + "rollup-pluginutils" "^2.8.2" + "serialize-javascript" "^4.0.0" + "terser" "^4.6.2" + +"rollup-pluginutils@^2.8.1", "rollup-pluginutils@^2.8.2": + "integrity" "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==" + "resolved" "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" + "version" "2.8.2" + dependencies: + "estree-walker" "^0.6.1" + +"rollup@^1.20.0 || ^2.0.0", "rollup@^1.20.0||^2.0.0", "rollup@^1.31.1", "rollup@>=0.60.0 <3", "rollup@>=0.66.0 <3": + "integrity" "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==" + "resolved" "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz" + "version" "1.32.1" + dependencies: + "@types/estree" "*" + "@types/node" "*" + "acorn" "^7.1.0" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-async@^2.0.0", "run-async@^2.2.0", "run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "version" "1.1.9" + +"run-queue@^1.0.0", "run-queue@^1.0.3": + "integrity" "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=" + "resolved" "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "aproba" "^1.1.1" + +"rx@^4.1.0", "rx@4.1.0": + "integrity" "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + "resolved" "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" + "version" "4.1.0" + +"rxjs@^5.5.6": + "integrity" "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz" + "version" "5.5.12" + dependencies: + "symbol-observable" "1.0.1" + +"rxjs@^6.0.0", "rxjs@^6.3.3", "rxjs@^6.4.0", "rxjs@^6.5.2", "rxjs@^6.5.3", "rxjs@^6.5.5", "rxjs@>=6.3.0", "rxjs@6.5.5": + "integrity" "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz" + "version" "6.5.5" + dependencies: + "tslib" "^1.9.0" + +"rxjs@^6.6.0": + "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + "version" "6.6.7" + dependencies: + "tslib" "^1.9.0" + +"rxjs@6.6.2": + "integrity" "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz" + "version" "6.6.2" + dependencies: + "tslib" "^1.9.0" + +"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@^5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-regex@^1.1.0": + "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ret" "~0.1.10" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sane@^4.0.3": + "integrity" "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==" + "resolved" "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "@cnakazawa/watch" "^1.0.3" + "anymatch" "^2.0.0" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.2" + "execa" "^1.0.0" + "fb-watchman" "^2.0.0" + "micromatch" "^3.1.4" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"sass-loader@8.0.2": + "integrity" "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==" + "resolved" "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "clone-deep" "^4.0.1" + "loader-utils" "^1.2.3" + "neo-async" "^2.6.1" + "schema-utils" "^2.6.1" + "semver" "^6.3.0" + +"sass@^1.3.0", "sass@1.26.9": + "integrity" "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==" + "resolved" "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz" + "version" "1.26.9" + dependencies: + "chokidar" ">=2.0.0 <4.0.0" + +"saucelabs@^1.5.0": + "integrity" "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==" + "resolved" "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "https-proxy-agent" "^2.2.1" + +"sax@>=0.6.0", "sax@1.2.1": + "integrity" "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" + "version" "1.2.1" + +"sax@~1.2.4": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" + +"saxes@^5.0.0": + "version" "5.0.1" + dependencies: + "xmlchars" "^2.2.0" + +"schema-utils@^1.0.0": + "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "ajv" "^6.1.0" + "ajv-errors" "^1.0.0" + "ajv-keywords" "^3.1.0" + +"schema-utils@^2.6.1", "schema-utils@^2.6.5", "schema-utils@^2.6.6", "schema-utils@^2.7.0": + "version" "2.7.0" + dependencies: + "@types/json-schema" "^7.0.4" + "ajv" "^6.12.2" + "ajv-keywords" "^3.4.1" + +"scoped-regex@^1.0.0": + "integrity" "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=" + "resolved" "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz" + "version" "1.0.0" + +"select-hose@^2.0.0": + "integrity" "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "resolved" "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + "version" "2.0.0" + +"select@^1.1.2": + "integrity" "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + "resolved" "https://registry.npmjs.org/select/-/select-1.1.2.tgz" + "version" "1.1.2" + +"selenium-webdriver@^3.0.1", "selenium-webdriver@3.6.0": + "integrity" "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==" + "resolved" "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "jszip" "^3.1.3" + "rimraf" "^2.5.4" + "tmp" "0.0.30" + "xml2js" "^0.4.17" + +"selfsigned@^1.10.7": + "version" "1.10.8" + dependencies: + "node-forge" "^0.10.0" + +"semver-compare@^1.0.0": + "integrity" "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "resolved" "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + "version" "1.0.0" + +"semver-dsl@^1.0.1": + "integrity" "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=" + "resolved" "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "semver" "^5.3.0" + +"semver-intersect@1.4.0": + "integrity" "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==" + "resolved" "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "semver" "^5.0.0" + +"semver-regex@^2.0.0": + "integrity" "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" + "version" "2.0.0" + +"semver@^5.0.0", "semver@^5.3.0", "semver@^5.4.1", "semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.2.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.0.0": + "version" "7.3.4" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.1.1": + "version" "7.3.4" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.1.3": + "version" "7.3.2" + +"semver@^7.2.1": + "version" "7.3.2" + +"semver@^7.3.2": + "version" "7.3.2" + +"semver@7.0.0": + "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + "version" "7.0.0" + +"semver@7.3.2": + "integrity" "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" + "version" "7.3.2" + +"semver@7.x": + "version" "7.3.2" + +"send@0.16.2": + "integrity" "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==" + "resolved" "https://registry.npmjs.org/send/-/send-0.16.2.tgz" + "version" "0.16.2" + dependencies: + "debug" "2.6.9" + "depd" "~1.1.2" + "destroy" "~1.0.4" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "~1.6.2" + "mime" "1.4.1" + "ms" "2.0.0" + "on-finished" "~2.3.0" + "range-parser" "~1.2.0" + "statuses" "~1.4.0" + +"send@0.17.1": + "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + "version" "0.17.1" + dependencies: + "debug" "2.6.9" + "depd" "~1.1.2" + "destroy" "~1.0.4" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "~1.7.2" + "mime" "1.6.0" + "ms" "2.1.1" + "on-finished" "~2.3.0" + "range-parser" "~1.2.1" + "statuses" "~1.5.0" + +"serialize-javascript@^3.1.0": + "integrity" "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "randombytes" "^2.1.0" + +"serialize-javascript@^4.0.0": + "integrity" "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "randombytes" "^2.1.0" + +"serialize-javascript@5.0.1": + "integrity" "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "randombytes" "^2.1.0" + +"serve-index@^1.9.1", "serve-index@1.9.1": + "integrity" "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=" + "resolved" "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "accepts" "~1.3.4" + "batch" "0.6.1" + "debug" "2.6.9" + "escape-html" "~1.0.3" + "http-errors" "~1.6.2" + "mime-types" "~2.1.17" + "parseurl" "~1.3.2" + +"serve-static@1.13.2": + "integrity" "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz" + "version" "1.13.2" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.2" + "send" "0.16.2" + +"serve-static@1.14.1": + "integrity" "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.17.1" + +"server-destroy@1.0.1": + "integrity" "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" + "resolved" "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" + "version" "1.0.1" + +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-getter@^0.1.0": + "version" "0.1.1" + dependencies: + "to-object-path" "^0.3.0" + +"set-immediate-shim@~1.0.1": + "integrity" "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + "version" "1.0.1" + +"set-value@^2.0.0", "set-value@^2.0.1": + "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "extend-shallow" "^2.0.1" + "is-extendable" "^0.1.1" + "is-plain-object" "^2.0.3" + "split-string" "^3.0.1" + +"setimmediate@^1.0.4": + "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + +"setprototypeof@1.1.0": + "integrity" "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + "version" "1.1.0" + +"setprototypeof@1.1.1": + "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + "version" "1.1.1" + +"sha.js@^2.4.0", "sha.js@^2.4.8": + "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" + "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + "version" "2.4.11" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shebang-command@^1.2.0": + "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shelljs@^0.8.3", "shelljs@0.8.4": + "integrity" "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz" + "version" "0.8.4" + dependencies: + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" + +"shellwords@^0.1.1": + "integrity" "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "resolved" "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" + "version" "0.1.1" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2": + "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" + "version" "3.0.3" + +"simple-git@^1.85.0": + "integrity" "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==" + "resolved" "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz" + "version" "1.132.0" + dependencies: + "debug" "^4.0.1" + +"simple-progress-webpack-plugin@1.1.2": + "integrity" "sha512-bNQfb3qSqbtsfxg6d0dGechUUJH2lZqKG5+bj2aoJmEA0rSzcm+2JVfC2YgkDABfuGItZ/O5ttt6BssWZW4SNg==" + "resolved" "https://registry.npmjs.org/simple-progress-webpack-plugin/-/simple-progress-webpack-plugin-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "chalk" "2.3.x" + "figures" "2.0.x" + "log-update" "2.3.x" + +"simple-swizzle@^0.2.2": + "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=" + "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "is-arrayish" "^0.3.1" + +"sisteransi@^1.0.4": + "version" "1.0.5" + +"slash@^1.0.0": + "integrity" "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + "resolved" "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + "version" "1.0.0" + +"slash@^2.0.0": + "integrity" "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "resolved" "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + "version" "2.0.0" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^2.1.0": + "integrity" "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "astral-regex" "^1.0.0" + "is-fullwidth-code-point" "^2.0.0" + +"slice-ansi@0.0.4": + "integrity" "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz" + "version" "0.0.4" + +"smart-buffer@^4.1.0": + "integrity" "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz" + "version" "4.1.0" + +"snapdragon-node@^2.0.1": + "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" + "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "define-property" "^1.0.0" + "isobject" "^3.0.0" + "snapdragon-util" "^3.0.1" + +"snapdragon-util@^3.0.1": + "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" + "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^3.2.0" + +"snapdragon@^0.8.1": + "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" + "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "base" "^0.11.1" + "debug" "^2.2.0" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "map-cache" "^0.2.2" + "source-map" "^0.5.6" + "source-map-resolve" "^0.5.0" + "use" "^3.1.0" + +"socket.io-adapter@~1.1.0": + "integrity" "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + "resolved" "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz" + "version" "1.1.2" + +"socket.io-client@^2.4.0", "socket.io-client@2.4.0": + "integrity" "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==" + "resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "backo2" "1.0.2" + "component-bind" "1.0.0" + "component-emitter" "~1.3.0" + "debug" "~3.1.0" + "engine.io-client" "~3.5.0" + "has-binary2" "~1.0.2" + "indexof" "0.0.1" + "parseqs" "0.0.6" + "parseuri" "0.0.6" + "socket.io-parser" "~3.3.0" + "to-array" "0.1.4" + +"socket.io-parser@~3.3.0": + "integrity" "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "component-emitter" "~1.3.0" + "debug" "~3.1.0" + "isarray" "2.0.1" + +"socket.io-parser@~3.4.0": + "integrity" "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz" + "version" "3.4.1" + dependencies: + "component-emitter" "1.2.1" + "debug" "~4.1.0" + "isarray" "2.0.1" + +"socket.io@2.4.0": + "integrity" "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==" + "resolved" "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "debug" "~4.1.0" + "engine.io" "~3.5.0" + "has-binary2" "~1.0.2" + "socket.io-adapter" "~1.1.0" + "socket.io-client" "2.4.0" + "socket.io-parser" "~3.4.0" + +"sockjs-client@1.4.0": + "integrity" "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==" + "resolved" "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "debug" "^3.2.5" + "eventsource" "^1.0.7" + "faye-websocket" "~0.11.1" + "inherits" "^2.0.3" + "json3" "^3.3.2" + "url-parse" "^1.4.3" + +"sockjs@0.3.20": + "integrity" "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==" + "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz" + "version" "0.3.20" + dependencies: + "faye-websocket" "^0.10.0" + "uuid" "^3.4.0" + "websocket-driver" "0.6.5" + +"socks-proxy-agent@^4.0.0": + "integrity" "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "agent-base" "~4.2.1" + "socks" "~2.3.2" + +"socks@~2.3.2": + "integrity" "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "ip" "1.1.5" + "smart-buffer" "^4.1.0" + +"sort-keys@^1.0.0": + "integrity" "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=" + "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "is-plain-obj" "^1.0.0" + +"source-list-map@^2.0.0": + "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + "version" "2.0.1" + +"source-map-resolve@^0.5.0": + "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" + "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "atob" "^2.1.2" + "decode-uri-component" "^0.2.0" + "resolve-url" "^0.2.1" + "source-map-url" "^0.4.0" + "urix" "^0.1.0" + +"source-map-support@^0.5.17", "source-map-support@^0.5.6", "source-map-support@~0.5.12": + "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + "version" "0.5.19" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@~0.4.0": + "integrity" "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" + "version" "0.4.18" + dependencies: + "source-map" "^0.5.6" + +"source-map-url@^0.4.0": + "version" "0.4.0" + +"source-map@^0.5.0", "source-map@^0.5.6", "source-map@^0.5.7": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.7.3": + "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + "version" "0.7.3" + +"source-map@~0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@0.7.3": + "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + "version" "0.7.3" + +"sourcemap-codec@^1.4.4", "sourcemap-codec@^1.4.8": + "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + "version" "1.4.8" + +"spawn-sync@^1.0.15": + "integrity" "sha1-sAeZVX63+wyDdsKdROih6mfldHY=" + "resolved" "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz" + "version" "1.0.15" + dependencies: + "concat-stream" "^1.4.7" + "os-shim" "^0.1.2" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "version" "3.0.5" + +"spdy-transport@^3.0.0": + "integrity" "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==" + "resolved" "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "debug" "^4.1.0" + "detect-node" "^2.0.4" + "hpack.js" "^2.1.6" + "obuf" "^1.1.2" + "readable-stream" "^3.0.6" + "wbuf" "^1.7.3" + +"spdy@^4.0.2": + "integrity" "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==" + "resolved" "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "debug" "^4.1.0" + "handle-thing" "^2.0.0" + "http-deceiver" "^1.2.7" + "select-hose" "^2.0.0" + "spdy-transport" "^3.0.0" + +"split-string@^3.0.1", "split-string@^3.0.2": + "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" + "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend-shallow" "^3.0.0" + +"sprintf-js@^1.1.2": + "integrity" "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + "version" "1.1.2" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sshpk@^1.7.0": + "integrity" "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" + "version" "1.16.1" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^6.0.0", "ssri@^6.0.1": + "integrity" "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "figgy-pudding" "^3.5.1" + +"ssri@^8.0.0": + "version" "8.0.1" + dependencies: + "minipass" "^3.1.1" + +"stable@^0.1.8": + "integrity" "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "resolved" "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + "version" "0.1.8" + +"stack-trace@0.0.x": + "integrity" "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + "version" "0.0.10" + +"stack-utils@^2.0.2": + "version" "2.0.2" + dependencies: + "escape-string-regexp" "^2.0.0" + +"stackframe@^1.1.1": + "integrity" "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + "resolved" "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz" + "version" "1.2.0" + +"staged-git-files@1.1.2": + "integrity" "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==" + "resolved" "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz" + "version" "1.1.2" + +"static-extend@^0.1.1": + "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" + "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "define-property" "^0.2.5" + "object-copy" "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@~1.4.0": + "integrity" "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz" + "version" "1.4.0" + +"statuses@>= 1.5.0 < 2": + "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"statuses@~1.3.1": + "integrity" "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + "version" "1.3.1" + +"statuses@~1.5.0": + "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"stealthy-require@^1.1.1": + "version" "1.1.1" + +"stream-browserify@^2.0.1": + "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" + "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "inherits" "~2.0.1" + "readable-stream" "^2.0.2" + +"stream-each@^1.1.0": + "integrity" "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==" + "resolved" "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" + "version" "1.2.3" + dependencies: + "end-of-stream" "^1.1.0" + "stream-shift" "^1.0.0" + +"stream-http@^2.7.2": + "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" + "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + "version" "2.8.3" + dependencies: + "builtin-status-codes" "^3.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.3.6" + "to-arraybuffer" "^1.0.0" + "xtend" "^4.0.0" + +"stream-shift@^1.0.0": + "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + "version" "1.0.1" + +"stream-throttle@^0.1.3": + "integrity" "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=" + "resolved" "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "commander" "^2.2.0" + "limiter" "^1.0.5" + +"streamfilter@^3.0.0": + "integrity" "sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==" + "resolved" "https://registry.npmjs.org/streamfilter/-/streamfilter-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "readable-stream" "^3.0.6" + +"strict-uri-encode@^1.0.0": + "integrity" "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + "version" "1.1.0" + +"string_decoder@^1.0.0", "string_decoder@^1.1.1", "string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.0.2": + "integrity" "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz" + "version" "0.0.2" + +"string-length@^4.0.1": + "version" "4.0.1" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-template@~0.2.1": + "integrity" "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" + "resolved" "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz" + "version" "0.2.1" + +"string-width@^1.0.1": + "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^1.0.2 || 2": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.0.0": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.1.0": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^3.0.0", "string-width@^3.1.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + +"string-width@^4.1.0", "string-width@^4.2.0": + "version" "4.2.0" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"string.prototype.trimend@^1.0.4": + "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"string.prototype.trimstart@^1.0.4": + "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"stringify-object@^3.2.2", "stringify-object@^3.3.0": + "integrity" "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==" + "resolved" "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "get-own-enumerable-property-symbols" "^3.0.0" + "is-obj" "^1.0.1" + "is-regexp" "^1.0.0" + +"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^3.0.1": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^4.0.0": + "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + +"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0": + "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "ansi-regex" "^5.0.0" + +"strip-bom-buf@^1.0.0": + "integrity" "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=" + "resolved" "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-utf8" "^0.2.1" + +"strip-bom-stream@^2.0.0": + "integrity" "sha1-+H217yYT9paKpUWr/h7HKLaoKco=" + "resolved" "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "first-chunk-stream" "^2.0.0" + "strip-bom" "^2.0.0" + +"strip-bom@^2.0.0": + "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "is-utf8" "^0.2.0" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-comments@^1.0.2": + "integrity" "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==" + "resolved" "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "babel-extract-comments" "^1.0.0" + "babel-plugin-transform-object-rest-spread" "^6.26.0" + +"strip-eof@^1.0.0": + "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-indent@^3.0.0": + "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" + "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "min-indent" "^1.0.0" + +"strip-json-comments@^3.0.1": + "version" "3.1.0" + +"strip-json-comments@3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"style-loader@1.2.1": + "integrity" "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==" + "resolved" "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "loader-utils" "^2.0.0" + "schema-utils" "^2.6.6" + +"stylehacks@^4.0.0": + "integrity" "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==" + "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "postcss" "^7.0.0" + "postcss-selector-parser" "^3.0.0" + +"supports-color@^2.0.0": + "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + "version" "2.0.0" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^6.1.0": + "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0": + "version" "7.1.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@8.1.1": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "version" "2.1.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"svgo@^1.0.0": + "integrity" "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==" + "resolved" "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "chalk" "^2.4.1" + "coa" "^2.0.2" + "css-select" "^2.0.0" + "css-select-base-adapter" "^0.1.1" + "css-tree" "1.0.0-alpha.37" + "csso" "^4.0.2" + "js-yaml" "^3.13.1" + "mkdirp" "~0.5.1" + "object.values" "^1.1.0" + "sax" "~1.2.4" + "stable" "^0.1.8" + "unquote" "~1.1.1" + "util.promisify" "~1.0.0" + +"swagger-ts-generator@^1.2.11": + "integrity" "sha512-LgRgE4cG84QTvoye/PEhB2czpKO2IazYuyhalYE7HeHFcf3yZfQu/Hz9lj605TnxtOhXBEqkuzwKgnyGhaTyDQ==" + "resolved" "https://registry.npmjs.org/swagger-ts-generator/-/swagger-ts-generator-1.2.11.tgz" + "version" "1.2.11" + dependencies: + "chalk" "^4.0.0" + "fs" "0.0.2" + "handlebars" "^4.7.6" + "lodash" "^4.17.15" + "moment" "^2.24.0" + "path" "^0.12.7" + +"swagger-ui-dist@3.25.1": + "integrity" "sha512-Sw/K95j1pT9TZtLKiHDEml7YqcXC9thTTQjxrvNgd9j1KzOIxpo/5lhHuUMAN/hxVAHetzmcBcQaBjywRXog8w==" + "resolved" "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.25.1.tgz" + "version" "3.25.1" + +"symbol-observable@^1.1.0", "symbol-observable@1.2.0": + "integrity" "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" + "version" "1.2.0" + +"symbol-observable@1.0.1": + "integrity" "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz" + "version" "1.0.1" + +"symbol-tree@^3.2.4": + "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + "version" "3.2.4" + +"synchronous-promise@^2.0.6": + "version" "2.0.13" + +"table@^5.2.3": + "integrity" "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==" + "resolved" "https://registry.npmjs.org/table/-/table-5.4.6.tgz" + "version" "5.4.6" + dependencies: + "ajv" "^6.10.2" + "lodash" "^4.17.14" + "slice-ansi" "^2.1.0" + "string-width" "^3.0.0" + +"tabtab@2.2.2": + "integrity" "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=" + "resolved" "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "debug" "^2.2.0" + "inquirer" "^1.0.2" + "lodash.difference" "^4.5.0" + "lodash.uniq" "^4.5.0" + "minimist" "^1.2.0" + "mkdirp" "^0.5.1" + "npmlog" "^2.0.3" + "object-assign" "^4.1.0" + +"tapable@^1.0.0", "tapable@^1.1.3": + "integrity" "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + "version" "1.1.3" + +"tar@^4.4.10": + "integrity" "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz" + "version" "4.4.13" + dependencies: + "chownr" "^1.1.1" + "fs-minipass" "^1.2.5" + "minipass" "^2.8.6" + "minizlib" "^1.2.1" + "mkdirp" "^0.5.0" + "safe-buffer" "^5.1.2" + "yallist" "^3.0.3" + +"tar@^6.0.2": + "version" "6.0.2" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.0" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"temp-dir@^1.0.0": + "integrity" "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + "version" "1.0.0" + +"tempy@^0.3.0": + "integrity" "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==" + "resolved" "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "temp-dir" "^1.0.0" + "type-fest" "^0.3.1" + "unique-string" "^1.0.0" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"terser-webpack-plugin@^1.4.3": + "version" "1.4.4" + dependencies: + "cacache" "^12.0.2" + "find-cache-dir" "^2.1.0" + "is-wsl" "^1.1.0" + "schema-utils" "^1.0.0" + "serialize-javascript" "^3.1.0" + "source-map" "^0.6.1" + "terser" "^4.1.2" + "webpack-sources" "^1.4.0" + "worker-farm" "^1.7.0" + +"terser-webpack-plugin@3.0.6": + "integrity" "sha512-z3HLOOPUHkCNGkeEHqqiMAIy1pjpHwS1o+i6Zn0Ws3EAvHJj46737efNNEvJ0Vx9BdDQM83d56qySDJOSORA0A==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.6.tgz" + "version" "3.0.6" + dependencies: + "cacache" "^15.0.4" + "find-cache-dir" "^3.3.1" + "jest-worker" "^26.0.0" + "p-limit" "^3.0.1" + "schema-utils" "^2.6.6" + "serialize-javascript" "^4.0.0" + "source-map" "^0.6.1" + "terser" "^4.8.0" + "webpack-sources" "^1.4.3" + +"terser@^4.1.2", "terser@^4.6.2", "terser@^4.6.3", "terser@^4.8.0": + "integrity" "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" + "version" "4.8.0" + dependencies: + "commander" "^2.20.0" + "source-map" "~0.6.1" + "source-map-support" "~0.5.12" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@istanbuljs/schema" "^0.1.2" + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"test@^0.6.0": + "integrity" "sha1-WYasRF7Bd1QyJRLRBLoyyKY+k44=" + "resolved" "https://registry.npmjs.org/test/-/test-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "ansi-font" "0.0.2" + +"text-hex@1.0.x": + "integrity" "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "resolved" "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + "version" "1.0.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"textextensions@^2.5.0": + "integrity" "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==" + "resolved" "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz" + "version" "2.6.0" + +"tfunk@^4.0.0": + "integrity" "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==" + "resolved" "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "chalk" "^1.1.3" + "dlv" "^1.1.3" + +"then-request@6.0.2": + "integrity" "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==" + "resolved" "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + "caseless" "~0.12.0" + "concat-stream" "^1.6.0" + "form-data" "^2.2.0" + "http-basic" "^8.1.1" + "http-response-object" "^3.0.1" + "promise" "^8.0.0" + "qs" "^6.4.0" + +"thread-loader@2.1.3": + "integrity" "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==" + "resolved" "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz" + "version" "2.1.3" + dependencies: + "loader-runner" "^2.3.1" + "loader-utils" "^1.1.0" + "neo-async" "^2.6.0" + +"throat@^5.0.0": + "integrity" "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + "resolved" "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz" + "version" "5.0.0" + +"through@^2.3.6", "through@>=2.2.7 <3", "through@X.X.X": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@^3.0.0": + "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "2 || 3" + +"through2@^3.0.1", "through2@^3.0.2": + "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "2 || 3" + +"through2@3.0.2": + "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "2 || 3" + +"thunky@^1.0.2": + "integrity" "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "resolved" "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + "version" "1.1.0" + +"timed-out@^4.0.0": + "integrity" "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + "version" "4.0.1" + +"timers-browserify@^2.0.4": + "version" "2.0.11" + dependencies: + "setimmediate" "^1.0.4" + +"timsort@^0.3.0": + "integrity" "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + "resolved" "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" + "version" "0.3.0" + +"tiny-emitter@^2.0.0": + "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" + "version" "2.1.0" + +"tmp@^0.0.29": + "integrity" "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz" + "version" "0.0.29" + dependencies: + "os-tmpdir" "~1.0.1" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmp@0.0.30": + "integrity" "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz" + "version" "0.0.30" + dependencies: + "os-tmpdir" "~1.0.1" + +"tmpl@1.0.x": + "integrity" "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz" + "version" "1.0.4" + +"to-array@0.1.4": + "integrity" "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + "resolved" "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + "version" "0.1.4" + +"to-arraybuffer@^1.0.0": + "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + "version" "1.0.1" + +"to-fast-properties@^2.0.0": + "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-object-path@^0.3.0": + "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" + "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "kind-of" "^3.0.2" + +"to-regex-range@^2.1.0": + "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-regex@^3.0.1", "to-regex@^3.0.2": + "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" + "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "regex-not" "^1.0.2" + "safe-regex" "^1.1.0" + +"to-string-loader@1.1.6": + "integrity" "sha512-VNg62//PS1WfNwrK3n7t6wtK5Vdtx/qeYLLEioW46VMlYUwAYT6wnfB+OwS2FMTCalIHu0tk79D3RXX8ttmZTQ==" + "resolved" "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.6.tgz" + "version" "1.1.6" + dependencies: + "loader-utils" "^1.0.0" + +"toidentifier@1.0.0": + "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + "version" "1.0.0" + +"toposort@^2.0.2": + "integrity" "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + "resolved" "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz" + "version" "2.0.2" + +"tough-cookie@^2.3.3", "tough-cookie@~2.5.0": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tough-cookie@^3.0.1": + "integrity" "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ip-regex" "^2.1.0" + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tr46@^2.0.2": + "version" "2.0.2" + dependencies: + "punycode" "^2.1.1" + +"trim-newlines@^3.0.0": + "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" + "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + "version" "3.0.1" + +"triple-beam@^1.2.0", "triple-beam@^1.3.0": + "integrity" "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "resolved" "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" + "version" "1.3.0" + +"tryer@^1.0.1": + "integrity" "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + "resolved" "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" + "version" "1.0.1" + +"ts-color-class@^0.10.1": + "integrity" "sha512-FHqcpjbhHWqTzA81eMW4JvrSQcFrqVo1KhRTMfoR1GAupERAr3T/UT2u1T8ryxQVuZCW/kc4p3mv74mh2pVt+A==" + "resolved" "https://registry.npmjs.org/ts-color-class/-/ts-color-class-0.10.1.tgz" + "version" "0.10.1" + +"ts-jest@^26.0.0": + "version" "26.1.1" + dependencies: + "bs-logger" "0.x" + "buffer-from" "1.x" + "fast-json-stable-stringify" "2.x" + "json5" "2.x" + "lodash.memoize" "4.x" + "make-error" "1.x" + "micromatch" "4.x" + "mkdirp" "1.x" + "semver" "7.x" + "yargs-parser" "18.x" + +"ts-loader@7.0.5": + "integrity" "sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig==" + "resolved" "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz" + "version" "7.0.5" + dependencies: + "chalk" "^2.3.0" + "enhanced-resolve" "^4.0.0" + "loader-utils" "^1.0.2" + "micromatch" "^4.0.0" + "semver" "^6.0.0" + +"ts-node@8.10.2": + "integrity" "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz" + "version" "8.10.2" + dependencies: + "arg" "^4.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "source-map-support" "^0.5.17" + "yn" "3.1.1" + +"tslib@^1.10.0", "tslib@^2.0.0", "tslib@2.0.0": + "integrity" "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz" + "version" "2.0.0" + +"tslib@^1.8.1": + "version" "1.13.0" + +"tslib@^1.9.0": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslint@^5.0.0 || ^6.0.0", "tslint@6.1.2": + "integrity" "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==" + "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz" + "version" "6.1.2" + dependencies: + "@babel/code-frame" "^7.0.0" + "builtin-modules" "^1.1.1" + "chalk" "^2.3.0" + "commander" "^2.12.1" + "diff" "^4.0.1" + "glob" "^7.1.1" + "js-yaml" "^3.13.1" + "minimatch" "^3.0.4" + "mkdirp" "^0.5.3" + "resolve" "^1.3.2" + "semver" "^5.3.0" + "tslib" "^1.10.0" + "tsutils" "^2.29.0" + +"tsutils@^2.29.0": + "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" + "version" "2.29.0" + dependencies: + "tslib" "^1.8.1" + +"tsutils@^3.17.1": + "version" "3.17.1" + dependencies: + "tslib" "^1.8.1" + +"tty-browserify@0.0.0": + "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + "version" "0.0.0" + +"tunnel-agent@^0.6.0": + "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@~0.3.2": + "integrity" "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.11.0": + "version" "0.11.0" + +"type-fest@^0.3.1": + "integrity" "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" + "version" "0.3.1" + +"type-fest@^0.6.0": + "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + "version" "0.6.0" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type-is@~1.6.17", "type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typedarray@^0.0.6": + "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"typescript@*", "typescript@^3.4.5", "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.8 <4.0", "typescript@>=3.9 < 3.10", "typescript@>=3.9 <4.0", "typescript@3.9.5": + "integrity" "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz" + "version" "3.9.5" + +"ua-parser-js@^0.7.18": + "integrity" "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz" + "version" "0.7.28" + +"uglify-js@^3.1.4": + "version" "3.12.6" + +"unbox-primitive@^1.0.1": + "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "function-bind" "^1.1.1" + "has-bigints" "^1.0.1" + "has-symbols" "^1.0.2" + "which-boxed-primitive" "^1.0.2" + +"unicode-canonical-property-names-ecmascript@^1.0.4": + "integrity" "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" + "version" "1.0.4" + +"unicode-match-property-ecmascript@^1.0.4": + "integrity" "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "unicode-canonical-property-names-ecmascript" "^1.0.4" + "unicode-property-aliases-ecmascript" "^1.0.4" + +"unicode-match-property-value-ecmascript@^1.2.0": + "integrity" "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" + "version" "1.2.0" + +"unicode-property-aliases-ecmascript@^1.0.4": + "integrity" "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" + "version" "1.1.0" + +"union-value@^1.0.0": + "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" + "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "arr-union" "^3.1.0" + "get-value" "^2.0.6" + "is-extendable" "^0.1.1" + "set-value" "^2.0.1" + +"uniq@^1.0.1": + "integrity" "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + "version" "1.0.1" + +"uniqs@^2.0.0": + "integrity" "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + "resolved" "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + "version" "2.0.0" + +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "unique-slug" "^2.0.0" + +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "imurmurhash" "^0.1.4" + +"unique-string@^1.0.0": + "integrity" "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "crypto-random-string" "^1.0.0" + +"universal-analytics@0.4.23": + "integrity" "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==" + "resolved" "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz" + "version" "0.4.23" + dependencies: + "debug" "^4.1.1" + "request" "^2.88.2" + "uuid" "^3.0.0" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"unquote@~1.1.1": + "integrity" "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + "resolved" "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + "version" "1.1.1" + +"unset-value@^1.0.0": + "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" + "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-value" "^0.3.1" + "isobject" "^3.0.0" + +"untildify@^3.0.3": + "integrity" "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" + "resolved" "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz" + "version" "3.0.3" + +"unzip-response@^2.0.1": + "integrity" "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + "resolved" "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz" + "version" "2.0.1" + +"upath@^1.1.1", "upath@^1.1.2", "upath@^1.2.0": + "integrity" "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + "version" "1.2.0" + +"uri-js@^4.2.2": + "version" "4.2.2" + dependencies: + "punycode" "^2.1.0" + +"urix@^0.1.0": + "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + "version" "0.1.0" + +"url-parse-lax@^1.0.0": + "integrity" "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "prepend-http" "^1.0.1" + +"url-parse@^1.4.3": + "integrity" "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==" + "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "querystringify" "^2.1.1" + "requires-port" "^1.0.0" + +"url@^0.11.0": + "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=" + "resolved" "https://registry.npmjs.org/url/-/url-0.11.0.tgz" + "version" "0.11.0" + dependencies: + "punycode" "1.3.2" + "querystring" "0.2.0" + +"url@0.10.3": + "integrity" "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=" + "resolved" "https://registry.npmjs.org/url/-/url-0.10.3.tgz" + "version" "0.10.3" + dependencies: + "punycode" "1.3.2" + "querystring" "0.2.0" + +"use@^3.1.0": + "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + "version" "3.1.1" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util-promisify@^2.1.0": + "integrity" "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=" + "resolved" "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "object.getownpropertydescriptors" "^2.0.3" + +"util.promisify@~1.0.0", "util.promisify@1.0.0": + "integrity" "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==" + "resolved" "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "define-properties" "^1.1.2" + "object.getownpropertydescriptors" "^2.0.3" + +"util@^0.10.3": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + +"util@^0.11.0": + "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" + "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + "version" "0.11.1" + dependencies: + "inherits" "2.0.3" + +"util@0.10.3": + "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + "version" "0.10.3" + dependencies: + "inherits" "2.0.1" + +"utila@~0.4": + "integrity" "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "resolved" "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + "version" "0.4.0" + +"utils-merge@1.0.1": + "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^3.0.0": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^3.3.3": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^3.4.0": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^7.0.3": + "version" "7.0.3" + +"uuid@3.3.2": + "integrity" "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + "version" "3.3.2" + +"uuid@7.0.3": + "integrity" "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz" + "version" "7.0.3" + +"uuid@8.3.0": + "integrity" "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz" + "version" "8.3.0" + +"v8-compile-cache@^2.0.3", "v8-compile-cache@^2.1.1": + "version" "2.1.1" + +"v8-to-istanbul@^4.1.3": + "version" "4.1.4" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + "convert-source-map" "^1.6.0" + "source-map" "^0.7.3" + +"validate-npm-package-license@^3.0.1": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"validate-npm-package-name@^3.0.0": + "integrity" "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "builtins" "^1.0.3" + +"vary@~1.1.2": + "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" + +"vendors@^1.0.0": + "integrity" "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + "resolved" "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" + "version" "1.0.4" + +"verror@1.10.0": + "integrity" "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" + +"vinyl-file@^3.0.0": + "integrity" "sha1-sQTZ5ECf+jJfqt1SBkLQo7SIs2U=" + "resolved" "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "pify" "^2.3.0" + "strip-bom-buf" "^1.0.0" + "strip-bom-stream" "^2.0.0" + "vinyl" "^2.0.1" + +"vinyl@^2.0.1", "vinyl@^2.2.0", "vinyl@^2.2.1": + "integrity" "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==" + "resolved" "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "clone" "^2.1.1" + "clone-buffer" "^1.0.0" + "clone-stats" "^1.0.0" + "cloneable-readable" "^1.0.0" + "remove-trailing-separator" "^1.0.1" + "replace-ext" "^1.0.0" + +"vm-browserify@^1.0.1": + "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + "version" "1.1.2" + +"w3c-hr-time@^1.0.2": + "integrity" "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==" + "resolved" "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "browser-process-hrtime" "^1.0.0" + +"w3c-xmlserializer@^2.0.0": + "integrity" "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==" + "resolved" "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "xml-name-validator" "^3.0.0" + +"walker@^1.0.7", "walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "makeerror" "1.0.x" + +"watchpack-chokidar2@^2.0.0": + "version" "2.0.1" + dependencies: + "chokidar" "^2.1.8" + +"watchpack@^1.6.1": + "version" "1.7.2" + dependencies: + "graceful-fs" "^4.1.2" + "neo-async" "^2.5.0" + optionalDependencies: + "chokidar" "^3.4.0" + "watchpack-chokidar2" "^2.0.0" + +"wbuf@^1.1.0", "wbuf@^1.7.3": + "integrity" "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==" + "resolved" "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + "version" "1.7.3" + dependencies: + "minimalistic-assert" "^1.0.0" + +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + +"webdriver-js-extender@2.1.0": + "integrity" "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==" + "resolved" "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "@types/selenium-webdriver" "^3.0.0" + "selenium-webdriver" "^3.0.1" + +"webdriver-manager@^12.1.7", "webdriver-manager@12.1.7": + "integrity" "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==" + "resolved" "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz" + "version" "12.1.7" + dependencies: + "adm-zip" "^0.4.9" + "chalk" "^1.1.1" + "del" "^2.2.0" + "glob" "^7.0.3" + "ini" "^1.3.4" + "minimist" "^1.2.0" + "q" "^1.4.1" + "request" "^2.87.0" + "rimraf" "^2.5.2" + "semver" "^5.3.0" + "xml2js" "^0.4.17" + +"webidl-conversions@^5.0.0": + "integrity" "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + "version" "5.0.0" + +"webidl-conversions@^6.0.0": + "version" "6.1.0" + +"webpack-bundle-analyzer@3.8.0": + "integrity" "sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw==" + "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz" + "version" "3.8.0" + dependencies: + "acorn" "^7.1.1" + "acorn-walk" "^7.1.1" + "bfj" "^6.1.1" + "chalk" "^2.4.1" + "commander" "^2.18.0" + "ejs" "^2.6.1" + "express" "^4.16.3" + "filesize" "^3.6.1" + "gzip-size" "^5.0.0" + "lodash" "^4.17.15" + "mkdirp" "^0.5.1" + "opener" "^1.5.1" + "ws" "^6.0.0" + +"webpack-cli@3.3.12": + "integrity" "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==" + "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz" + "version" "3.3.12" + dependencies: + "chalk" "^2.4.2" + "cross-spawn" "^6.0.5" + "enhanced-resolve" "^4.1.1" + "findup-sync" "^3.0.0" + "global-modules" "^2.0.0" + "import-local" "^2.0.0" + "interpret" "^1.4.0" + "loader-utils" "^1.4.0" + "supports-color" "^6.1.0" + "v8-compile-cache" "^2.1.1" + "yargs" "^13.3.2" + +"webpack-dev-middleware@^3.7.2": + "version" "3.7.2" + dependencies: + "memory-fs" "^0.4.1" + "mime" "^2.4.4" + "mkdirp" "^0.5.1" + "range-parser" "^1.2.1" + "webpack-log" "^2.0.0" + +"webpack-dev-server@3.11.0": + "integrity" "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==" + "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz" + "version" "3.11.0" + dependencies: + "ansi-html" "0.0.7" + "bonjour" "^3.5.0" + "chokidar" "^2.1.8" + "compression" "^1.7.4" + "connect-history-api-fallback" "^1.6.0" + "debug" "^4.1.1" + "del" "^4.1.1" + "express" "^4.17.1" + "html-entities" "^1.3.1" + "http-proxy-middleware" "0.19.1" + "import-local" "^2.0.0" + "internal-ip" "^4.3.0" + "ip" "^1.1.5" + "is-absolute-url" "^3.0.3" + "killable" "^1.0.1" + "loglevel" "^1.6.8" + "opn" "^5.5.0" + "p-retry" "^3.0.1" + "portfinder" "^1.0.26" + "schema-utils" "^1.0.0" + "selfsigned" "^1.10.7" + "semver" "^6.3.0" + "serve-index" "^1.9.1" + "sockjs" "0.3.20" + "sockjs-client" "1.4.0" + "spdy" "^4.0.2" + "strip-ansi" "^3.0.1" + "supports-color" "^6.1.0" + "url" "^0.11.0" + "webpack-dev-middleware" "^3.7.2" + "webpack-log" "^2.0.0" + "ws" "^6.2.1" + "yargs" "^13.3.2" + +"webpack-log@^2.0.0": + "integrity" "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==" + "resolved" "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-colors" "^3.0.0" + "uuid" "^3.3.2" + +"webpack-merge@4.2.2": + "integrity" "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "lodash" "^4.17.15" + +"webpack-notifier@1.8.0": + "integrity" "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==" + "resolved" "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "node-notifier" "^5.1.2" + "object-assign" "^4.1.0" + "strip-ansi" "^3.0.1" + +"webpack-sources@^1.1.0", "webpack-sources@^1.3.0", "webpack-sources@^1.4.0", "webpack-sources@^1.4.1", "webpack-sources@^1.4.3", "webpack-sources@1.4.3": + "integrity" "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "source-list-map" "^2.0.0" + "source-map" "~0.6.1" + +"webpack@^1 || ^2 || ^3 || ^4", "webpack@^1 || ^2 || ^3 || ^4 || ^5", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.36.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0", "webpack@>=2.0.0", "webpack@>=4.0.0 < 6.0.0", "webpack@4.43.0", "webpack@4.x.x": + "integrity" "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz" + "version" "4.43.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "acorn" "^6.4.1" + "ajv" "^6.10.2" + "ajv-keywords" "^3.4.1" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^4.1.0" + "eslint-scope" "^4.0.3" + "json-parse-better-errors" "^1.0.2" + "loader-runner" "^2.4.0" + "loader-utils" "^1.2.3" + "memory-fs" "^0.4.1" + "micromatch" "^3.1.10" + "mkdirp" "^0.5.3" + "neo-async" "^2.6.1" + "node-libs-browser" "^2.2.1" + "schema-utils" "^1.0.0" + "tapable" "^1.1.3" + "terser-webpack-plugin" "^1.4.3" + "watchpack" "^1.6.1" + "webpack-sources" "^1.4.1" + +"websocket-driver@>=0.5.1", "websocket-driver@0.6.5": + "integrity" "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=" + "resolved" "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz" + "version" "0.6.5" + dependencies: + "websocket-extensions" ">=0.1.1" + +"websocket-extensions@>=0.1.1": + "integrity" "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "resolved" "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + "version" "0.1.4" + +"whatwg-encoding@^1.0.5": + "integrity" "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==" + "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "iconv-lite" "0.4.24" + +"whatwg-mimetype@^2.3.0": + "integrity" "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + "version" "2.3.0" + +"whatwg-url@^8.0.0": + "version" "8.1.0" + dependencies: + "lodash.sortby" "^4.7.0" + "tr46" "^2.0.2" + "webidl-conversions" "^5.0.0" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"which-module@^2.0.0": + "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which-pm-runs@^1.0.0": + "integrity" "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz" + "version" "1.0.0" + +"which@^1.2.10", "which@^1.2.14", "which@^1.2.9", "which@^1.3.0", "which@^1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@1.1.3": + "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"windows-release@^3.1.0": + "integrity" "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==" + "resolved" "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz" + "version" "3.3.3" + dependencies: + "execa" "^1.0.0" + +"winston-transport@^4.3.0": + "integrity" "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==" + "resolved" "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz" + "version" "4.4.0" + dependencies: + "readable-stream" "^2.3.7" + "triple-beam" "^1.2.0" + +"winston@3.2.1": + "integrity" "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==" + "resolved" "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "async" "^2.6.1" + "diagnostics" "^1.1.1" + "is-stream" "^1.1.0" + "logform" "^2.1.1" + "one-time" "0.0.4" + "readable-stream" "^3.1.1" + "stack-trace" "0.0.x" + "triple-beam" "^1.3.0" + "winston-transport" "^4.3.0" + +"with-open-file@^0.1.6": + "integrity" "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==" + "resolved" "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "p-finally" "^1.0.0" + "p-try" "^2.1.0" + "pify" "^4.0.1" + +"word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wordwrap@^1.0.0": + "integrity" "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"workbox-background-sync@^5.1.4": + "integrity" "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==" + "resolved" "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-broadcast-update@^5.1.4": + "integrity" "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==" + "resolved" "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-build@^5.1.3": + "integrity" "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==" + "resolved" "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + "common-tags" "^1.8.0" + "fast-json-stable-stringify" "^2.1.0" + "fs-extra" "^8.1.0" + "glob" "^7.1.6" + "lodash.template" "^4.5.0" + "pretty-bytes" "^5.3.0" + "rollup" "^1.31.1" + "rollup-plugin-babel" "^4.3.3" + "rollup-plugin-terser" "^5.3.1" + "source-map" "^0.7.3" + "source-map-url" "^0.4.0" + "stringify-object" "^3.3.0" + "strip-comments" "^1.0.2" + "tempy" "^0.3.0" + "upath" "^1.2.0" + "workbox-background-sync" "^5.1.4" + "workbox-broadcast-update" "^5.1.4" + "workbox-cacheable-response" "^5.1.4" + "workbox-core" "^5.1.4" + "workbox-expiration" "^5.1.4" + "workbox-google-analytics" "^5.1.4" + "workbox-navigation-preload" "^5.1.4" + "workbox-precaching" "^5.1.4" + "workbox-range-requests" "^5.1.4" + "workbox-routing" "^5.1.4" + "workbox-strategies" "^5.1.4" + "workbox-streams" "^5.1.4" + "workbox-sw" "^5.1.4" + "workbox-window" "^5.1.4" + +"workbox-cacheable-response@^5.1.4": + "integrity" "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==" + "resolved" "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-core@^5.1.4": + "integrity" "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" + "resolved" "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz" + "version" "5.1.4" + +"workbox-expiration@^5.1.4": + "integrity" "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==" + "resolved" "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-google-analytics@^5.1.4": + "integrity" "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==" + "resolved" "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-background-sync" "^5.1.4" + "workbox-core" "^5.1.4" + "workbox-routing" "^5.1.4" + "workbox-strategies" "^5.1.4" + +"workbox-navigation-preload@^5.1.4": + "integrity" "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==" + "resolved" "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-precaching@^5.1.4": + "integrity" "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==" + "resolved" "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-range-requests@^5.1.4": + "integrity" "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==" + "resolved" "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-routing@^5.1.4": + "integrity" "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==" + "resolved" "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"workbox-strategies@^5.1.4": + "integrity" "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==" + "resolved" "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + "workbox-routing" "^5.1.4" + +"workbox-streams@^5.1.4": + "integrity" "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==" + "resolved" "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + "workbox-routing" "^5.1.4" + +"workbox-sw@^5.1.4": + "integrity" "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" + "resolved" "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz" + "version" "5.1.4" + +"workbox-webpack-plugin@5.1.3": + "integrity" "sha512-gxSkZ9GFLrMNC/8DGNRjcMhrt8iu+MMXhH/Fpo3wo9rKaSMsI7esGq0klTH/UloP9pNvBizVydysrB52eRhI7w==" + "resolved" "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.3.tgz" + "version" "5.1.3" + dependencies: + "@babel/runtime" "^7.5.5" + "fast-json-stable-stringify" "^2.0.0" + "source-map-url" "^0.4.0" + "upath" "^1.1.2" + "webpack-sources" "^1.3.0" + "workbox-build" "^5.1.3" + +"workbox-window@^5.1.4": + "integrity" "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==" + "resolved" "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz" + "version" "5.1.4" + dependencies: + "workbox-core" "^5.1.4" + +"worker-farm@^1.7.0": + "integrity" "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==" + "resolved" "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "errno" "~0.1.7" + +"workerpool@6.1.0": + "integrity" "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz" + "version" "6.1.0" + +"wrap-ansi@^3.0.1": + "integrity" "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "string-width" "^2.1.1" + "strip-ansi" "^4.0.0" + +"wrap-ansi@^5.1.0": + "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "string-width" "^3.0.0" + "strip-ansi" "^5.0.0" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^2.3.0": + "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + "version" "2.4.3" + dependencies: + "graceful-fs" "^4.1.11" + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"write-file-webpack-plugin@4.5.1": + "integrity" "sha512-AZ7qJUvhTCBiOtG21aFJUcNuLVo2FFM6JMGKvaUGAH+QDqQAp2iG0nq3GcuXmJOFQR2JjpjhyYkyPrbFKhdjNQ==" + "resolved" "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.1.tgz" + "version" "4.5.1" + dependencies: + "chalk" "^2.4.0" + "debug" "^3.1.0" + "filesize" "^3.6.1" + "lodash" "^4.17.13" + "mkdirp" "^0.5.1" + "moment" "^2.22.1" + "write-file-atomic" "^2.3.0" + +"write@1.0.3": + "integrity" "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==" + "resolved" "https://registry.npmjs.org/write/-/write-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "mkdirp" "^0.5.1" + +"ws@^6.0.0", "ws@^6.2.1": + "integrity" "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==" + "resolved" "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" + "version" "6.2.2" + dependencies: + "async-limiter" "~1.0.0" + +"ws@^7.2.3": + "version" "7.5.0" + +"ws@~7.4.2": + "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + "version" "7.4.6" + +"xml-name-validator@^3.0.0": + "integrity" "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + "version" "3.0.0" + +"xml@^1.0.1": + "integrity" "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" + "resolved" "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz" + "version" "1.0.1" + +"xml2js@^0.4.17", "xml2js@0.4.19": + "integrity" "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==" + "resolved" "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" + "version" "0.4.19" + dependencies: + "sax" ">=0.6.0" + "xmlbuilder" "~9.0.1" + +"xmlbuilder@~9.0.1": + "integrity" "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "resolved" "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz" + "version" "9.0.7" + +"xmlchars@^2.2.0": + "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + "version" "2.2.0" + +"xmlhttprequest-ssl@~1.6.2": + "integrity" "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" + "resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz" + "version" "1.6.3" + +"xtend@^4.0.0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^4.0.0": + "version" "4.0.2" + +"y18n@^5.0.5": + "version" "5.0.5" + +"yallist@^3.0.0", "yallist@^3.0.2", "yallist@^3.0.3": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.7.2": + "version" "1.10.0" + +"yargs-parser@^13.1.2": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^18.1.0", "yargs-parser@^18.1.1", "yargs-parser@^18.1.2", "yargs-parser@18.x": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^20.2.2", "yargs-parser@20.2.4": + "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + "version" "20.2.4" + +"yargs-unparser@2.0.0": + "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "camelcase" "^6.0.0" + "decamelize" "^4.0.0" + "flat" "^5.0.2" + "is-plain-obj" "^2.1.0" + +"yargs@^13.3.2": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.2" + +"yargs@^15.3.1": + "version" "15.3.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.1" + +"yargs@^15.4.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.2" + +"yargs@15.3.0": + "integrity" "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz" + "version" "15.3.0" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.0" + +"yargs@16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yeast@0.1.2": + "integrity" "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + "resolved" "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + "version" "0.1.2" + +"yeoman-environment@^2.9.5", "yeoman-environment@2.10.3": + "integrity" "sha512-pLIhhU9z/G+kjOXmJ2bPFm3nejfbH+f1fjYRSOteEXDBrv1EoJE/e+kuHixSXfCYfTkxjYsvRaDX+1QykLCnpQ==" + "resolved" "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.10.3.tgz" + "version" "2.10.3" + dependencies: + "chalk" "^2.4.1" + "debug" "^3.1.0" + "diff" "^3.5.0" + "escape-string-regexp" "^1.0.2" + "execa" "^4.0.0" + "globby" "^8.0.1" + "grouped-queue" "^1.1.0" + "inquirer" "^7.1.0" + "is-scoped" "^1.0.0" + "lodash" "^4.17.10" + "log-symbols" "^2.2.0" + "mem-fs" "^1.1.0" + "mem-fs-editor" "^6.0.0" + "npm-api" "^1.0.0" + "semver" "^7.1.3" + "strip-ansi" "^4.0.0" + "text-table" "^0.2.0" + "untildify" "^3.0.3" + "yeoman-generator" "^4.8.2" + +"yeoman-generator@^4.8.2", "yeoman-generator@4.11.0": + "integrity" "sha512-++t6t2Z6HjL5F1/UM7+uNvGknKmQdF8tstJx8WKzsUSEpB+19kLVtapSfQIh9uWqm0L59fLWDzUui//WXoynPw==" + "resolved" "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-4.11.0.tgz" + "version" "4.11.0" + dependencies: + "async" "^2.6.2" + "chalk" "^2.4.2" + "cli-table" "^0.3.1" + "cross-spawn" "^6.0.5" + "dargs" "^6.1.0" + "dateformat" "^3.0.3" + "debug" "^4.1.1" + "diff" "^4.0.1" + "error" "^7.0.2" + "find-up" "^3.0.0" + "github-username" "^3.0.0" + "istextorbinary" "^2.5.1" + "lodash" "^4.17.11" + "make-dir" "^3.0.0" + "mem-fs-editor" "^7.0.1" + "minimist" "^1.2.5" + "pretty-bytes" "^5.2.0" + "read-chunk" "^3.2.0" + "read-pkg-up" "^5.0.0" + "rimraf" "^2.6.3" + "run-async" "^2.0.0" + "semver" "^7.2.1" + "shelljs" "^0.8.3" + "text-table" "^0.2.0" + "through2" "^3.0.1" + optionalDependencies: + "grouped-queue" "^1.1.0" + "yeoman-environment" "^2.9.5" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" + +"yup@^0.27.0": + "integrity" "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==" + "resolved" "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz" + "version" "0.27.0" + dependencies: + "@babel/runtime" "^7.0.0" + "fn-name" "~2.0.1" + "lodash" "^4.17.11" + "property-expr" "^1.5.0" + "synchronous-promise" "^2.0.6" + "toposort" "^2.0.2" + +"zone.js@^0.10.3", "zone.js@~0.10.3", "zone.js@0.10.3": + "integrity" "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "resolved" "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz" + "version" "0.10.3"